Belle II Software  release-08-02-06
DQMHistAnalysisTRGEFF.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 // Own header.
10 #include <dqm/analysis/modules/DQMHistAnalysisTRGEFF.h>
11 
12 #include <TH1F.h>
13 #include <TH2F.h>
14 #include <TCanvas.h>
15 #include <TPaveText.h>
16 #include <TLine.h>
17 #include <TClass.h>
18 #include <TStyle.h>
19 #include <TROOT.h>
20 #include "TLatex.h"
21 
22 #include <fstream>
23 #include <iostream>
24 #include <vector>
25 #include <algorithm>
26 
27 using namespace std;
28 using namespace Belle2;
29 
30 //-----------------------------------------------------------------
31 // Register module
32 //-----------------------------------------------------------------
33 
34 REG_MODULE(DQMHistAnalysisTRGEFF);
35 
36 DQMHistAnalysisTRGEFFModule::DQMHistAnalysisTRGEFFModule()
38 {
39  // set module description (e.g. insert text)
40  setDescription("Modify and analyze the data quality histograms of TRGEFF");
42  addParam("alert", m_enableAlert, "Enable color alert", true);
43 }
44 
46 {
47 
48 }
49 
51 {
52  gROOT->cd();
53 
54  m_cPt_eff = new TCanvas("TRGEFF/c_hPt_eff");
55  m_cPhi_eff = new TCanvas("TRGEFF/c_hPhi_eff");
56  m_c_nobha_f_phi_eff = new TCanvas("TRGEFF/c_nobha_f_phi_eff");
57  m_nobha_cPt_eff = new TCanvas("TRGEFF/c_nobha_hPt_eff");
58  m_cP3_z_eff = new TCanvas("TRGEFF/c_hP3_z_eff");
59  m_cP3_y_eff = new TCanvas("TRGEFF/c_hP3_y_eff");
60  m_nobha_cP3_z_eff = new TCanvas("TRGEFF/c_nobha_hP3_z_eff");
61  m_nobha_cP3_y_eff = new TCanvas("TRGEFF/c_nobha_hP3_y_eff");
62  m_c_nobha_phi_z_eff = new TCanvas("TRGEFF/c_nobha_phi_z_eff");
63  m_c_nobha_phi_y_eff = new TCanvas("TRGEFF/c_nobha_phi_y_eff");
64  m_c_fyo_dphi_eff = new TCanvas("TRGEFF/c_fyo_dphi_eff");
65  m_c_nobha_fyo_dphi_eff = new TCanvas("TRGEFF/c_nobha_fyo_dphi_eff");
66  m_c_stt_phi_eff = new TCanvas("TRGEFF/c_stt_phi_eff");
67  m_c_stt_P3_eff = new TCanvas("TRGEFF/c_stt_P3_eff");
68  m_c_stt_theta_eff = new TCanvas("TRGEFF/c_stt_theta_eff");
69  m_c_nobha_stt_phi_eff = new TCanvas("TRGEFF/c_nobha_stt_phi_eff");
70  m_c_nobha_stt_P3_eff = new TCanvas("TRGEFF/c_nobha_stt_P3_eff");
71  m_c_nobha_stt_theta_eff = new TCanvas("TRGEFF/c_nobha_stt_theta_eff");
72  m_c_hie_E_eff = new TCanvas("TRGEFF/c_hie_E_eff");
73  m_c_nobha_hie_E_eff = new TCanvas("TRGEFF/c_nobha_hie_E_eff");
74  m_c_ecltiming_E_eff = new TCanvas("TRGEFF/c_ecltiming_E_eff");
75  m_c_ecltiming_theta_eff = new TCanvas("TRGEFF/c_ecltiming_theta_eff");
76  m_c_ecltiming_phi_eff = new TCanvas("TRGEFF/c_ecltiming_phi_eff");
77  m_c_klmhit_phi_eff = new TCanvas("TRGEFF/c_klmhit_phi_eff");
78  m_c_klmhit_theta_eff = new TCanvas("TRGEFF/c_klmhit_theta_eff");
79  m_c_eklmhit_phi_eff = new TCanvas("TRGEFF/c_eklmhit_phi_eff");
80  m_c_eklmhit_theta_eff = new TCanvas("TRGEFF/c_eklmhit_theta_eff");
81 
82 
84  // the MonitoringObject
104 
106  m_efficiencyList.clear();
107  m_efficiencyList = {
108  // Histogram names, efficiency pointers, corresponding canvases title and X-title
109  {"TRGEFF/hPt_psnecl", &m_hPt_eff, m_cPt_eff, "f bit", "Pt (GeV)"},
110  {"TRGEFF/hPhi_psnecl", &m_hPhi_eff, m_cPhi_eff, "f bit", "#phi (degree)"},
111  {"TRGEFF/nobha_f_phi_psnecl", &m_nobha_f_phi_eff, m_c_nobha_f_phi_eff, "nobha f bit", "#phi (degree)"},
112  {"TRGEFF/nobha_hPt_psnecl", &m_nobha_hPt_eff, m_nobha_cPt_eff, "nobha f bit", "Pt (GeV)"},
113  {"TRGEFF/hP3_z_psnecl", &m_hP3_z_eff, m_cP3_z_eff, "z bit", "Pt (GeV)"},
114  {"TRGEFF/hP3_y_psnecl", &m_hP3_y_eff, m_cP3_y_eff, "y bit", "Pt (GeV)"},
115  {"TRGEFF/nobha_hP3_z_psnecl", &m_nobha_hP3_z_eff, m_nobha_cP3_z_eff, "nobha z bit", "Pt (GeV)"},
116  {"TRGEFF/nobha_hP3_y_psnecl", &m_nobha_hP3_y_eff, m_nobha_cP3_y_eff, "nobha y bit", "Pt (GeV)"},
117  {"TRGEFF/nobha_phi_z_psnecl", &m_nobha_phi_z_eff, m_c_nobha_phi_z_eff, "nobha z bit", "#phi (degree)"},
118  {"TRGEFF/nobha_phi_y_psnecl", &m_nobha_phi_y_eff, m_c_nobha_phi_y_eff, "nobha y bit", "#phi (degree)"},
119  {"TRGEFF/fyo_dphi_psnecl", &m_fyo_dphi_eff, m_c_fyo_dphi_eff, "fyo bit", "#Delta#phi (degree)"},
120  {"TRGEFF/nobha_fyo_dphi_psnecl", &m_nobha_fyo_dphi_eff, m_c_nobha_fyo_dphi_eff, "nobha fyo bit", "#Delta#phi (degree)"},
121  {"TRGEFF/stt_phi_psnecl", &m_stt_phi_eff, m_c_stt_phi_eff, "stt bit", "#phi (degree)"},
122  {"TRGEFF/stt_P3_psnecl", &m_stt_P3_eff, m_c_stt_P3_eff, "stt bit", "P (GeV)"},
123  {"TRGEFF/stt_theta_psnecl", &m_stt_theta_eff, m_c_stt_theta_eff, "stt bit", "#theta (degree)"},
124  {"TRGEFF/nobha_stt_phi_psnecl", &m_nobha_stt_phi_eff, m_c_nobha_stt_phi_eff, "nobha stt bit", "#phi (degree)"},
125  {"TRGEFF/nobha_stt_P3_psnecl", &m_nobha_stt_P3_eff, m_c_nobha_stt_P3_eff, "nobha stt bit", "P (GeV)"},
126  {"TRGEFF/nobha_stt_theta_psnecl", &m_nobha_stt_theta_eff, m_c_nobha_stt_theta_eff, "nobha stt bit", "#theta (degree)"},
127  {"TRGEFF/hie_E_psnecl", &m_hie_E_eff, m_c_hie_E_eff, "hie bit", "E (GeV)"},
128  {"TRGEFF/nobha_hie_E_psnecl", &m_nobha_hie_E_eff, m_c_nobha_hie_E_eff, "nobha hie bit", "E (GeV)"},
129  {"TRGEFF/ecltiming_E_psnecl", &m_ecltiming_E_eff, m_c_ecltiming_E_eff, "ecltiming bit", "E (GeV)"},
130  {"TRGEFF/ecltiming_theta_psnecl", &m_ecltiming_theta_eff, m_c_ecltiming_theta_eff, "ecltiming bit", "#theta (degree)"},
131  {"TRGEFF/ecltiming_phi_psnecl", &m_ecltiming_phi_eff, m_c_ecltiming_phi_eff, "ecltiming bit", "#phi (degree)"},
132  {"TRGEFF/klmhit_phi_psnecl", &m_klmhit_phi_eff, m_c_klmhit_phi_eff, "klmhit bit", "#phi (degree)"},
133  {"TRGEFF/klmhit_theta_psnecl", &m_klmhit_theta_eff, m_c_klmhit_theta_eff, "klmhit bit", "#theta (degree)"},
134  {"TRGEFF/eklmhit_phi_psnecl", &m_eklmhit_phi_eff, m_c_eklmhit_phi_eff, "eklmhit bit", "#phi (degree)"},
135  {"TRGEFF/eklmhit_theta_psnecl", &m_eklmhit_theta_eff, m_c_eklmhit_theta_eff, "eklmhit bit", "#theta (degree)"}
136 
137  // Add more entries as needed
138  };
139 
140  B2DEBUG(1, "DQMHistAnalysisTRGEFF: initialized.");
141 }
142 
143 
145 {
146  B2DEBUG(1, "DQMHistAnalysisTRGEFF: event start.");
147  m_IsPhysicsRun = (getRunType() == "physics");
148  m_IsCosmicRun = (getRunType() == "cosmic");
149  m_IsDebugRun = (getRunType() == "debug");
150 
151  //if (m_IsPhysicsRun == true || m_IsCosmicRun == true || m_IsDebugRun == true)
152 
153  B2DEBUG(1, "DQMHistAnalysisTRGEFF: fill histogram");
154 
155  for (auto& entry : m_efficiencyList) {
156  const std::string& name = std::get<0>(entry); // Get the histogram name
157  TEfficiency** efficiencyPtr = std::get<1>(entry); // Get the efficiency pointer
158  TCanvas* canvas = std::get<2>(entry); // Get the canvas pointer
159  const std::string& title = std::get<3>(entry); // Get the histogram title
160  const std::string& xtitle = std::get<4>(entry); // Get the histogram X-title
161 
162  B2DEBUG(1, "The current histogram name is " << name); // Debug print
163  TH1F* hist = (TH1F*)findHist(name);
164  TH1F* histFtdf = (TH1F*)findHist(name + "_ftdf");
165  if (hist == nullptr || histFtdf == nullptr) {
166  B2WARNING("Histogram for " + name + " or its Ftdf counterpart is not found.");
167  return;
168  }
169 
170  // Delete old efficiency if it exists
171  if (*efficiencyPtr != nullptr) {
172  delete *efficiencyPtr;
173  *efficiencyPtr = nullptr;
174  }
175 
176  // Check consistency and create a new TEfficiency
177  if (TEfficiency::CheckConsistency(*histFtdf, *hist)) {
178  *efficiencyPtr = new TEfficiency(*histFtdf, *hist);
179 
180  hist->GetYaxis()->SetNdivisions(505);
181  hist->GetXaxis()->SetTitleSize(0.04);
182  hist->GetYaxis()->SetTitleSize(0.04);
183  hist->GetYaxis()->SetLabelSize(0.03);
184  hist->GetXaxis()->SetLabelSize(0.03);
185  hist->GetYaxis()->SetTitleOffset(1.);
186  hist->GetXaxis()->SetTitleOffset(1.);
187  hist->GetYaxis()->SetTitleFont(42);
188  hist->GetXaxis()->SetTitleFont(42);
189  hist->GetYaxis()->SetLabelFont(42);
190  hist->GetXaxis()->SetLabelFont(42);
191  hist->GetXaxis()->SetTitle(xtitle.c_str());
192  hist->GetYaxis()->SetTitle("#epsilon");
193  hist->GetYaxis()->SetRangeUser(0, 1);
194  // hist->GetXaxis()->CenterTitle(true);
195  // hist->GetYaxis()->CenterTitle(true);
196 
197  TLatex hist_title;
198  hist_title.SetTextAlign(23);
199  hist_title.SetTextSize(0.04);
200  hist_title.SetTextFont(42);
201  double pos_titleX = (hist->GetXaxis()->GetXmin() + hist->GetXaxis()->GetXmax()) / 2; // X position of histogram title
202  double pos_titleY = 1.1; // Y position of histogram title
203 
204  // Draw efficiency on canvas and update it
205  canvas->Clear();
206  canvas->cd();
207 
208  hist->Draw("axis");
209  hist_title.DrawLatex(pos_titleX, pos_titleY, title.c_str());
210  (*efficiencyPtr)->Draw("same");
211 
212  canvas->Modified();
213 
214  } else {
215  B2WARNING("Histograms " << histFtdf->GetName() << " and " << hist->GetName() << " are not consistent for efficiency calculation.");
216  canvas->Clear();
217  }
218  }
219 
220 }
221 
223 {
224  B2DEBUG(1, "DQMHistAnalysisTRGEFF : endRun called");
225 
226  // Loop through m_efficiencyList and process the efficiency histogram
227  for (auto& entry : m_efficiencyList) {
228  const std::string& name = std::get<0>(entry); // Get the histogram name
229  TEfficiency** efficiencyPtr = std::get<1>(entry); // Get the efficiency pointer
230 
231  TEfficiency* effHist = *efficiencyPtr;
232 
233  if (effHist) {
234  /***********************************************************
235  * rebin the histogram for MonitoringObject *
236  ***********************************************************/
237  TH1F* hist = (TH1F*)effHist->GetTotalHistogram();
238  TH1F* histFtdf = (TH1F*)effHist->GetPassedHistogram();
239 
240  Double_t* newBins = nullptr;
241  int nBins = 1;
242 
243  if (name.find("TRGEFF/nobha_hie_E_psnecl") != std::string::npos) {
244  newBins = new Double_t[4] {0, 0.6, 1.6, hist->GetXaxis()->GetXmax()}; // Allocate on heap
245  nBins = 3;
246  } else if (name.find("TRGEFF/nobha_stt_P3_psnecl") != std::string::npos) {
247  newBins = new Double_t[4] {0, 0.5, 1, hist->GetXaxis()->GetXmax()};
248  nBins = 3;
249  } else if (name.find("TRGEFF/nobha_fyo_dphi_psnecl") != std::string::npos) {
250  newBins = new Double_t[4] {0, 80, 100, hist->GetXaxis()->GetXmax()};
251  nBins = 3;
252  } else if (name.find("TRGEFF/klmhit_theta_psnecl") != std::string::npos) {
253  newBins = new Double_t[2] {0, hist->GetXaxis()->GetXmax()}; // Assuming barrel is one bin
254  nBins = 1;
255  } else if (name.find("TRGEFF/eklmhit_theta_psnecl") != std::string::npos) {
256  newBins = new Double_t[3] {0, 90, hist->GetXaxis()->GetXmax()}; // Assuming forward and backward are two bins
257  nBins = 2;
258  } else {
259  newBins = new Double_t[2] {0, hist->GetXaxis()->GetXmax()}; // Average of all bins
260  nBins = 1;
261  }
262 
263  // Sort the bins if there are more than one
264  if (nBins > 1) {
265  std::sort(newBins, newBins + nBins + 1); // nBins + 1 because we need to sort the edges
266  }
267 
268  TEfficiency* efficiencyRebinnedPtr = nullptr;
269 
270  // rebin the found histograms
271  TH1F* histRebinned = (TH1F*)hist->Rebin(nBins, (name + "_rebinned").c_str(), newBins);
272  TH1F* histFtdfRebinned = (TH1F*)histFtdf->Rebin(nBins, (name + "_ftdf_rebinned").c_str(), newBins);
273 
274  // delete the allocated memory
275  delete[] newBins;
276 
277  // Check consistency and create a new TEfficiency for rebinned histograms
278  if (TEfficiency::CheckConsistency(*histFtdfRebinned, *histRebinned)) {
279  efficiencyRebinnedPtr = new TEfficiency(*histFtdfRebinned, *histRebinned);
280 
281  // Clean the name: remove "TRGEFF/" prefix and "_psnecl" suffix for the name in m_efficiencyList
282  std::string cleanName = name;
283 
284  // Find and erase "TRGEFF/" if it exists
285  size_t prefixPos = cleanName.find("TRGEFF/");
286  if (prefixPos != std::string::npos) {
287  cleanName.erase(prefixPos, std::string("TRGEFF/").length()); // Remove "TRGEFF/"
288  }
289 
290  // Find and erase "_psnecl" if it exists
291  size_t suffixPos = cleanName.find("_psnecl");
292  if (suffixPos != std::string::npos) {
293  cleanName.erase(suffixPos, std::string("_psnecl").length()); // Remove "_psnecl"
294  }
295 
296  int nbins = efficiencyRebinnedPtr->GetTotalHistogram()->GetNbinsX();
297  for (int i = 1; i <= nbins; i++) {
298  char varName[100];
299  sprintf(varName, "%s_%i", cleanName.c_str(), i);
300  B2DEBUG(1, "The name for MonitoringObject histogram is " << varName << " " << efficiencyRebinnedPtr->GetEfficiency(
301  i) << " " << efficiencyRebinnedPtr->GetEfficiencyErrorUp(i) << " " << efficiencyRebinnedPtr->GetEfficiencyErrorLow(i));
302  m_mon_trgeff->setVariable(varName,
303  efficiencyRebinnedPtr->GetEfficiency(i),
304  efficiencyRebinnedPtr->GetEfficiencyErrorUp(i),
305  efficiencyRebinnedPtr->GetEfficiencyErrorLow(i));
306  }
307 
308  if (efficiencyRebinnedPtr != nullptr) {
309  delete efficiencyRebinnedPtr;
310  }
311 
312  } else {
313  B2WARNING("Rebinned histograms " << histFtdfRebinned->GetName() << " and " << histRebinned->GetName() <<
314  " are not consistent for efficiency calculation.");
315  }
316  // Delete the rebinned histograms
317  delete histRebinned;
318  delete histFtdfRebinned;
319 
320  } else {
321  B2WARNING(std::string("Efficiency histogram is null for ") + name);
322  }
323  }
324 
325 
326 }
327 
329 {
330  B2DEBUG(1, "terminate called");
331 }
332 
The base class for the histogram analysis module.
static TH1 * findHist(const std::string &histname, bool onlyIfUpdated=false)
Get histogram from list (no other search).
static const std::string & getRunType(void)
Get the Run Type.
static MonitoringObject * getMonitoringObject(const std::string &histname)
Get MonitoringObject with given name (new object is created if non-existing)
TEfficiency * m_nobha_hP3_z_eff
remove the bha_veto, the efficiency of p for z bit
TEfficiency * m_hie_E_eff
the efficiency of phi for hie bit
TEfficiency * m_nobha_f_phi_eff
remove the bha_veto, the efficiency of phi for f bit
TCanvas * m_cP3_z_eff
for CDC TRG, the histograms for 3-momentum p with ecl mask bits, p of z bit with ecl mask bits.
TCanvas * m_c_nobha_phi_z_eff
remove the bha_veto, canvas for TRGEFF efficiency, z bit
TEfficiency * m_ecltiming_phi_eff
the efficiency of phi for ecltiming bit
void initialize() override final
Initialize the Module.
TEfficiency * m_eklmhit_phi_eff
the efficiency of phi for eklmhit bit
TCanvas * m_c_nobha_f_phi_eff
remove the bha_veto, canvas for TRGEFF efficiency, f bit
TCanvas * m_c_eklmhit_theta_eff
canvas for TRGEFF efficiency, eklmhit bit
bool m_IsCosmicRun
Run type flag for cosmic runs.
TCanvas * m_cP3_y_eff
for CDC TRG, the histograms for 3-momentum p with ecl mask bits, p of y bit with ecl mask bits.
TEfficiency * m_hPt_eff
the efficiency of Pt for f bit
TCanvas * m_c_klmhit_phi_eff
for KLM TRG, the histograms for the phi of the ecl mask bits, and the phi of klmhit bit with ecl mask...
TCanvas * m_nobha_cPt_eff
remove the bha_veto, Canvas for TRGEFF efficiency, Pt
bool m_IsDebugRun
Run type flag for debug runs.
bool m_IsPhysicsRun
Run type flag for physics runs.
TEfficiency * m_ecltiming_theta_eff
the efficiency of theta for ecltiming bit
bool m_enableAlert
Enable alert by base color of canvases.
TCanvas * m_c_ecltiming_theta_eff
canvas for TRGEFF efficiency, ecltiming bit
TCanvas * m_c_ecltiming_E_eff
for ECL TRG, the histograms for the sum energy E distribution in an event with cdc mask bits,...
TCanvas * m_c_stt_phi_eff
for CDC TRG, the histograms for the phi distribution with ecl mask bits, the phi of stt bit with ecl ...
TEfficiency * m_hP3_y_eff
the efficiency of p for y bit
TEfficiency * m_klmhit_phi_eff
the efficiency of phi for klmhit bit
TCanvas * m_c_eklmhit_phi_eff
for KLM TRG, the histograms for the phi of the ecl mask bits, and the phi of eklmhit bit with ecl mas...
TCanvas * m_c_fyo_dphi_eff
for CDC TRG, the histograms for the largest dphi in an event with ecl mask bits, the largest dphi in ...
TEfficiency * m_nobha_stt_theta_eff
remove the bha_veto, the efficiency of theta for stt bit
void terminate() override final
Termination action.
TEfficiency * m_nobha_hPt_eff
remove the bha_veto, the efficiency of Pt for f bit
TEfficiency * m_stt_P3_eff
the efficiency of p for stt bit
TEfficiency * m_nobha_hie_E_eff
remove the bha_veto, the efficiency of phi for hie bit
TCanvas * m_c_stt_P3_eff
for CDC TRG, the histograms for the largest momentum p distribution in an event of the ecl mask bits,...
void event() override final
Event processor.
TCanvas * m_c_nobha_stt_theta_eff
remove the bha_veto, canvas for TRGEFF efficiency, stt bit
TCanvas * m_c_stt_theta_eff
for CDC TRG, the theta of stt distribution.
TEfficiency * m_stt_phi_eff
the efficiency of phi for stt bit
TEfficiency * m_nobha_stt_phi_eff
remove the bha_veto, the efficiency of phi for stt bit
TCanvas * m_cPt_eff
for CDC TRG, the histograms for momentum pt of the ecl mask bits, the pt of f bit with ecl mask bits.
TCanvas * m_c_ecltiming_phi_eff
canvas for TRGEFF efficiency, ecltiming bit
TCanvas * m_cPhi_eff
for CDC TRG, the histograms for phi of the ecl mask bits, the phi of f bit with ecl mask bits.
TEfficiency * m_klmhit_theta_eff
the efficiency of theta for klmhit bit
TEfficiency * m_eklmhit_theta_eff
the efficiency of theta for eklmhit bit
TCanvas * m_c_nobha_phi_y_eff
remove the bha_veto, canvas for TRGEFF efficiency, y bit
void endRun() override final
End-of-run action.
TEfficiency * m_hP3_z_eff
the efficiency of p for z bit
TEfficiency * m_hPhi_eff
the efficiency of Phi
TCanvas * m_c_nobha_fyo_dphi_eff
remove the bha_veto, canvas for TRGEFF efficiency, fyo bit
TEfficiency * m_fyo_dphi_eff
the efficiency of dphi for fyo bit
TCanvas * m_c_klmhit_theta_eff
canvas for TRGEFF efficiency, klmhit bit
TCanvas * m_nobha_cP3_z_eff
remove the bha_veto, canvas for TRGEFF efficiency, z bit
TEfficiency * m_stt_theta_eff
the efficiency of theta for stt bit
TEfficiency * m_nobha_phi_y_eff
remove the bha_veto, the efficiency of phi for y bit
TCanvas * m_c_hie_E_eff
for ECL TRG, the histograms for the sum energy E distribution in an event within the thetaID range of...
TCanvas * m_c_nobha_stt_P3_eff
remove the bha_veto, canvas for TRGEFF efficiency, stt bit
TCanvas * m_nobha_cP3_y_eff
remove the bha_veto, canvas for TRGEFF efficiency, y bit
TCanvas * m_c_nobha_hie_E_eff
remove the bha_veto, canvas for TRGEFF efficiency, hie bit
Belle2::MonitoringObject * m_mon_trgeff
MonitoringObject for trg.
TEfficiency * m_nobha_fyo_dphi_eff
remove the bha_veto, the efficiency of dphi for fyo bit
TCanvas * m_c_nobha_stt_phi_eff
remove the bha_veto, canvas for TRGEFF efficiency, stt bit
TEfficiency * m_ecltiming_E_eff
the efficiency of phi for ecltiming bit
TEfficiency * m_nobha_phi_z_eff
remove the bha_veto, the efficiency of phi for z bit
TEfficiency * m_nobha_stt_P3_eff
remove the bha_veto, the efficiency of p for stt bit
std::vector< std::tuple< std::string, TEfficiency **, TCanvas *, std::string, std::string > > m_efficiencyList
Combined efficiency list,the histogram, efficiency, Canvas, title, Xtitle
TEfficiency * m_nobha_hP3_y_eff
remove the bha_veto, the efficiency of p for y bit
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
void setVariable(const std::string &var, float val, float upErr=-1., float dwErr=-1)
set value to float variable (new variable is made if not yet existing)
void addCanvas(TCanvas *canv)
Add Canvas to monitoring object.
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.