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 <string_view>
27#include <utility>
28#include <sstream>
29
30#include <oneapi/tbb/task_arena.h>
31
38#include "ITStracking/Road.h"
40
43
44namespace o2
45{
46
47namespace gpu
48{
49class GPUChainITS;
50}
51namespace its
52{
53
55{
56 static constexpr int NLayers{7};
59 using LogFunc = std::function<void(const std::string& s)>;
60
61 public:
63
65
67 const LogFunc& = [](const std::string& s) { std::cout << s << '\n'; },
68 const LogFunc& = [](const std::string& s) { std::cerr << s << '\n'; });
69
70 void setParameters(const std::vector<TrackingParameters>& p) { mTrkParams = p; }
71 void setMemoryPool(std::shared_ptr<BoundedMemoryResource>& pool) { mMemoryPool = pool; }
72 std::vector<TrackingParameters>& getParameters() { return mTrkParams; }
73 void setBz(float bz) { mTraits->setBz(bz); }
74 bool isMatLUT() const { return mTraits->isMatLUT(); }
75 void setNThreads(int n, std::shared_ptr<tbb::task_arena>& arena) { mTraits->setNThreads(n, arena); }
76 void printSummary() const;
77
78 private:
79 void initialiseTimeFrame(int iteration) { mTraits->initialiseTimeFrame(iteration); }
80 void computeTracklets(int iteration, int iROFslice, int iVertex) { mTraits->computeLayerTracklets(iteration, iROFslice, iVertex); }
81 void computeCells(int iteration) { mTraits->computeLayerCells(iteration); }
82 void findCellsNeighbours(int iteration) { mTraits->findCellsNeighbours(iteration); }
83 void findRoads(int iteration) { mTraits->findRoads(iteration); }
84 void findShortPrimaries() { mTraits->findShortPrimaries(); }
85 void extendTracks(int iteration) { mTraits->extendTracks(iteration); }
86
87 // MC interaction
88 void computeRoadsMClabels();
89 void computeTracksMClabels();
90 void rectifyClusterIndices();
91
92 template <typename... T, typename... F>
93 float evaluateTask(void (Tracker::*task)(T...), std::string_view taskName, int iteration, LogFunc logger, F&&... args);
94
95 TrackerTraits7* mTraits = nullptr;
96 TimeFrame7* mTimeFrame = nullptr;
97
98 std::vector<TrackingParameters> mTrkParams;
99 o2::gpu::GPUChainITS* mRecoChain = nullptr;
100
101 unsigned int mNumberOfDroppedTFs{0};
102 unsigned int mTimeFrameCounter{0};
103 double mTotalTime{0};
104 std::shared_ptr<BoundedMemoryResource> mMemoryPool;
105
106 enum State {
107 TFInit = 0,
108 Trackleting,
109 Celling,
110 Neighbouring,
111 Roading,
112 NStates,
113 };
114 State mCurState{TFInit};
115 static constexpr std::array<const char*, NStates> StateNames{"TimeFrame initialisation", "Tracklet finding", "Cell finding", "Neighbour finding", "Road finding"};
116};
117
118template <typename... T, typename... F>
119float Tracker::evaluateTask(void (Tracker::*task)(T...), std::string_view taskName, int iteration, LogFunc logger, F&&... args)
120{
121 float diff{0.f};
122
123 if constexpr (constants::DoTimeBenchmarks) {
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();
127
128 std::chrono::duration<double, std::milli> diff_t{end - start};
129 diff = diff_t.count();
130
131 std::stringstream sstream;
132 if (taskName.empty()) {
133 sstream << diff << "\t";
134 } else {
135 sstream << std::setw(2) << " - " << taskName << " completed in: " << diff << " ms";
136 }
137 logger(sstream.str());
138
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';
146 }
147 }
148
149 } else {
150 (this->*task)(std::forward<F>(args)...);
151 }
152
153 return diff;
154}
155
156} // namespace its
157} // namespace o2
158
159#endif /* TRACKINGITSU_INCLUDE_TRACKER_H_ */
useful math constants
uint32_t c
Definition RawData.h:2
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)
Definition Tracker.h:70
void printSummary() const
Definition Tracker.cxx:343
bool isMatLUT() const
Definition Tracker.h:74
std::vector< TrackingParameters > & getParameters()
Definition Tracker.h:72
void setBz(float bz)
Definition Tracker.h:73
void clustersToTracks(const LogFunc &=[](const std::string &s) { std::cout<< s<< '\n';}, const LogFunc &=[](const std::string &s) { std::cerr<< s<< '\n';})
Definition Tracker.cxx:47
void setMemoryPool(std::shared_ptr< BoundedMemoryResource > &pool)
Definition Tracker.h:71
void adoptTimeFrame(TimeFrame< NLayers > &tf)
Definition Tracker.cxx:337
void setNThreads(int n, std::shared_ptr< tbb::task_arena > &arena)
Definition Tracker.h:75
GLdouble n
Definition glcorearb.h:1982
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:25
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