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