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