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