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; }
83 void computeTracklets(
int iteration,
int iROFslice,
int iVertex) { mTraits->
computeLayerTracklets(iteration, iROFslice, iVertex); }
86 void findRoads(
int iteration) { mTraits->
findRoads(iteration); }
88 void extendTracks(
int iteration) { mTraits->
extendTracks(iteration); }
91 void computeRoadsMClabels();
92 void computeTracksMClabels();
93 void rectifyClusterIndices();
95 template <
typename...
T,
typename... F>
96 float evaluateTask(
void (Tracker::*task)(
T...),
std::string_view taskName,
int iteration, LogFunc logger, F&&... args);
98 TrackerTraits7* mTraits =
nullptr;
99 TimeFrame7* mTimeFrame =
nullptr;
101 std::vector<TrackingParameters> mTrkParams;
104 unsigned int mNumberOfDroppedTFs{0};
105 unsigned int mTimeFrameCounter{0};
106 double mTotalTime{0};
107 std::shared_ptr<BoundedMemoryResource> mMemoryPool;
117 State mCurState{TFInit};
118 static constexpr std::array<const char*, NStates> StateNames{
"TimeFrame initialisation",
"Tracklet finding",
"Cell finding",
"Neighbour finding",
"Road finding"};
121template <
typename...
T,
typename... F>
122float Tracker::evaluateTask(
void (Tracker::*task)(
T...),
std::string_view taskName,
int iteration, LogFunc logger, F&&... args)
127 auto start = std::chrono::high_resolution_clock::now();
128 (this->*task)(std::forward<F>(args)...);
129 auto end = std::chrono::high_resolution_clock::now();
131 std::chrono::duration<double, std::milli> diff_t{
end -
start};
132 diff = diff_t.count();
134 std::stringstream sstream;
135 if (taskName.empty()) {
136 sstream << diff <<
"\t";
138 sstream << std::setw(2) <<
" - " << taskName <<
" completed in: " << diff <<
" ms";
140 logger(sstream.str());
142 if (mTrkParams[0].SaveTimeBenchmarks) {
143 std::string taskNameStr(taskName);
144 std::transform(taskNameStr.begin(), taskNameStr.end(), taskNameStr.begin(),
145 [](
unsigned char c) { return std::tolower(c); });
146 std::replace(taskNameStr.begin(), taskNameStr.end(),
' ',
'_');
147 if (std::ofstream
file{
"its_time_benchmarks.txt", std::ios::app}) {
148 file <<
"trk:" << iteration <<
'\t' << taskNameStr <<
'\t' << diff <<
'\n';
153 (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)
void setCorrType(const o2::base::PropagatorImpl< float >::MatCorrType type)
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 setCorrType(const o2::base::PropagatorImpl< float >::MatCorrType type)
void printSummary() const
std::vector< TrackingParameters > & getParameters()
void getGlobalConfiguration()
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)
GLint GLint GLsizei GLint GLenum GLenum type
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