16#ifndef TRACKINGITSU_INCLUDE_TRACKER_H_
17#define TRACKINGITSU_INCLUDE_TRACKER_H_
30#include <oneapi/tbb/task_arena.h>
57 static constexpr int NLayers{7};
60 using LogFunc = std::function<
void(
const std::string& s)>;
68 const LogFunc& = [](
const std::string& s) { std::cout << s <<
'\n'; },
69 const LogFunc& = [](
const std::string& s) { std::cerr << s <<
'\n'; });
71 void setParameters(
const std::vector<TrackingParameters>& p) { mTrkParams = p; }
72 void setMemoryPool(std::shared_ptr<BoundedMemoryResource>& pool) { mMemoryPool = pool; }
81 void computeTracklets(
int iteration,
int iROFslice,
int iVertex) { mTraits->
computeLayerTracklets(iteration, iROFslice, iVertex); }
84 void findRoads(
int iteration) { mTraits->
findRoads(iteration); }
86 void extendTracks(
int iteration) { mTraits->
extendTracks(iteration); }
89 void computeRoadsMClabels();
90 void computeTracksMClabels();
91 void rectifyClusterIndices();
93 template <
typename...
T,
typename... F>
94 float evaluateTask(
void (Tracker::*task)(
T...),
std::string_view taskName,
int iteration, LogFunc logger, F&&... args);
96 TrackerTraits7* mTraits =
nullptr;
97 TimeFrame7* mTimeFrame =
nullptr;
99 std::vector<TrackingParameters> mTrkParams;
102 unsigned int mNumberOfDroppedTFs{0};
103 unsigned int mTimeFrameCounter{0};
104 double mTotalTime{0};
105 std::shared_ptr<BoundedMemoryResource> mMemoryPool;
115 State mCurState{TFInit};
116 static constexpr std::array<const char*, NStates> StateNames{
"TimeFrame initialisation",
"Tracklet finding",
"Cell finding",
"Neighbour finding",
"Road finding"};
119template <
typename...
T,
typename... F>
120float Tracker::evaluateTask(
void (Tracker::*task)(
T...),
std::string_view taskName,
int iteration, LogFunc logger, F&&... args)
125 auto start = std::chrono::high_resolution_clock::now();
126 (this->*task)(std::forward<F>(args)...);
127 auto end = std::chrono::high_resolution_clock::now();
129 std::chrono::duration<double, std::milli> diff_t{
end -
start};
130 diff = diff_t.count();
132 std::stringstream sstream;
133 if (taskName.empty()) {
134 sstream << diff <<
"\t";
136 sstream << std::setw(2) <<
" - " << taskName <<
" completed in: " << diff <<
" ms";
138 logger(sstream.str());
140 if (mTrkParams[0].SaveTimeBenchmarks) {
141 std::string taskNameStr(taskName);
142 std::transform(taskNameStr.begin(), taskNameStr.end(), taskNameStr.begin(),
143 [](
unsigned char c) { return std::tolower(c); });
144 std::replace(taskNameStr.begin(), taskNameStr.end(),
' ',
'_');
145 if (std::ofstream
file{
"its_time_benchmarks.txt", std::ios::app}) {
146 file <<
"trk:" << iteration <<
'\t' << taskNameStr <<
'\t' << diff <<
'\n';
151 (this->*task)(std::forward<F>(args)...);
Definition of the ITS track.
virtual void initialiseTimeFrame(const int iteration)
virtual void findRoads(const int iteration)
void setNThreads(int n, std::shared_ptr< tbb::task_arena > &arena)
virtual void computeLayerTracklets(const int iteration, int iROFslice, int iVertex)
virtual void computeLayerCells(const int iteration)
virtual void findShortPrimaries()
virtual void setBz(float bz)
virtual void findCellsNeighbours(const int iteration)
virtual void extendTracks(const int iteration)
void setParameters(const std::vector< TrackingParameters > &p)
void printSummary() const
std::vector< TrackingParameters > & getParameters()
void clustersToTracks(const LogFunc &=[](const std::string &s) { std::cout<< s<< '\n';}, const LogFunc &=[](const std::string &s) { std::cerr<< s<< '\n';})
void setMemoryPool(std::shared_ptr< BoundedMemoryResource > &pool)
void adoptTimeFrame(TimeFrame< NLayers > &tf)
void setNThreads(int n, std::shared_ptr< tbb::task_arena > &arena)
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
constexpr bool DoTimeBenchmarks
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
Defining DataPointCompositeObject explicitly as copiable.
std::unique_ptr< GPUReconstructionTimeframe > tf