CbmRoot
Loading...
Searching...
No Matches
Reco.h
Go to the documentation of this file.
1/* Copyright (C) 2023 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Felix Weiglhofer [committer] */
4#pragma once
5
10
11#include <xpu/host.h>
12
13// fwd declarations
15
16namespace fles
17{
18 class Timeslice;
19}
20
21namespace cbm::algo
22{
23 class HistogramSender;
24 class Options;
25 class TrackingChain;
26 class V0FinderChain;
27 struct ParFiles;
28
29 template<class M>
30 struct UnpackMonitor;
31
32 namespace bmon
33 {
34 class Unpack;
35 class Calibrate;
36 class Hitfind;
37 class HitfindQa;
38 }
39
40 namespace much
41 {
42 class Unpack;
43 }
44
45 namespace mvd
46 {
47 class Unpack;
48 }
49
50 namespace rich
51 {
52 class Unpack;
53 }
54
55 namespace sts
56 {
57 class Unpack;
58 class DigiQa;
59 class HitfinderChain;
60 class HitfinderMon;
61 }
62
63 namespace tof
64 {
65 class Unpack;
66 class Calibrate;
68 class Hitfind;
69 class HitfindQa;
70 struct HitfindMonitorData;
71 }
72
73 namespace trd
74 {
75 class Unpack;
76 class Hitfind;
77 struct HitfindMonitorData;
78 }
79
80 namespace trd2d
81 {
82 class Unpack;
83 }
84
85 namespace fsd
86 {
87 class Unpack;
88 }
89
90 namespace evbuild
91 {
92 class EventbuildChain;
94 } // namespace evbuild
95
96 namespace ca
97 {
98 template<class C, class T>
99 class MonitorData;
100 enum class ECounter;
101 enum class ETimer;
103 } // namespace ca
104
105 template<class Unpacker>
106 using UnpackResult_t = std::tuple<algo_traits::Output_t<Unpacker>, algo_traits::Aux_t<Unpacker>>;
107
108 namespace qa
109 {
110 struct GeneralQaData;
111 class RecoGeneralQa;
112 class Manager;
113 }
114} // namespace cbm::algo
115
116namespace cbm::algo
117{
119 xpu::timings time; //< total processing time
120 xpu::timings timeUnpack; //< time spent in unpacking
121 xpu::timings timeSTS; //< time spent in STS reco
122 xpu::timings timeTOF; //< time spent in TOF reco
123 xpu::timings timeTRD; //< time spent in TRD reco
124 xpu::timings timeCA; //< time spent in tracking
125 std::optional<i64> tsDelta; //< id difference between current and previous timeslice
126 };
127
133 xpu::timings timeWriteArchive; //< time spent writing archive
134 size_t bytesWritten; //< bytes written to archive (estimated)
135 double timeIdle = 0.; //< time spent idle (waiting for next timeslice) [ms]
136 };
137
138 class Reco : SubChain {
139 public:
140 Reco();
141 ~Reco();
142
143 Reco(const Reco&) = delete;
144 Reco& operator=(const Reco&) = delete;
145 Reco(Reco&&) = delete;
146 Reco& operator=(Reco&&) = delete;
147
148 void Init(const Options&);
149 RecoResults Run(const fles::Timeslice&);
150
152 void Finalize();
153 void PrintTimings(xpu::timings&);
154
156
157 private:
158 bool fInitialized = false;
161 xpu::timings fTimesliceTimesAcc;
162 std::shared_ptr<HistogramSender> fSender;
163 uint64_t fRunStartTimeNs = 0;
164
165 std::optional<u64> prevTsId;
166
167 // General QA
168 std::unique_ptr<qa::RecoGeneralQa> fGeneralQa;
169 std::unique_ptr<qa::GeneralQaData> fGeneralQaData;
170
171 // BMON
172 std::unique_ptr<bmon::Unpack> fBmonUnpack;
173 std::unique_ptr<bmon::Calibrate> fBmonCalibrator;
174 std::unique_ptr<bmon::Hitfind> fBmonHitFinder;
175 std::unique_ptr<bmon::HitfindQa> fBmonHitFinderQa;
176
177 // MUCH
178 std::unique_ptr<much::Unpack> fMuchUnpack;
179
180 // MVD
181 std::unique_ptr<mvd::Unpack> fMvdUnpack;
182
183 // RICH
184 std::unique_ptr<rich::Unpack> fRichUnpack;
185
186 // STS
187 std::unique_ptr<sts::Unpack> fStsUnpack;
188 std::unique_ptr<sts::DigiQa> fStsDigiQa;
189 std::unique_ptr<sts::HitfinderChain> fStsHitFinder;
190
191 // TOF
192 std::unique_ptr<tof::Unpack> fTofUnpack;
193 std::unique_ptr<tof::Calibrate> fTofCalibrator;
194 std::unique_ptr<tof::Hitfind> fTofHitFinder;
195 std::unique_ptr<tof::HitfindQa> fTofHitFinderQa;
196
197 // TRD
198 std::unique_ptr<trd::Unpack> fTrdUnpack;
199 std::unique_ptr<trd2d::Unpack> fTrd2dUnpack;
200 std::unique_ptr<trd::Hitfind> fTrdHitfind;
201
202 // FSD
203 std::unique_ptr<fsd::Unpack> fFsdUnpack;
204
205 // Eventbuilding
206 std::unique_ptr<evbuild::EventbuildChain> fEventBuild;
207
208 // Tracking
209 std::unique_ptr<TrackingChain> fTracking;
210 std::unique_ptr<TrackingChain> fTrackingEvent;
211
212 // V0-finding
213 std::unique_ptr<V0FinderChain> fV0Finder;
214
215 // Event selection
217
218 // QA
219 std::unique_ptr<qa::Manager> fQaManager;
220
221 static double FilterNan(double x) { return std::isnan(x) || std::isinf(x) ? 0. : x; }
222
224 void Validate(const Options& opts) const;
225
227 void Validate(const ParFiles& parFiles) const;
228
229 template<class Unpacker>
230 auto RunUnpacker(const std::unique_ptr<Unpacker>&, const fles::Timeslice&) -> UnpackResult_t<Unpacker>;
231
232 template<class MSMonitor>
241 };
242} // namespace cbm::algo
Type traits for online algorithms.
A monitor for reco event selector.
A structure for reconstructed results: digi-events, hits and tracks.
Algorithm to calibrate BMon digis.
Class to store different triggers for a given event.
A QA module for the BMON hit-finder.
Hit-finder steering class for BMON.
A central class to manage the histogram storage and sending to the histogram server.
Definition QaManager.h:20
A chain for tracking algorithm.
A chain for the V0 finder.
std::unique_ptr< tof::Hitfind > fTofHitFinder
Definition Reco.h:194
std::unique_ptr< tof::HitfindQa > fTofHitFinderQa
Definition Reco.h:195
Reco & operator=(const Reco &)=delete
Reco(const Reco &)=delete
bool fbReconstructDigiEvents
Definition Reco.h:159
ChainContext fContext
Definition Reco.h:160
std::optional< u64 > prevTsId
Definition Reco.h:165
std::unique_ptr< TrackingChain > fTrackingEvent
Tracking in event.
Definition Reco.h:210
void Init(const Options &)
Definition Reco.cxx:229
std::unique_ptr< bmon::HitfindQa > fBmonHitFinderQa
Definition Reco.h:175
void Validate(const Options &opts) const
Validation of program options.
Definition Reco.cxx:66
std::unique_ptr< trd::Hitfind > fTrdHitfind
Definition Reco.h:200
void QueueTofRecoMetrics(const tof::HitfindMonitorData &)
Definition Reco.cxx:966
std::unique_ptr< mvd::Unpack > fMvdUnpack
Definition Reco.h:181
std::shared_ptr< HistogramSender > fSender
Definition Reco.h:162
std::unique_ptr< bmon::Unpack > fBmonUnpack
Definition Reco.h:172
Reco & operator=(Reco &&)=delete
std::unique_ptr< sts::Unpack > fStsUnpack
Definition Reco.h:187
std::unique_ptr< rich::Unpack > fRichUnpack
Definition Reco.h:184
std::unique_ptr< V0FinderChain > fV0Finder
V0-finding chain (in event or a bunch of events)
Definition Reco.h:213
void QueueTrdRecoMetrics(const trd::HitfindMonitorData &)
Definition Reco.cxx:979
std::unique_ptr< much::Unpack > fMuchUnpack
Definition Reco.h:178
CbmEventTriggers ReconstructEvent(const DigiEvent &event)
Definition Reco.cxx:820
bool fInitialized
Definition Reco.h:158
auto RunUnpacker(const std::unique_ptr< Unpacker > &, const fles::Timeslice &) -> UnpackResult_t< Unpacker >
Definition Reco.cxx:912
uint64_t fRunStartTimeNs
Definition Reco.h:163
void Finalize()
Definition Reco.cxx:768
xpu::timings fTimesliceTimesAcc
Definition Reco.h:161
evselect::Monitor fEvSelectingMonitor
Monitor for event selecting.
Definition Reco.h:216
std::unique_ptr< sts::DigiQa > fStsDigiQa
Raw STS-digis QA.
Definition Reco.h:188
std::unique_ptr< tof::Unpack > fTofUnpack
Definition Reco.h:192
void QueueProcessingMetrics(const ProcessingMonitor &)
Definition Reco.cxx:1087
std::unique_ptr< qa::GeneralQaData > fGeneralQaData
Object aggregating the data points used in the GeneralQa.
Definition Reco.h:169
std::unique_ptr< qa::Manager > fQaManager
Definition Reco.h:219
static double FilterNan(double x)
Definition Reco.h:221
std::unique_ptr< bmon::Calibrate > fBmonCalibrator
Definition Reco.h:173
void QueueStsRecoMetrics(const sts::HitfinderMon &)
Definition Reco.cxx:951
std::unique_ptr< bmon::Hitfind > fBmonHitFinder
Definition Reco.h:174
std::unique_ptr< tof::Calibrate > fTofCalibrator
Definition Reco.h:193
void QueueTofCalibMetrics(const tof::CalibrateMonitorData &)
Definition Reco.cxx:994
std::unique_ptr< trd2d::Unpack > fTrd2dUnpack
Definition Reco.h:199
std::unique_ptr< qa::RecoGeneralQa > fGeneralQa
QA of online processing itself.
Definition Reco.h:168
std::unique_ptr< sts::HitfinderChain > fStsHitFinder
Definition Reco.h:189
std::unique_ptr< TrackingChain > fTracking
Tracking in timeslice.
Definition Reco.h:209
Reco(Reco &&)=delete
std::unique_ptr< trd::Unpack > fTrdUnpack
Definition Reco.h:198
std::unique_ptr< evbuild::EventbuildChain > fEventBuild
Definition Reco.h:206
std::unique_ptr< fsd::Unpack > fFsdUnpack
Definition Reco.h:203
RecoResults Run(const fles::Timeslice &)
Definition Reco.cxx:552
void PrintTimings(xpu::timings &)
Definition Reco.cxx:804
void QueueUnpackerMetricsDet(const UnpackMonitor< MSMonitor > &)
Definition Reco.cxx:925
void QueueTrackingMetrics(const ca::TrackingMonitorData &)
Definition Reco.cxx:1070
void QueueEvbuildMetrics(const evbuild::EventbuildChainMonitorData &)
Definition Reco.cxx:1010
void QueueProcessingExtraMetrics(const ProcessingExtraMonitor &)
Definition Reco.cxx:1120
Monitor data block.
Steering class for event building from digi timeslices.
A monitor for the event selector.
QA module for STS raw digis.
Definition StsDigiQa.h:26
Algo class for calibration.
A QA module for the BMON hit-finder.
Algo class for hitfinding.
Definition tof/Hitfind.h:52
Algo class for hitfinding.
Definition trd/Hitfind.h:57
Unpack algorithm for TRD.
Definition trd/Unpack.h:19
typename std::tuple_element< 2, ResultOf_t< Algo > >::type Aux_t
Type alias for the auxiliary data type produced by an algorithm.
Definition AlgoTraits.h:65
TODO: SZh 8.11.2022: add selection of parameterisation.
Definition CaBranch.h:14
ECounter
Counter keys for the CA algo monitor.
MonitorData< ECounter, ETimer > TrackingMonitorData
ETimer
Timer keys for the CA algo monitor.
std::tuple< algo_traits::Output_t< Unpacker >, algo_traits::Aux_t< Unpacker > > UnpackResult_t
Definition Reco.h:106
Definition Reco.h:17
Event data with event number and trigger time.
Definition DigiData.h:82
Class to hold the paths to the parameter files for the different detectors.
Definition ParFiles.h:21
Monitor for additional processing steps.
Definition Reco.h:132
xpu::timings timeUnpack
Definition Reco.h:120
std::optional< i64 > tsDelta
Definition Reco.h:125
Monitoring data for calibration.
Monitoring data for hitfinding.
Definition tof/Hitfind.h:30
Monitoring data for hitfinding.
Definition trd/Hitfind.h:36