Belle II Software  release-08-01-09
DQMHistAnalysisTRG.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 // File : DQMHistAnalysisTRGModule.cc
10 // Description : Module for TRG
11 //-
12 
13 
14 #include <dqm/analysis/modules/DQMHistAnalysisTRG.h>
15 #include <TROOT.h>
16 #include <iostream>
17 
18 using namespace std;
19 using namespace Belle2;
20 
21 //-----------------------------------------------------------------
22 // Register the Module
23 //-----------------------------------------------------------------
24 REG_MODULE(DQMHistAnalysisTRG);
25 
26 //-----------------------------------------------------------------
27 // Implementation
28 //-----------------------------------------------------------------
29 
30 DQMHistAnalysisTRGModule::DQMHistAnalysisTRGModule()
32 {
33  // This module CAN NOT be run in parallel!
34 
35  // Parameter definition
36  addParam("PVPrefix", m_pvPrefix, "PV Prefix", std::string("TRG:"));
37  B2DEBUG(1, "DQMHistAnalysisTRGModule: Constructor done.");
38 
39 }
40 
42 {
43  // destructor not needed
44  // EPICS singleton deletion not urgent -> can be done by framework
45 }
46 
48 {
49  B2DEBUG(1, "DQMHistAnalysisTRGModule: initialized.");
50 
51  gROOT->cd();
52  m_canvas = new TCanvas("TRG/c_Test");
53  //comL1-GDLL1
54  addDeltaPar("TRGGDL", "hGDL_gdlL1TocomL1_all", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
55  registerEpicsPV(m_pvPrefix + "comL1_GDLL1_mean", "comL1_GDLL1_mean");
56 
57  //ECLTRG timing
58  addDeltaPar("EventT0DQMdir", "m_histEventT0_TOP_hadron_L1_ECLTRG", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
59  registerEpicsPV(m_pvPrefix + "ECLTRG_timing_mean", "ECLTRG_timing_mean");
60 
61  //CDCTRG event timing
62  addDeltaPar("EventT0DQMdir", "m_histEventT0_TOP_hadron_L1_CDCTRG", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
63  registerEpicsPV(m_pvPrefix + "CDCTRG_timing_mean", "CDCTRG_timing_mean");
64 
65  //TOPTRG event timing
66  addDeltaPar("EventT0DQMdir", "m_histEventT0_TOP_hadron_L1_TOPTRG", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
67  registerEpicsPV(m_pvPrefix + "TOPTRG_timing_mean", "TOPTRG_timing_mean");
68 
69  //ECLTRG_peak
70  addDeltaPar("TRGGRL", "h_ECLL1", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
71  registerEpicsPV(m_pvPrefix + "ECLTRG_peak", "ECLTRG_peak");
72 
73 
74  //CDCTRG_2D_peak
75  addDeltaPar("TRGGRL", "h_CDCL1", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
76  registerEpicsPV(m_pvPrefix + "CDCTRG_2D_peak", "CDCTRG_2D_peak");
77 
78 
79  //NN_peak
80  addDeltaPar("TRGGRL", "h_CDCNNL1", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
81  registerEpicsPV(m_pvPrefix + "NN_peak", "NN_peak");
82 
83  //CDCTRG_TSF_peak
84  addDeltaPar("TRGGRL", "h_TSFL1", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
85  registerEpicsPV(m_pvPrefix + "CDCTRG_TSF_peak", "CDCTRG_TSF_peak");
86 
87  //KLMTRG_peak
88  addDeltaPar("TRGGRL", "h_KLML1", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
89  registerEpicsPV(m_pvPrefix + "KLMTRG_peak", "KLMTRG_peak");
90 
91  //TOPTRG_peak
92  addDeltaPar("TRGGRL", "h_TOPL1", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
93  registerEpicsPV(m_pvPrefix + "TOPTRG_peak", "TOPTRG_peak");
94 
95  //CDCTRG nTSFHits total
96  addDeltaPar("TRGGRL", "h_wirecnt_sum", HistDelta::c_Entries, 1000, 1);
97  registerEpicsPV(m_pvPrefix + "CDCTRG_meanTSFHits_total", "CDCTRG_meanTSFHits_total");
98 
99  //CDCTRG nTSFHits Injection BG Clean region
100  addDeltaPar("TRGGRL", "h_wirecnt_sum_clean", HistDelta::c_Entries, 1000, 1);
101  registerEpicsPV(m_pvPrefix + "CDCTRG_meanTSFHits_clean", "CDCTRG_meanTSFHits_clean");
102 
103  //CDCTRG nTSFHits HER Injection region
104  addDeltaPar("TRGGRL", "h_wirecnt_sum_injHER", HistDelta::c_Entries, 1000, 1);
105  registerEpicsPV(m_pvPrefix + "CDCTRG_meanTSFHits_injHER", "CDCTRG_meanTSFHits_injHER");
106 
107  //CDCTRG nTSFHits LER Injection region
108  addDeltaPar("TRGGRL", "h_wirecnt_sum_injLER", HistDelta::c_Entries, 1000, 1);
109  registerEpicsPV(m_pvPrefix + "CDCTRG_meanTSFHits_injLER", "CDCTRG_meanTSFHits_injLER");
110 
111  //ecl timing –cdc timing
112  addDeltaPar("TRGGDL", "hGDL_ns_cdcToecl_all", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
113  registerEpicsPV(m_pvPrefix + "ecltiming_cdctiming", "ecltiming_cdctiming");
114 
115  //top timing – ecl timing
116  addDeltaPar("TRGGDL", "hGDL_ns_topToecl_all", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
117  registerEpicsPV(m_pvPrefix + "toptiming_ecltiming", "toptiming_ecltiming");
118 
119  // top timing – cdc timing
120  addDeltaPar("TRGGDL", "hGDL_ns_topTocdc_all", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
121  registerEpicsPV(m_pvPrefix + "toptiming_cdctiming", "toptiming_cdctiming");
122 
123  // gdll1-ecl timing
124  addDeltaPar("TRGGDL", "hGDL_eclTogdlL1_all", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
125  registerEpicsPV(m_pvPrefix + "gdll1_ecltiming", "gdll1_ecltiming");
126 
127  //gdll1-cdctiming
128  addDeltaPar("TRGGDL", "hGDL_cdcTogdlL1_all", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
129  registerEpicsPV(m_pvPrefix + "gdll1_cdctiming", "gdll1_cdctiming");
130 
131  //gdll1-toptiming
132  addDeltaPar("TRGGDL", "hGDL_topTogdlL1_all", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
133  registerEpicsPV(m_pvPrefix + "gdll1_toptiming", "gdll1_toptiming");
134 
135  //barrel klm latency
136  addDeltaPar("TRGGDL", "hGDL_itd_klm_hit_rise_all", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
137  registerEpicsPV(m_pvPrefix + "barrel_klm_latency", "barrel_klm_latency");
138 
139  //endcap klm latency
140  addDeltaPar("TRGGDL", "hGDL_itd_eklm_hit_rise_all", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
141  registerEpicsPV(m_pvPrefix + "endcap_klm_latency", "endcap_klm_latency");
142 
143  //hadronb2_over_bhabha_all
144  addDeltaPar("softwaretrigger", "skim", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
145  registerEpicsPV(m_pvPrefix + "hadronb2_over_bhabha_all", "hadronb2_over_bhabha_all");
146 
147  //mumu2trk_over_bhabha_all
148  addDeltaPar("softwaretrigger", "skim", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
149  registerEpicsPV(m_pvPrefix + "mumu2trk_over_bhabha_all", "mumu2trk_over_bhabha_all");
150 
151  //hadronb2_over_mumu2trk
152  addDeltaPar("softwaretrigger", "skim", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
153  registerEpicsPV(m_pvPrefix + "hadronb2_over_mumu2trk", "hadronb2_over_mumu2trk");
154 
155  //ECLTRG_deadch
156 // m_canvas_ECLTRG_deadch = new TCanvas("ECLTRG_deadch");
157  addDeltaPar("TRG", "h_TCId", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
158  registerEpicsPV(m_pvPrefix + "ECLTRG_deadch", "ECLTRG_deadch");
159 
160  //ECLTRG N(TC) total
161  addDeltaPar("TRG", "h_n_TChit_event", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
162  registerEpicsPV(m_pvPrefix + "ECLTRG_meanTC_total", "ECLTRG_meanTC_total");
163 
164  //ECLTRG N(TC) clean
165  addDeltaPar("TRG", "h_n_TChit_clean", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
166  registerEpicsPV(m_pvPrefix + "ECLTRG_meanTC_clean", "ECLTRG_meanTC_clean");
167 
168  //ECLTRG N(TC) HER Injection region
169  addDeltaPar("TRG", "h_n_TChit_injHER", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
170  registerEpicsPV(m_pvPrefix + "ECLTRG_meanTC_injHER", "ECLTRG_meanTC_injHER");
171 
172  //ECLTRG N(TC) LER Injection region
173  addDeltaPar("TRG", "h_n_TChit_injLER", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
174  registerEpicsPV(m_pvPrefix + "ECLTRG_meanTC_injLER", "ECLTRG_meanTC_injLER");
175 
176  //CDCTRG_deadch
177 // m_canvas_CDCTRG_deadch = new TCanvas("CDCTRG_deadch");
178  addDeltaPar("TRGCDCTNN", "NeuroHWInTSID", HistDelta::c_Entries, 159778, 1); // update each 2000 entries
179  registerEpicsPV(m_pvPrefix + "CDCTRG_deadch", "CDCTRG_deadch");
180 
181  //update PV
182 // updateEpicsPVs(
183 // 5.0); // -> now trigger update. this may be optional, framework can take care unless we want to now the result immediately
184 }
185 
187 {
188  B2DEBUG(1, "DQMHistAnalysisTRGModule: beginRun called.");
189 }
190 
192 {
193  B2DEBUG(1, "DQMHistAnalysisTRGModule: endRun called.");
194 }
195 
197 {
198  B2DEBUG(1, "DQMHistAnalysisTRGModule: event called.");
199  doHistAnalysis();
200 }
201 
203 {
204  m_canvas->Clear();
205  m_canvas->cd(0);
206  //update comL1-GDLL1
207  auto hist_comL1_GDLL1 = getDelta("TRGGDL", "hGDL_gdlL1TocomL1_all", 0, true);// only if updated
208  if (hist_comL1_GDLL1) {
209  double comL1_GDLL1_mean = 0.0;
210  hist_comL1_GDLL1->Draw();
211  comL1_GDLL1_mean = hist_comL1_GDLL1->GetMean();
212  B2DEBUG(1, "comL1_GDLL1_mean:" << comL1_GDLL1_mean);
213  setEpicsPV("comL1_GDLL1_mean", comL1_GDLL1_mean);
214 // updateEpicsPVs(
215 // 5.0); // -> now trigger update. this may be optional, framework can take care unless we want to now the result immediately
216  }
217 
218  //update ECLTRG timing
219  auto hist = getDelta("EventT0DQMdir", "m_histEventT0_TOP_hadron_L1_ECLTRG", 0, true);// only if updated
220  if (hist) {
221  double ECLTRG_timing_mean = 0.0;
222  hist->Draw();
223  ECLTRG_timing_mean = hist->GetMean();
224  B2DEBUG(1, "ECLTRG_timing_mean:" << ECLTRG_timing_mean);
225  setEpicsPV("ECLTRG_timing_mean", ECLTRG_timing_mean);
226  }
227 
228 
229  //update CDCTRG timing
230  auto histCDCTRG = getDelta("EventT0DQMdir", "m_histEventT0_TOP_hadron_L1_CDCTRG", 0, true);// only if updated
231  if (histCDCTRG) {
232  double CDCTRG_timing_mean = 0.0;
233  histCDCTRG->Draw();
234  CDCTRG_timing_mean = histCDCTRG->GetMean();
235  B2DEBUG(1, "CDCTRG_timing_mean:" << CDCTRG_timing_mean);
236  setEpicsPV("CDCTRG_timing_mean", CDCTRG_timing_mean);
237  }
238 
239  //update TOPTRG timing
240  auto histTOPTRG = getDelta("EventT0DQMdir", "m_histEventT0_TOP_hadron_L1_TOPTRG", 0, true);// only if updated
241  if (histTOPTRG) {
242  double TOPTRG_timing_mean = 0.0;
243  histTOPTRG->Draw();
244  TOPTRG_timing_mean = histTOPTRG->GetMean();
245  B2DEBUG(1, "TOPTRG_timing_mean:" << TOPTRG_timing_mean);
246  setEpicsPV("TOPTRG_timing_mean", TOPTRG_timing_mean);
247  }
248 
249 // update ECLTRG peak
250  auto hist_ECLTRG_peak = getDelta("TRGGRL", "h_ECLL1", 0, true);// only if updated
251  if (hist_ECLTRG_peak) {
252  double ECLTRG_peak = 0.0;
253  hist_ECLTRG_peak->Draw();
254  int bin_ECLTRG_peak = hist_ECLTRG_peak->GetMaximumBin();
255  ECLTRG_peak = hist_ECLTRG_peak->GetXaxis()->GetBinCenter(bin_ECLTRG_peak);
256  B2DEBUG(1, "ECLTRG_peak:" << ECLTRG_peak);
257  setEpicsPV("ECLTRG_peak", ECLTRG_peak);
258 
259  }
260 
261 // update ECLTRG deadch
262  auto hist_ECLTRG_deadch = getDelta("TRG", "h_TCId", 0, true);// only if updated
263  if (hist_ECLTRG_deadch) {
264  hist_ECLTRG_deadch->Draw();
265  int numberOfBins = hist_ECLTRG_deadch->GetNbinsX();
266 // int YMax = hist_ECLTRG_deadch->GetBinContent(hist_ECLTRG_deadch->GetMaximumBin());
267  int ECLTRG_deadch = 0;
268  for (int i = 2; i <= numberOfBins; i++) {
269  if (hist_ECLTRG_deadch->GetBinContent(i) <= 0) { ECLTRG_deadch += 1; }
270  }
271  B2DEBUG(1, "ECLTRG_deadch:" << ECLTRG_deadch);
272  setEpicsPV("ECLTRG_deadch", ECLTRG_deadch);
273  }
274 // m_canvas_CDCTRG_2D_peak->Clear();
275 // m_canvas_CDCTRG_2D_peak->cd(0);
276 // update CDCTRG 2D peak
277  auto hist_CDCTRG_2D_peak = getDelta("TRGGRL", "h_CDCL1", 0, true);// only if updated
278  if (hist_CDCTRG_2D_peak) {
279  double CDCTRG_2D_peak = 0.0;
280  hist_CDCTRG_2D_peak->Draw();
281  int bin_CDCTRG_2D_peak = hist_CDCTRG_2D_peak->GetMaximumBin();
282  CDCTRG_2D_peak = hist_CDCTRG_2D_peak->GetXaxis()->GetBinCenter(bin_CDCTRG_2D_peak);
283  B2DEBUG(1, "CDCTRG_2D_peak:" << CDCTRG_2D_peak);
284  setEpicsPV("CDCTRG_2D_peak", CDCTRG_2D_peak);
285 
286  }
287 
288 // update CDCTRG NN peak
289  auto hist_NN_peak = getDelta("TRGGRL", "h_CDCNNL1", 0, true);// only if updated
290  if (hist_NN_peak) {
291  double NN_peak = 0.0;
292  hist_NN_peak->Draw();
293  int bin_NN_peak = hist_NN_peak->GetMaximumBin();
294  NN_peak = hist_NN_peak->GetXaxis()->GetBinCenter(bin_NN_peak);
295  B2DEBUG(1, "NN_peak:" << NN_peak);
296  setEpicsPV("NN_peak", NN_peak);
297 
298  }
299 
300 // update CDCTRG TSF
301  auto hist_CDCTRG_TSF_peak = getDelta("TRGGRL", "h_TSFL1", 0, true);// only if updated
302  if (hist_CDCTRG_TSF_peak) {
303  double CDCTRG_TSF_peak = 0.0;
304  hist_CDCTRG_TSF_peak->Draw();
305  int bin_CDCTRG_TSF_peak = hist_CDCTRG_TSF_peak->GetMaximumBin();
306  CDCTRG_TSF_peak = hist_CDCTRG_TSF_peak->GetXaxis()->GetBinCenter(bin_CDCTRG_TSF_peak);
307  B2DEBUG(1, "CDCTRG_TSF_peak:" << CDCTRG_TSF_peak);
308  setEpicsPV("CDCTRG_TSF_peak", CDCTRG_TSF_peak);
309 
310  }
311 
312 // update CDCTRG deadch
313  auto hist_CDCTRG_deadch = getDelta("TRGCDCTNN", "NeuroHWInTSID", 0, true);// only if updated
314  if (hist_CDCTRG_deadch) {
315  hist_CDCTRG_deadch->Draw();
316  int numberOfBins = hist_CDCTRG_deadch->GetNbinsX();
317 // int YMax = hist_CDCTRG_deadch->GetBinContent(hist_CDCTRG_deadch->GetMaximumBin());
318  int CDCTRG_deadch = 0;
319  for (int i = 3; i <= numberOfBins; i++) {
320  if (hist_CDCTRG_deadch->GetBinContent(i) <= 0) {CDCTRG_deadch += 1; }
321  }
322  B2DEBUG(1, "CDCTRG_deadch:" << CDCTRG_deadch);
323  setEpicsPV("CDCTRG_deadch", CDCTRG_deadch);
324  }
325 
326 // update KLMTRG
327  auto hist_KLMTRG_peak = getDelta("TRGGRL", "h_KLML1", 0, true);// only if updated
328  if (hist_KLMTRG_peak) {
329  double KLMTRG_peak = 0.0;
330  hist_KLMTRG_peak->Draw();
331  int bin_KLMTRG_peak = hist_KLMTRG_peak->GetMaximumBin();
332  KLMTRG_peak = hist_KLMTRG_peak->GetXaxis()->GetBinCenter(bin_KLMTRG_peak);
333  B2DEBUG(1, "KLMTRG_peak:" << KLMTRG_peak);
334  setEpicsPV("KLMTRG_peak", KLMTRG_peak);
335 
336  }
337 
338 // update TOPTRG
339  auto hist_TOPTRG_peak = getDelta("TRGGRL", "h_TOPL1", 0, true);// only if updated
340  if (hist_TOPTRG_peak) {
341  double TOPTRG_peak = 0.0;
342  hist_TOPTRG_peak->Draw();
343  int bin_TOPTRG_peak = hist_TOPTRG_peak->GetMaximumBin();
344  TOPTRG_peak = hist_TOPTRG_peak->GetXaxis()->GetBinCenter(bin_TOPTRG_peak);
345  B2DEBUG(1, "TOPTRG_peak:" << TOPTRG_peak);
346  setEpicsPV("TOPTRG_peak", TOPTRG_peak);
347 
348  }
349 
350 // update ecltiming_cdctiming
351  auto hist_ecltiming_cdctiming = getDelta("TRGGDL", "hGDL_ns_cdcToecl_all", 0, true);// only if updated
352  if (hist_ecltiming_cdctiming) {
353  double ecltiming_cdctiming = 0.0;
354  hist_ecltiming_cdctiming->Draw();
355  int bin_ecltiming_cdctiming = hist_ecltiming_cdctiming->GetMaximumBin();
356  ecltiming_cdctiming = hist_ecltiming_cdctiming->GetXaxis()->GetBinCenter(bin_ecltiming_cdctiming);
357  B2DEBUG(1, "ecltiming_cdctiming:" << ecltiming_cdctiming);
358  setEpicsPV("ecltiming_cdctiming", ecltiming_cdctiming);//Peak
359  }
360 
361 // update toptiming_ecltiming
362  auto hist_toptiming_ecltiming = getDelta("TRGGDL", "hGDL_ns_topToecl_all", 0, true);// only if updated
363  if (hist_toptiming_ecltiming) {
364  double toptiming_ecltiming = 0.0;
365  hist_toptiming_ecltiming->Draw();
366  int bin_toptiming_ecltiming = hist_toptiming_ecltiming->GetMaximumBin();
367  toptiming_ecltiming = hist_toptiming_ecltiming->GetXaxis()->GetBinCenter(bin_toptiming_ecltiming);
368  B2DEBUG(1, "toptiming_ecltiming:" << toptiming_ecltiming);
369  setEpicsPV("toptiming_ecltiming", toptiming_ecltiming);//Peak
370  }
371 
372 // update toptiming_cdctiming
373  auto hist_toptiming_cdctiming = getDelta("TRGGDL", "hGDL_ns_topTocdc_all", 0, true);// only if updated
374  if (hist_toptiming_cdctiming) {
375  double toptiming_cdctiming = 0.0;
376  hist_toptiming_cdctiming->Draw();
377  int bin_toptiming_cdctiming = hist_toptiming_cdctiming->GetMaximumBin();
378  toptiming_cdctiming = hist_toptiming_cdctiming->GetXaxis()->GetBinCenter(bin_toptiming_cdctiming);
379  B2DEBUG(1, "toptiming_cdctiming:" << toptiming_cdctiming);
380  setEpicsPV("toptiming_cdctiming", toptiming_cdctiming);//Peak
381  }
382 
383 // update gdll1_ecltiming
384  auto hist_gdll1_ecltiming = getDelta("TRGGDL", "hGDL_eclTogdlL1_all", 0, true);// only if updated
385  if (hist_gdll1_ecltiming) {
386  double gdll1_ecltiming = 0.0;
387  hist_gdll1_ecltiming->Draw();
388  int bin_gdll1_ecltiming = hist_gdll1_ecltiming->GetMaximumBin();
389  gdll1_ecltiming = hist_gdll1_ecltiming->GetXaxis()->GetBinCenter(bin_gdll1_ecltiming);
390  B2DEBUG(1, "gdll1_ecltiming:" << gdll1_ecltiming);
391  setEpicsPV("gdll1_ecltiming", gdll1_ecltiming);//Peak
392  }
393 
394 // update gdll1_cdctiming
395  auto hist_gdll1_cdctiming = getDelta("TRGGDL", "hGDL_cdcTogdlL1_all", 0, true);// only if updated
396  if (hist_gdll1_cdctiming) {
397  double gdll1_cdctiming = 0.0;
398  hist_gdll1_cdctiming->Draw();
399  int bin_gdll1_cdctiming = hist_gdll1_cdctiming->GetMaximumBin();
400  gdll1_cdctiming = hist_gdll1_cdctiming->GetXaxis()->GetBinCenter(bin_gdll1_cdctiming);
401  B2DEBUG(1, "gdll1_cdctiming:" << gdll1_cdctiming);
402  setEpicsPV("gdll1_cdctiming", gdll1_cdctiming);//Peak
403  }
404 
405 // update gdll1_toptiming
406  auto hist_gdll1_toptiming = getDelta("TRGGDL", "hGDL_topTogdlL1_all", 0, true);// only if updated
407  if (hist_gdll1_toptiming) {
408  double gdll1_toptiming = 0.0;
409  hist_gdll1_toptiming->Draw();
410  int bin_gdll1_toptiming = hist_gdll1_toptiming->GetMaximumBin();
411  gdll1_toptiming = hist_gdll1_toptiming->GetXaxis()->GetBinCenter(bin_gdll1_toptiming);
412  B2DEBUG(1, "gdll1_toptiming:" << gdll1_toptiming);
413  setEpicsPV("gdll1_toptiming", gdll1_toptiming);//Peak
414  }
415 
416 // update barrel_klm_latency
417  auto hist_barrel_klm_latency = getDelta("TRGGDL", "hGDL_itd_klm_hit_rise_all", 0, true);// only if updated
418  if (hist_barrel_klm_latency) {
419  double barrel_klm_latency = 0.0;
420  hist_barrel_klm_latency->Draw();
421  int bin_barrel_klm_latency = hist_barrel_klm_latency->GetMaximumBin();
422  barrel_klm_latency = hist_barrel_klm_latency->GetXaxis()->GetBinCenter(bin_barrel_klm_latency);
423  B2DEBUG(1, "barrel_klm_latency:" << barrel_klm_latency);
424  setEpicsPV("barrel_klm_latency", barrel_klm_latency);//Peak
425  }
426 
427 // update endcap_klm_latency
428  auto hist_endcap_klm_latency = getDelta("TRGGDL", "hGDL_itd_eklm_hit_rise_all", 0, true);// only if updated
429  if (hist_endcap_klm_latency) {
430  double endcap_klm_latency = 0.0;
431  hist_endcap_klm_latency->Draw();
432  int bin_endcap_klm_latency = hist_endcap_klm_latency->GetMaximumBin();
433  endcap_klm_latency = hist_endcap_klm_latency->GetXaxis()->GetBinCenter(bin_endcap_klm_latency);
434  B2DEBUG(1, "endcap_klm_latency:" << endcap_klm_latency);
435  setEpicsPV("endcap_klm_latency", endcap_klm_latency);//Peak
436  }
437 
438 // update #hadronb2/#bhabha_all
439  auto hist_hadronb2_over_bhabha_all = getDelta("softwaretrigger", "skim", 0, true);// only if updated
440  if (hist_hadronb2_over_bhabha_all) {
441  hist_hadronb2_over_bhabha_all->Draw();
442  if (hist_hadronb2_over_bhabha_all->GetBinContent(hist_hadronb2_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all")) != 0) {
443  double hadronb2_over_bhabha_all = 0.0;
444  hadronb2_over_bhabha_all = hist_hadronb2_over_bhabha_all->GetBinContent(
445  hist_hadronb2_over_bhabha_all->GetXaxis()->FindBin("accept_hadronb2")) / hist_hadronb2_over_bhabha_all->GetBinContent(
446  hist_hadronb2_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all"));
447 
448  B2DEBUG(1, "hadronb2_over_bhabha_all:" << hadronb2_over_bhabha_all);
449  setEpicsPV("hadronb2_over_bhabha_all", hadronb2_over_bhabha_all);
450  }
451  }
452 
453 // update #mumu2trk/#bhabha_all
454  auto hist_mumu2trk_over_bhabha_all = getDelta("softwaretrigger", "skim", 0, true);// only if updated
455  if (hist_mumu2trk_over_bhabha_all) {
456  hist_mumu2trk_over_bhabha_all->Draw();
457  if (hist_mumu2trk_over_bhabha_all->GetBinContent(hist_mumu2trk_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all")) != 0) {
458  double mumu2trk_over_bhabha_all = 0.0;
459  mumu2trk_over_bhabha_all = hist_mumu2trk_over_bhabha_all->GetBinContent(
460  hist_mumu2trk_over_bhabha_all->GetXaxis()->FindBin("accept_mumu_2trk")) / hist_mumu2trk_over_bhabha_all->GetBinContent(
461  hist_mumu2trk_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all"));
462  B2DEBUG(1, "mumu2trk_over_bhabha_all:" << mumu2trk_over_bhabha_all);
463  setEpicsPV("mumu2trk_over_bhabha_all", mumu2trk_over_bhabha_all);
464  }
465 
466  }
467 
468 // update #hadronb2/#mumu2trk
469  auto hist_hadronb2_over_mumu2trk = getDelta("softwaretrigger", "skim", 0, true);// only if updated
470  if (hist_hadronb2_over_mumu2trk) {
471  hist_hadronb2_over_mumu2trk->Draw();
472  if (hist_hadronb2_over_mumu2trk->GetBinContent(
473  hist_hadronb2_over_mumu2trk->GetXaxis()->FindBin("accept_mumu_2trk")) != 0) {
474  double hadronb2_over_mumu2trk = 0.0;
475  hadronb2_over_mumu2trk = hist_hadronb2_over_mumu2trk->GetBinContent(
476  hist_hadronb2_over_mumu2trk->GetXaxis()->FindBin("accept_hadronb2")) / hist_hadronb2_over_mumu2trk->GetBinContent(
477  hist_hadronb2_over_mumu2trk->GetXaxis()->FindBin("accept_mumu_2trk"));
478  B2DEBUG(1, "hadronb2_over_mumu2trk:" << hadronb2_over_mumu2trk);
479  setEpicsPV("hadronb2_over_mumu2trk", hadronb2_over_mumu2trk);
480  }
481 
482  }
483 
484 
485 
486 // update #mumu_tight/#bhabha_all
487  auto hist_mumu_tight_over_bhabha_all = getDelta("softwaretrigger", "skim", 0, true);// only if updated
488  if (hist_mumu_tight_over_bhabha_all) {
489  hist_mumu_tight_over_bhabha_all->Draw();
490  if (hist_mumu_tight_over_bhabha_all->GetBinContent(
491  hist_mumu_tight_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all")) != 0) {
492  double mumu_tight_over_bhabha_all = 0.0;
493  mumu_tight_over_bhabha_all = hist_mumu_tight_over_bhabha_all->GetBinContent(
494  hist_mumu_tight_over_bhabha_all->GetXaxis()->FindBin("accept_mumutight")) / hist_mumu_tight_over_bhabha_all->GetBinContent(
495  hist_mumu_tight_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all"));
496  B2DEBUG(1, "mumu_tight_over_bhabha_all:" << mumu_tight_over_bhabha_all);
497  setEpicsPV("mumu_tight_over_bhabha_all", mumu_tight_over_bhabha_all);
498  }
499 
500  }
501 
502 // update #gammagamma/#bhabha_all
503  auto hist_gammagamma_over_bhabha_all = getDelta("softwaretrigger", "skim", 0, true);// only if updated
504  if (hist_gammagamma_over_bhabha_all) {
505  hist_gammagamma_over_bhabha_all->Draw();
506  if (hist_gammagamma_over_bhabha_all->GetBinContent(
507  hist_gammagamma_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all")) != 0) {
508  double gammagamma_over_bhabha_all = 0.0;
509  gammagamma_over_bhabha_all = hist_gammagamma_over_bhabha_all->GetBinContent(
510  hist_gammagamma_over_bhabha_all->GetXaxis()->FindBin("accept_gamma_gamma")) / hist_gammagamma_over_bhabha_all->GetBinContent(
511  hist_gammagamma_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all"));
512  B2DEBUG(1, "gammagamma_over_bhabha_all:" << gammagamma_over_bhabha_all);
513  setEpicsPV("gammagamma_over_bhabha_all", gammagamma_over_bhabha_all);
514  }
515 
516  }
517 
518 // update #tautau2trk/#bhabha_all
519  auto hist_tautau2trk_over_bhabha_all = getDelta("softwaretrigger", "skim", 0, true);// only if updated
520  if (hist_tautau2trk_over_bhabha_all) {
521  hist_tautau2trk_over_bhabha_all->Draw();
522  if (hist_tautau2trk_over_bhabha_all->GetBinContent(
523  hist_tautau2trk_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all")) != 0) {
524  double tautau2trk_over_bhabha_all = 0.0;
525  tautau2trk_over_bhabha_all = hist_tautau2trk_over_bhabha_all->GetBinContent(
526  hist_tautau2trk_over_bhabha_all->GetXaxis()->FindBin("accept_tau_2trk")) / hist_tautau2trk_over_bhabha_all->GetBinContent(
527  hist_tautau2trk_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all"));
528  B2DEBUG(1, "tautau2trk_over_bhabha_all:" << tautau2trk_over_bhabha_all);
529  setEpicsPV("tautau2trk_over_bhabha_all", tautau2trk_over_bhabha_all);
530  }
531 
532  }
533 
534 // update #hadron/#bhabha_all
535  auto hist_hadron_over_bhabha_all = getDelta("softwaretrigger", "skim", 0, true);// only if updated
536  if (hist_hadron_over_bhabha_all) {
537  hist_hadron_over_bhabha_all->Draw();
538  if (hist_hadron_over_bhabha_all->GetBinContent(
539  hist_hadron_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all")) != 0) {
540  double hadron_over_bhabha_all = 0.0;
541  hadron_over_bhabha_all = hist_hadron_over_bhabha_all->GetBinContent(
542  hist_hadron_over_bhabha_all->GetXaxis()->FindBin("accept_hadron")) / hist_hadron_over_bhabha_all->GetBinContent(
543  hist_hadron_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all"));
544  B2DEBUG(1, "hadron_over_bhabha_all:" << hadron_over_bhabha_all);
545  setEpicsPV("hadron_over_bhabha_all", hadron_over_bhabha_all);
546  }
547 
548  }
549 
550  auto hist_nTSFHits_total = getDelta("TRGGRL", "h_wirecnt_sum", 0, true);
551  if (hist_nTSFHits_total) {
552  double mean = hist_nTSFHits_total->GetMean();
553  B2DEBUG(1, "CDCTRG_meanTSFHits_total:" << mean);
554  setEpicsPV("CDCTRG_meanTSFHits_total", mean);
555  }
556 
557  auto hist_nTSFHits_clean = getDelta("TRGGRL", "h_wirecnt_sum_clean", 0, true);
558  if (hist_nTSFHits_clean) {
559  double mean = hist_nTSFHits_clean->GetMean();
560  B2DEBUG(1, "CDCTRG_meanTSFHits_clean:" << mean);
561  setEpicsPV("CDCTRG_meanTSFHits_clean", mean);
562  }
563 
564  auto hist_nTSFHits_injHER = getDelta("TRGGRL", "h_wirecnt_sum_injHER", 0, true);
565  if (hist_nTSFHits_injHER) {
566  double mean = hist_nTSFHits_injHER->GetMean();
567  B2DEBUG(1, "CDCTRG_meanTSFHits_injHER:" << mean);
568  setEpicsPV("CDCTRG_meanTSFHits_injHER", mean);
569  }
570 
571  auto hist_nTSFHits_injLER = getDelta("TRGGRL", "h_wirecnt_sum_injLER", 0, true);
572  if (hist_nTSFHits_injLER) {
573  double mean = hist_nTSFHits_injLER->GetMean();
574  B2DEBUG(1, "CDCTRG_meanTSFHits_injLER:" << mean);
575  setEpicsPV("CDCTRG_meanTSFHits_injLER", mean);
576  }
577 
578  auto hist_nTC_total = getDelta("TRG", "h_n_TChit_event", 0, true);
579  if (hist_nTC_total) {
580  double mean = hist_nTC_total->GetMean();
581  B2DEBUG(1, "ECLTRG_meanTC_total:" << mean);
582  setEpicsPV("ECLTRG_meanTC_total", mean);
583  }
584 
585  auto hist_nTC_clean = getDelta("TRG", "h_n_TChit_clean", 0, true);
586  if (hist_nTC_clean) {
587  double mean = hist_nTC_clean->GetMean();
588  B2DEBUG(1, "ECLTRG_meanTC_clean:" << mean);
589  setEpicsPV("ECLTRG_meanTC_clean", mean);
590  }
591 
592  auto hist_nTC_injHER = getDelta("TRG", "h_n_TChit_injHER", 0, true);
593  if (hist_nTC_injHER) {
594  double mean = hist_nTC_injHER->GetMean();
595  B2DEBUG(1, "ECLTRG_meanTC_injHER:" << mean);
596  setEpicsPV("ECLTRG_meanTC_injHER", mean);
597  }
598 
599  auto hist_nTC_injLER = getDelta("TRG", "h_n_TChit_injLER", 0, true);
600  if (hist_nTC_injLER) {
601  double mean = hist_nTC_injLER->GetMean();
602  B2DEBUG(1, "ECLTRG_meanTC_injLER:" << mean);
603  setEpicsPV("ECLTRG_meanTC_injLER", mean);
604  }
605 
606 
607  // Tag canvas as updated ONLY if things have changed.
608  UpdateCanvas(m_canvas->GetName(), hist != nullptr);
609 
610  // this if left over from jsroot, may not be needed anymore (to check)
611  m_canvas->Update();
612 
613 }
614 
616 {
617  B2DEBUG(1, "DQMHistAnalysisTRGModule: terminate called");
618 }
619 
The base class for the histogram analysis module.
int registerEpicsPV(std::string pvname, std::string keyname="", bool update_pvs=true)
EPICS related Functions.
void addDeltaPar(const std::string &dirname, const std::string &histname, HistDelta::EDeltaType t, int p, unsigned int a=1)
Add Delta histogram parameters.
TH1 * getDelta(const std::string &fullname, int n=0, bool onlyIfUpdated=true)
Get Delta histogram.
void setEpicsPV(std::string keyname, double value)
Write value to a EPICS PV.
void UpdateCanvas(std::string name, bool updated=true)
Mark canvas as updated (or not)
void terminate(void) override final
This method is called at the end of the event processing.
void initialize(void) override final
Initializer.
void endRun(void) override final
Called when run ends.
std::string m_pvPrefix
prefix for EPICS PVs
void doHistAnalysis()
Do the actual processing.
void beginRun(void) override final
Called when entering a new run.
void event(void) override final
This method is called for each event.
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:560
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Definition: Module.h:650
Abstract base class for different kinds of events.