Belle II Software development
TrackingAbortDQMModule.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 "tracking/modules/trackingDQM/TrackingAbortDQMModule.h"
10
11#include <framework/dataobjects/EventMetaData.h>
12#include <svd/dataobjects/SVDShaperDigit.h>
13#include <svd/dataobjects/SVDCluster.h>
14#include <mdst/dataobjects/EventLevelTrackingInfo.h>
15#include <mdst/dataobjects/TRGSummary.h>
16
17#include <TDirectory.h>
18#include <TLine.h>
19#include <TStyle.h>
20
21#include <algorithm>
22
23
24using namespace Belle2;
25using namespace TrackingUtilities;
26
27//-----------------------------------------------------------------
28// Register the Module
29//-----------------------------------------------------------------
30REG_MODULE(TrackingAbortDQM);
31
32
33//-----------------------------------------------------------------
34// Implementation
35//-----------------------------------------------------------------
36
38{
39 setDescription("DQM Module to monitor Tracking Aborts and detector-related quantities.");
40
41 addParam("histogramDirectoryName", m_histogramDirectoryName, "Name of the directory where histograms will be placed.",
42 std::string("TrackingAbort"));
43
45}
46
47
48TrackingAbortDQMModule::~TrackingAbortDQMModule()
49{
50}
51
52//------------------------------------------------------------------
53// Function to define histograms
54//-----------------------------------------------------------------
55
57{
58
59 // Create a separate histogram directories and cd into it.
60 TDirectory* oldDir = gDirectory;
61 if (m_histogramDirectoryName != "") {
62 oldDir->mkdir(m_histogramDirectoryName.c_str());
63 oldDir->cd(m_histogramDirectoryName.c_str());
64 }
65
66 //histogram index:
67 // 0 if the event is triggered OUTSIDE the active_veto window
68 std::string tag[2] = {"OUT", "IN"};
69 std::string title[2] = {"[Outside Active Veto Window]", "[Inside Active Veto Window]"};
70
71
72 //number of events with and without at least one abort
73 //outside active_veto window:
74 std::string histoName = "EventsWithAborts";
75 std::string histoTitle = "Events With at Least one Abort";
76 m_nEventsWithAbort[0] = new TH1F(TString::Format("%s_%s", histoName.c_str(), tag[0].c_str()),
77 TString::Format("%s %s", histoTitle.c_str(), title[0].c_str()),
78 2, -0.5, 1.5);
79 m_nEventsWithAbort[0]->GetYaxis()->SetTitle("Number of Events");
80 m_nEventsWithAbort[0]->GetXaxis()->SetBinLabel(1, "No Abort");
81 m_nEventsWithAbort[0]->GetXaxis()->SetBinLabel(2, "At Least One Abort");
82 m_nEventsWithAbort[0]->SetMinimum(0.1);
83
84 //inside active_veto window:
85 m_nEventsWithAbort[1] = new TH1F(*m_nEventsWithAbort[0]);
86 m_nEventsWithAbort[1]->SetName(TString::Format("%s_%s", histoName.c_str(), tag[1].c_str()));
87 m_nEventsWithAbort[1]->SetTitle(TString::Format("%s %s", histoTitle.c_str(), title[1].c_str()));
88
89 //abort flag reason
90 //outside active_veto window:
91 histoName = "TrkAbortReason";
92 histoTitle = "Tracking Abort Reason";
93 m_trackingErrorFlagsReasons[0] = new TH1F(TString::Format("%s_%s", histoName.c_str(), tag[0].c_str()),
94 TString::Format("%s %s", histoTitle.c_str(), title[0].c_str()),
95 5, -0.5, 4.5);
96 m_trackingErrorFlagsReasons[0]->GetXaxis()->SetTitle("Type of error occurred");
97 m_trackingErrorFlagsReasons[0]->GetYaxis()->SetTitle("Number of Events");
98 m_trackingErrorFlagsReasons[0]->GetXaxis()->SetBinLabel(1, "Unspecified PR");
99 m_trackingErrorFlagsReasons[0]->GetXaxis()->SetBinLabel(2, "VXDTF2");
100 m_trackingErrorFlagsReasons[0]->GetXaxis()->SetBinLabel(3, "SVDCKF");
101 m_trackingErrorFlagsReasons[0]->GetXaxis()->SetBinLabel(4, "PXDCKF");
102 m_trackingErrorFlagsReasons[0]->GetXaxis()->SetBinLabel(5, "SpacePoint");
103 //inside active_veto window:
105 m_trackingErrorFlagsReasons[1]->SetName(TString::Format("%s_%s", histoName.c_str(), tag[1].c_str()));
106 m_trackingErrorFlagsReasons[1]->SetTitle(TString::Format("%s %s", histoTitle.c_str(), title[1].c_str()));
107
108
109 //SVD L3 occupancy - see SVDDQMDose module for details
110 histoName = "SVDL3UOcc";
111 histoTitle = "SVD L3 u-side ZS5 Occupancy (%)";
112 //outside active_veto window:
113 m_svdL3uZS5Occupancy[0] = new TH1F(TString::Format("%s_%s", histoName.c_str(), tag[0].c_str()),
114 TString::Format("%s %s", histoTitle.c_str(), title[0].c_str()),
115 90, 0, 100.0 / 1536.0 * 90);
116 m_svdL3uZS5Occupancy[0]->GetXaxis()->SetTitle("occupancy [%]");
117 m_svdL3uZS5Occupancy[0]->GetYaxis()->SetTitle("Number of Events");
118 //inside active_veto window:
120 m_svdL3uZS5Occupancy[1]->SetName(TString::Format("%s_%s", histoName.c_str(), tag[1].c_str()));
121 m_svdL3uZS5Occupancy[1]->SetTitle(TString::Format("%s %s", histoTitle.c_str(), title[1].c_str()));
122
123 //SVD L3 occupancy when VXDTF2 Aborts- see SVDDQMDose module for details
124 histoName = "SVDL3UOccVXDTF2aborts";
125 histoTitle = "SVD L3 u-side ZS5 Occupancy (%) when VXDTF2 Aborts";
126 //outside active_veto window:
127 m_svdL3uZS5Occupancy_VXDTF2aborts[0] = new TH1F(TString::Format("%s_%s", histoName.c_str(), tag[0].c_str()),
128 TString::Format("%s %s", histoTitle.c_str(), title[0].c_str()),
129 180, 0, 100.0 / 1536.0 * 180);
130 m_svdL3uZS5Occupancy_VXDTF2aborts[0]->GetXaxis()->SetTitle("occupancy [%]");
131 m_svdL3uZS5Occupancy_VXDTF2aborts[0]->GetYaxis()->SetTitle("Number of Events");
132 //inside active_veto window:
134 m_svdL3uZS5Occupancy_VXDTF2aborts[1]->SetName(TString::Format("%s_%s", histoName.c_str(), tag[1].c_str()));
135 m_svdL3uZS5Occupancy_VXDTF2aborts[1]->SetTitle(TString::Format("%s %s", histoTitle.c_str(), title[1].c_str()));
136
137//SVD L3 occupancy when toSVDCFK Aborts- see SVDDQMDose module for details
138 histoName = "SVDL3UOccToSVDCKFaborts";
139 histoTitle = "SVD L3 u-side ZS5 Occupancy (%) when toSVDCKF Aborts";
140 //outside active_veto window:
141 m_svdL3uZS5Occupancy_toSVDCKFaborts[0] = new TH1F(TString::Format("%s_%s", histoName.c_str(), tag[0].c_str()),
142 TString::Format("%s %s", histoTitle.c_str(), title[0].c_str()),
143 180, 0, 100.0 / 1536.0 * 180);
144 m_svdL3uZS5Occupancy_toSVDCKFaborts[0]->GetXaxis()->SetTitle("occupancy [%]");
145 m_svdL3uZS5Occupancy_toSVDCKFaborts[0]->GetYaxis()->SetTitle("Number of Events");
146 //inside active_veto window:
148 m_svdL3uZS5Occupancy_toSVDCKFaborts[1]->SetName(TString::Format("%s_%s", histoName.c_str(), tag[1].c_str()));
149 m_svdL3uZS5Occupancy_toSVDCKFaborts[1]->SetTitle(TString::Format("%s %s", histoTitle.c_str(), title[1].c_str()));
150
151 //CDC extra hits
152 histoName = "nCDCExtraHits";
153 histoTitle = "Number of CDC Extra Hits";
154 //outside active_veto window:
155 m_nCDCExtraHits[0] = new TH1F(TString::Format("%s_%s", histoName.c_str(), tag[0].c_str()),
156 TString::Format("%s %s", histoTitle.c_str(), title[0].c_str()),
157 200, 0, 5000);
158 m_nCDCExtraHits[0]->GetXaxis()->SetTitle("nCDCExtraHits");
159 m_nCDCExtraHits[0]->GetYaxis()->SetTitle("Number of Events");
160 //inside active_veto window:
161 m_nCDCExtraHits[1] = new TH1F(*m_nCDCExtraHits[0]);
162 m_nCDCExtraHits[1]->SetName(TString::Format("%s_%s", histoName.c_str(), tag[1].c_str()));
163 m_nCDCExtraHits[1]->SetTitle(TString::Format("%s %s", histoTitle.c_str(), title[1].c_str()));
164
165 //SVD L3 v-side cluster time
166 histoName = "svdL3VTime";
167 histoTitle = "Layer3 v-side Cluster Time Distribution";
168 //outside active_veto window:
169 m_svdTime[0] = new TH1F(TString::Format("%s_%s", histoName.c_str(), tag[0].c_str()),
170 TString::Format("%s %s", histoTitle.c_str(), title[0].c_str()),
171 300, -150, 150);
172 m_svdTime[0]->GetXaxis()->SetTitle("cluster time (ns)");
173 m_svdTime[0]->GetYaxis()->SetTitle("Number of Clusters");
174 //inside active_veto window:
175 m_svdTime[1] = new TH1F(*m_svdTime[0]);
176 m_svdTime[1]->SetName(TString::Format("%s_%s", histoName.c_str(), tag[1].c_str()));
177 m_svdTime[1]->SetTitle(TString::Format("%s %s", histoTitle.c_str(), title[1].c_str()));
178
179 //SVD, CDC Averages
180 histoName = "averages";
181 histoTitle = "Averages from SVD and CDC";
182 //outside active_veto window:
183 m_integratedAverages[0] = new TH1D(TString::Format("%s_%s", histoName.c_str(), tag[0].c_str()),
184 TString::Format("%s %s", histoTitle.c_str(), title[0].c_str()),
185 5, 0, 5);
186 m_integratedAverages[0]->GetYaxis()->SetTitle("Number of X [bin-dependent]");
187 m_integratedAverages[0]->GetXaxis()->SetBinLabel(1, "nCDCHitsInner");
188 m_integratedAverages[0]->GetXaxis()->SetBinLabel(2, "nCDCHitsOuter");
189 m_integratedAverages[0]->GetXaxis()->SetBinLabel(3, "nStripsZS5_L3V");
190 m_integratedAverages[0]->GetXaxis()->SetBinLabel(4, "nStripsZS5_L4U");
191 m_integratedAverages[0]->GetXaxis()->SetBinLabel(5, "nStripsZS5_L4V");
192 //inside active_veto window:
194 m_integratedAverages[1]->SetName(TString::Format("%s_%s", histoName.c_str(), tag[1].c_str()));
195 m_integratedAverages[1]->SetTitle(TString::Format("%s %s", histoTitle.c_str(), title[1].c_str()));
196
197 //CDC extra hits per SL
198 histoName = "nCDCExtraHitsSL";
199 histoTitle = "Number of CDC Extra Hits in SL";
200 for (int sl = 0; sl < 9; sl++) {
201 //outside active_veto window:
202 m_nCDCExtraHitsSL[0][sl] = new TH1F(TString::Format("%s%d_%s", histoName.c_str(), sl, tag[0].c_str()),
203 TString::Format("%s%d %s", histoTitle.c_str(), sl, title[0].c_str()),
204 201, -1000 / 200 / 2, 1000 + 1000 / 200 / 2);
205 m_nCDCExtraHitsSL[0][sl]->GetXaxis()->SetTitle("nCDCExtraHits");
206 m_nCDCExtraHitsSL[0][sl]->GetYaxis()->SetTitle("Number of Events");
207 //inside active_veto window:
208 m_nCDCExtraHitsSL[1][sl] = new TH1F(*m_nCDCExtraHitsSL[0][sl]);
209 m_nCDCExtraHitsSL[1][sl]->SetName(TString::Format("%s%d_%s", histoName.c_str(), sl, tag[1].c_str()));
210 m_nCDCExtraHitsSL[1][sl]->SetTitle(TString::Format("%s%d %s", histoTitle.c_str(), sl, title[1].c_str()));
211 }
212
213 //CDC signal hits per SL
214 histoName = "nCDCHitsSL";
215 histoTitle = "Average Number of CDC Hits per Track in SL";
216 for (int sl = 0; sl < 9; sl++) {
217 //outside active_veto window:
218 m_nCDCHitsSL[0][sl] = new TH1F(TString::Format("%s%d_%s", histoName.c_str(), sl, tag[0].c_str()),
219 TString::Format("%s%d %s", histoTitle.c_str(), sl, title[0].c_str()),
220 31, -0.5, 30 + 0.5);
221 m_nCDCHitsSL[0][sl]->GetXaxis()->SetTitle("average nCDCHits per track");
222 m_nCDCHitsSL[0][sl]->GetYaxis()->SetTitle("Number of Events");
223 //inside active_veto window:
224 m_nCDCHitsSL[1][sl] = new TH1F(*m_nCDCHitsSL[0][sl]);
225 m_nCDCHitsSL[1][sl]->SetName(TString::Format("%s%d_%s", histoName.c_str(), sl, tag[1].c_str()));
226 m_nCDCHitsSL[1][sl]->SetTitle(TString::Format("%s%d %s", histoTitle.c_str(), sl, title[1].c_str()));
227 }
228
229 //no CDC signal hits in SL
230 histoName = "noCDCHitsInSL";
231 histoTitle = "No Signal CDC Hits in SL";
232 //outside active_veto window:
233 m_noCDCHitsInSL[0] = new TH1F(TString::Format("%s_%s", histoName.c_str(), tag[0].c_str()),
234 TString::Format("%s %s", histoTitle.c_str(), title[0].c_str()),
235 9, -0.5, 8 + 0.5);
236 m_noCDCHitsInSL[0]->GetXaxis()->SetTitle("SuperLayer");
237 m_noCDCHitsInSL[0]->GetYaxis()->SetTitle("Number of Events");
238 //inside active_veto window:
239 m_noCDCHitsInSL[1] = new TH1F(*m_noCDCHitsInSL[0]);
240 m_noCDCHitsInSL[1]->SetName(TString::Format("%s_%s", histoName.c_str(), tag[1].c_str()));
241 m_noCDCHitsInSL[1]->SetTitle(TString::Format("%s %s", histoTitle.c_str(), title[1].c_str()));
242
243 oldDir->cd();
244
245}
246
248{
249 m_eventLevelTrackingInfo.isOptional();
250 m_eventMetaData.isOptional();
251 m_trgSummary.isOptional();
252 m_strips.isOptional();
253
254 // Register histograms (calls back defineHisto)
255 REG_HISTOGRAM
256}
257
258
260{
261
262 if (m_trackingErrorFlagsReasons[0] != nullptr) m_trackingErrorFlagsReasons[0]->Reset();
263 if (m_trackingErrorFlagsReasons[1] != nullptr) m_trackingErrorFlagsReasons[1]->Reset();
264 if (m_nEventsWithAbort[0] != nullptr) m_nEventsWithAbort[0]->Reset();
265 if (m_nEventsWithAbort[1] != nullptr) m_nEventsWithAbort[1]->Reset();
266 if (m_svdL3uZS5Occupancy[0] != nullptr) m_svdL3uZS5Occupancy[0]->Reset();
267 if (m_svdL3uZS5Occupancy[1] != nullptr) m_svdL3uZS5Occupancy[1]->Reset();
272 if (m_nCDCExtraHits[0] != nullptr) m_nCDCExtraHits[0]->Reset();
273 if (m_nCDCExtraHits[1] != nullptr) m_nCDCExtraHits[1]->Reset();
274 if (m_svdTime[0] != nullptr) m_svdTime[0]->Reset();
275 if (m_svdTime[1] != nullptr) m_svdTime[1]->Reset();
276 if (m_integratedAverages[0] != nullptr) m_integratedAverages[0]->Reset();
277 if (m_integratedAverages[1] != nullptr) m_integratedAverages[1]->Reset();
278 for (int sl = 0; sl < 9; sl++) {
279 if (m_nCDCExtraHitsSL[0][sl] != nullptr) m_nCDCExtraHitsSL[0][sl]->Reset();
280 if (m_nCDCExtraHitsSL[1][sl] != nullptr) m_nCDCExtraHitsSL[1][sl]->Reset();
281 if (m_nCDCHitsSL[0][sl] != nullptr) m_nCDCHitsSL[0][sl]->Reset();
282 if (m_nCDCHitsSL[1][sl] != nullptr) m_nCDCHitsSL[1][sl]->Reset();
283 }
284 if (m_noCDCHitsInSL[0] != nullptr) m_noCDCHitsInSL[0]->Reset();
285 if (m_noCDCHitsInSL[1] != nullptr) m_noCDCHitsInSL[1]->Reset();
286
287}
288
290{
291
292 //skip events in which we do not have EventMetaData or TRGSummary
293 if (!m_eventMetaData.isValid()) return;
294 if (!m_trgSummary.isValid()) return;
295
296 //skip the empty events
298 return;
299
301 return;
302
304 return;
305
307 return;
308
309 //find out if we are in the passive veto (i=0) or in the active veto window (i=1)
310 int index = 0; //events accepted in the passive veto window but not in the active
311 try {
312 if (m_trgSummary->testInput("passive_veto") == 1 && m_trgSummary->testInput("cdcecl_veto") == 0) index = 1;
313 } catch (const std::exception&) {
314 }
315
316 //fill the tracking abort reason histogram & nEvents with Abort
317 if (m_eventLevelTrackingInfo.isValid()) {
318 if (m_eventLevelTrackingInfo->hasAnErrorFlag()) {
319
320 m_nEventsWithAbort[index]->Fill(1);
321
322 if (m_eventLevelTrackingInfo->hasUnspecifiedTrackFindingFailure())
323 m_trackingErrorFlagsReasons[index]->Fill(0);
324 if (m_eventLevelTrackingInfo->hasVXDTF2AbortionFlag())
325 m_trackingErrorFlagsReasons[index]->Fill(1);
326 if (m_eventLevelTrackingInfo->hasSVDCKFAbortionFlag())
327 m_trackingErrorFlagsReasons[index]->Fill(2);
328 if (m_eventLevelTrackingInfo->hasPXDCKFAbortionFlag())
329 m_trackingErrorFlagsReasons[index]->Fill(3);
330 if (m_eventLevelTrackingInfo->hasSVDSpacePointCreatorAbortionFlag())
331 m_trackingErrorFlagsReasons[index]->Fill(4);
332 } else { //EventLevelTrackingInfo valid but no error
333 m_nEventsWithAbort[index]->Fill(0);
334 }
335 } else //EventLevelTrackingInfo not valid
336 m_nEventsWithAbort[index]->Fill(0);
337
338 //compute the number of ZS5 strips of L3 and L4, both sides
339 float nStripsL3UZS5 = 0;
340 float nStripsL3VZS5 = 0;
341 float nStripsL4UZS5 = 0;
342 float nStripsL4VZS5 = 0;
343 for (const SVDShaperDigit& hit : m_strips) {
344 const VxdID& sensorID = hit.getSensorID();
345 if (sensorID.getLayerNumber() > 4) continue;
346 const float noise = m_NoiseCal.getNoise(sensorID, hit.isUStrip(), hit.getCellID());
347 const float cutMinSignal = std::round(5 * noise);
348
349 if (hit.passesZS(1, cutMinSignal)) {
350 if (sensorID.getLayerNumber() == 3) {
351 if (hit.isUStrip()) nStripsL3UZS5++;
352 else nStripsL3VZS5++;
353 } else if (hit.isUStrip()) nStripsL4UZS5++;
354 else nStripsL4VZS5++;
355 }
356 }
357
358 //fill the SVD L3 v-side cluster time
359 for (const SVDCluster& hit : m_clusters) {
360 const VxdID& sensorID = hit.getSensorID();
361 if (sensorID.getLayerNumber() != 3) continue;
362 if (hit.isUCluster()) continue;
363
364 m_svdTime[index]->Fill(hit.getClsTime());
365 }
366
367 // fill the svd L3 v ZS5 occupancy, add the overflow in the last bin to make them visible in the plot
368 double tmp_L3uZS5occupancy = (double)nStripsL3UZS5 / m_nStripsL3U * 100;
369 double L3uZS5occupancy = std::min(tmp_L3uZS5occupancy, (double)100.0 / 1536.0 * 90);
370 m_svdL3uZS5Occupancy[index]->Fill(L3uZS5occupancy);
371 double L3uZS5occupancy_abort = std::min(tmp_L3uZS5occupancy, (double)100.0 / 1536.0 * 180);
372 if (m_eventLevelTrackingInfo->hasVXDTF2AbortionFlag())
373 m_svdL3uZS5Occupancy_VXDTF2aborts[index]->Fill(L3uZS5occupancy_abort);
374 if (m_eventLevelTrackingInfo->hasSVDCKFAbortionFlag())
375 m_svdL3uZS5Occupancy_toSVDCKFaborts[index]->Fill(L3uZS5occupancy_abort);
376
377 //fill the nCDCExtraHits, add the overflow in the last bin to make them visible in the plot
378 if (m_eventLevelTrackingInfo.isValid())
379 m_nCDCExtraHits[index]->Fill(std::min((int)m_eventLevelTrackingInfo->getNCDCHitsNotAssigned(), (int)4999));
380
381 //compute number of CDC hits in the inner and outer layers
382 //and the number of signal-per-track and extra hits per SL
383 int nTracks = m_tracks.getEntries();
384
385 int nCDCHitsInner = 0;
386 int nCDCHitsOuter = 0;
387 int nTotalCDCHits[9] = {0};
388 int nTakenCDCHits[9] = {0};
389 int nBgCDCHits[9] = {0};
390
391 const std::vector<CDCWireHit>& wireHitVector = *m_wireHitVector;
392 int wireHitAmount = wireHitVector.size();
393 for (int hitID = 0; hitID < wireHitAmount; ++hitID) {
394 const auto& wireHit = wireHitVector[hitID];
395 int sl = wireHit.getISuperLayer();
396 if (sl == 0) nCDCHitsInner++;
397 else nCDCHitsOuter++;
398
399 nTotalCDCHits[sl] += 1;
400 if (wireHit->hasTakenFlag()) nTakenCDCHits[sl] += 1;
401 if (wireHit->hasBackgroundFlag()) nBgCDCHits[sl] += 1;
402 }
403
404 for (int sl = 0; sl < 9; sl++) {
405
406 float nSignalCDCHits = nTakenCDCHits[sl] - nBgCDCHits[sl];
407 int nCDCExtraHits = nTotalCDCHits[sl] - nSignalCDCHits;
408 if (nTracks > 0) nSignalCDCHits = nSignalCDCHits / nTracks;
409
410 if (nSignalCDCHits == 0) m_noCDCHitsInSL[index]->Fill(sl);
411 else {
412 if (m_nCDCExtraHitsSL[index][sl] != nullptr) m_nCDCExtraHitsSL[index][sl]->Fill(std::min(nCDCExtraHits, (int)999));
413 if (m_nCDCHitsSL[index][sl] != nullptr) m_nCDCHitsSL[index][sl]->Fill(std::min(nSignalCDCHits, (float)30.5));
414 }
415 }
416
417 // fill the integrated averages TH1F
418 // bin 1: nCDCHits Inner layers
419 updateBinContent(index, 1, nCDCHitsInner);
420 // bin 2: nCDCHits Outer layers
421 updateBinContent(index, 2, nCDCHitsOuter);
422 // bin 3: nStrips L3 V-side
423 updateBinContent(index, 3, nStripsL3VZS5);
424 // bin 4: nStrips L4 U-side
425 updateBinContent(index, 4, nStripsL4UZS5);
426 // bin 5: nStrips L4 V-side
427 updateBinContent(index, 5, nStripsL4VZS5);
428
429
430}
431
432void TrackingAbortDQMModule::updateBinContent(int index, int bin, float valueToBeAdded)
433{
434 float oldValue = m_integratedAverages[index]->GetBinContent(bin);
435 m_integratedAverages[index]->SetBinContent(bin, oldValue + valueToBeAdded);
436}
@ c_B2LinkPacketCRCError
Belle2link CRC error is detected in the event.
@ c_HLTCrash
The HLT reconstruction crashed in this event or the event before.
@ c_ReconstructionAbort
The event was not reconstructed, e.g.
@ c_B2LinkEventCRCError
HSLB_COPPER CRC error is detected in the event.
HistoModule()
Constructor.
Definition HistoModule.h:32
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
The SVD Cluster class This class stores all information about reconstructed SVD clusters.
Definition SVDCluster.h:29
The SVD ShaperDigit class.
void initialize() override final
Module function initialize.
TH1F * m_svdTime[2]
L3 V-side time for all clusters.
TH1F * m_svdL3uZS5Occupancy_toSVDCKFaborts[2]
distribution of the SVD L3 V ZS5 occupancy when toSVDCKF aborts
TH1F * m_nCDCHitsSL[2][9]
distribution of the number of signal CDC hits divided by SL
TH1F * m_svdL3uZS5Occupancy_VXDTF2aborts[2]
distribution of the SVD L3 V ZS5 occupancy when VXDTF2 aborts
StoreObjPtr< EventLevelTrackingInfo > m_eventLevelTrackingInfo
tracking abort info
TH1D * m_integratedAverages[2]
integrated averages of additional SVD, CDC variables
SVDNoiseCalibrations m_NoiseCal
SVDNoise calibration db object.
TH1F * m_trackingErrorFlagsReasons[2]
stores the reason of the abort
void defineHisto() override final
Defines Histograms.
StoreObjPtr< TRGSummary > m_trgSummary
trg summary
TH1F * m_svdL3uZS5Occupancy[2]
distribution of the SVD L3 V ZS5 occupancy
TH1F * m_noCDCHitsInSL[2]
number of tracks without CDC hits in each SL
StoreArray< SVDCluster > m_clusters
SVD clusters.
TH1F * m_nEventsWithAbort[2]
0: no abort; 1: at least one abort
TH1F * m_nCDCExtraHits[2]
distribution of the number of extra CDC hits
static constexpr int m_nStripsL3U
number of U-side L3 strips
StoreObjPtr< EventMetaData > m_eventMetaData
event meta data
TH1F * m_nCDCExtraHitsSL[2][9]
distribution of the number of extra CDC hits divided by SL
void event() override final
Module function event.
StoreArray< SVDShaperDigit > m_strips
SVD strips.
void updateBinContent(int index, int bin, float valueToBeAdded)
function to update the bin content
std::string m_histogramDirectoryName
Name of the histogram directory in ROOT file.
StoreArray< Track > m_tracks
tracks
void beginRun() override final
Module function beginRun.
TrackingUtilities::StoreWrappedObjPtr< std::vector< Belle2::TrackingUtilities::CDCWireHit > > m_wireHitVector
CDC wire hits.
Class to uniquely identify a any structure of the PXD and SVD.
Definition VxdID.h:32
baseType getLayerNumber() const
Get the layer id.
Definition VxdID.h:95
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.