CbmRoot
Loading...
Searching...
No Matches
CaTrackFinderWindow.h
Go to the documentation of this file.
1/* Copyright (C) 2022 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Sergei Zharko [committer], Maksym Zyzak */
4
9
10#pragma once // include this header only once per compilation unit
11
12#include "CaBranch.h"
13#include "CaCloneMerger.h"
14#include "CaGrid.h"
15#include "CaHit.h"
16#include "CaMcMatch.h"
17#include "CaSimd.h"
18#include "CaTrackExtender.h"
19#include "CaTrackFitter.h"
20#include "CaTrackingMonitor.h"
21#include "CaVector.h"
22#include "CaWindowData.h"
23
24namespace cbm::algo::ca
25{
26
27 class Track;
28 class Triplet;
29 class Framework;
30
34 public:
36 TrackFinderWindow(const ca::Framework& framework, const ca::Parameters<fvec>& pars, const fscal mass,
37 const ca::TrackingMode& mode, ca::TrackingMonitorData& monitorData);
39 ~TrackFinderWindow() = default;
40
43
46
49
52
53 void CaTrackFinderSlice(const ca::InputData& input, WindowData& wData);
54
56 void InitTimeslice(size_t nHitKeys) { fvHitKeyToTrack.reset(nHitKeys, -1); }
57
58 private:
61
62 typedef std::array<Vector<ca::Triplet>, constants::size::MaxNstations> TripletArray_t;
63
64 // TripletData_t:
65 // 1 -> vHitFirstTriplet /// link hit -> first triplet { hit, *, *}
66 // 2 -> vHitNofTriplets /// link hit ->n triplets { hit, *, *}
67 // 3 -> vTriplets;
68 typedef std::tuple<Vector<int>, Vector<int>, TripletArray_t> TripletData_t;
69
70 void ConstructTriplets(WindowData& wData);
71
72 void ReadWindowData(const Vector<Hit>& hits, WindowData& wData);
73
74 void PrepareGrid(const Vector<Hit>& hits, WindowData& wData);
75
76 void PrepareCAIteration(int iterationIndex, const ca::Iteration& caIteration, WindowData& wData);
77
78 void CreateTracks(WindowData& wData, const ca::Iteration& caIteration, TripletArray_t& vTriplets);
79
80 void CreateTrackCandidates(WindowData& wData, TripletArray_t& vTriplets, const int min_level,
81 const int firstTripletLevel);
82
83 void DoCompetitionLoop(const WindowData& wData);
84
85 void SelectTracks(WindowData& wData);
86
87 void SearchNeighbors(WindowData& wData);
88
89 void CAFindTrack(int ista, ca::Branch& best_tr, const ca::Triplet* curr_trip, ca::Branch& curr_tr,
90 unsigned char min_best_l, ca::Branch* new_tr, WindowData& wData, TripletArray_t& vTriplets);
91
92 bool checkTripletMatch(const ca::Triplet& l, const ca::Triplet& r, fscal& dchi2, WindowData& wData) const;
93
94 // ** Functions, which pack and unpack indexes of station and triplet **
95
96 // TODO: move to ca::Triplet class (S.Zharko)
100 static unsigned int PackTripletId(unsigned int iStation, unsigned int iTriplet);
101
104 static unsigned int TripletId2Station(unsigned int id);
105
108 static unsigned int TripletId2Triplet(unsigned int id);
109
110
112 int GetBestMcTrackIdForWindowHit(int iHit) const;
113
114 McMatch GetMcMatchForWindowHit(int iHit) const;
115
116 private:
119
120 static constexpr bool fDebug = false; // print debug info
121
128
129 WindowData* pwData{nullptr};
130
135
137 Vector<int> fvHitKeyToTrack{"TrackFinderWindow::fvHitKeyToTrack"};
138
139 // Persistent to avoid memory allocations.
140 // Only used in CreateTrackCandidates().
142
143 // Track candidates created out of adjacent triplets before the final track selection.
144 // The candidates may share any amount of hits.
145 Vector<ca::Branch> fvTrackCandidates{"TrackFinderWindow::fvTrackCandidates"};
146
147 // Triplets and related meta data
149
150 // Triplet temporary storage. Only used in ConstructTriplets().
152 };
153
154 // ********************************************
155 // ** Inline member functions implementation **
156 // ********************************************
157
158 // ---------------------------------------------------------------------------------------------------------------------
159 //
160 [[gnu::always_inline]] inline unsigned int TrackFinderWindow::PackTripletId(unsigned int iStation,
161 unsigned int iTriplet)
162 {
163 assert(iStation < constants::size::MaxNstations);
164 assert(iTriplet < constants::size::MaxNtriplets);
165 constexpr unsigned int kMoveStation = constants::size::TripletBits;
166 return (iStation << kMoveStation) + iTriplet;
167 }
168
169 // ---------------------------------------------------------------------------------------------------------------------
170 //
171 [[gnu::always_inline]] inline unsigned int TrackFinderWindow::TripletId2Station(unsigned int id)
172 {
173 constexpr unsigned int kMoveStation = constants::size::TripletBits;
174 return id >> kMoveStation;
175 }
176
177 // ---------------------------------------------------------------------------------------------------------------------
178 //
179 [[gnu::always_inline]] inline unsigned int TrackFinderWindow::TripletId2Triplet(unsigned int id)
180 {
181 constexpr unsigned int kTripletMask = (1u << constants::size::TripletBits) - 1u;
182 return id & kTripletMask;
183 }
184
185
186} // namespace cbm::algo::ca
A class to store hit information in a backet-sorted way on 2D grid.
A generic hit for the CA tracker (header)
Data structure to represent a set of MC links in CA tracking MC module.
Monitor specialization for the tracking algorithm.
Container for all data, which are processed within a single sub-timeslice (implementation)
static vector< vector< QAHit > > hits
A set of parameters for the CA Track finder iteration.
Definition CaIteration.h:31
A container for all external parameters of the CA tracking algorithm.
TrackFinderWindow & operator=(TrackFinderWindow &&)=delete
Move assignment operator.
TrackExtender fTrackExtender
Object of the track extender algorithm.
TrackFinderWindow(const TrackFinderWindow &)=default
Copy constructor.
void PrepareCAIteration(int iterationIndex, const ca::Iteration &caIteration, WindowData &wData)
TrackFinderWindow & operator=(const TrackFinderWindow &)=delete
Copy assignment operator.
TrackFitter fTrackFitter
Object of the track extender algorithm.
TrackFinderWindow(TrackFinderWindow &&)=default
Move constructor.
CloneMerger fCloneMerger
Object of the clone merger algorithm.
void CAFindTrack(int ista, ca::Branch &best_tr, const ca::Triplet *curr_trip, ca::Branch &curr_tr, unsigned char min_best_l, ca::Branch *new_tr, WindowData &wData, TripletArray_t &vTriplets)
~TrackFinderWindow()=default
Destructor.
void CreateTrackCandidates(WindowData &wData, TripletArray_t &vTriplets, const int min_level, const int firstTripletLevel)
ca::Branch fNewTr[constants::size::MaxNstations]
const Parameters< fvec > & fParameters
Object of Framework parameters class.
const cbm::algo::kf::Field< fvec > & fField
Reference to magnetic field object.
static unsigned int TripletId2Triplet(unsigned int id)
std::tuple< Vector< int >, Vector< int >, TripletArray_t > TripletData_t
void DoCompetitionLoop(const WindowData &wData)
fscal fDefaultMass
mass of the propagated particle [GeV/c2]
int GetBestMcTrackIdForWindowHit(int iHit) const
Get mc track ID for a hit (debug tool)
McMatch GetMcMatchForWindowHit(int iHit) const
WindowData * pwData
Pointer to the window data object.
const Framework & fFramework
Reference to the Framework object.
bool checkTripletMatch(const ca::Triplet &l, const ca::Triplet &r, fscal &dchi2, WindowData &wData) const
static unsigned int PackTripletId(unsigned int iStation, unsigned int iTriplet)
void CaTrackFinderSlice(const ca::InputData &input, WindowData &wData)
TrackingMonitorData & frMonitorData
Reference to monitor data.
TrackFinderWindow(const ca::Framework &framework, const ca::Parameters< fvec > &pars, const fscal mass, const ca::TrackingMode &mode, ca::TrackingMonitorData &monitorData)
Default constructor.
const cbm::algo::kf::Setup< fvec > & fSetup
Reference to the setup.
void ReadWindowData(const Vector< Hit > &hits, WindowData &wData)
std::array< Vector< ca::Triplet >, constants::size::MaxNstations > TripletArray_t
static unsigned int TripletId2Station(unsigned int id)
Class representing an output track in the CA tracking algorithm.
Definition CaTrack.h:28
Triplet class represents a short 3-hits track segment called a "triplet".
Definition CaTriplet.h:22
Container for internal data, processed on a single time window.
Magnetic field manager class.
Definition KfField.h:272
KF-framework representation of the detector setup.
Definition KfSetup.h:37
constexpr fscal MuonMass
Particle masses etc used for the track fit, fscal precision.
Definition CaDefs.h:90
constexpr int MaxNstations
Max number of stations, 2^6 = 64.
Definition CaDefs.h:44
constexpr unsigned int TripletBits
Amount of bits to code one triplet.
Definition CaDefs.h:41
constexpr int MaxNtriplets
Max number of triplets, 2^26 = 67,108,864.
Definition CaDefs.h:45
TODO: SZh 8.11.2022: add selection of parameterisation.
Definition CaBranch.h:14
MonitorData< ECounter, ETimer > TrackingMonitorData
kf::fscal fscal
Definition CaSimd.h:14