16#ifndef TRACKINGITSU_INCLUDE_TRACKER_H_
17#define TRACKINGITSU_INCLUDE_TRACKER_H_
30#include <oneapi/tbb/task_arena.h>
57 using LogFunc = std::function<
void(
const std::string& s)>;
65 const LogFunc& = [](
const std::string& s) { std::cout << s <<
'\n'; },
66 const LogFunc& = [](
const std::string& s) { std::cerr << s <<
'\n'; });
68 void setParameters(
const std::vector<TrackingParameters>& p) { mTrkParams = p; }
69 void setMemoryPool(std::shared_ptr<BoundedMemoryResource>& pool) { mMemoryPool = pool; }
78 void computeTracklets(
int iteration,
int iROFslice,
int iVertex) { mTraits->
computeLayerTracklets(iteration, iROFslice, iVertex); }
81 void findRoads(
int iteration) { mTraits->
findRoads(iteration); }
83 void extendTracks(
int iteration) { mTraits->
extendTracks(iteration); }
86 void computeRoadsMClabels();
87 void computeTracksMClabels();
88 void rectifyClusterIndices();
90 template <
typename...
T,
typename... F>
91 float evaluateTask(
void (Tracker::*task)(
T...),
std::string_view taskName,
int iteration, LogFunc logger, F&&... args);
93 TrackerTraits<nLayers>* mTraits =
nullptr;
94 TimeFrame<nLayers>* mTimeFrame =
nullptr;
96 std::vector<TrackingParameters> mTrkParams;
99 unsigned int mNumberOfDroppedTFs{0};
100 unsigned int mTimeFrameCounter{0};
101 double mTotalTime{0};
102 std::shared_ptr<BoundedMemoryResource> mMemoryPool;
112 State mCurState{TFInit};
113 static constexpr std::array<const char*, NStates> StateNames{
"TimeFrame initialisation",
"Tracklet finding",
"Cell finding",
"Neighbour finding",
"Road finding"};
116template <
int nLayers>
117template <
typename...
T,
typename... F>
123 auto start = std::chrono::high_resolution_clock::now();
124 (this->*task)(std::forward<F>(args)...);
125 auto end = std::chrono::high_resolution_clock::now();
127 std::chrono::duration<double, std::milli> diff_t{
end -
start};
128 diff = diff_t.count();
130 std::stringstream sstream;
131 if (taskName.empty()) {
132 sstream << diff <<
"\t";
134 sstream << std::setw(2) <<
" - " << taskName <<
" completed in: " << diff <<
" ms";
136 logger(sstream.str());
138 if (mTrkParams[0].SaveTimeBenchmarks) {
139 std::string taskNameStr(taskName);
140 std::transform(taskNameStr.begin(), taskNameStr.end(), taskNameStr.begin(),
141 [](
unsigned char c) { return std::tolower(c); });
142 std::replace(taskNameStr.begin(), taskNameStr.end(),
' ',
'_');
143 if (std::ofstream
file{
"its_time_benchmarks.txt", std::ios::app}) {
144 file <<
"trk:" << iteration <<
'\t' << taskNameStr <<
'\t' << diff <<
'\n';
149 (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 setMemoryPool(std::shared_ptr< BoundedMemoryResource > &pool)
void setParameters(const std::vector< TrackingParameters > &p)
void setNThreads(int n, std::shared_ptr< tbb::task_arena > &arena)
void printSummary() const
void adoptTimeFrame(TimeFrame< nLayers > &tf)
void clustersToTracks(const LogFunc &=[](const std::string &s) { std::cout<< s<< '\n';}, const LogFunc &=[](const std::string &s) { std::cerr<< s<< '\n';})
std::vector< TrackingParameters > & getParameters()
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