Belle II Software development
StatisticsTimingHLTDQMModule.cc
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8
9#include <hlt/softwaretrigger/modules/dqm/StatisticsTimingHLTDQMModule.h>
10
11#include <framework/datastore/StoreObjPtr.h>
12#include <framework/core/ProcessStatistics.h>
13#include <framework/core/ModuleStatistics.h>
14#include <framework/gearbox/Unit.h>
15#include <hlt/utilities/Units.h>
16
17#include <TDirectory.h>
18
19#include <TH1F.h>
20#include <TH2F.h>
21
22#include <fstream>
23
24using namespace Belle2;
25using namespace SoftwareTrigger;
26
27REG_MODULE(StatisticsTimingHLTDQM);
28
30{
31 setDescription("Monitor reconstruction runtime on HLT");
33
34 addParam("histogramDirectoryName", m_param_histogramDirectoryName,
35 "Runtime DQM histograms on HLT will be put into this directory", m_param_histogramDirectoryName);
36
37 addParam("m_param_overviewModuleList", m_param_overviewModuleList,
38 "Which modules should be shown in the overview mean list", m_param_overviewModuleList);
39
40 addParam("createHLTUnitHistograms", m_param_create_hlt_unit_histograms,
41 "Create HLT unit histograms?",
42 false);
43}
44
46{
47 // Create a separate histogram directory and cd into it.
48 TDirectory* oldDirectory = nullptr;
49
50 if (!m_param_histogramDirectoryName.empty()) {
51 oldDirectory = gDirectory;
52 TDirectory* histDir = oldDirectory->mkdir(m_param_histogramDirectoryName.c_str());
53 histDir->cd();
54 }
55
56 m_meanTimeHistogram = new TH1F("meanTimeHistogram", "Mean Processing Time [ms]", m_param_overviewModuleList.size(), 0,
58 m_meanTimeHistogram->SetStats(false);
59 m_meanMemoryHistogram = new TH1F("meanMemoryHistogram", "Mean Memory Change [MB]", m_param_overviewModuleList.size(), 0,
61 m_meanMemoryHistogram->SetStats(false);
62 m_fullTimeHistogram = new TH1F("fullTimeHistogram", "Budget Time [ms]", m_fullTimeNBins, 0, m_fullTimeMax);
63 m_fullTimeHistogram->StatOverflows(true);
64 m_processingTimeHistogram = new TH1F("processingTimeHistogram", "Processing Time [ms]", m_processingTimeNBins, 0,
66 m_processingTimeHistogram->StatOverflows(true);
67 m_fullMemoryHistogram = new TH1F("fullMemoryHistogram", "Total memory used [MB]", m_fullMemoryNBins, 0,
69 m_fullMemoryHistogram->StatOverflows(true);
70
71 for (unsigned int index = 0; index < m_param_overviewModuleList.size(); index++) {
72 const std::string& moduleName = m_param_overviewModuleList[index];
73 m_meanTimeHistogram->GetXaxis()->SetBinLabel(index + 1, moduleName.c_str());
74 m_meanMemoryHistogram->GetXaxis()->SetBinLabel(index + 1, moduleName.c_str());
75 m_moduleTimeHistograms.emplace(moduleName, new TH1F((moduleName + "_time").c_str(),
76 ("Time spent in: " + moduleName + " [ms]").c_str(), m_processingTimeNBins, 0, m_processingTimeMax));
77 m_moduleTimeHistograms[moduleName]->StatOverflows(true);
78 m_lastModuleTimeSum.emplace(moduleName, 0);
79 m_moduleMemoryHistograms.emplace(moduleName, new TH1F((moduleName + "_memory").c_str(),
80 ("Memory used in: " + moduleName + " [MB]").c_str(), m_fullMemoryNBins, 0, m_fullMemoryMax));
81 m_moduleMemoryHistograms[moduleName]->StatOverflows(true);
82 }
83
85 m_fullTimeMeanPerUnitHistogram = new TH1F("fullTimeMeanPerUnitHistogram", "Mean Budget Time Per Unit [ms]",
86 HLTUnits::max_hlt_units + 1, 0,
87 HLTUnits::max_hlt_units + 1);
88 m_fullTimeMeanPerUnitHistogram->SetStats(false);
89 m_fullTimeMeanPerUnitHistogram->SetXTitle("HLT unit number");
90 m_processingTimeMeanPerUnitHistogram = new TH1F("processingTimeMeanPerUnitHistogram", "Mean Processing Time Per Unit [ms]",
91 HLTUnits::max_hlt_units + 1, 0,
92 HLTUnits::max_hlt_units + 1);
94 m_processingTimeMeanPerUnitHistogram->SetXTitle("HLT unit number");
95
96 for (unsigned int index = 1; index <= HLTUnits::max_hlt_units; index++) {
97 m_fullTimePerUnitHistograms.emplace(index, new TH1F(("fullTimePerUnitHistogram_HLT" + std::to_string(index)).c_str(),
98 ("Budget Time Per Unit: HLT" + std::to_string(index) + " [ms]").c_str(), m_fullTimeNBins, 0, m_fullTimeMax));
99 m_fullTimePerUnitHistograms[index]->StatOverflows(true);
100 m_lastFullTimeSumPerUnit.emplace(index, 0);
101 m_processingTimePerUnitHistograms.emplace(index, new TH1F(("processingTimePerUnitHistogram_HLT" + std::to_string(index)).c_str(),
102 ("Processing Time Per Unit: HLT" + std::to_string(index) + " [ms]").c_str(), m_processingTimeNBins, 0, m_processingTimeMax));
103 m_processingTimePerUnitHistograms[index]->StatOverflows(true);
104 m_lastProcessingTimeSumPerUnit.emplace(index, 0);
105 m_fullMemoryPerUnitHistograms.emplace(index, new TH1F(("fullMemoryPerUnitHistogram_HLT" + std::to_string(index)).c_str(),
106 ("Total Memory Used Per Unit: HLT" + std::to_string(index) + " [MB]").c_str(), m_fullMemoryNBins, 0, m_fullMemoryMax));
107 m_fullMemoryPerUnitHistograms[index]->StatOverflows(true);
108 }
109
110 m_processesPerUnitHistogram = new TH1F("processesPerUnitHistogram", "Number of Processes Per Unit",
111 HLTUnits::max_hlt_units + 1, 0,
112 HLTUnits::max_hlt_units + 1);
113 m_processesPerUnitHistogram->SetXTitle("HLT unit number");
114 }
115 m_processingTimePassiveVeto = new TH1F("processingTimePassiveVeto", "Processing Time of events passing passive veto [ms]",
118 m_processingTimePassiveVeto->StatOverflows(true);
119 m_processingTimeNotPassiveVeto = new TH1F("processingTimeNotPassiveVeto", "Processing Time of events not passing passive veto [ms]",
122 m_processingTimeNotPassiveVeto->StatOverflows(true);
123
124 m_processingTimeNotPassiveVetoTimingCut = new TH1F("processingTimeNotPassiveVetoTimingCut",
125 "Processing Time of events in active veto retained by timing cut of HLTprefilter [ms]",
128 m_processingTimeNotPassiveVetoTimingCut->StatOverflows(true);
129
130 m_processingTimeNotPassiveVetoCDCECLCut = new TH1F("processingTimeNotPassiveVetoCDCECLCut",
131 "Processing Time of events in active veto retained by CDC-ECL cut of HLTprefilter [ms]",
134 m_processingTimeNotPassiveVetoCDCECLCut->StatOverflows(true);
135
136 m_procTimeVsnSVDShaperDigitsPassiveVeto = new TH2F("procTimeVsnSVDShaperDigitsPassiveVeto",
137 "Processing time [ms] vs nSVDShaperDigits of events passing passive veto",
140 m_procTimeVsnSVDShaperDigitsPassiveVeto->StatOverflows(true);
141 m_procTimeVsnSVDShaperDigitsPassiveVeto->SetXTitle("nSVDShaperDigits");
142 m_procTimeVsnSVDShaperDigitsPassiveVeto->SetYTitle("Processing time [ms]");
143 m_procTimeVsnSVDShaperDigitsNotPassiveVeto = new TH2F("procTimeVsnSVDShaperDigitsNotPassiveVeto",
144 "Processing time [ms] vs nSVDShaperDigits of events not passing passive veto",
148 m_procTimeVsnSVDShaperDigitsNotPassiveVeto->SetXTitle("nSVDShaperDigits");
149 m_procTimeVsnSVDShaperDigitsNotPassiveVeto->SetYTitle("Processing time [ms]");
150 m_procTimeVsnCDCHitsPassiveVeto = new TH2F("procTimeVsnCDCHitsPassiveVeto",
151 "Processing time [ms] vs nCDCHits of events passing passive veto",
154 m_procTimeVsnCDCHitsPassiveVeto->StatOverflows(true);
155 m_procTimeVsnCDCHitsPassiveVeto->SetXTitle("nCDCHits");
156 m_procTimeVsnCDCHitsPassiveVeto->SetYTitle("Processing time [ms]");
157 m_procTimeVsnCDCHitsNotPassiveVeto = new TH2F("procTimeVsnCDCHitsNotPassiveVeto",
158 "Processing time [ms] vs nCDCHits of events not passing passive veto",
161 m_procTimeVsnCDCHitsNotPassiveVeto->StatOverflows(true);
162 m_procTimeVsnCDCHitsNotPassiveVeto->SetXTitle("nCDCHits");
163 m_procTimeVsnCDCHitsNotPassiveVeto->SetYTitle("Processing time [ms]");
164 m_procTimeVsnECLDigitsPassiveVeto = new TH2F("procTimeVsnECLDigitsPassiveVeto",
165 "Processing time [ms] vs nECLDigits of events passing passive veto",
168 m_procTimeVsnECLDigitsPassiveVeto->StatOverflows(true);
169 m_procTimeVsnECLDigitsPassiveVeto->SetXTitle("nECLDigits");
170 m_procTimeVsnECLDigitsPassiveVeto->SetYTitle("Processing time [ms]");
171 m_procTimeVsnECLDigitsNotPassiveVeto = new TH2F("procTimeVsnECLDigitsNotPassiveVeto",
172 "Processing time [ms] vs nECLDigits of events not passing passive veto",
175 m_procTimeVsnECLDigitsNotPassiveVeto->StatOverflows(true);
176 m_procTimeVsnECLDigitsNotPassiveVeto->SetXTitle("nECLDigits");
177 m_procTimeVsnECLDigitsNotPassiveVeto->SetYTitle("Processing time [ms]");
178
179 m_TimeSinceLastInjectionVsTimeInBeamCycle = new TH2F("TimeSinceLastInjectionVsTimeInBeamCycle",
180 "Time since last injection [ms] vs Time in beam cycle [ms] vs",
181 100, 0, 30000,
182 100, 0, 10);
184 m_TimeSinceLastInjectionVsTimeInBeamCycle->SetXTitle("Time since last injection [ms]");
185 m_TimeSinceLastInjectionVsTimeInBeamCycle->SetYTitle("Time in beam cycle [ms]");
186
187 if (oldDirectory) {
188 oldDirectory->cd();
189 }
190}
191
192
194{
195 m_trgSummary.isOptional();
196 m_svdShaperDigits.isOptional();
197 m_cdcHits.isOptional();
198 m_eclDigits.isOptional();
199 m_TTDInfo.isOptional();
200
201 // Register histograms (calls back defineHisto)
202 REG_HISTOGRAM
203
205 // Read the HLT unit's hostname straight from the HLT worker
206 FILE* pipe = popen("hostname -d", "r");
207 if (pipe) {
208 char buffer[128];
209 std::string host = "";
210
211 while (fgets(buffer, sizeof(buffer), pipe) != nullptr) {
212 host += buffer;
213 }
214
215 pclose(pipe);
216
217 // Trim space and new line
218 host.erase(std::remove_if(host.begin(), host.end(), ::isspace), host.end());
219
220 if (host.rfind("hlt", 0) == 0 && host.length() == 5) {
221 m_hlt_unit = std::atoi(host.substr(3, 2).c_str());
222 } else {
223 B2WARNING("HLT unit number not found");
224 }
225 } else {
226 B2WARNING("HLT unit number not found");
227 }
228 }
229}
230
232{
234
235 if (not stats.isValid()) {
236 return;
237 }
238
239 const std::vector<ModuleStatistics>& moduleStatisticsList = stats->getAll();
240
241 std::vector<double> meanTimes(m_param_overviewModuleList.size(), 0);
242 std::vector<double> meanMemories(m_param_overviewModuleList.size(), 0);
243
244 for (const ModuleStatistics& moduleStatistics : moduleStatisticsList) {
245 const std::string& statisticsName = moduleStatistics.getName();
246 const auto m_param_overviewModuleListIterator = std::find(m_param_overviewModuleList.begin(), m_param_overviewModuleList.end(),
247 statisticsName);
248 if (m_param_overviewModuleListIterator == m_param_overviewModuleList.end()) {
249 continue;
250 }
251
252 const double statisticsTime = moduleStatistics.getTimeMean(ModuleStatistics::EStatisticCounters::c_Event) / Unit::ms;
253 const double statisticsMemory = moduleStatistics.getMemoryMean(ModuleStatistics::EStatisticCounters::c_Total) / 1024;
254 const double statisticsTime_sum = moduleStatistics.getTimeSum(ModuleStatistics::EStatisticCounters::c_Event) / Unit::ms;
255 const double statisticsMemory_sum = moduleStatistics.getMemorySum(ModuleStatistics::EStatisticCounters::c_Total) / 1024;
256
257 const int m_param_overviewModuleListIndex = std::distance(m_param_overviewModuleList.begin(), m_param_overviewModuleListIterator);
258 meanTimes[m_param_overviewModuleListIndex] += statisticsTime;
259 meanMemories[m_param_overviewModuleListIndex] += statisticsMemory;
260
261 m_moduleTimeHistograms[statisticsName]->Fill(statisticsTime_sum - m_lastModuleTimeSum[statisticsName]);
262 m_lastModuleTimeSum[statisticsName] = statisticsTime_sum;
263 m_moduleMemoryHistograms[statisticsName]->Fill(statisticsMemory_sum);
264 }
265
266 for (unsigned int index = 0; index < m_param_overviewModuleList.size(); index++) {
267 m_meanTimeHistogram->SetBinContent(index + 1, meanTimes[index]);
268 m_meanMemoryHistogram->SetBinContent(index + 1, meanMemories[index]);
269 }
270
271 double processingTimeSum = 0.0;
272 double processingTimeMean = 0.0;
273
274 for (const ModuleStatistics& moduleStatistics : moduleStatisticsList) {
275 const std::string& statisticsName = moduleStatistics.getName();
276 const auto m_summaryModuleListIterator = std::find(m_summaryModuleList.begin(), m_summaryModuleList.end(),
277 statisticsName);
278 if (m_summaryModuleListIterator == m_summaryModuleList.end()) {
279 continue;
280 }
281 processingTimeSum += moduleStatistics.getTimeSum(ModuleStatistics::EStatisticCounters::c_Event) / Unit::ms;
282 processingTimeMean += moduleStatistics.getTimeMean(ModuleStatistics::EStatisticCounters::c_Event) / Unit::ms;
283 }
284 m_processingTimeHistogram->Fill(processingTimeSum - m_lastProcessingTimeSum);
285
286 const ModuleStatistics& fullStatistics = stats->getGlobal();
287 const double fullTimeSum = fullStatistics.getTimeSum(ModuleStatistics::EStatisticCounters::c_Event) / Unit::ms;
288 m_fullTimeHistogram->Fill(fullTimeSum - m_lastFullTimeSum);
289 m_lastFullTimeSum = fullTimeSum;
290 const double fullMemorySum = fullStatistics.getMemorySum(ModuleStatistics::EStatisticCounters::c_Total) / 1024;
291 m_fullMemoryHistogram->Fill(fullMemorySum);
292
294 if (0 < m_hlt_unit) {
295 m_processingTimeMeanPerUnitHistogram->SetBinContent(m_hlt_unit + 1, processingTimeMean);
296
298 m_lastProcessingTimeSumPerUnit[m_hlt_unit] = processingTimeSum;
299
300 const double fullTimeMean = fullStatistics.getTimeMean(ModuleStatistics::EStatisticCounters::c_Event) / Unit::ms;
301 m_fullTimeMeanPerUnitHistogram->SetBinContent(m_hlt_unit + 1, fullTimeMean);
302
305
306 m_fullMemoryPerUnitHistograms[m_hlt_unit]->Fill(fullMemorySum);
307 }
308 }
309
310 const uint32_t nCDCHits = m_cdcHits.isOptional() ? m_cdcHits.getEntries() : 0;
311 const uint32_t nSVDShaperDigits = m_svdShaperDigits.isOptional() ? m_svdShaperDigits.getEntries() : 0;
312 const uint32_t nECLDigits = m_eclDigits.isOptional() ? m_eclDigits.getEntries() : 0;
313 if (!m_trgSummary.isValid()) {
314 return;
315 }
316 try {
317 if (m_trgSummary->testInput("passive_veto") == 0) { // These events would stay even with just passive veto
318 m_processingTimePassiveVeto->Fill(processingTimeSum - m_lastProcessingTimeSum);
319
320 m_procTimeVsnSVDShaperDigitsPassiveVeto->Fill(nSVDShaperDigits, processingTimeSum - m_lastProcessingTimeSum);
321 m_procTimeVsnCDCHitsPassiveVeto->Fill(nCDCHits, processingTimeSum - m_lastProcessingTimeSum);
322 m_procTimeVsnECLDigitsPassiveVeto->Fill(nECLDigits, processingTimeSum - m_lastProcessingTimeSum);
323 } else {
325
326 if (m_triggerResult.isValid()) {
327 const auto results = m_triggerResult->getResults();
328
329 std::string HLTprefilter_Injection_Strip = "software_trigger_cut&filter&prefilter_InjectionStrip";
330 std::string HLTprefilter_CDCECL_Cut = "software_trigger_cut&filter&prefilter_CDCECLthreshold";
331 bool injStrip = false;
332 bool cdceclcut = false;
333
334 if (results.find(HLTprefilter_Injection_Strip) != results.end()) {
335 injStrip = (m_triggerResult->getNonPrescaledResult(HLTprefilter_Injection_Strip) == SoftwareTriggerCutResult::c_accept);
336 }
337 if (results.find(HLTprefilter_CDCECL_Cut) != results.end()) {
338 cdceclcut = (m_triggerResult->getNonPrescaledResult(HLTprefilter_CDCECL_Cut) == SoftwareTriggerCutResult::c_accept);
339 }
340
341 if (!injStrip) {
343 }
344
345 if (!cdceclcut) {
347 }
348 }
349
350 m_procTimeVsnSVDShaperDigitsNotPassiveVeto->Fill(nSVDShaperDigits, processingTimeSum - m_lastProcessingTimeSum);
351 m_procTimeVsnCDCHitsNotPassiveVeto->Fill(nCDCHits, processingTimeSum - m_lastProcessingTimeSum);
352 m_procTimeVsnECLDigitsNotPassiveVeto->Fill(nECLDigits, processingTimeSum - m_lastProcessingTimeSum);
353 }
354 } catch (const std::exception&) {
355 return;
356 }
357
358 m_lastProcessingTimeSum = processingTimeSum;
359
360 if (m_TTDInfo.isValid()) {
361
362 double c_revolutionTime = m_bunchStructure->getRFBucketsPerRevolution() / (m_clockSettings->getAcceleratorRF() *
363 1e3); // [microsceonds]
364 double c_globalClock = m_clockSettings->getGlobalClockFrequency() * 1e3; // [microseconds]
365
366 double timeSinceLastInj = m_TTDInfo->getTimeSinceLastInjection() / c_globalClock;
367 double timeInBeamCycle = timeSinceLastInj - (int)(timeSinceLastInj / c_revolutionTime) * c_revolutionTime;
368
369 m_TimeSinceLastInjectionVsTimeInBeamCycle->Fill(timeSinceLastInj, timeInBeamCycle);
370 }
371
372}
373
375{
377 B2FATAL("Histograms were not created. Did you setup a HistoManager?");
378 }
379
380 m_meanTimeHistogram->Reset();
381 m_meanMemoryHistogram->Reset();
382 std::for_each(m_moduleTimeHistograms.begin(), m_moduleTimeHistograms.end(),
383 [](auto & it) { it.second->Reset(); });
384 std::for_each(m_moduleMemoryHistograms.begin(), m_moduleMemoryHistograms.end(),
385 [](auto & it) { it.second->Reset(); });
386 m_fullTimeHistogram->Reset();
388 m_fullMemoryHistogram->Reset();
392 std::for_each(m_fullTimePerUnitHistograms.begin(), m_fullTimePerUnitHistograms.end(),
393 [](auto & it) { it.second->Reset(); });
395 [](auto & it) { it.second->Reset(); });
397 [](auto & it) { it.second->Reset(); });
399
401 }
413
414}
415
@ c_Persistent
Object is available during entire execution time.
Definition DataStore.h:60
HistoModule()
Constructor.
Definition HistoModule.h:32
Keep track of time and memory consumption during processing.
@ c_Event
Counting time/calls in event()
@ c_Total
Sum of the above.
value_type getMemorySum(EStatisticCounters type=c_Total) const
return the total used memory for a given counter
value_type getTimeSum(EStatisticCounters type=c_Total) const
return the sum of all execution times for a given counter
value_type getTimeMean(EStatisticCounters type=c_Total) const
return the mean execution time for a given counter
void setDescription(const std::string &description)
Sets the description of the module.
Definition Module.cc:214
void setPropertyFlags(unsigned int propertyFlags)
Sets the flags for the module properties.
Definition Module.cc:208
@ c_ParallelProcessingCertified
This module can be run in parallel processing mode safely (All I/O must be done through the data stor...
Definition Module.h:80
std::map< std::string, TH1F * > m_moduleTimeHistograms
Time distribution of certain modules.
const double m_nSVDShaperDigitsNBins
Number of bins for the histograms of nSVDShaperDigits.
TH1F * m_fullMemoryHistogram
Total memory usage distribution of all events.
const double m_processingTimeNBins
Number of bins for the histograms of processingTime.
StoreObjPtr< EventLevelTriggerTimeInfo > m_TTDInfo
Store array object for injection time info.
TH1F * m_processingTimeNotPassiveVetoTimingCut
Processing time distribution of events not passing passive injection veto and retained after HLTprefi...
std::map< unsigned int, double > m_lastProcessingTimeSumPerUnit
Storage for the last processing time sum per unit.
const double m_processingTimeMax
Maximum for the histograms of processingTime.
std::map< unsigned int, TH1F * > m_processingTimePerUnitHistograms
Processing time distribution of events per unit.
DBObjPtr< HardwareClockSettings > m_clockSettings
Define object for HardwareClockSettings class.
double m_lastProcessingTimeSum
Storage for the last processing time sum.
const double m_nECLDigitsMax
Maximum for the histograms of nECLDigits.
StoreObjPtr< SoftwareTriggerResult > m_triggerResult
TRG result.
TH2F * m_procTimeVsnCDCHitsNotPassiveVeto
Processing time vs nCDCHits distribution of events not passing passive injection veto.
TH2F * m_procTimeVsnSVDShaperDigitsPassiveVeto
Processing time vs nSVDShaperDigits distribution of events passing passive injection veto.
TH1F * m_processingTimeNotPassiveVeto
Processing time distribution of events not passing passive injection veto.
TH2F * m_procTimeVsnCDCHitsPassiveVeto
Processing time vs nCDCHits distribution of events passing passive injection veto.
const double m_fullMemoryMax
Maximum for the histograms of fullMemory.
std::vector< std::string > m_param_overviewModuleList
Parameter: which modules should be shown in the overview list.
TH1F * m_fullTimeMeanPerUnitHistogram
Mean budget time of events per unit.
TH2F * m_procTimeVsnECLDigitsNotPassiveVeto
Processing time vs nECLDigits distribution of events not passing passive injection veto.
const double m_fullTimeNBins
Number of bins for the histograms of fullTime.
TH2F * m_procTimeVsnSVDShaperDigitsNotPassiveVeto
Processing time vs nSVDShaperDigits distribution of events not passing passive injection veto.
TH1F * m_processingTimeHistogram
Processing time distribution of all events.
TH1F * m_processingTimeNotPassiveVetoCDCECLCut
Processing time distribution of events not passing passive injection veto and retained after HLTprefi...
std::map< std::string, double > m_lastModuleTimeSum
Storage for the last time sum of certain modules.
TH1F * m_processingTimeMeanPerUnitHistogram
Mean processing time of events per unit.
DBObjPtr< BunchStructure > m_bunchStructure
Define object for BunchStructure class.
bool m_param_create_hlt_unit_histograms
Parameter: Create HLT unit number histograms?
std::map< unsigned int, double > m_lastFullTimeSumPerUnit
Storage for the last full time sum per unit.
const double m_nSVDShaperDigitsMax
Maximum for the histograms of nSVDShaperDigits.
const double m_nCDCHitsNBins
Number of bins for the histograms of nCDCHits.
std::map< unsigned int, TH1F * > m_fullTimePerUnitHistograms
Budget time distribution of events per unit.
TH1F * m_processingTimePassiveVeto
Processing time distribution of events passing passive injection veto.
const double m_fullTimeMax
Maximum for the histograms of fullTime.
std::string m_param_histogramDirectoryName
Parameter: Directory to put the generated histograms.
std::vector< std::string > m_summaryModuleList
Summary modules of the actual processing.
const double m_nCDCHitsMax
Maximum for the histograms of nCDCHits.
std::map< std::string, TH1F * > m_moduleMemoryHistograms
Memory distribution of certain modules.
const double m_fullMemoryNBins
Number of bins for the histograms of fullMemory.
const double m_nECLDigitsNBins
Number of bins for the histograms of nECLDigits.
TH2F * m_procTimeVsnECLDigitsPassiveVeto
Processing time vs nECLDigits distribution of events passing passive injection veto.
TH2F * m_TimeSinceLastInjectionVsTimeInBeamCycle
Histogram to monitor injection strip.
TH1F * m_fullTimeHistogram
Budget time distribution of all events.
std::map< unsigned int, TH1F * > m_fullMemoryPerUnitHistograms
Total memory distribution of events per unit.
Type-safe access to single objects in the data store.
Definition StoreObjPtr.h:96
static const double ms
[millisecond]
Definition Unit.h:96
void addParam(const std::string &name, T &paramVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
Definition Module.h:559
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Definition Module.h:649
Abstract base class for different kinds of events.