Project
Loading...
Searching...
No Matches
Tracker.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 TRACKINGITSU_INCLUDE_TRACKER_H_
17#define TRACKINGITSU_INCLUDE_TRACKER_H_
18
19#include <array>
20#include <chrono>
21#include <cmath>
22#include <fstream>
23#include <iomanip>
24#include <iosfwd>
25#include <memory>
26#include <utility>
27#include <sstream>
28
32#include "ITStracking/ROframe.h"
35#include "ITStracking/Road.h"
36
39
40namespace o2
41{
42
43namespace gpu
44{
45class GPUChainITS;
46}
47namespace its
48{
49class TrackerTraits;
50
52{
53
54 public:
55 Tracker(TrackerTraits* traits);
56
57 Tracker(const Tracker&) = delete;
58 Tracker& operator=(const Tracker&) = delete;
60
62
64 std::function<void(std::string s)> = [](std::string s) { std::cout << s << std::endl; }, std::function<void(std::string s)> = [](std::string s) { std::cerr << s << std::endl; });
66 std::function<void(std::string s)> = [](std::string s) { std::cout << s << std::endl; }, std::function<void(std::string s)> = [](std::string s) { std::cerr << s << std::endl; });
67 std::vector<TrackITSExt>& getTracks();
68
69 void setParameters(const std::vector<TrackingParameters>&);
70 std::vector<TrackingParameters>& getParameters() { return mTrkParams; }
72 void setBz(float);
74 bool isMatLUT() const;
75 void setNThreads(int n);
76 int getNThreads() const;
77 std::uint32_t mTimeFrameCounter = 0;
78
79 private:
80 void initialiseTimeFrame(int& iteration);
81 void computeTracklets(int& iteration, int& iROFslice, int& iVertex);
82 void computeCells(int& iteration);
83 void findCellsNeighbours(int& iteration);
84 void findRoads(int& iteration);
85
86 void initialiseTimeFrameHybrid(int& iteration);
87 void computeTrackletsHybrid(int& iteration, int& iROFslice, int& iVertex);
88 void computeCellsHybrid(int& iteration);
89 void findCellsNeighboursHybrid(int& iteration);
90 void findRoadsHybrid(int& iteration);
91 void findTracksHybrid(int& iteration);
92
93 void findShortPrimaries();
94 void findTracks();
95 void extendTracks(int& iteration);
96
97 // MC interaction
98 void computeRoadsMClabels();
99 void computeTracksMClabels();
100 void rectifyClusterIndices();
101
102 template <typename... T>
103 float evaluateTask(void (Tracker::*)(T...), const char*, std::function<void(std::string s)> logger, T&&... args);
104
105 TrackerTraits* mTraits = nullptr;
106 TimeFrame* mTimeFrame = nullptr;
107
108 std::vector<TrackingParameters> mTrkParams;
109 o2::gpu::GPUChainITS* mRecoChain = nullptr;
110
111 unsigned int mNumberOfRuns{0};
112};
113
114inline void Tracker::setParameters(const std::vector<TrackingParameters>& trkPars)
115{
116 mTrkParams = trkPars;
117}
118
119template <typename... T>
120float Tracker::evaluateTask(void (Tracker::*task)(T...), const char* taskName, std::function<void(std::string s)> logger,
121 T&&... args)
122{
123 float diff{0.f};
124
125 if constexpr (constants::DoTimeBenchmarks) {
126 auto start = std::chrono::high_resolution_clock::now();
127 (this->*task)(std::forward<T>(args)...);
128 auto end = std::chrono::high_resolution_clock::now();
129
130 std::chrono::duration<double, std::milli> diff_t{end - start};
131 diff = diff_t.count();
132
133 std::stringstream sstream;
134 if (taskName == nullptr) {
135 sstream << diff << "\t";
136 } else {
137 sstream << std::setw(2) << " - " << taskName << " completed in: " << diff << " ms";
138 }
139 logger(sstream.str());
140
141 if (mTrkParams[0].SaveTimeBenchmarks) {
142 std::stringstream str2file;
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 str2file << taskNameStr << "\t" << diff;
148 std::ofstream file;
149 file.open("its_time_benchmarks.txt", std::ios::app);
150 file << str2file.str() << std::endl;
151 file.close();
152 }
153
154 } else {
155 (this->*task)(std::forward<T>(args)...);
156 }
157
158 return diff;
159}
160
161} // namespace its
162} // namespace o2
163
164#endif /* TRACKINGITSU_INCLUDE_TRACKER_H_ */
useful math constants
uint32_t c
Definition RawData.h:2
Definition of the ITS track.
void adoptTimeFrame(TimeFrame &tf)
Definition Tracker.cxx:548
void setCorrType(const o2::base::PropagatorImpl< float >::MatCorrType type)
Definition Tracker.cxx:559
Tracker & operator=(const Tracker &)=delete
std::uint32_t mTimeFrameCounter
Definition Tracker.h:77
void setParameters(const std::vector< TrackingParameters > &)
Definition Tracker.h:114
std::vector< TrackITSExt > & getTracks()
void clustersToTracksHybrid(std::function< void(std::string s)>=[](std::string s) { std::cout<< s<< std::endl;}, std::function< void(std::string s)>=[](std::string s) { std::cerr<< s<< std::endl;})
Definition Tracker.cxx:155
bool isMatLUT() const
Definition Tracker.cxx:564
void clustersToTracks(std::function< void(std::string s)>=[](std::string s) { std::cout<< s<< std::endl;}, std::function< void(std::string s)>=[](std::string s) { std::cerr<< s<< std::endl;})
Definition Tracker.cxx:49
std::vector< TrackingParameters > & getParameters()
Definition Tracker.h:70
void getGlobalConfiguration()
Definition Tracker.cxx:481
Tracker(const Tracker &)=delete
int getNThreads() const
Definition Tracker.cxx:574
void setBz(float)
Definition Tracker.cxx:554
void setNThreads(int n)
Definition Tracker.cxx:569
GLsizei const GLchar *const * string
Definition glcorearb.h:809
GLdouble n
Definition glcorearb.h:1982
GLuint GLuint end
Definition glcorearb.h:469
GLint GLint GLsizei GLint GLenum GLenum type
Definition glcorearb.h:275
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