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
6#include "AlgoTraits.h"
7#include "SubChain.h"
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
28 template<class M>
29 struct UnpackMonitor;
30
31 namespace bmon
32 {
33 class Unpack;
34 class Calibrate;
35 class Hitfind;
36 class HitfindQa;
37 }
38
39 namespace much
40 {
41 class Unpack;
42 }
43
44 namespace rich
45 {
46 class Unpack;
47 }
48
49 namespace sts
50 {
51 class Unpack;
52 class DigiQa;
53 class HitfinderChain;
54 class HitfinderMon;
55 }
56
57 namespace tof
58 {
59 class Unpack;
60 class Calibrate;
62 class Hitfind;
63 class HitfindQa;
64 struct HitfindMonitorData;
65 }
66
67 namespace trd
68 {
69 class Unpack;
70 class Hitfind;
71 struct HitfindMonitorData;
72 }
73
74 namespace trd2d
75 {
76 class Unpack;
77 }
78
79 namespace evbuild
80 {
81 class EventbuildChain;
82 struct EventbuildChainMonitorData;
83 } // namespace evbuild
84
85 namespace ca
86 {
87 template<class C, class T>
89 enum class ECounter;
90 enum class ETimer;
92 } // namespace ca
93
94 template<class Unpacker>
95 using UnpackResult_t = std::tuple<algo_traits::Output_t<Unpacker>, algo_traits::Aux_t<Unpacker>>;
96
97 namespace qa
98 {
99 class RecoGeneralQa;
100 class Manager;
101 }
102} // namespace cbm::algo
103
104namespace cbm::algo
105{
107 xpu::timings time; //< total processing time
108 xpu::timings timeUnpack; //< time spent in unpacking
109 xpu::timings timeSTS; //< time spent in STS reco
110 xpu::timings timeTOF; //< time spent in TOF reco
111 xpu::timings timeTRD; //< time spent in TRD reco
112 xpu::timings timeCA; //< time spent in tracking
113 std::optional<i64> tsDelta; //< id difference between current and previous timeslice
114 };
115
121 xpu::timings timeWriteArchive; //< time spent writing archive
122 size_t bytesWritten; //< bytes written to archive (estimated)
123 double timeIdle = 0.; //< time spent idle (waiting for next timeslice) [ms]
124 };
125
126 class Reco : SubChain {
127 public:
128 Reco();
129 ~Reco();
130
131 Reco(const Reco&) = delete;
132 Reco& operator=(const Reco&) = delete;
133 Reco(Reco&&) = delete;
134 Reco& operator=(Reco&&) = delete;
135
136 void Init(const Options&);
137 RecoResults Run(const fles::Timeslice&);
138
140 void Finalize();
141 void PrintTimings(xpu::timings&);
142
144
145 private:
146 bool fInitialized = false;
149 xpu::timings fTimesliceTimesAcc;
150 std::shared_ptr<HistogramSender> fSender;
151 uint64_t fRunStartTimeNs = 0;
152
153 std::optional<u64> prevTsId;
154
155 // General QA
156 std::unique_ptr<qa::RecoGeneralQa> fGeneralQa;
157
158 // BMON
159 std::unique_ptr<bmon::Unpack> fBmonUnpack;
160 std::unique_ptr<bmon::Calibrate> fBmonCalibrator;
161 std::unique_ptr<bmon::Hitfind> fBmonHitFinder;
162 std::unique_ptr<bmon::HitfindQa> fBmonHitFinderQa;
163
164 // MUCH
165 std::unique_ptr<much::Unpack> fMuchUnpack;
166
167 // RICH
168 std::unique_ptr<rich::Unpack> fRichUnpack;
169
170 // STS
171 std::unique_ptr<sts::Unpack> fStsUnpack;
172 std::unique_ptr<sts::DigiQa> fStsDigiQa;
173 std::unique_ptr<sts::HitfinderChain> fStsHitFinder;
174
175 // TOF
176 std::unique_ptr<tof::Unpack> fTofUnpack;
177 std::unique_ptr<tof::Calibrate> fTofCalibrator;
178 std::unique_ptr<tof::Hitfind> fTofHitFinder;
179 std::unique_ptr<tof::HitfindQa> fTofHitFinderQa;
180
181 // TRD
182 std::unique_ptr<trd::Unpack> fTrdUnpack;
183 std::unique_ptr<trd2d::Unpack> fTrd2dUnpack;
184 std::unique_ptr<trd::Hitfind> fTrdHitfind;
185
186 // Eventbuilding
187 std::unique_ptr<evbuild::EventbuildChain> fEventBuild;
188
189 // Tracking
190 std::unique_ptr<TrackingChain> fTracking;
191 std::unique_ptr<TrackingChain> fTrackingEvent;
192
193 // V0-finding
194 std::unique_ptr<V0FinderChain> fV0Finder;
195
196 // Event selection
198
199 // QA
200 std::unique_ptr<qa::Manager> fQaManager;
201
202 static double FilterNan(double x) { return std::isnan(x) || std::isinf(x) ? 0. : x; }
203
204 void Validate(const Options& opts);
205
206 template<class Unpacker>
207 auto RunUnpacker(const std::unique_ptr<Unpacker>&, const fles::Timeslice&) -> UnpackResult_t<Unpacker>;
208
209 template<class MSMonitor>
218 };
219} // namespace cbm::algo
Type traits for online algorithms.
A monitor for reco event selector.
A structure for reconstructed results: digi-events, hits and tracks.
Class to store different triggers for a given event.
std::unique_ptr< tof::Hitfind > fTofHitFinder
Definition Reco.h:178
std::unique_ptr< tof::HitfindQa > fTofHitFinderQa
Definition Reco.h:179
Reco & operator=(const Reco &)=delete
Reco(const Reco &)=delete
bool fbReconstructDigiEvents
Definition Reco.h:147
ChainContext fContext
Definition Reco.h:148
std::optional< u64 > prevTsId
Definition Reco.h:153
std::unique_ptr< TrackingChain > fTrackingEvent
Tracking in event.
Definition Reco.h:191
void Init(const Options &)
Definition Reco.cxx:85
std::unique_ptr< bmon::HitfindQa > fBmonHitFinderQa
Definition Reco.h:162
std::unique_ptr< trd::Hitfind > fTrdHitfind
Definition Reco.h:184
void QueueTofRecoMetrics(const tof::HitfindMonitorData &)
Definition Reco.cxx:676
std::shared_ptr< HistogramSender > fSender
Definition Reco.h:150
std::unique_ptr< bmon::Unpack > fBmonUnpack
Definition Reco.h:159
Reco & operator=(Reco &&)=delete
std::unique_ptr< sts::Unpack > fStsUnpack
Definition Reco.h:171
std::unique_ptr< rich::Unpack > fRichUnpack
Definition Reco.h:168
std::unique_ptr< V0FinderChain > fV0Finder
V0-finding chain (in event or a bunch of events)
Definition Reco.h:194
void QueueTrdRecoMetrics(const trd::HitfindMonitorData &)
Definition Reco.cxx:687
std::unique_ptr< much::Unpack > fMuchUnpack
Definition Reco.h:165
CbmEventTriggers ReconstructEvent(const DigiEvent &event)
Definition Reco.cxx:541
bool fInitialized
Definition Reco.h:146
auto RunUnpacker(const std::unique_ptr< Unpacker > &, const fles::Timeslice &) -> UnpackResult_t< Unpacker >
Definition Reco.cxx:631
uint64_t fRunStartTimeNs
Definition Reco.h:151
void Finalize()
Definition Reco.cxx:497
xpu::timings fTimesliceTimesAcc
Definition Reco.h:149
evselect::Monitor fEvSelectingMonitor
Monitor for event selecting.
Definition Reco.h:197
std::unique_ptr< sts::DigiQa > fStsDigiQa
Raw STS-digis QA.
Definition Reco.h:172
std::unique_ptr< tof::Unpack > fTofUnpack
Definition Reco.h:176
void QueueProcessingMetrics(const ProcessingMonitor &)
Definition Reco.cxx:778
std::unique_ptr< qa::Manager > fQaManager
Definition Reco.h:200
static double FilterNan(double x)
Definition Reco.h:202
std::unique_ptr< bmon::Calibrate > fBmonCalibrator
Definition Reco.h:160
void QueueStsRecoMetrics(const sts::HitfinderMon &)
Definition Reco.cxx:663
std::unique_ptr< bmon::Hitfind > fBmonHitFinder
Definition Reco.h:161
std::unique_ptr< tof::Calibrate > fTofCalibrator
Definition Reco.h:177
void QueueTofCalibMetrics(const tof::CalibrateMonitorData &)
Definition Reco.cxx:700
std::unique_ptr< trd2d::Unpack > fTrd2dUnpack
Definition Reco.h:183
std::unique_ptr< qa::RecoGeneralQa > fGeneralQa
QA of online processing itself.
Definition Reco.h:156
std::unique_ptr< sts::HitfinderChain > fStsHitFinder
Definition Reco.h:173
std::unique_ptr< TrackingChain > fTracking
Tracking in timeslice.
Definition Reco.h:190
Reco(Reco &&)=delete
void Validate(const Options &opts)
Definition Reco.cxx:57
std::unique_ptr< trd::Unpack > fTrdUnpack
Definition Reco.h:182
std::unique_ptr< evbuild::EventbuildChain > fEventBuild
Definition Reco.h:187
RecoResults Run(const fles::Timeslice &)
Definition Reco.cxx:309
void PrintTimings(xpu::timings &)
Definition Reco.cxx:527
void QueueUnpackerMetricsDet(const UnpackMonitor< MSMonitor > &)
Definition Reco.cxx:642
void QueueTrackingMetrics(const ca::TrackingMonitorData &)
Definition Reco.cxx:763
void QueueEvbuildMetrics(const evbuild::EventbuildChainMonitorData &)
Definition Reco.cxx:714
void QueueProcessingExtraMetrics(const ProcessingExtraMonitor &)
Definition Reco.cxx:800
Monitor data block.
Definition Reco.h:88
A monitor for the event selector.
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
tof::HitfindMonitorData HitfindMonitorData
TOF hit-finder monitor, re-used for BMON.
tof::CalibrateMonitorData CalibrateMonitorData
TODO: SZh 8.11.2022: add selection of parameterisation.
Definition CaBranch.h:14
ECounter
Counter keys for the CA algo monitor.
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:95
Definition Reco.h:17
Event data with event number and trigger time.
Definition DigiData.h:80
Monitor for additional processing steps.
Definition Reco.h:120
xpu::timings timeUnpack
Definition Reco.h:108
std::optional< i64 > tsDelta
Definition Reco.h:113
Monitoring data for calibration.
Monitoring data for hitfinding.
Definition tof/Hitfind.h:30
Monitoring data for hitfinding.
Definition trd/Hitfind.h:36