CbmRoot
Loading...
Searching...
No Matches
TrackingChain.cxx
Go to the documentation of this file.
1/* Copyright (C) 2023-2025 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Sergei Zharko [committer] */
4
9
10#include "TrackingChain.h"
11
12#include "CaDefs.h"
13#include "CaHit.h"
14#include "CaInitManager.h"
15#include "CaParameters.h"
16#include "KfSetupBuilder.h"
17#include "ParFiles.h"
18#include "compat/OpenMP.h"
19#include "yaml/Yaml.h"
20
21#include <boost/archive/binary_oarchive.hpp>
22
23#include <fstream>
24#include <set>
25#include <unordered_map>
26
27#include <fmt/format.h>
28#include <xpu/host.h>
29
38using cbm::algo::ca::constants::clrs::CL; // clear text
39using cbm::algo::ca::constants::clrs::GNb; // grin bald text
40
41// ---------------------------------------------------------------------------------------------------------------------
42//
43TrackingChain::TrackingChain(ECbmRecoMode recoMode, const std::unique_ptr<cbm::algo::qa::Manager>& qaManager,
44 std::string_view name)
45 : fQa(Qa(qaManager, name))
46 , fRecoMode(recoMode)
47{
48}
49
50// ---------------------------------------------------------------------------------------------------------------------
51//
53{
54 if (fpSetup.get() == nullptr) {
55 throw std::runtime_error("Tracking Chain: TrackingSetup object was not registered");
56 }
57
58
59 // ------ Read tracking chain parameters from the config
60 ParFiles parFiles(Opts().RunId());
62
63 // ------ Read parameters from binary
64 auto geomCfgFile = (Opts().ParamsDir() / fConfig.fsGeomConfig).string();
65 auto setupCfgFile = (Opts().ParamsDir() / fConfig.fsSetupFilename).string();
66 auto mainCfgFile = (Opts().ParamsDir() / fConfig.fsMainConfig).string();
67 auto userCfgFile = fConfig.fsUserConfig;
68
69 L_(info) << "Tracking Chain: reading geometry from CA parameters file " << GNb << geomCfgFile << CL << '\n';
70 L_(info) << "Tracking Chain: reading geometry setup file " << GNb << setupCfgFile << CL << '\n';
71 L_(info) << "Tracking Chain: reading parameters from CA main config " << GNb << mainCfgFile << CL << '\n';
72
73 //* InitManager instantiation
74 auto manager = InitManager{};
76 manager.SetConfigMain(mainCfgFile);
77 if (!userCfgFile.empty()) {
78 L_(info) << "Tracking Chain: applying user configuration from " << GNb << userCfgFile << CL << '\n';
79 manager.SetConfigUser(userCfgFile);
80 }
81
82 //* Read parameters object from the geomCfgFile to intialize tracking stations
83 {
84 manager.ReadParametersObject(geomCfgFile); // geometry setup
85 auto paramIn = manager.TakeParameters();
86 manager.ClearSetupInfo();
87
88 //* Read setup
89 auto geoSetup = kf::SetupBuilder::Load<ca::fvec>(setupCfgFile);
90 kf::Target<double> target(geoSetup.GetTarget());
91
92 //* Initialize tracking parameters
93 manager.SetFieldFunction([](const double(&)[3], double(&outB)[3]) {
94 outB[0] = 0.;
95 outB[1] = 0.;
96 outB[2] = 0.;
97 });
98 manager.SetTargetPosition(target.GetX(), target.GetY(), target.GetZ());
99 manager.InitTargetField(2.5 /*cm*/);
100 manager.AddStations(paramIn); // Initialize stations
101 manager.InitStationLayout();
102 manager.ReadInputConfigs();
103 manager.SetGeometrySetup(geoSetup);
104 manager.DevSetIsParSearchWUsed(false);
105 if (!manager.FormParametersContainer()) {
106 throw std::runtime_error("Initialization of CA parameters failed");
107 }
108 }
109 auto parameters = manager.TakeParameters();
110
111 L_(info) << "Tracking Chain: parameters object: \n" << parameters.ToString(1) << '\n';
112
113 // ------ Used detector subsystem flags
114 fbDetUsed.fill(false);
115 fbDetUsed[EDetectorID::kSts] = Opts().Has(fles::Subsystem::STS) && parameters.IsActive(EDetectorID::kSts);
116 fbDetUsed[EDetectorID::kTof] = Opts().Has(fles::Subsystem::TOF) && parameters.IsActive(EDetectorID::kTof);
117 fbDetUsed[EDetectorID::kTrd] = Opts().Has(fles::Subsystem::TRD) && parameters.IsActive(EDetectorID::kTrd);
118
119 // ------ Initialize CA framework
122 fCaFramework.SetNofThreads(Opts().NumOMPThreads() == std::nullopt ? openmp::GetMaxThreads()
123 : *(Opts().NumOMPThreads()));
124 }
125 else {
127 }
128 fCaFramework.ReceiveParameters(std::move(parameters));
130
131 // ------ Initialize QA modules
132 if (fQa.IsActive()) {
134 fQa.Init();
135 }
136 L_(info) << "TRACKING QA: " << fQa.IsActive();
137}
138
139// ---------------------------------------------------------------------------------------------------------------------
140//
142{
143 xpu::scoped_timer t_("CA"); // TODO: pass timings to monitoring for throughput?
146
147 // ----- Init input data ---------------------------------------------------------------------------------------------
149 this->PrepareInput(recoResults);
151
152 // ----- Run reconstruction ------------------------------------------------------------------------------------------
156
157 // ----- Init output data --------------------------------------------------------------------------------------------
158 return PrepareOutput();
159}
160
161// ---------------------------------------------------------------------------------------------------------------------
162//
164{
165 L_(info) << fCaMonitor.ToString();
167 auto fileName = "./" + fConfig.fsMoniOutName;
168 std::ofstream ofs(fileName);
169 boost::archive::binary_oarchive oa(ofs);
170 oa << fCaMonitor;
171 }
172}
173
174// ---------------------------------------------------------------------------------------------------------------------
175//
177{
178 fNofHitKeys = 0;
179 int nHitsTot = recoResults.stsHits.NElements() + recoResults.tofHits.NElements() + recoResults.trdHits.NElements();
180 L_(debug) << "Tracking chain: input has " << nHitsTot << " hits";
182 faHitExternalIndices.clear();
184 if (fbDetUsed[EDetectorID::kSts]) {
188 }
189 if (fbDetUsed[EDetectorID::kTrd]) {
193 }
194 if (fbDetUsed[EDetectorID::kTof]) {
198 }
199 faHitExternalIndices.shrink_to_fit();
201 L_(debug) << "Tracking chain: " << fCaDataManager.GetNofHits() << " hits will be passed to the ca::Framework";
205}
206
207// ---------------------------------------------------------------------------------------------------------------------
208//
210{
211 Output_t output;
212 output.tracks = std::move(fCaFramework.fRecoTracks);
213 int nTracks = output.tracks.size();
214
215 output.stsHitIndices.reset(nTracks);
216 output.tofHitIndices.reset(nTracks);
217 output.trdHitIndices.reset(nTracks);
218
219 int trackFirstHit = 0;
220 for (int iTrk = 0; iTrk < nTracks; ++iTrk) {
221 output.stsHitIndices[iTrk].clear();
222 output.tofHitIndices[iTrk].clear();
223 output.trdHitIndices[iTrk].clear();
224 int nHits = output.tracks[iTrk].fNofHits;
225 for (int iHit = 0; iHit < nHits; ++iHit) {
226 int iHitInternal = fCaFramework.GetInputData().GetHit(fCaFramework.fRecoHits[trackFirstHit + iHit]).Id();
227 const auto [detID, iPartition, iPartHit] = faHitExternalIndices[iHitInternal];
228 switch (detID) {
229 // FIXME: store a global hit index instead of (partition, hit)
230 case ca::EDetectorID::kSts: output.stsHitIndices[iTrk].push_back(std::make_pair(iPartition, iPartHit)); break;
231 case ca::EDetectorID::kTof: output.tofHitIndices[iTrk].push_back(std::make_pair(iPartition, iPartHit)); break;
232 case ca::EDetectorID::kTrd: output.trdHitIndices[iTrk].push_back(std::make_pair(iPartition, iPartHit)); break;
233 default: break;
234 }
235 }
239
240 trackFirstHit += nHits;
241 }
242
244 L_(info) << "TrackingChain: Timeslice contains " << fCaMonitorData.GetCounterValue(ca::ECounter::RecoTrack)
245 << " tracks, with " << fCaMonitorData.GetCounterValue(ca::ECounter::RecoStsHit) << " sts hits, "
248 << "; the FindTracks routine ran " << fCaMonitorData.GetTimer(ca::ETimer::FindTracks).GetTotal() << " s";
249 }
250
251 // QA
252 if (fQa.IsActive()) {
255 fQa.RegisterTracks(&output.tracks);
257 fQa.Exec();
259 }
260
262
263 if constexpr (kDEBUG) { // Monitor data per TS
266 auto fileName = fmt::format("./ca_monitor_nth_{}_ts{}.dat", fCaFramework.GetNofThreads(), tsIndex);
267 std::ofstream ofs(fileName);
268 boost::archive::binary_oarchive oa(ofs);
269 ca::TrackingMonitor monitorPerTS;
270 monitorPerTS.AddMonitorData(fCaMonitorData);
271 oa << monitorPerTS;
272 }
273 }
274
277
278 return output;
279}
280
281// ---------------------------------------------------------------------------------------------------------------------
282//
283template<EDetectorID DetID>
285{
286 int nSt = fCaFramework.GetParameters().GetNstationsActive();
287
288 using Hit_t = ca::HitTypes_t::at<DetID>;
289 constexpr bool IsMvd = (DetID == EDetectorID::kMvd);
290 constexpr bool IsSts = (DetID == EDetectorID::kSts);
291 constexpr bool IsMuch = (DetID == EDetectorID::kMuch);
292 constexpr bool IsTrd = (DetID == EDetectorID::kTrd);
293 constexpr bool IsTof = (DetID == EDetectorID::kTof);
294
295 xpu::t_add_bytes(hits.NElements() * sizeof(Hit_t)); // Assumes call from Run, for existence of timer!
296
297 int64_t dataStreamDet = static_cast<int64_t>(DetID) << 60; // detector part of the data stream
298 int64_t dataStream = 0;
299 for (size_t iPartition = 0; iPartition < hits.NPartitions(); ++iPartition, ++dataStream) {
300 const auto& [vHits, extHitAddress] = hits.Partition(iPartition);
301 // ---- Define data stream and station index
302 //int64_t dataStream = dataStreamDet | extHitAddress;
303 int iStLocal = fpSetup->GetTrackingStation<ca::ToFlesSubsystem<DetID>()>(extHitAddress);
304 if (iStLocal < 0) {
305 continue; // Station is not used for tracking (e.g. TOF SMtype 5)
306 }
307
308 int iStActive = fCaFramework.GetParameters().GetStationIndexActive(iStLocal, DetID);
309
310 //size_t iOffset = hits.Offsets()[iPartition];
311 if (iStActive < 0) {
312 continue; // legit
313 }
314 if (iStActive >= nSt) {
315 L_(error) << "TrackingChain: found hit with wrong active station index above the upper limit: " << iStActive
316 << ", detector: " << ca::kDetName[DetID];
317 continue;
318 }
319 double lastTime = -1e9;
320 //double prevTime = -1;
321 ca::HitKeyIndex_t firstHitKey = fNofHitKeys;
322 for (size_t iPartHit = 0; iPartHit < vHits.size(); ++iPartHit) {
323 const auto& hit = vHits[iPartHit];
324
325 //if constexpr (IsTrd) {
326 // switch (extHitAddress) {
327 // case 0x5:
328 // if (!(fabs(hit.Z() - 116.77) < 10)) {
329 // L_(info) << "DBG! " << extHitAddress << ' ' << hit.Z();
330 // }
331 // break;
332 // case 0x15:
333 // if (!(fabs(hit.Z() - 163.8) < 10)) {
334 // L_(info) << "DBG! " << extHitAddress << ' ' << hit.Z();
335 // }
336 // break;
337 // case 0x25:
338 // if (!(fabs(hit.Z() - 190.8) < 10)) {
339 // L_(info) << "DBG! " << extHitAddress << ' ' << hit.Z();
340 // }
341 // break;
342 // }
343 //}
344
345
346 //int iHitExt = iOffset + iPartHit;
347 // ---- Fill ca::Hit
349 ca::Hit caHit;
350 if constexpr (IsSts) {
351 caHit.SetFrontKey(firstHitKey + hit.fFrontClusterId);
352 caHit.SetBackKey(firstHitKey + hit.fBackClusterId);
353 //L_(info) << ", hit=" << iHitExt << ", f=" << hit.fFrontClusterId << ", b=" << hit.fBackClusterId;
354 }
355 else {
356 caHit.SetFrontKey(firstHitKey + iPartHit);
357 caHit.SetBackKey(caHit.FrontKey());
358 }
359
360 if constexpr (IsTof) {
361 // Cut the BMon hits (if any)
362 if (hit.Z() < 0.1) {
363 // FIXME: Provide BMon addresses explicitly in all the parameter files
364 continue;
365 }
366 }
367
368 caHit.SetX(hit.X());
369 caHit.SetY(hit.Y());
370 caHit.SetZ(hit.Z());
371 caHit.SetT(hit.Time());
372 caHit.SetDx2(hit.Dx() * hit.Dx() + fCaFramework.GetParameters().GetMisalignmentXsq(DetID));
373 caHit.SetDy2(hit.Dy() * hit.Dy() + fCaFramework.GetParameters().GetMisalignmentYsq(DetID));
374 if constexpr (IsSts) caHit.SetDxy(hit.fDxy);
375 caHit.SetDt2(hit.TimeError() * hit.TimeError() + fCaFramework.GetParameters().GetMisalignmentTsq(DetID));
377 //out << iStLocal << " " << extHitAddress << " " << hit.Z() << '\n';
378 caHit.SetRangeX(3.5 * hit.Dx());
379 caHit.SetRangeY(3.5 * hit.Dy());
380 caHit.SetRangeT(3.5 * hit.TimeError());
381 if constexpr (IsTrd) {
382 if (iStLocal == 0) {
383 caHit.SetRangeX(1.7);
384 caHit.SetRangeY(3.5);
385 caHit.SetRangeT(200.);
386 }
387 else if (iStLocal == 1) {
388 caHit.SetRangeY(sqrt(3.) * hit.Dy());
389 }
390 else {
391 caHit.SetRangeX(sqrt(3.) * hit.Dx());
392 }
393 }
394 caHit.SetStation(iStActive);
396 if (caHit.Check()) {
398 if ((caHit.T() < lastTime - 1000.) && (dataStream < 100000)) {
399 dataStream++;
400 }
401 lastTime = caHit.T();
402 fCaDataManager.PushBackHit(caHit, dataStreamDet | dataStream);
403 }
404 else {
405 fCaDataManager.PushBackHit(caHit); // A single data stream in event-by-event mode
406 }
407 faHitExternalIndices.push_back(std::make_tuple(DetID, iPartition, iPartHit));
408 if (fNofHitKeys <= caHit.FrontKey()) {
409 fNofHitKeys = caHit.FrontKey() + 1;
410 }
411 if (fNofHitKeys <= caHit.BackKey()) {
412 fNofHitKeys = caHit.BackKey() + 1;
413 }
414 }
415 else {
416 if constexpr (IsMvd) {
418 }
419 if constexpr (IsSts) {
421 }
422 if constexpr (IsMuch) {
424 }
425 if constexpr (IsTrd) {
427 }
428 if constexpr (IsTof) {
430 }
431 }
433 //prevTime = caHit.T();
434 // ---- Update number of hit keys
435 } // iPartHit
436 } // iPartition
437}
#define L_(level)
Compile-time constants definition for the CA tracking algorithm.
A generic hit for the CA tracker (header)
Input data management class for the CA tracking algorithm (header)
ECbmRecoMode
Reconstruct the full time slice or event-by-event.
Definition CbmDefs.h:162
static vector< vector< QAHit > > hits
A base KF-Setup initialization class (source)
friend fvec sqrt(const fvec &a)
This file contains the definition of the ParFiles class.
A chain class to execute CA tracking algorithm in online reconstruction (header)
fs::path ParamsDir() const
bool Has(fles::Subsystem detector) const
const Options & Opts() const
Definition SubChain.h:20
A chain for tracking algorithm.
Output_t Run(Input_t recoResults)
Provides action for a given time-slice.
std::shared_ptr< TrackingSetup > fpSetup
setup interface
ca::Framework fCaFramework
CA framework instance.
void ReadHits(PartitionedSpan< const ca::HitTypes_t::at< DetID > > hits)
Reads from different detector subsystems.
TrackingChain(ECbmRecoMode recoMode, const std::unique_ptr< cbm::algo::qa::Manager > &qaManager=nullptr, std::string_view name="")
Constructor from parameters.
Output_t PrepareOutput()
Prepares output data.
ca::TrackingMonitorData fCaMonitorData
CA monitor data object.
ca::Qa fQa
CA QA builder.
void PrepareInput(Input_t recoResults)
Prepares input data.
void Init()
Provides action in the initialization of the run.
ca::DataManager fCaDataManager
CA data manager.
ca::Vector< std::tuple< ca::EDetectorID, uint32_t, uint32_t > > faHitExternalIndices
External indices of used hits.
TrackingChainConfig fConfig
Tracking config.
ECbmRecoMode fRecoMode
Reconstruction mode.
static constexpr bool kDEBUG
Debug mode.
ca::HitKeyIndex_t fNofHitKeys
Current number of hit keys (aux)
ca::TrackingMonitor fCaMonitor
CA internal monitor (debug purposes)
void Finalize()
Provides action in the end of the run.
ca::DetIdArray_t< bool > fbDetUsed
Flags of detector subsystems used in tracking.
void SetNhitKeys(int nKeys)
Sets the number of hit keys.
void PushBackHit(const Hit &hit, int64_t streamId)
Pushes back a hit (with a data stream info)
InputData && TakeInputData()
Takes (moves) the instance of the input data object.
void ResetInputData(HitIndex_t nHits=0) noexcept
Resets the input data block.
int GetNofHits()
Gets number of hits stored.
const TrackingMonitorData & GetMonitorData() const
Gets monitor data.
int GetNofThreads() const
Gets number of threads.
const InputData & GetInputData() const
Gets pointer to input data object for external access.
Definition CaFramework.h:96
Vector< Track > fRecoTracks
reconstructed tracks
void SetNofThreads(int nThreads)
Sets number of threads.
void ReceiveParameters(Parameters< fvec > &&parameters)
Receives tracking parameters.
Vector< ca::HitIndex_t > fRecoHits
packed hits of reconstructed tracks
void ReceiveInputData(InputData &&inputData)
Receives input data.
void SetMonitorData(const TrackingMonitorData &monitorData)
Sets monitor data.
void Init(const TrackingMode mode)
const Parameters< fvec > & GetParameters() const
Gets a pointer to the Framework parameters object.
Definition CaFramework.h:87
ca::Hit class describes a generic hit for the CA tracker
Definition CaHit.h:32
void SetX(fscal x)
Set the X coordinate.
Definition CaHit.h:54
HitKeyIndex_t BackKey() const
Get the back key index.
Definition CaHit.h:99
void SetRangeT(fscal rangeT)
Set the +/- range of uncertainty of time.
Definition CaHit.h:84
void SetDt2(fscal dt2)
Set the uncertainty of time.
Definition CaHit.h:75
void SetDy2(fscal dy2)
Set the uncertainty of Y coordinate.
Definition CaHit.h:69
void SetRangeY(fscal rangeY)
Set the +/- range of uncertainty of Y coordinate.
Definition CaHit.h:81
void SetStation(int station)
Set the station index.
Definition CaHit.h:90
void SetDx2(fscal dx2)
Set the uncertainty of X coordinate.
Definition CaHit.h:66
void SetRangeX(fscal rangeX)
Set the +/- range of uncertainty of X coordinate.
Definition CaHit.h:78
void SetZ(fscal z)
Set the Z coordinate.
Definition CaHit.h:60
void SetBackKey(HitKeyIndex_t key)
Set the back key index.
Definition CaHit.h:51
void SetFrontKey(HitKeyIndex_t key)
Set the front key index.
Definition CaHit.h:48
void SetId(HitIndex_t id)
Set the hit id.
Definition CaHit.h:87
bool Check() const
Checks, if the hit is defined.
Definition CaHit.h:199
HitKeyIndex_t FrontKey() const
Get the front key index.
Definition CaHit.h:96
fscal T() const
Get the time.
Definition CaHit.h:111
void SetT(fscal t)
Set the time.
Definition CaHit.h:63
HitIndex_t Id() const
Get the hit id.
Definition CaHit.h:135
void SetDxy(fscal dxy)
Set the X/Y covariance.
Definition CaHit.h:72
void SetY(fscal y)
Set the Y coordinate.
Definition CaHit.h:57
A CA Parameters object initialization class.
void SetDetectorNames(const std::array< const char *, Size > &container)
Sets detector names.
const Hit & GetHit(HitIndex_t index) const
Gets reference to hit by its index.
Definition CaInputData.h:55
int GetCounterValue(ECounterKey key) const
Gets counter value.
void Reset()
Resets all the counters and timers.
void StopTimer(ETimerKey key)
Stops timer.
void IncrementCounter(ECounterKey key)
Increments key counter by 1.
void StartTimer(ETimerKey key)
Starts timer.
const Timer & GetTimer(ETimerKey key) const
Gets timer.
std::string ToString() const
Prints counters summary to string.
Definition CaMonitor.h:167
void Reset()
Resets the counters.
Definition CaMonitor.h:107
void AddMonitorData(const MonitorData< ECounterKey, ETimerKey > &data, bool parallel=false)
Adds the other monitor data to this.
Definition CaMonitor.h:70
int GetCounterValue(ECounterKey key) const
Gets counter value.
Definition CaMonitor.h:81
A container for all external parameters of the CA tracking algorithm.
void Exec()
QA execution function.
Definition CaQa.cxx:314
void RegisterParameters(const Parameters< fvec > *pParameters)
Registers tracking parameters object.
Definition CaQa.h:106
void Init()
Initializes the QA.
Definition CaQa.cxx:54
void RegisterRecoHitIndices(const Vector< HitIndex_t > *pvRecoHits)
Registers reco hits indices vector.
Definition CaQa.h:102
void RegisterInputData(const InputData *pInputData)
Registers tracking input data object.
Definition CaQa.h:94
void RegisterTracks(const Vector< Track > *pvTracks)
Registers track vector.
Definition CaQa.h:98
double GetTotal() const
Gets total time [s].
Definition CaTimer.h:77
Class representing an output track in the CA tracking algorithm.
A monitor specialization for cbm::algo::ca::Framework class.
void push_back(Tinput value)
Pushes back a value to the vector.
Definition CaVector.h:176
void reserve(std::size_t count)
Reserves a new size for the vector.
Definition CaVector.h:162
void reset(std::size_t count, Tinput... value)
Clears vector and resizes it to the selected size with selected values.
Definition CaVector.h:121
static Setup< T > Load(const std::string &fileName)
Loads a serialized setup from a file.
A geometry layer in the target region.
Definition KfTarget.h:25
const T & GetY() const
Gets y-coordinate of the nominal target center.
Definition KfTarget.h:64
const T & GetX() const
Gets x-coordinate of the nominal target center.
Definition KfTarget.h:61
const T & GetZ() const
Gets z-coordinate of the nominal target center.
Definition KfTarget.h:67
bool IsActive() const
Checks, if the task is active.
constexpr char GNb[]
bold green
Definition CaDefs.h:155
constexpr char CL[]
clear
Definition CaDefs.h:132
unsigned int HitKeyIndex_t
Index of the hit key (e.g. front / back cluster id for STS)
Definition CaHit.h:28
@ RecoTrack
number of reconstructed tracks
@ RecoStsHit
number of STS hits in tracks
@ UndefinedTofHit
number of undefined TOF hits
@ TrackingCall
number of the routine calls
@ UndefinedTrdHit
number of undefined TRD hits
@ RecoTrdHit
number of TRD hits in tracks
@ UndefinedMvdHit
number of undefined MVD hits
@ RecoTofHit
number of TOF hits in tracks
@ UndefinedMuchHit
number of undefined MuCh hits
@ UndefinedStsHit
number of undefined STS hits
constexpr DetIdArray_t< const char * > kDetName
Detector subsystem names.
EDetectorID
Enumeration for the tracking detector subsystems in CBM-CA.
Definition CbmDefs.h:176
constexpr fles::Subsystem ToFlesSubsystem()
int GetMaxThreads()
Definition OpenMP.h:46
T ReadFromFile(fs::path path)
Definition Yaml.h:51
Class to hold the paths to the parameter files for the different detectors.
Definition ParFiles.h:21
struct cbm::algo::ParFiles::@4 ca
fs::path mainConfig
Definition ParFiles.h:55
std::string fsGeomConfig
Tracking geometry file name (TMP: includes all other settings, but the settings are rewritten)
std::string fsUserConfig
User configuration file (full path)
std::string fsSetupFilename
Geometry setup input file.
std::string fsMainConfig
Main configuration file (rel path in online parameters directory)
bool fbStoreMonitor
Stores monitor snapshot.
std::string fsMoniOutName
Monitor output file name.
Input to the TrackingChain.
PartitionedSpan< trd::Hit > trdHits
PartitionedSpan< sts::Hit > stsHits
PartitionedSpan< tof::Hit > tofHits
Output from the TrackingChain.
ca::Vector< ca::Track > tracks
Reconstructed tracks.
ca::TrackingMonitorData monitorData
Monitor data.
ca::Vector< std::vector< std::pair< uint32_t, uint32_t > > > trdHitIndices
TRD hit indices.
ca::Vector< std::vector< std::pair< uint32_t, uint32_t > > > tofHitIndices
TOF hit indices.
ca::Vector< std::vector< std::pair< uint32_t, uint32_t > > > stsHitIndices
STS hit indices.
Array of types, indexed by EDetectorID.
std::tuple_element_t< static_cast< std::size_t >(DetID), std::tuple< Types... > > at