Project
Loading...
Searching...
No Matches
Vertexer.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
15
16#ifndef O2_ITS_TRACKING_VERTEXER_H_
17#define O2_ITS_TRACKING_VERTEXER_H_
18
19#include <chrono>
20#include <fstream>
21#include <iomanip>
22#include <array>
23#include <iosfwd>
24
25#include "ITStracking/ROframe.h"
31
34#include "ITStracking/Cluster.h"
35
36#include "GPUCommonLogger.h"
37
38class TTree;
39
40namespace o2
41{
42namespace its
43{
46
48{
49 public:
50 Vertexer(VertexerTraits* traits);
51 virtual ~Vertexer() = default;
52 Vertexer(const Vertexer&) = delete;
53 Vertexer& operator=(const Vertexer&) = delete;
54
56 std::vector<VertexingParameters>& getVertParameters() const;
57 void setParameters(std::vector<VertexingParameters>& vertParams);
59
60 std::vector<Vertex> exportVertices();
61 VertexerTraits* getTraits() const { return mTraits; };
62
63 float clustersToVertices(std::function<void(std::string s)> = [](std::string s) { std::cout << s << std::endl; });
64 float clustersToVerticesHybrid(std::function<void(std::string s)> = [](std::string s) { std::cout << s << std::endl; });
66
67 template <typename... T>
68 void findTracklets(T&&... args);
69 template <typename... T>
70 void findTrackletsHybrid(T&&... args);
71
73 template <typename... T>
74 void validateTracklets(T&&... args);
75 template <typename... T>
76 void validateTrackletsHybrid(T&&... args);
77 template <typename... T>
78 void findVertices(T&&... args);
79 template <typename... T>
80 void findVerticesHybrid(T&&... args);
82
83 template <typename... T>
84 void initialiseVertexer(T&&... args);
85 template <typename... T>
86 void initialiseTimeFrame(T&&... args);
87 template <typename... T>
88 void initialiseVertexerHybrid(T&&... args);
89 template <typename... T>
90 void initialiseTimeFrameHybrid(T&&... args);
91
92 // Utils
93 void dumpTraits();
94 template <typename... T>
95 float evaluateTask(void (Vertexer::*)(T...), const char*, std::function<void(std::string s)> logger, T&&... args);
96 void printEpilog(std::function<void(std::string s)> logger,
97 bool isHybrid,
98 const unsigned int trackletN01, const unsigned int trackletN12, const unsigned selectedN, const unsigned int vertexN,
99 const float initT, const float trackletT, const float selecT, const float vertexT);
100
101 private:
102 std::uint32_t mTimeFrameCounter = 0;
103
104 VertexerTraits* mTraits = nullptr;
105 TimeFrame* mTimeFrame = nullptr;
106
107 std::vector<VertexingParameters> mVertParams;
108};
109
110template <typename... T>
112{
113 mTraits->initialise(std::forward<T>(args)...);
114}
115
116template <typename... T>
117void Vertexer::findTracklets(T&&... args)
118{
119 mTraits->computeTracklets(std::forward<T>(args)...);
120}
121
122inline std::vector<VertexingParameters>& Vertexer::getVertParameters() const
123{
124 return mTraits->getVertexingParameters();
125}
126
127inline void Vertexer::setParameters(std::vector<VertexingParameters>& vertParams)
128{
129 mVertParams = vertParams;
130}
131
133{
134 mTraits->dumpVertexerTraits();
135}
136
137template <typename... T>
138inline void Vertexer::validateTracklets(T&&... args)
139{
140 mTraits->computeTrackletMatching(std::forward<T>(args)...);
141}
142
143template <typename... T>
144inline void Vertexer::findVertices(T&&... args)
145{
146 mTraits->computeVertices(std::forward<T>(args)...);
147}
148
149template <typename... T>
151{
152 mTraits->initialiseHybrid(std::forward<T>(args)...);
153}
154
155template <typename... T>
157{
158 mTraits->computeTrackletsHybrid(std::forward<T>(args)...);
159}
160
161template <typename... T>
162inline void Vertexer::validateTrackletsHybrid(T&&... args)
163{
164 mTraits->computeTrackletMatchingHybrid(std::forward<T>(args)...);
165}
166
167template <typename... T>
168inline void Vertexer::findVerticesHybrid(T&&... args)
169{
170 mTraits->computeVerticesHybrid(std::forward<T>(args)...);
171}
172
173template <typename... T>
174float Vertexer::evaluateTask(void (Vertexer::*task)(T...), const char* taskName, std::function<void(std::string s)> logger,
175 T&&... args)
176{
177 float diff{0.f};
178
179 if constexpr (constants::DoTimeBenchmarks) {
180 auto start = std::chrono::high_resolution_clock::now();
181 (this->*task)(std::forward<T>(args)...);
182 auto end = std::chrono::high_resolution_clock::now();
183
184 std::chrono::duration<double, std::milli> diff_t{end - start};
185 diff = diff_t.count();
186
187 std::stringstream sstream;
188 if (taskName == nullptr) {
189 sstream << diff << "\t";
190 } else {
191 sstream << std::setw(2) << " - " << taskName << " completed in: " << diff << " ms";
192 }
193 logger(sstream.str());
194 } else {
195 (this->*task)(std::forward<T>(args)...);
196 }
197
198 return diff;
199}
200
201} // namespace its
202} // namespace o2
203#endif
Class to compute the primary vertex in ITS from tracklets.
virtual void computeTrackletMatching(const int iteration=0)
virtual void computeTrackletsHybrid(const int iteration=0)
virtual void computeTracklets(const int iteration=0)
virtual void computeTrackletMatchingHybrid(const int iteration=0)
virtual void initialiseHybrid(const TrackingParameters &trackingParams, const int iteration=0)
const const float float const IndexTableUtils float const IndexTableUtils &virtual void initialise(const TrackingParameters &trackingParams, const int iteration=0)
std::vector< VertexingParameters > & getVertexingParameters()
virtual void computeVertices(const int iteration=0)
virtual void computeVerticesHybrid(const int iteration=0)
void findTrackletsHybrid(T &&... args)
Definition Vertexer.h:156
void findTracklets(T &&... args)
Definition Vertexer.h:117
void initialiseVertexer(T &&... args)
Definition Vertexer.h:111
void findTrivialMCTracklets()
float evaluateTask(void(Vertexer::*)(T...), const char *, std::function< void(std::string s)> logger, T &&... args)
Definition Vertexer.h:174
void validateTracklets(T &&... args)
Definition Vertexer.h:138
void findVertices(T &&... args)
Definition Vertexer.h:144
VertexerTraits * getTraits() const
Definition Vertexer.h:61
void validateTrackletsHybrid(T &&... args)
Definition Vertexer.h:162
void initialiseTimeFrameHybrid(T &&... args)
void findVerticesHybrid(T &&... args)
Definition Vertexer.h:168
float clustersToVertices(std::function< void(std::string s)>=[](std::string s) { std::cout<< s<< std::endl;})
Definition Vertexer.cxx:40
float clustersToVerticesHybrid(std::function< void(std::string s)>=[](std::string s) { std::cout<< s<< std::endl;})
Definition Vertexer.cxx:71
void setParameters(std::vector< VertexingParameters > &vertParams)
Definition Vertexer.h:127
void filterMCTracklets()
Vertexer(const Vertexer &)=delete
void initialiseTimeFrame(T &&... args)
void adoptTimeFrame(TimeFrame &tf)
Definition Vertexer.cxx:132
void printEpilog(std::function< void(std::string s)> logger, bool isHybrid, 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)
Definition Vertexer.cxx:138
Vertexer & operator=(const Vertexer &)=delete
std::vector< VertexingParameters > & getVertParameters() const
Definition Vertexer.h:122
void getGlobalConfiguration()
Definition Vertexer.cxx:103
std::vector< Vertex > exportVertices()
void initialiseVertexerHybrid(T &&... args)
Definition Vertexer.h:150
virtual ~Vertexer()=default
GLsizei const GLchar *const * string
Definition glcorearb.h:809
GLuint GLuint end
Definition glcorearb.h:469
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
GLuint start
Definition glcorearb.h:469
constexpr bool DoTimeBenchmarks
Definition Constants.h:38
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