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"
9
10#include <xpu/host.h>
11
12// fwd declarations
13namespace fles
14{
15 class Timeslice;
16}
17
18namespace cbm::algo
19{
20 class HistogramSender;
21 class Options;
22 class TrackingChain;
23
24 template<class M>
25 struct UnpackMonitor;
26
27 namespace bmon
28 {
29 class Unpack;
30 }
31
32 namespace much
33 {
34 class Unpack;
35 }
36
37 namespace rich
38 {
39 class Unpack;
40 }
41
42 namespace sts
43 {
44 class Unpack;
45 class DigiQa;
46 class HitfinderChain;
47 class HitfinderMon;
48 }
49
50 namespace tof
51 {
52 class Unpack;
53 class Calibrate;
54 struct CalibrateMonitorData;
55 class Hitfind;
56 struct HitfindMonitorData;
57 }
58
59 namespace trd
60 {
61 class Unpack;
62 class Hitfind;
63 struct HitfindMonitorData;
64 }
65
66 namespace trd2d
67 {
68 class Unpack;
69 }
70
71 namespace evbuild
72 {
73 class EventbuildChain;
74 struct EventbuildChainMonitorData;
75 } // namespace evbuild
76
77 namespace ca
78 {
79 template<class C, class T>
81 enum class ECounter;
82 enum class ETimer;
84 } // namespace ca
85
86 template<class Unpacker>
87 using UnpackResult_t = std::tuple<algo_traits::Output_t<Unpacker>, algo_traits::Aux_t<Unpacker>>;
88
89 namespace qa
90 {
91 class RecoGeneralQa;
92 }
93} // namespace cbm::algo
94
95namespace cbm::algo
96{
98 xpu::timings time; //< total processing time
99 xpu::timings timeUnpack; //< time spent in unpacking
100 xpu::timings timeSTS; //< time spent in STS reco
101 xpu::timings timeTOF; //< time spent in TOF reco
102 xpu::timings timeTRD; //< time spent in TRD reco
103 xpu::timings timeCA; //< time spent in tracking
104 std::optional<i64> tsDelta; //< id difference between current and previous timeslice
105 };
106
112 xpu::timings timeWriteArchive; //< time spent writing archive
113 size_t bytesWritten; //< bytes written to archive (estimated)
114 double timeIdle = 0.; //< time spent idle (waiting for next timeslice) [ms]
115 };
116
117 class Reco : SubChain {
118 public:
119 Reco();
120 ~Reco();
121
122 Reco(const Reco&) = delete;
123 Reco& operator=(const Reco&) = delete;
124 Reco(Reco&&) = delete;
125 Reco& operator=(Reco&&) = delete;
126
127 void Init(const Options&);
128 RecoResults Run(const fles::Timeslice&);
129 void Finalize();
130 void PrintTimings(xpu::timings&);
131
133
134 private:
135 bool fInitialized = false;
137 xpu::timings fTimesliceTimesAcc;
138 std::shared_ptr<HistogramSender> fSender;
139 uint64_t fRunStartTimeNs = 0;
140
141 std::optional<u64> prevTsId;
142
143 // General QA
144 std::unique_ptr<qa::RecoGeneralQa> fGeneralQa;
145
146 // BMON
147 std::unique_ptr<bmon::Unpack> fBmonUnpack;
148
149 // MUCH
150 std::unique_ptr<much::Unpack> fMuchUnpack;
151
152 // RICH
153 std::unique_ptr<rich::Unpack> fRichUnpack;
154
155 // STS
156 std::unique_ptr<sts::Unpack> fStsUnpack;
157 std::unique_ptr<sts::DigiQa> fStsDigiQa;
158 std::unique_ptr<sts::HitfinderChain> fStsHitFinder;
159
160 // TOF
161 std::unique_ptr<tof::Unpack> fTofUnpack;
162 std::unique_ptr<tof::Calibrate> fTofCalibrator;
163 std::unique_ptr<tof::Hitfind> fTofHitFinder;
164
165 // TRD
166 std::unique_ptr<trd::Unpack> fTrdUnpack;
167 std::unique_ptr<trd2d::Unpack> fTrd2dUnpack;
168 std::unique_ptr<trd::Hitfind> fTrdHitfind;
169
170 // Eventbuilding
171 std::unique_ptr<evbuild::EventbuildChain> fEventBuild;
172
173 // Tracking
174 std::unique_ptr<TrackingChain> fTracking;
175
176 static double FilterNan(double x) { return std::isnan(x) || std::isinf(x) ? 0. : x; }
177
178 void Validate(const Options& opts);
179
180 template<class Unpacker>
181 auto RunUnpacker(const std::unique_ptr<Unpacker>&, const fles::Timeslice&) -> UnpackResult_t<Unpacker>;
182
183 template<class MSMonitor>
192 };
193} // namespace cbm::algo
Type traits for online algorithms.
A structure for reconstructed results: digi-events, hits and tracks.
std::unique_ptr< tof::Hitfind > fTofHitFinder
Definition Reco.h:163
Reco & operator=(const Reco &)=delete
Reco(const Reco &)=delete
ChainContext fContext
Definition Reco.h:136
std::optional< u64 > prevTsId
Definition Reco.h:141
void Init(const Options &)
Definition Reco.cxx:79
std::unique_ptr< trd::Hitfind > fTrdHitfind
Definition Reco.h:168
void QueueTofRecoMetrics(const tof::HitfindMonitorData &)
Definition Reco.cxx:475
std::shared_ptr< HistogramSender > fSender
Definition Reco.h:138
std::unique_ptr< bmon::Unpack > fBmonUnpack
Definition Reco.h:147
Reco & operator=(Reco &&)=delete
std::unique_ptr< sts::Unpack > fStsUnpack
Definition Reco.h:156
std::unique_ptr< rich::Unpack > fRichUnpack
Definition Reco.h:153
void QueueTrdRecoMetrics(const trd::HitfindMonitorData &)
Definition Reco.cxx:486
std::unique_ptr< much::Unpack > fMuchUnpack
Definition Reco.h:150
bool fInitialized
Definition Reco.h:135
auto RunUnpacker(const std::unique_ptr< Unpacker > &, const fles::Timeslice &) -> UnpackResult_t< Unpacker >
Definition Reco.cxx:430
uint64_t fRunStartTimeNs
Definition Reco.h:139
void Finalize()
Definition Reco.cxx:395
xpu::timings fTimesliceTimesAcc
Definition Reco.h:137
std::unique_ptr< sts::DigiQa > fStsDigiQa
Raw STS-digis QA.
Definition Reco.h:157
std::unique_ptr< tof::Unpack > fTofUnpack
Definition Reco.h:161
void QueueProcessingMetrics(const ProcessingMonitor &)
Definition Reco.cxx:577
static double FilterNan(double x)
Definition Reco.h:176
void QueueStsRecoMetrics(const sts::HitfinderMon &)
Definition Reco.cxx:462
std::unique_ptr< tof::Calibrate > fTofCalibrator
Definition Reco.h:162
void QueueTofCalibMetrics(const tof::CalibrateMonitorData &)
Definition Reco.cxx:499
std::unique_ptr< trd2d::Unpack > fTrd2dUnpack
Definition Reco.h:167
std::unique_ptr< qa::RecoGeneralQa > fGeneralQa
QA of online processing itself.
Definition Reco.h:144
std::unique_ptr< sts::HitfinderChain > fStsHitFinder
Definition Reco.h:158
std::unique_ptr< TrackingChain > fTracking
Definition Reco.h:174
Reco(Reco &&)=delete
void Validate(const Options &opts)
Definition Reco.cxx:51
std::unique_ptr< trd::Unpack > fTrdUnpack
Definition Reco.h:166
std::unique_ptr< evbuild::EventbuildChain > fEventBuild
Definition Reco.h:171
RecoResults Run(const fles::Timeslice &)
Definition Reco.cxx:229
void PrintTimings(xpu::timings &)
Definition Reco.cxx:415
void QueueUnpackerMetricsDet(const UnpackMonitor< MSMonitor > &)
Definition Reco.cxx:441
void QueueTrackingMetrics(const ca::TrackingMonitorData &)
Definition Reco.cxx:562
void QueueEvbuildMetrics(const evbuild::EventbuildChainMonitorData &)
Definition Reco.cxx:513
void QueueProcessingExtraMetrics(const ProcessingExtraMonitor &)
Definition Reco.cxx:599
Monitor data block.
Definition Reco.h:80
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.
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:87
Definition Reco.h:14
Monitor for additional processing steps.
Definition Reco.h:111
xpu::timings timeUnpack
Definition Reco.h:99
std::optional< i64 > tsDelta
Definition Reco.h:104
Monitoring data for calibration.
Definition Calibrate.h:28
Monitoring data for hitfinding.
Definition tof/Hitfind.h:30
Monitoring data for hitfinding.
Definition trd/Hitfind.h:36