16#ifndef TRACKINGITSU_INCLUDE_TRACKER_H_
17#define TRACKINGITSU_INCLUDE_TRACKER_H_
30#include <oneapi/tbb/task_arena.h>
56 static constexpr int NLayers{7};
59 using LogFunc = std::function<
void(
const std::string& s)>;
67 const LogFunc& = [](
const std::string& s) { std::cout << s <<
'\n'; },
68 const LogFunc& = [](
const std::string& s) { std::cerr << s <<
'\n'; });
70 void setParameters(
const std::vector<TrackingParameters>& p) { mTrkParams = p; }
71 void setMemoryPool(std::shared_ptr<BoundedMemoryResource>& pool) { mMemoryPool = pool; }
80 void computeTracklets(
int iteration,
int iROFslice,
int iVertex) { mTraits->
computeLayerTracklets(iteration, iROFslice, iVertex); }
83 void findRoads(
int iteration) { mTraits->
findRoads(iteration); }
85 void extendTracks(
int iteration) { mTraits->
extendTracks(iteration); }
88 void computeRoadsMClabels();
89 void computeTracksMClabels();
90 void rectifyClusterIndices();
92 template <
typename...
T,
typename... F>
93 float evaluateTask(
void (Tracker::*task)(
T...),
std::string_view taskName,
int iteration, LogFunc logger, F&&... args);
95 TrackerTraits7* mTraits =
nullptr;
96 TimeFrame7* mTimeFrame =
nullptr;
98 std::vector<TrackingParameters> mTrkParams;
101 unsigned int mNumberOfDroppedTFs{0};
102 unsigned int mTimeFrameCounter{0};
103 double mTotalTime{0};
104 std::shared_ptr<BoundedMemoryResource> mMemoryPool;
114 State mCurState{TFInit};
115 static constexpr std::array<const char*, NStates> StateNames{
"TimeFrame initialisation",
"Tracklet finding",
"Cell finding",
"Neighbour finding",
"Road finding"};
118template <
typename...
T,
typename... F>
119float Tracker::evaluateTask(
void (Tracker::*task)(
T...),
std::string_view taskName,
int iteration, LogFunc logger, F&&... args)
124 auto start = std::chrono::high_resolution_clock::now();
125 (this->*task)(std::forward<F>(args)...);
126 auto end = std::chrono::high_resolution_clock::now();
128 std::chrono::duration<double, std::milli> diff_t{
end -
start};
129 diff = diff_t.count();
131 std::stringstream sstream;
132 if (taskName.empty()) {
133 sstream << diff <<
"\t";
135 sstream << std::setw(2) <<
" - " << taskName <<
" completed in: " << diff <<
" ms";
137 logger(sstream.str());
139 if (mTrkParams[0].SaveTimeBenchmarks) {
140 std::string taskNameStr(taskName);
141 std::transform(taskNameStr.begin(), taskNameStr.end(), taskNameStr.begin(),
142 [](
unsigned char c) { return std::tolower(c); });
143 std::replace(taskNameStr.begin(), taskNameStr.end(),
' ',
'_');
144 if (std::ofstream
file{
"its_time_benchmarks.txt", std::ios::app}) {
145 file <<
"trk:" << iteration <<
'\t' << taskNameStr <<
'\t' << diff <<
'\n';
150 (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