Belle II Software  release-08-00-10
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  //CDCTRG_2D_peak
74  addDeltaPar("TRGGRL", "h_CDCL1", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
75  registerEpicsPV(m_pvPrefix + "CDCTRG_2D_peak", "CDCTRG_2D_peak");
76 
77  //NN_peak
78  addDeltaPar("TRGGRL", "h_CDCNNL1", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
79  registerEpicsPV(m_pvPrefix + "NN_peak", "NN_peak");
80 
81  //CDCTRG_TSF_peak
82  addDeltaPar("TRGGRL", "h_TSFL1", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
83  registerEpicsPV(m_pvPrefix + "CDCTRG_TSF_peak", "CDCTRG_TSF_peak");
84 
85  //KLMTRG_peak
86  addDeltaPar("TRGGRL", "h_KLML1", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
87  registerEpicsPV(m_pvPrefix + "KLMTRG_peak", "KLMTRG_peak");
88 
89  //TOPTRG_peak
90  addDeltaPar("TRGGRL", "h_TOPL1", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
91  registerEpicsPV(m_pvPrefix + "TOPTRG_peak", "TOPTRG_peak");
92 
93 
94  //hadronb2_over_bhabha_all
95  addDeltaPar("softwaretrigger", "skim", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
96  registerEpicsPV(m_pvPrefix + "hadronb2_over_bhabha_all", "hadronb2_over_bhabha_all");
97 
98  //mumu2trk_over_bhabha_all
99  addDeltaPar("softwaretrigger", "skim", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
100  registerEpicsPV(m_pvPrefix + "mumu2trk_over_bhabha_all", "mumu2trk_over_bhabha_all");
101 
102  //hadronb2_over_mumu2trk
103  addDeltaPar("softwaretrigger", "skim", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
104  registerEpicsPV(m_pvPrefix + "hadronb2_over_mumu2trk", "hadronb2_over_mumu2trk");
105 
106  //deadch_c_h_TCId
107  addDeltaPar("TRG", "c_h_TCId", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
108  registerEpicsPV(m_pvPrefix + "deadch_c_h_TCId", "deadch_c_h_TCId");
109 
110  //deadch_c_NeuroHWInTSID
111  addDeltaPar("TRGCDCTNN", "c_NeuroHWInTSID", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
112  registerEpicsPV(m_pvPrefix + "deadch_c_NeuroHWInTSID", "deadch_c_NeuroHWInTSID");
113 
114  //update PV
115 // updateEpicsPVs(
116 // 5.0); // -> now trigger update. this may be optional, framework can take care unless we want to now the result immediately
117 }
118 
120 {
121  B2DEBUG(1, "DQMHistAnalysisTRGModule: beginRun called.");
122 }
123 
125 {
126  B2DEBUG(1, "DQMHistAnalysisTRGModule: endRun called.");
127 }
128 
130 {
131  B2DEBUG(1, "DQMHistAnalysisTRGModule: event called.");
132  doHistAnalysis();
133 }
134 
136 {
137  m_canvas->Clear();
138  m_canvas->cd(0);
139  //update comL1-GDLL1
140  auto hist_comL1_GDLL1 = getDelta("TRGGDL", "hGDL_gdlL1TocomL1_all", 0, true);// only if updated
141  if (hist_comL1_GDLL1) {
142  double comL1_GDLL1_mean = 0.0;
143  hist_comL1_GDLL1->Draw();
144  comL1_GDLL1_mean = hist_comL1_GDLL1->GetMean();
145  B2DEBUG(1, "comL1_GDLL1_mean:" << comL1_GDLL1_mean);
146  setEpicsPV("comL1_GDLL1_mean", comL1_GDLL1_mean);
147 // updateEpicsPVs(
148 // 5.0); // -> now trigger update. this may be optional, framework can take care unless we want to now the result immediately
149  }
150 
151  //update ECLTRG timing
152  auto hist = getDelta("EventT0DQMdir", "m_histEventT0_TOP_hadron_L1_ECLTRG", 0, true);// only if updated
153  if (hist) {
154  double ECLTRG_timing_mean = 0.0;
155  hist->Draw();
156  ECLTRG_timing_mean = hist->GetMean();
157  B2DEBUG(1, "ECLTRG_timing_mean:" << ECLTRG_timing_mean);
158  setEpicsPV("ECLTRG_timing_mean", ECLTRG_timing_mean);
159  }
160 
161 
162  //update CDCTRG timing
163  auto histCDCTRG = getDelta("EventT0DQMdir", "m_histEventT0_TOP_hadron_L1_CDCTRG", 0, true);// only if updated
164  if (histCDCTRG) {
165  double CDCTRG_timing_mean = 0.0;
166  histCDCTRG->Draw();
167  CDCTRG_timing_mean = histCDCTRG->GetMean();
168  B2DEBUG(1, "CDCTRG_timing_mean:" << CDCTRG_timing_mean);
169  setEpicsPV("CDCTRG_timing_mean", CDCTRG_timing_mean);
170  }
171  cout << "histCDCTRG = " << histCDCTRG << endl;
172 
173  //update TOPTRG timing
174  auto histTOPTRG = getDelta("EventT0DQMdir", "m_histEventT0_TOP_hadron_L1_TOPTRG", 0, true);// only if updated
175  if (histTOPTRG) {
176  double TOPTRG_timing_mean = 0.0;
177  histTOPTRG->Draw();
178  TOPTRG_timing_mean = histTOPTRG->GetMean();
179  B2DEBUG(1, "TOPTRG_timing_mean:" << TOPTRG_timing_mean);
180  setEpicsPV("TOPTRG_timing_mean", TOPTRG_timing_mean);
181  }
182 
183 // update ECLTRG peak
184  auto hist_ECLTRG_peak = getDelta("TRGGRL", "h_ECLL1", 0, true);// only if updated
185  if (hist_ECLTRG_peak) {
186  double ECLTRG_peak = 0.0;
187  hist_ECLTRG_peak->Draw();
188  int bin_ECLTRG_peak = hist_ECLTRG_peak->GetMaximumBin();
189  ECLTRG_peak = hist_ECLTRG_peak->GetXaxis()->GetBinCenter(bin_ECLTRG_peak);
190  B2DEBUG(1, "ECLTRG_peak:" << ECLTRG_peak);
191  setEpicsPV("ECLTRG_peak", ECLTRG_peak);
192 
193  }
194 
195 // update CDCTRG 2D peak
196  auto hist_CDCTRG_2D_peak = getDelta("TRGGRL", "h_CDCL1", 0, true);// only if updated
197  if (hist_CDCTRG_2D_peak) {
198  double CDCTRG_2D_peak = 0.0;
199  hist_CDCTRG_2D_peak->Draw();
200  int bin_CDCTRG_2D_peak = hist_CDCTRG_2D_peak->GetMaximumBin();
201  CDCTRG_2D_peak = hist_CDCTRG_2D_peak->GetXaxis()->GetBinCenter(bin_CDCTRG_2D_peak);
202  B2DEBUG(1, "CDCTRG_2D_peak:" << CDCTRG_2D_peak);
203  setEpicsPV("CDCTRG_2D_peak", CDCTRG_2D_peak);
204 
205  }
206 
207 // update CDCTRG NN peak
208  auto hist_NN_peak = getDelta("TRGGRL", "h_CDCNNL1", 0, true);// only if updated
209  if (hist_NN_peak) {
210  double NN_peak = 0.0;
211  hist_NN_peak->Draw();
212  int bin_NN_peak = hist_NN_peak->GetMaximumBin();
213  NN_peak = hist_NN_peak->GetXaxis()->GetBinCenter(bin_NN_peak);
214  B2DEBUG(1, "NN_peak:" << NN_peak);
215  setEpicsPV("NN_peak", NN_peak);
216 
217  }
218 
219 // update CDCTRG TSF
220  auto hist_CDCTRG_TSF_peak = getDelta("TRGGRL", "h_TSFL1", 0, true);// only if updated
221  if (hist_CDCTRG_TSF_peak) {
222  double CDCTRG_TSF_peak = 0.0;
223  hist_CDCTRG_TSF_peak->Draw();
224  int bin_CDCTRG_TSF_peak = hist_CDCTRG_TSF_peak->GetMaximumBin();
225  CDCTRG_TSF_peak = hist_CDCTRG_TSF_peak->GetXaxis()->GetBinCenter(bin_CDCTRG_TSF_peak);
226  B2DEBUG(1, "CDCTRG_TSF_peak:" << CDCTRG_TSF_peak);
227  setEpicsPV("CDCTRG_TSF_peak", CDCTRG_TSF_peak);
228 
229  }
230 
231 // update KLMTRG
232  auto hist_KLMTRG_peak = getDelta("TRGGRL", "h_KLML1", 0, true);// only if updated
233  if (hist_KLMTRG_peak) {
234  double KLMTRG_peak = 0.0;
235  hist_KLMTRG_peak->Draw();
236  int bin_KLMTRG_peak = hist_KLMTRG_peak->GetMaximumBin();
237  KLMTRG_peak = hist_KLMTRG_peak->GetXaxis()->GetBinCenter(bin_KLMTRG_peak);
238  B2DEBUG(1, "KLMTRG_peak:" << KLMTRG_peak);
239  setEpicsPV("KLMTRG_peak", KLMTRG_peak);
240 
241  }
242 
243 // update TOPTRG
244  auto hist_TOPTRG_peak = getDelta("TRGGRL", "h_TOPL1", 0, true);// only if updated
245  if (hist_TOPTRG_peak) {
246  double TOPTRG_peak = 0.0;
247  hist_TOPTRG_peak->Draw();
248  int bin_TOPTRG_peak = hist_TOPTRG_peak->GetMaximumBin();
249  TOPTRG_peak = hist_TOPTRG_peak->GetXaxis()->GetBinCenter(bin_TOPTRG_peak);
250  B2DEBUG(1, "TOPTRG_peak:" << TOPTRG_peak);
251  setEpicsPV("TOPTRG_peak", TOPTRG_peak);
252 
253  }
254 
255 // update #hadronb2/#bhabha_all
256  auto hist_hadronb2_over_bhabha_all = getDelta("softwaretrigger", "skim", 0, true);// only if updated
257  if (hist_hadronb2_over_bhabha_all) {
258  double hadronb2_over_bhabha_all = 0.0;
259  hist_hadronb2_over_bhabha_all->Draw();
260  hadronb2_over_bhabha_all = hist_hadronb2_over_bhabha_all->GetBinContent(
261  hist_hadronb2_over_bhabha_all->GetXaxis()->FindBin("accept_hadronb2")) / hist_hadronb2_over_bhabha_all->GetBinContent(
262  hist_hadronb2_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all"));
263 
264  B2DEBUG(1, "hadronb2_over_bhabha_all:" << hadronb2_over_bhabha_all);
265  setEpicsPV("hadronb2_over_bhabha_all", hadronb2_over_bhabha_all);
266 
267  }
268 
269 // update #mumu2trk/#bhabha_all
270  auto hist_mumu2trk_over_bhabha_all = getDelta("softwaretrigger", "skim", 0, true);// only if updated
271  if (hist_mumu2trk_over_bhabha_all) {
272  double mumu2trk_over_bhabha_all = 0.0;
273  hist_mumu2trk_over_bhabha_all->Draw();
274  mumu2trk_over_bhabha_all = hist_mumu2trk_over_bhabha_all->GetBinContent(
275  hist_mumu2trk_over_bhabha_all->GetXaxis()->FindBin("accept_mumu_2trk")) / hist_mumu2trk_over_bhabha_all->GetBinContent(
276  hist_mumu2trk_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all"));
277  B2DEBUG(1, "mumu2trk_over_bhabha_all:" << mumu2trk_over_bhabha_all);
278  setEpicsPV("mumu2trk_over_bhabha_all", mumu2trk_over_bhabha_all);
279 
280  }
281 
282 // update #hadronb2/#mumu2trk
283  auto hist_hadronb2_over_mumu2trk = getDelta("softwaretrigger", "skim", 0, true);// only if updated
284  if (hist_hadronb2_over_mumu2trk) {
285  double hadronb2_over_mumu2trk = 0.0;
286  hist_hadronb2_over_mumu2trk->Draw();
287  hadronb2_over_mumu2trk = hist_hadronb2_over_mumu2trk->GetBinContent(
288  hist_hadronb2_over_mumu2trk->GetXaxis()->FindBin("accept_hadronb2")) / hist_hadronb2_over_mumu2trk->GetBinContent(
289  hist_hadronb2_over_mumu2trk->GetXaxis()->FindBin("accept_mumu_2trk"));
290  B2DEBUG(1, "hadronb2_over_mumu2trk:" << hadronb2_over_mumu2trk);
291  setEpicsPV("hadronb2_over_mumu2trk", hadronb2_over_mumu2trk);
292 
293  }
294 
295 // update #deadch_c_h_TCId
296  auto hist_c_h_TCId = getDelta("TRG", "c_h_TCId", 0, true);// only if updated
297  if (hist_c_h_TCId) {
298  double deadch_c_h_TCId = 0.0;
299  hist_c_h_TCId->Draw();
300  deadch_c_h_TCId = hist_c_h_TCId->GetMaximum() * 0.01;
301  B2DEBUG(1, "deadch_c_h_TCId:" << deadch_c_h_TCId);
302  setEpicsPV("deadch_c_h_TCId", deadch_c_h_TCId);
303 
304  }
305 
306 // update #deadch_c_NeuroHWInTSID
307  auto hist_c_NeuroHWInTSID = getDelta("TRGCDCTNN", "c_NeuroHWInTSID", 0, true);// only if updated
308  if (hist_c_NeuroHWInTSID) {
309  double deadch_c_NeuroHWInTSID = 0.0;
310  hist_c_NeuroHWInTSID->Draw();
311  deadch_c_NeuroHWInTSID = hist_c_NeuroHWInTSID->GetMaximum() * 0.01;
312  B2DEBUG(1, "deadch_c_NeuroHWInTSID:" << deadch_c_NeuroHWInTSID);
313  setEpicsPV("deadch_c_NeuroHWInTSID", deadch_c_NeuroHWInTSID);
314 
315  }
316 
317 
318 // update #mumu_tight/#bhabha_all
319  auto hist_mumu_tight_over_bhabha_all = getDelta("softwaretrigger", "skim", 0, true);// only if updated
320  if (hist_mumu_tight_over_bhabha_all) {
321  double mumu_tight_over_bhabha_all = 0.0;
322  hist_mumu_tight_over_bhabha_all->Draw();
323  mumu_tight_over_bhabha_all = hist_mumu_tight_over_bhabha_all->GetBinContent(
324  hist_mumu_tight_over_bhabha_all->GetXaxis()->FindBin("accept_mumutight")) / hist_mumu_tight_over_bhabha_all->GetBinContent(
325  hist_mumu_tight_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all"));
326  B2DEBUG(1, "mumu_tight_over_bhabha_all:" << mumu_tight_over_bhabha_all);
327  setEpicsPV("mumu_tight_over_bhabha_all", mumu_tight_over_bhabha_all);
328 
329  }
330 
331 // update #gammagamma/#bhabha_all
332  auto hist_gammagamma_over_bhabha_all = getDelta("softwaretrigger", "skim", 0, true);// only if updated
333  if (hist_gammagamma_over_bhabha_all) {
334  double gammagamma_over_bhabha_all = 0.0;
335  hist_gammagamma_over_bhabha_all->Draw();
336  gammagamma_over_bhabha_all = hist_gammagamma_over_bhabha_all->GetBinContent(
337  hist_gammagamma_over_bhabha_all->GetXaxis()->FindBin("accept_gamma_gamma")) / hist_gammagamma_over_bhabha_all->GetBinContent(
338  hist_gammagamma_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all"));
339  B2DEBUG(1, "gammagamma_over_bhabha_all:" << gammagamma_over_bhabha_all);
340  setEpicsPV("gammagamma_over_bhabha_all", gammagamma_over_bhabha_all);
341 
342  }
343 
344 // update #tautau2trk/#bhabha_all
345  auto hist_tautau2trk_over_bhabha_all = getDelta("softwaretrigger", "skim", 0, true);// only if updated
346  if (hist_tautau2trk_over_bhabha_all) {
347  double tautau2trk_over_bhabha_all = 0.0;
348  hist_tautau2trk_over_bhabha_all->Draw();
349  tautau2trk_over_bhabha_all = hist_tautau2trk_over_bhabha_all->GetBinContent(
350  hist_tautau2trk_over_bhabha_all->GetXaxis()->FindBin("accept_tau_2trk")) / hist_tautau2trk_over_bhabha_all->GetBinContent(
351  hist_tautau2trk_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all"));
352  B2DEBUG(1, "tautau2trk_over_bhabha_all:" << tautau2trk_over_bhabha_all);
353  setEpicsPV("tautau2trk_over_bhabha_all", tautau2trk_over_bhabha_all);
354 
355  }
356 
357 // update #hadron/#bhabha_all
358  auto hist_hadron_over_bhabha_all = getDelta("softwaretrigger", "skim", 0, true);// only if updated
359  if (hist_hadron_over_bhabha_all) {
360  double hadron_over_bhabha_all = 0.0;
361  hist_hadron_over_bhabha_all->Draw();
362  hadron_over_bhabha_all = hist_hadron_over_bhabha_all->GetBinContent(
363  hist_hadron_over_bhabha_all->GetXaxis()->FindBin("accept_hadron")) / hist_hadron_over_bhabha_all->GetBinContent(
364  hist_hadron_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all"));
365  B2DEBUG(1, "hadron_over_bhabha_all:" << hadron_over_bhabha_all);
366  setEpicsPV("hadron_over_bhabha_all", hadron_over_bhabha_all);
367 
368  }
369 
370 
371 
372  // Tag canvas as updated ONLY if things have changed.
373  UpdateCanvas(m_canvas->GetName(), hist != nullptr);
374 
375  // this if left over from jsroot, may not be needed anymore (to check)
376  m_canvas->Update();
377 
378 }
379 
381 {
382  B2DEBUG(1, "DQMHistAnalysisTRGModule: terminate called");
383 }
384 
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.