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
35#include "ITStracking/ROframe.h"
39#include "ITStracking/Road.h"
41
44
45namespace o2
46{
47
48namespace gpu
49{
50class GPUChainITS;
51}
52namespace its
53{
54
56{
57 static constexpr int NLayers{7};
60 using LogFunc = std::function<void(const std::string& s)>;
61
62 public:
64
66
68 const LogFunc& = [](const std::string& s) { std::cout << s << '\n'; },
69 const LogFunc& = [](const std::string& s) { std::cerr << s << '\n'; });
70
71 void setParameters(const std::vector<TrackingParameters>& p) { mTrkParams = p; }
72 void setMemoryPool(std::shared_ptr<BoundedMemoryResource>& pool) { mMemoryPool = pool; }
73 std::vector<TrackingParameters>& getParameters() { return mTrkParams; }
74 void setBz(float bz) { mTraits->setBz(bz); }
75 bool isMatLUT() const { return mTraits->isMatLUT(); }
76 void setNThreads(int n, std::shared_ptr<tbb::task_arena>& arena) { mTraits->setNThreads(n, arena); }
77 void printSummary() const;
78
79 private:
80 void initialiseTimeFrame(int iteration) { mTraits->initialiseTimeFrame(iteration); }
81 void computeTracklets(int iteration, int iROFslice, int iVertex) { mTraits->computeLayerTracklets(iteration, iROFslice, iVertex); }
82 void computeCells(int iteration) { mTraits->computeLayerCells(iteration); }
83 void findCellsNeighbours(int iteration) { mTraits->findCellsNeighbours(iteration); }
84 void findRoads(int iteration) { mTraits->findRoads(iteration); }
85 void findShortPrimaries() { mTraits->findShortPrimaries(); }
86 void extendTracks(int iteration) { mTraits->extendTracks(iteration); }
87
88 // MC interaction
89 void computeRoadsMClabels();
90 void computeTracksMClabels();
91 void rectifyClusterIndices();
92
93 template <typename... T, typename... F>
94 float evaluateTask(void (Tracker::*task)(T...), std::string_view taskName, int iteration, LogFunc logger, F&&... args);
95
96 TrackerTraits7* mTraits = nullptr;
97 TimeFrame7* mTimeFrame = nullptr;
98
99 std::vector<TrackingParameters> mTrkParams;
100 o2::gpu::GPUChainITS* mRecoChain = nullptr;
101
102 unsigned int mNumberOfDroppedTFs{0};
103 unsigned int mTimeFrameCounter{0};
104 double mTotalTime{0};
105 std::shared_ptr<BoundedMemoryResource> mMemoryPool;
106
107 enum State {
108 TFInit = 0,
109 Trackleting,
110 Celling,
111 Neighbouring,
112 Roading,
113 NStates,
114 };
115 State mCurState{TFInit};
116 static constexpr std::array<const char*, NStates> StateNames{"TimeFrame initialisation", "Tracklet finding", "Cell finding", "Neighbour finding", "Road finding"};
117};
118
119template <typename... T, typename... F>
120float Tracker::evaluateTask(void (Tracker::*task)(T...), std::string_view taskName, int iteration, LogFunc logger, F&&... args)
121{
122 float diff{0.f};
123
124 if constexpr (constants::DoTimeBenchmarks) {
125 auto start = std::chrono::high_resolution_clock::now();
126 (this->*task)(std::forward<F>(args)...);
127 auto end = std::chrono::high_resolution_clock::now();
128
129 std::chrono::duration<double, std::milli> diff_t{end - start};
130 diff = diff_t.count();
131
132 std::stringstream sstream;
133 if (taskName.empty()) {
134 sstream << diff << "\t";
135 } else {
136 sstream << std::setw(2) << " - " << taskName << " completed in: " << diff << " ms";
137 }
138 logger(sstream.str());
139
140 if (mTrkParams[0].SaveTimeBenchmarks) {
141 std::string taskNameStr(taskName);
142 std::transform(taskNameStr.begin(), taskNameStr.end(), taskNameStr.begin(),
143 [](unsigned char c) { return std::tolower(c); });
144 std::replace(taskNameStr.begin(), taskNameStr.end(), ' ', '_');
145 if (std::ofstream file{"its_time_benchmarks.txt", std::ios::app}) {
146 file << "trk:" << iteration << '\t' << taskNameStr << '\t' << diff << '\n';
147 }
148 }
149
150 } else {
151 (this->*task)(std::forward<F>(args)...);
152 }
153
154 return diff;
155}
156
157} // namespace its
158} // namespace o2
159
160#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:71
void printSummary() const
Definition Tracker.cxx:341
bool isMatLUT() const
Definition Tracker.h:75
std::vector< TrackingParameters > & getParameters()
Definition Tracker.h:73
void setBz(float bz)
Definition Tracker.h:74
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:72
void adoptTimeFrame(TimeFrame< NLayers > &tf)
Definition Tracker.cxx:335
void setNThreads(int n, std::shared_ptr< tbb::task_arena > &arena)
Definition Tracker.h:76
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