CbmRoot
Loading...
Searching...
No Matches
RecoGeneralQa.cxx
Go to the documentation of this file.
1/* Copyright (C) 2024 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: P.-A. Loizeau [committer] */
4
6
7#include <cmath>
8
11
12namespace cbm::algo::qa
13{
14 RecoGeneralQa::RecoGeneralQa(const uint64_t& runStartTimeNs, std::shared_ptr<HistogramSender> pSender)
15 : fRunStartTimeNs(runStartTimeNs)
16 , fpSender(pSender)
17 {
18 }
19
20 // --- Execution --------------------------------------------------------
21 void RecoGeneralQa::operator()(const fles::Timeslice& ts, const GeneralQaData& qaData)
22 {
23 if (!fpSender.get()) {
24 return;
25 }
26
27 if (fInitNotDone) {
28 double_t dBegAxisX = 0.0;
29 double_t dSizeTsSec = 0.128;
31 if (ts.num_components() != 0 && ts.num_microslices(0) > 1) {
32 dSizeTsSec = ((ts.descriptor(0, 1).idx - ts.descriptor(0, 0).idx) * ts.num_core_microslices()) * 1.0e-9;
33 }
34 auto cName = "processed_ts";
35 auto cTitl = "Statistics of TS processed online";
36 auto canv = CanvasConfig(cName, cTitl, 2, 1);
37 {
38 auto pad = PadConfig();
39 auto name = "timeslices_count_evo";
40 auto titl = "Number of processed TS vs time in run; time in run [s]; Nb TS []";
41 int32_t nbBins = std::ceil(7200.0 / (dSizeTsSec * kNbTsPerBinCount)); // a bit more than 2h range
42 double_t dEndAxisX = nbBins * dSizeTsSec * kNbTsPerBinCount;
43 fphTimeslicesCountEvo = fQaData.MakeObj<H1D>(name, titl, nbBins, dBegAxisX, dEndAxisX);
44 pad.RegisterHistogram(fphTimeslicesCountEvo, "hist");
45 canv.AddPadConfig(pad);
46 }
47 {
48 auto pad = PadConfig();
49 auto name = "timeslices_fraction_evo";
50 auto titl = "Fraction of TS processed vs time in run; time in run [s]; Processed TS []";
51 int32_t nbBins = std::ceil(7200.0 / (dSizeTsSec * kNbTsPerBinFrac)); // a bit more than 2h range
52 double_t dEndAxisX = nbBins * dSizeTsSec * kNbTsPerBinFrac;
53 fphTimeslicesFractionEvo = fQaData.MakeObj<H1D>(name, titl, nbBins, dBegAxisX, dEndAxisX);
54 pad.RegisterHistogram(fphTimeslicesFractionEvo, "hist");
55 canv.AddPadConfig(pad);
56 }
57 fQaData.AddCanvasConfig(canv);
58
59 auto cNameB = "processing_time";
60 auto cTitlB = "Statistics of TS processing time";
61 auto canvB = CanvasConfig(cNameB, cTitlB, 1, 1);
62 {
63 auto pad = PadConfig();
64 auto name = "processing_time_evo";
65 auto titl = "Total processing time per TS vs time in run; time in run [s]; Proc. time [ms]";
66 int32_t nbBinsX = std::ceil(1800.0 / (dSizeTsSec * kNbTsPerBinTime)); // a bit more than 1h range
67 double_t dEndAxisX = nbBinsX * dSizeTsSec * kNbTsPerBinTime;
68 int32_t nbBinsY = std::ceil(60000.0 / kNbMsPerBinTime); // 1 minute max range
69 double_t dEndAxisY = nbBinsY * kNbMsPerBinTime;
71 fQaData.MakeObj<H2D>(name, titl, nbBinsX, dBegAxisX, dEndAxisX, nbBinsY, 0.0, dEndAxisY);
72 pad.RegisterHistogram(fphTotalProcessingTimeEvo, "colz");
73 canvB.AddPadConfig(pad);
74 }
75 fQaData.AddCanvasConfig(canvB);
76
77 auto cNameC = "processing_time_fractions";
78 auto cTitlC = "Details of TS processing time";
79 auto canvC = CanvasConfig(cNameC, cTitlC, 3, 3);
80 {
81 auto pad = PadConfig();
82 auto name = "unp_proc_time_frac_evo";
83 auto titl = "Fraction of Total proc. time for unpacking per TS vs time in run; time in run [s]; Fract. []";
84 int32_t nbBinsX = std::ceil(3600.0 / (dSizeTsSec * kNbTsPerBinTime)); // a bit more than 1h range
85 double_t dEndAxisX = nbBinsX * dSizeTsSec * kNbTsPerBinTime;
86 fphUnpProcTimeFractEvo = fQaData.MakeObj<Prof1D>(name, titl, nbBinsX, dBegAxisX, dEndAxisX);
87 pad.RegisterHistogram(fphUnpProcTimeFractEvo, "hist");
88 canvC.AddPadConfig(pad);
89 }
90 {
91 auto pad = PadConfig();
92 auto name = "sts_proc_time_frac_evo";
93 auto titl = "Fraction of Total proc. time for STS reco per TS vs time in run; time in run [s]; Fract. []";
94 int32_t nbBinsX = std::ceil(3600.0 / (dSizeTsSec * kNbTsPerBinTime)); // a bit more than 1h range
95 double_t dEndAxisX = nbBinsX * dSizeTsSec * kNbTsPerBinTime;
96 fphStsProcTimeFractEvo = fQaData.MakeObj<Prof1D>(name, titl, nbBinsX, dBegAxisX, dEndAxisX);
97 pad.RegisterHistogram(fphStsProcTimeFractEvo, "hist");
98 canvC.AddPadConfig(pad);
99 }
100 {
101 auto pad = PadConfig();
102 auto name = "tof_proc_time_frac_evo";
103 auto titl = "Fraction of Total proc. time for TOF reco per TS vs time in run; time in run [s]; Fract. []";
104 int32_t nbBinsX = std::ceil(3600.0 / (dSizeTsSec * kNbTsPerBinTime)); // a bit more than 1h range
105 double_t dEndAxisX = nbBinsX * dSizeTsSec * kNbTsPerBinTime;
106 fphTofProcTimeFractEvo = fQaData.MakeObj<Prof1D>(name, titl, nbBinsX, dBegAxisX, dEndAxisX);
107 pad.RegisterHistogram(fphTofProcTimeFractEvo, "hist");
108 canvC.AddPadConfig(pad);
109 }
110 {
111 auto pad = PadConfig();
112 auto name = "trd_proc_time_frac_evo";
113 auto titl = "Fraction of Total proc. time for TRD reco per TS vs time in run; time in run [s]; Fract. []";
114 int32_t nbBinsX = std::ceil(3600.0 / (dSizeTsSec * kNbTsPerBinTime)); // a bit more than 1h range
115 double_t dEndAxisX = nbBinsX * dSizeTsSec * kNbTsPerBinTime;
116 fphTrdProcTimeFractEvo = fQaData.MakeObj<Prof1D>(name, titl, nbBinsX, dBegAxisX, dEndAxisX);
117 pad.RegisterHistogram(fphTrdProcTimeFractEvo, "hist");
118 canvC.AddPadConfig(pad);
119 }
120 {
121 auto pad = PadConfig();
122 auto name = "ca_proc_time_frac_evo";
123 auto titl = "Fraction of Total proc. time for CA per TS vs time in run; time in run [s]; Fract. []";
124 int32_t nbBinsX = std::ceil(3600.0 / (dSizeTsSec * kNbTsPerBinTime)); // a bit more than 1h range
125 double_t dEndAxisX = nbBinsX * dSizeTsSec * kNbTsPerBinTime;
126 fphCaProcTimeFractEvo = fQaData.MakeObj<Prof1D>(name, titl, nbBinsX, dBegAxisX, dEndAxisX);
127 pad.RegisterHistogram(fphCaProcTimeFractEvo, "hist");
128 canvC.AddPadConfig(pad);
129 }
130 {
131 auto pad = PadConfig();
132 auto name = "digmul_proc_time_frac_evo";
133 auto titl =
134 "Fraction of Total proc. time for Digi Mult. trigger per TS vs time in run; time in run [s]; Fract. []";
135 int32_t nbBinsX = std::ceil(3600.0 / (dSizeTsSec * kNbTsPerBinTime)); // a bit more than 1h range
136 double_t dEndAxisX = nbBinsX * dSizeTsSec * kNbTsPerBinTime;
137 fphDigiMulTrigProcTimeFractEvo = fQaData.MakeObj<Prof1D>(name, titl, nbBinsX, dBegAxisX, dEndAxisX);
138 pad.RegisterHistogram(fphDigiMulTrigProcTimeFractEvo, "hist");
139 canvC.AddPadConfig(pad);
140 }
141 {
142 auto pad = PadConfig();
143 auto name = "hitmul_proc_time_frac_evo";
144 auto titl =
145 "Fraction of Total proc. time for Hit Mult. trigger per TS vs time in run; time in run [s]; Fract. []";
146 int32_t nbBinsX = std::ceil(3600.0 / (dSizeTsSec * kNbTsPerBinTime)); // a bit more than 1h range
147 double_t dEndAxisX = nbBinsX * dSizeTsSec * kNbTsPerBinTime;
148 fphHitMulTrigProcTimeFractEvo = fQaData.MakeObj<Prof1D>(name, titl, nbBinsX, dBegAxisX, dEndAxisX);
149 pad.RegisterHistogram(fphHitMulTrigProcTimeFractEvo, "hist");
150 canvC.AddPadConfig(pad);
151 }
152 {
153 auto pad = PadConfig();
154 auto name = "v0_proc_time_frac_evo";
155 auto titl = "Fraction of Total proc. time for V0 trigger per TS vs time in run; time in run [s]; Fract. []";
156 int32_t nbBinsX = std::ceil(3600.0 / (dSizeTsSec * kNbTsPerBinTime)); // a bit more than 1h range
157 double_t dEndAxisX = nbBinsX * dSizeTsSec * kNbTsPerBinTime;
158 fphV0TrigProcTimeFractEvo = fQaData.MakeObj<Prof1D>(name, titl, nbBinsX, dBegAxisX, dEndAxisX);
159 pad.RegisterHistogram(fphV0TrigProcTimeFractEvo, "hist");
160 canvC.AddPadConfig(pad);
161 }
162 {
163 auto pad = PadConfig();
164 auto name = "evtbuild_proc_time_frac_evo";
165 auto titl = "Fraction of Total proc. time for event building per TS vs time in run; time in run [s]; Fract. []";
166 int32_t nbBinsX = std::ceil(3600.0 / (dSizeTsSec * kNbTsPerBinTime)); // a bit more than 1h range
167 double_t dEndAxisX = nbBinsX * dSizeTsSec * kNbTsPerBinTime;
168 fphEvtBuildProcTimeFractEvo = fQaData.MakeObj<Prof1D>(name, titl, nbBinsX, dBegAxisX, dEndAxisX);
169 pad.RegisterHistogram(fphEvtBuildProcTimeFractEvo, "hist");
170 canvC.AddPadConfig(pad);
171 }
172 fQaData.AddCanvasConfig(canvC);
173
174
175 auto canvDigisNb = CanvasConfig("digis_nb_evo", "Digis Nb per detector", 3, 3);
176 for (auto system : fDetsList) {
177 auto pad = PadConfig();
178 auto name = "digis_nb_evo_" + system;
179 auto titl = "Digis Nb for " + system + " vs time in run; time in run [s]; Digis []";
180 int32_t nbBinsX = std::ceil(3600.0 / (dSizeTsSec * kNbTsPerBinTime)); // a bit more than 1h range
181 double_t dEndAxisX = nbBinsX * dSizeTsSec * kNbTsPerBinTime;
182 fphDigisNbPerDet[system] = fQaData.MakeObj<H1D>(name, titl, nbBinsX, dBegAxisX, dEndAxisX);
183 pad.RegisterHistogram(fphDigisNbPerDet[system], "hist");
184 canvDigisNb.AddPadConfig(pad);
185 }
186 fQaData.AddCanvasConfig(canvDigisNb);
187
188 fQaData.Init(fpSender);
189 fInitNotDone = false;
190 }
191
192 fphTimeslicesCountEvo->Fill((ts.start_time() - fRunStartTimeNs) * 1e-9);
193 fphTimeslicesFractionEvo->Fill((ts.start_time() - fRunStartTimeNs) * 1e-9, 1.0 / kNbTsPerBinFrac);
194
195 fphTotalProcessingTimeEvo->Fill((ts.start_time() - fRunStartTimeNs) * 1e-9, qaData.total_time_ms);
196 fphUnpProcTimeFractEvo->Fill((ts.start_time() - fRunStartTimeNs) * 1e-9,
197 qaData.unpack_time_ms / qaData.total_time_ms);
198 fphStsProcTimeFractEvo->Fill((ts.start_time() - fRunStartTimeNs) * 1e-9,
199 qaData.sts_reco_time_ms / qaData.total_time_ms);
200 fphTofProcTimeFractEvo->Fill((ts.start_time() - fRunStartTimeNs) * 1e-9,
201 qaData.tof_reco_time_ms / qaData.total_time_ms);
202 fphTrdProcTimeFractEvo->Fill((ts.start_time() - fRunStartTimeNs) * 1e-9,
203 qaData.trd_reco_time_ms / qaData.total_time_ms);
204 fphCaProcTimeFractEvo->Fill((ts.start_time() - fRunStartTimeNs) * 1e-9, qaData.ca_time_ms / qaData.total_time_ms);
205
206 fphDigiMulTrigProcTimeFractEvo->Fill((ts.start_time() - fRunStartTimeNs) * 1e-9,
207 qaData.digimultrig_time_ms / qaData.total_time_ms);
208 fphHitMulTrigProcTimeFractEvo->Fill((ts.start_time() - fRunStartTimeNs) * 1e-9,
209 qaData.hitmultrig_time_ms / qaData.total_time_ms);
210 fphV0TrigProcTimeFractEvo->Fill((ts.start_time() - fRunStartTimeNs) * 1e-9,
211 qaData.v0trig_time_ms / qaData.total_time_ms);
212 fphEvtBuildProcTimeFractEvo->Fill((ts.start_time() - fRunStartTimeNs) * 1e-9,
213 qaData.evtbuild_time_ms / qaData.total_time_ms);
214
215 for (auto system : fDetsList) {
216 auto it = qaData.digis_nb.find(system);
217 if (qaData.digis_nb.end() != it) {
218 fphDigisNbPerDet[system]->Fill((ts.start_time() - fRunStartTimeNs) * 1e-9, it->second);
219 }
220 }
221
222 fQaData.Send(fpSender); // Send and reset!
223 }
224
225} // namespace cbm::algo::qa
A canvas configuration for the histogram server.
Class to handle QA-objects in the online reconstruction.
Definition QaData.h:27
1D-histogram
Definition Histogram.h:442
2D-histogram
Definition Histogram.h:511
A pad configuration for the histogram server.
Definition PadConfig.h:26
RecoGeneralQa()=delete
Default constructor.
qa::H1D * fphTimeslicesFractionEvo
hist: fraction of all ts vs time in run in s, binned for 1000 TS
void operator()(const fles::Timeslice &ts, const GeneralQaData &qaData)
Execution: fill histograms and emit them (FIXME: control emission frequency)
qa::Prof1D * fphCaProcTimeFractEvo
hist: fraction of time for CA vs time in run in s
std::shared_ptr< HistogramSender > fpSender
Histogram sender.
std::map< std::string, qa::H1D * > fphDigisNbPerDet
qa::Prof1D * fphUnpProcTimeFractEvo
hist: fraction of time for unpack vs time in run in s
static const int32_t kNbMsPerBinTime
qa::Prof1D * fphEvtBuildProcTimeFractEvo
hist: time fract. for unpack vs time in run in s
qa::H1D * fphTimeslicesCountEvo
hist: timeslices vs time in run in s, binned for 100 TS
static const int32_t kNbTsPerBinFrac
qa::Prof1D * fphDigiMulTrigProcTimeFractEvo
hist: time fract. for Digi mul trig. vs time in run in s
qa::H2D * fphTotalProcessingTimeEvo
hist: toal proc time vs time in run in s, binned for 8 TS
qa::Data fQaData
QA data, with folder named Reco as hist destination.
qa::Prof1D * fphTrdProcTimeFractEvo
hist: fraction of time for trd reco vs time in run in s
qa::Prof1D * fphTofProcTimeFractEvo
hist: fraction of time for tof reco vs time in run in s
static const int32_t kNbTsPerBinTime
qa::Prof1D * fphHitMulTrigProcTimeFractEvo
hist: time fract. for Hit mul trig. vs time in run in s
qa::Prof1D * fphStsProcTimeFractEvo
hist: fraction of time for sts reco vs time in run in s
static const int32_t kNbTsPerBinCount
qa::Prof1D * fphV0TrigProcTimeFractEvo
hist: time fract. for V0 trigger vs time in run in s
std::vector< std::string > fDetsList
std::map< std::string, size_t > digis_nb