Belle II Software development
TRGTOPDQMModule.h
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// $Id$
10//---------------------------------------------------------------
11// Filename : TRGTOPDQMModule.h
12// Section : TRG GRL
13// Owner :
14// Email :
15//---------------------------------------------------------------
16// Description : DQM module for TRGTOP
17//---------------------------------------------------------------
18#pragma once
19
20#include <framework/core/HistoModule.h>
21#include <framework/database/DBObjPtr.h>
22#include <framework/datastore/StoreArray.h>
23
24#include <string>
25
26#include <TH1I.h>
27#include <TH2I.h>
28#include <TH3I.h>
29
30namespace Belle2 {
36 class TRGGDLDBUnpacker;
37
39
40 public:
44 virtual ~TRGTOPDQMModule() {}
45
46 public:
47
48 static constexpr double clk127To1ns = 7.8;
49
51 virtual void initialize() override;
53 virtual void beginRun() override;
55 virtual void event() override;
57 virtual void endRun() override;
59 virtual void terminate() override {}
61 virtual void defineHisto() override;
62
63 protected:
65 TDirectory* oldDir = nullptr;
67 TDirectory* dirDQM = nullptr;
68
70 static const int nskim_topdqm = 11;
71
73 static const int nHistClasses = 3;
74 int m_nHistClassesActual = 3;
75
77 int m_histLevel = 3;
78
79 int start_skim_topdqm = 0;
80 int end_skim_topdqm = 0;
81 int m_skim = -1;
82
83 TH2I* h_top_nt0decisions_vs_hist_class[nskim_topdqm] = {nullptr};
84
85 TH1I* h_top_gdl_match_decision_number[nskim_topdqm] = {nullptr};
86
88 TH1I* h_N_decision[nskim_topdqm][nHistClasses] = {{nullptr}};
89
91
92 TH1I* h_topSlotSegment[nskim_topdqm][16] = {{nullptr}};
93 TH1I* h_topSlotNHits[nskim_topdqm][16] = {{nullptr}};
94 TH1I* h_topSlotLogL[nskim_topdqm][16] = {{nullptr}};
95 TH1I* h_topSlotT0[nskim_topdqm][16] = {{nullptr}};
96
97 TH1I* h_topSlotAll[nskim_topdqm] = {nullptr};
98 TH1I* h_topSegmentAll[nskim_topdqm] = {nullptr};
99 TH1I* h_topNHitsAll[nskim_topdqm] = {nullptr};
100 TH1I* h_topLogLAll[nskim_topdqm] = {nullptr};
101 TH1I* h_topT0All[nskim_topdqm] = {nullptr};
102
103 TH2I* h_topSlotVsSegment[nskim_topdqm] = {nullptr};
104
105 TH2I* h_topSlotVsNHits[nskim_topdqm] = {nullptr};
106 TH2I* h_topSlotVsLogL[nskim_topdqm] = {nullptr};
107 TH2I* h_topSlotVsT0[nskim_topdqm] = {nullptr};
108
109 TH2I* h_topSegmentVsNHits[nskim_topdqm] = {nullptr};
110 TH2I* h_topSegmentVsLogL[nskim_topdqm] = {nullptr};
111 TH2I* h_topSegmentVsT0[nskim_topdqm] = {nullptr};
112
113 TH2I* h_topNHitsVsLogL[nskim_topdqm] = {nullptr};
114 TH2I* h_topNHitsVsT0[nskim_topdqm] = {nullptr};
115 TH2I* h_topLogLVsT0[nskim_topdqm] = {nullptr};
116
117 TH1I* h_ecl_gdl_top_timing_diff_both[nskim_topdqm] = {nullptr};
118 TH1I* h_ecl_top_top_timing_diff_both[nskim_topdqm] = {nullptr};
119
120 TH2I* h_decisionNumberVsNumberDecisionsGood[nskim_topdqm] = {nullptr};
121 TH2I* h_decisionNumberVsNumberDecisionsBad[nskim_topdqm] = {nullptr};
122
123 TH1I* h_ecl_gdl_top_timing_diff_good[nskim_topdqm] = {nullptr};
124 TH1I* h_ecl_top_top_timing_diff_good[nskim_topdqm] = {nullptr};
125
126 TH2I* h_top_ecltop_timing_diff_vs_toptop_good[nskim_topdqm] = {nullptr};
127 TH2I* h_gdl_ecltop_timing_diff_vs_toptop_good[nskim_topdqm] = {nullptr};
128 TH2I* h_gdl_ecltop_timing_diff_vs_ecltop_good[nskim_topdqm] = {nullptr};
129
130 TH1I* h_topCombinedTimingTopGood[nskim_topdqm] = {nullptr};
131 TH1I* h_topNSlotsCombinedTimingTopGood[nskim_topdqm] = {nullptr};
132 TH1I* h_topNHitSumGood[nskim_topdqm] = {nullptr};
133 TH1I* h_topLogLSumGood[nskim_topdqm] = {nullptr};
134
135 TH1I* h_topCombinedTimingTopAll[nskim_topdqm] = {nullptr};
136 TH1I* h_topNSlotsCombinedTimingTopAll[nskim_topdqm] = {nullptr};
137 TH1I* h_topNHitSumAll[nskim_topdqm] = {nullptr};
138 TH1I* h_topLogLSumAll[nskim_topdqm] = {nullptr};
139
140 TH2I* h_topNSlotsCombinedTimingVsNHitsTopAll[nskim_topdqm] = {nullptr};
141
142 TH2I* h_topNHitVsNhit[nskim_topdqm][nHistClasses] = {{nullptr}};
143 TH2I* h_topSlotVsSlot[nskim_topdqm][nHistClasses] = {{nullptr}};
144 TH2I* h_topT0VsT0[nskim_topdqm][nHistClasses] = {{nullptr}};
145 TH2I* h_topSegmentVsSegment[nskim_topdqm][nHistClasses] = {{nullptr}};
146 TH2I* h_topLogLVsLogL[nskim_topdqm][nHistClasses] = {{nullptr}};
147
148 TH1I* h_topTrigType[nskim_topdqm] = {nullptr};
149 TH1I* h_topTimingResiduals[nskim_topdqm] = {nullptr};
150 TH1I* h_topTimingVariance[nskim_topdqm] = {nullptr};
151
152 TH1I* h_topRvcDiff1All[nskim_topdqm] = {nullptr};
153 TH1I* h_topRvcDiff2All[nskim_topdqm] = {nullptr};
154 TH1I* h_topRvcDiff3All[nskim_topdqm] = {nullptr};
155 TH1I* h_topRvcDiff4All[nskim_topdqm] = {nullptr};
156
157 TH1I* h_topGdlRvcDiff1All[nskim_topdqm] = {nullptr};
158 TH1I* h_topGdlRvcDiff2All[nskim_topdqm] = {nullptr};
159 TH1I* h_topGdlRvcDiff3All[nskim_topdqm] = {nullptr};
160
161 TH1I* h_topRvcDiff1Good[nskim_topdqm] = {nullptr};
162 TH1I* h_topRvcDiff2Good[nskim_topdqm] = {nullptr};
163 TH1I* h_topRvcDiff3Good[nskim_topdqm] = {nullptr};
164 TH1I* h_topRvcDiff4Good[nskim_topdqm] = {nullptr};
165
166 TH1I* h_topGdlRvcDiff1Good[nskim_topdqm] = {nullptr};
167 TH1I* h_topGdlRvcDiff2Good[nskim_topdqm] = {nullptr};
168 TH1I* h_topGdlRvcDiff3Good[nskim_topdqm] = {nullptr};
169
170 TH1I* h_ecl_gdl_top_timing_diff_bad[nskim_topdqm] = {nullptr};
171 TH1I* h_ecl_top_top_timing_diff_bad[nskim_topdqm] = {nullptr};
172
173 TH2I* h_top_ecltop_timing_diff_vs_toptop_bad[nskim_topdqm] = {nullptr};
174 TH2I* h_gdl_ecltop_timing_diff_vs_toptop_bad[nskim_topdqm] = {nullptr};
175 TH2I* h_gdl_ecltop_timing_diff_vs_ecltop_bad[nskim_topdqm] = {nullptr};
176
177 TH1I* h_topCombinedTimingTopBad[nskim_topdqm] = {nullptr};
178 TH1I* h_topNSlotsCombinedTimingTopBad[nskim_topdqm] = {nullptr};
179 TH1I* h_topNHitSumBad[nskim_topdqm] = {nullptr};
180 TH1I* h_topLogLSumBad[nskim_topdqm] = {nullptr};
181
182 TH1I* h_topRvcDiff1Bad[nskim_topdqm] = {nullptr};
183 TH1I* h_topRvcDiff2Bad[nskim_topdqm] = {nullptr};
184 TH1I* h_topRvcDiff3Bad[nskim_topdqm] = {nullptr};
185 TH1I* h_topRvcDiff4Bad[nskim_topdqm] = {nullptr};
186
187 TH1I* h_topGdlRvcDiff1Bad[nskim_topdqm] = {nullptr};
188 TH1I* h_topGdlRvcDiff2Bad[nskim_topdqm] = {nullptr};
189 TH1I* h_topGdlRvcDiff3Bad[nskim_topdqm] = {nullptr};
190
191 TH1I* h_topCombinedTimingTop[nskim_topdqm][nHistClasses] = {{nullptr}};
192 TH1I* h_topNSlotsCombinedTimingTop[nskim_topdqm][nHistClasses] = {{nullptr}};
193 TH1I* h_topNHitSum[nskim_topdqm][nHistClasses] = {{nullptr}};
194 TH1I* h_topNHitBestSlot[nskim_topdqm][nHistClasses] = {{nullptr}};
195 // TH1I* h_topT0DecisionNumberBestSlot[nskim_topdqm][nHistClasses] = {{nullptr}};
196 TH1I* h_topLogLSum[nskim_topdqm][nHistClasses] = {{nullptr}};
197
198 TH1I* h_gdl_ecltop_timing_diff_5ns[nskim_topdqm] = {nullptr};
199 TH1I* h_gdl_cdctop_timing_diff_5ns[nskim_topdqm] = {nullptr};
200
201 TH1I* h_gdl_ecltop_timing_diff_2ns[nskim_topdqm] = {nullptr};
202 TH1I* h_gdl_ecltop_timing_diff_grl_matched_2ns[nskim_topdqm] = {nullptr};
203 TH1I* h_gdl_ecltop_timing_diff_no_grl_matched_2ns[nskim_topdqm] = {nullptr};
204 TH1I* h_gdl_ecltop_timing_diff_no_grl_at_all_2ns[nskim_topdqm] = {nullptr};
205 TH2I* h_gdl_ecltop_timing_diff_vs_nslots_2ns[nskim_topdqm] = {nullptr};
206 TH1I* h_top_ecltop_timing_diff_combined_2ns[nskim_topdqm] = {nullptr};
207 TH1I* h_top_ecltop_timing_diff_best_slot_2ns[nskim_topdqm] = {nullptr};
208 TH1I* h_gdl_cdctop_timing_diff_2ns[nskim_topdqm] = {nullptr};
209
210 TH1I* h_top_ecltop_timing_diff_2ns[nskim_topdqm][nHistClasses] = {{nullptr}};
211 TH1I* h_top_ecltop_timing_combined_diff_2ns[nskim_topdqm][nHistClasses] = {{nullptr}};
212 TH1I* h_top_ecltop_timing_best_slot_diff_2ns[nskim_topdqm][nHistClasses] = {{nullptr}};
213
214 TH2I* h_top_ecltop_timing_diff_vs_toptop[nskim_topdqm][nHistClasses] = {{nullptr}};
215 TH2I* h_gdl_ecltop_timing_diff_vs_toptop[nskim_topdqm][nHistClasses] = {{nullptr}};
216 TH2I* h_gdl_ecltop_timing_diff_vs_ecltop[nskim_topdqm][nHistClasses] = {{nullptr}};
217 TH2I* h_gdl_ecltop_timing_diff_vs_ecltop_best_slot[nskim_topdqm][nHistClasses] = {{nullptr}};
218
219 TH2I* h_gdl_top_rvc_vs_top_timing[nskim_topdqm] = {nullptr};
220
221 TH1I* h_gdl_ecltop_rvc_diff[nskim_topdqm] = {nullptr};
222 TH1I* h_gdl_cdctop_rvc_diff[nskim_topdqm] = {nullptr};
223
224 TH1I* h_gdl_gdltop_rvc_diff_all[nskim_topdqm] = {nullptr};
225 TH1I* h_gdl_comtop_rvc_diff_all[nskim_topdqm] = {nullptr};
226
227 TH1I* h_gdl_gdltop_rvc_diff_good[nskim_topdqm] = {nullptr};
228 TH1I* h_gdl_comtop_rvc_diff_good[nskim_topdqm] = {nullptr};
229
230 TH1I* h_gdl_gdltop_rvc_diff_bad[nskim_topdqm] = {nullptr};
231 TH1I* h_gdl_comtop_rvc_diff_bad[nskim_topdqm] = {nullptr};
232
233 TH2I* h_gdl_ecltop_timing_diff_vs_slot[nskim_topdqm] = {nullptr};
234 TH2I* h_gdl_ecltop_timing_diff_vs_segment[nskim_topdqm] = {nullptr};
235 TH2I* h_gdl_ecltop_timing_diff_vs_nhits[nskim_topdqm] = {nullptr};
236 TH2I* h_gdl_ecltop_timing_diff_vs_logl[nskim_topdqm] = {nullptr};
237
238 TH2I* h_gdl_ecltop_timing_diff_vs_slot_2ns[nskim_topdqm][nHistClasses] = {{nullptr}};
239 TH2I* h_gdl_ecltop_timing_diff_vs_segment_2ns[nskim_topdqm][nHistClasses] = {{nullptr}};
240 TH2I* h_gdl_ecltop_timing_diff_vs_nhits_2ns[nskim_topdqm][nHistClasses] = {{nullptr}};
241 TH2I* h_gdl_ecltop_timing_diff_vs_logl_2ns[nskim_topdqm][nHistClasses] = {{nullptr}};
242
243 TH2I* h_topTC2IdVsTC1IdAll[nskim_topdqm] = {nullptr};
244 TH2I* h_topTC2EnergyVsTC1EnergyAll[nskim_topdqm] = {nullptr};
245 TH2I* h_topTC2ThetaIdVsTC1ThetaIdAll[nskim_topdqm] = {nullptr};
246 TH2I* h_topTC2PhiIdVsTC1PhiIdAll[nskim_topdqm] = {nullptr};
247 TH3I* h_topTCPhiIdVsTCThetaIdAll[nskim_topdqm] = {nullptr};
248
249 TH2I* h_topTC2IdVsTC1IdGRLAll[nskim_topdqm] = {nullptr};
250 TH2I* h_topTC2EnergyVsTC1EnergyGRLAll[nskim_topdqm] = {nullptr};
251 TH2I* h_topTC2ThetaIdVsTC1ThetaIdGRLAll[nskim_topdqm] = {nullptr};
252 TH2I* h_topTC2PhiIdVsTC1PhiIdGRLAll[nskim_topdqm] = {nullptr};
253 TH3I* h_topTCPhiIdVsTCThetaIdGRLAll[nskim_topdqm] = {nullptr};
254
255 TH2I* h_topTC2IdVsTC1Id[nskim_topdqm] = {nullptr};
256 TH2I* h_topTC2EnergyVsTC1Energy[nskim_topdqm] = {nullptr};
257 TH2I* h_topTC2ThetaIdVsTC1ThetaId[nskim_topdqm] = {nullptr};
258 TH2I* h_topTC2PhiIdVsTC1PhiId[nskim_topdqm] = {nullptr};
259 TH3I* h_topTCPhiIdVsTCThetaId[nskim_topdqm] = {nullptr};
260
261 TH2I* h_topTC2IdVsTC1IdGRL[nskim_topdqm] = {nullptr};
262 TH2I* h_topTC2EnergyVsTC1EnergyGRL[nskim_topdqm] = {nullptr};
263 TH2I* h_topTC2ThetaIdVsTC1ThetaIdGRL[nskim_topdqm] = {nullptr};
264 TH2I* h_topTC2PhiIdVsTC1PhiIdGRL[nskim_topdqm] = {nullptr};
265 TH3I* h_topTCPhiIdVsTCThetaIdGRL[nskim_topdqm] = {nullptr};
266
267 TH2I* h_gdl_ecltop_timing_diff_vs_grl_top_l1[nskim_topdqm] = {nullptr};
268 TH2I* h_gdl_top_l1_vs_grl_top_l1[nskim_topdqm] = {nullptr};
269
270 TH2I* h_grl_ntopslots_vs_ncdcslots[nskim_topdqm] = {nullptr};
271 TH1I* h_grl_ncdctopslots_matched[nskim_topdqm] = {nullptr};
272 TH2I* h_grl_topslots_vs_cdcslots_match[nskim_topdqm] = {nullptr};
273
276
277 int gdlLeafBitMap[320] = {0};
278 char gdlLeafNames[320][100] = {{0}};
279
280 int gdl_e_timtype = 0;
281 int gdl_e_gdll1rvc = 0;
282 int gdl_e_coml1rvc = 0;
283 int gdl_e_toptiming = 0;
284 int gdl_e_ecltiming = 0;
285 int gdl_e_cdctiming = 0;
286 int gdl_e_toprvc = 0;
287 int gdl_e_eclrvc = 0;
288 int gdl_e_cdcrvc = 0;
289
290 // event information
291
292 // unsigned n_clocks = 0;
293 unsigned m_evtno = 0;
294 unsigned m_exp = 0;
295 unsigned m_run = 0;
296
297 std::vector<int> skim;
298
299 // ECL TRG
302
303 struct tcEcl {
304 int tcId;
305 double tcEnergy;
306 double tcTiming;
307 int tcThetaId;
308 int tcPhiId;
309 };
310
311 std::vector<tcEcl> tcEclList;
312
314 inline bool operator()(tcEcl const& a, tcEcl const& b)
315 {
316 double i = a.tcEnergy;
317 double j = b.tcEnergy;
318 return i > j;
319 }
320 };
321
322 //
323
325 int slot;
326 int segment;
327 int nHits;
328 int logL;
329 int t0;
330 };
331
332 std::vector<slotDecision> slotDecisionList;
333
335 inline bool operator()(slotDecision const& a, slotDecision const& b)
336 {
337 double i = a.nHits;
338 double j = b.nHits;
339 return i > j;
340 }
341 };
342
343 // various parameters and their interpretation
344
345 bool m_generatePostscriptFile;
346 std::string m_postScriptFileName;
347
348 bool m_doECLCorrelations;
349 bool m_doGDLCorrelations;
350 bool m_doGRLCorrelations;
351
352 bool m_requireEclBarrel;
353 bool m_requireEclBarrelB2B;
354
355 bool m_requireCDC2DTrack;
356
358 std::string skim_menu[nskim_topdqm] = {
359 "all",
360 "software_trigger_cut&skim&accept_hadron",
361 "software_trigger_cut&skim&accept_tau_tau",
362 "software_trigger_cut&skim&accept_mumu_1trk",
363 "software_trigger_cut&skim&accept_mumu_2trk",
364 "software_trigger_cut&skim&accept_gamma_gamma",
365 "software_trigger_cut&skim&accept_bhabha",
366 "software_trigger_cut&skim&accept_hadronb",
367 "software_trigger_cut&skim&accept_hadronb1",
368 "software_trigger_cut&skim&accept_hadronb2",
369 "software_trigger_cut&skim&accept_mumutight"
370 };
371
373 std::string skim_smap[nskim_topdqm] = {
374 "all",
375 "hadron",
376 "tautau",
377 "mumu1trk",
378 "mumu2trk",
379 "gammagamma",
380 "bhabha",
381 "hadronb",
382 "hadronb1",
383 "hadronb2",
384 "mumutight"
385 };
386
387 };
388
390}
Class for accessing objects in the database.
Definition DBObjPtr.h:21
HistoModule()
Constructor.
Definition HistoModule.h:32
Accessor to arrays stored in the data store.
Definition StoreArray.h:113
The payload class for PXD cluster charge calibrations.
DBObjPtr< TRGGDLDBUnpacker > m_gdlUnpacker
condition database for GDL unpacker
static const int nHistClasses
number of histogram classes
virtual void terminate() override
terminate
virtual void initialize() override
initialize
StoreArray< TRGECLUnpackerStore > trgeclHitArray
Trg ECL Unpacker TC output.
TDirectory * oldDir
TDirectory.
virtual void event() override
Event.
virtual void endRun() override
End Run.
TH1I * h_topSlotSegment[nskim_topdqm][16]
Combined t0 decisions: all, the earliest and second best.
virtual ~TRGTOPDQMModule()
Destructor.
TH1I * h_N_decision[nskim_topdqm][nHistClasses]
Number of TOP L1 decisions.
int m_histLevel
histogramming level
virtual void beginRun() override
begin Run
std::string skim_menu[nskim_topdqm]
names of skims from hlt/softwaretrigger/scripts/softwaretrigger/db_access.py
static const int nskim_topdqm
number of skims
TDirectory * dirDQM
TDirectory.
std::string skim_smap[nskim_topdqm]
names of histograms
virtual void defineHisto() override
Define Histogram.
Abstract base class for different kinds of events.