16#ifndef O2_ITS_TRACKING_VERTEXER_H_
17#define O2_ITS_TRACKING_VERTEXER_H_
46 static constexpr int NLayers{7};
48 using LogFunc = std::function<
void(
const std::string& s)>;
58 void setParameters(
const std::vector<VertexingParameters>& vertParams) { mVertParams = vertParams; }
61 void setMemoryPool(std::shared_ptr<BoundedMemoryResource>& pool) { mMemoryPool = pool; }
66 float clustersToVertices(LogFunc = [](
const std::string& s) { std::cout << s <<
'\n'; });
69 template <
typename... T>
72 template <
typename... T>
74 template <
typename... T>
78 template <
typename... T>
80 template <
typename... T>
85 template <
typename... T>
89 const unsigned int trackletN01,
const unsigned int trackletN12,
90 const unsigned selectedN,
const unsigned int vertexN,
const float initT,
91 const float trackletT,
const float selecT,
const float vertexT);
94 std::uint32_t mTimeFrameCounter = 0;
97 TimeFrame7* mTimeFrame =
nullptr;
99 std::vector<VertexingParameters> mVertParams;
100 std::shared_ptr<BoundedMemoryResource> mMemoryPool;
110 static constexpr std::array<const char*, NStates> StateNames{
"Initialisation",
"Tracklet finding",
"Tracklet validation",
"Vertex finding"};
113template <
typename...
T>
116 mTraits->
initialise(std::forward<T>(args)...);
119template <
typename... T>
125template <
typename... T>
131template <
typename... T>
137template <
typename... T>
143 auto start = std::chrono::high_resolution_clock::now();
144 (this->*task)(std::forward<T>(args)...);
145 auto end = std::chrono::high_resolution_clock::now();
147 std::chrono::duration<double, std::milli> diff_t{
end -
start};
148 diff = diff_t.count();
150 std::stringstream sstream;
151 if (taskName.empty()) {
152 sstream << diff <<
"\t";
154 sstream << std::setw(2) <<
" - " << taskName <<
" completed in: " << diff <<
" ms";
156 logger(sstream.str());
158 if (mVertParams[0].SaveTimeBenchmarks) {
159 std::string taskNameStr(taskName);
160 std::transform(taskNameStr.begin(), taskNameStr.end(), taskNameStr.begin(),
161 [](
unsigned char c) { return std::tolower(c); });
162 std::replace(taskNameStr.begin(), taskNameStr.end(),
' ',
'_');
163 if (std::ofstream
file{
"its_time_benchmarks.txt", std::ios::app}) {
164 file <<
"vtx:" << iteration <<
'\t' << taskNameStr <<
'\t' << diff <<
'\n';
168 (this->*task)(std::forward<T>(args)...);
Class to compute the primary vertex in ITS from tracklets.
virtual void computeTrackletMatching(const int iteration=0)
virtual void computeTracklets(const int iteration=0)
auto & getVertexingParameters()
virtual void initialise(const TrackingParameters &trackingParams, const int iteration=0)
virtual void computeVertices(const int iteration=0)
void dumpVertexerTraits()
auto & getVertParameters() const
void findTracklets(T &&... args)
void initialiseVertexer(T &&... args)
void findTrivialMCTracklets()
void validateTracklets(T &&... args)
void findVertices(T &&... args)
VertexerTraits * getTraits() const
void setMemoryPool(std::shared_ptr< BoundedMemoryResource > &pool)
void setParameters(const std::vector< VertexingParameters > &vertParams)
const auto & getParameters() const noexcept
Vertexer(const Vertexer &)=delete
void initialiseTimeFrame(T &&... args)
void adoptTimeFrame(TimeFrame7 &tf)
float evaluateTask(void(Vertexer::*task)(T...), std::string_view taskName, int iteration, LogFunc &logger, T &&... args)
Vertexer & operator=(const Vertexer &)=delete
float clustersToVertices(LogFunc=[](const std::string &s) { std::cout<< s<< '\n';})
void getGlobalConfiguration()
std::vector< Vertex > exportVertices()
virtual ~Vertexer()=default
void printEpilog(LogFunc &logger, const unsigned int trackletN01, const unsigned int trackletN12, const unsigned selectedN, const unsigned int vertexN, const float initT, const float trackletT, const float selecT, const float vertexT)
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
constexpr bool DoTimeBenchmarks
o2::dataformats::Vertex< o2::dataformats::TimeStamp< int > > Vertex
Defining DataPointCompositeObject explicitly as copiable.
std::unique_ptr< GPUReconstructionTimeframe > tf