Belle II Software  release-06-02-00
DQMHistAnalysisTRGGDL.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 include
10 #include <dqm/analysis/modules/DQMHistAnalysisTRGGDL.h>
11 
12 //DQM
13 #include <dqm/analysis/modules/DQMHistAnalysis.h>
14 
15 #include <TH1F.h>
16 #include <TH2F.h>
17 #include <TCanvas.h>
18 #include <TPaveText.h>
19 #include <TLine.h>
20 #include <TClass.h>
21 #include <TStyle.h>
22 #include <TROOT.h>
23 
24 #include <fstream>
25 #include <iostream>
26 #include <vector>
27 #include <algorithm>
28 
29 using namespace std;
30 using namespace Belle2;
31 
32 //-----------------------------------------------------------------
33 // Register module
34 //-----------------------------------------------------------------
35 
36 REG_MODULE(DQMHistAnalysisTRGGDL);
37 
38 DQMHistAnalysisTRGGDLModule::DQMHistAnalysisTRGGDLModule()
40 {
41  // set module description (e.g. insert text)
42  setDescription("Modify and analyze the data quality histograms of TRGGDL");
44  addParam("debug", m_debug, "debug mode", false);
45  addParam("alert", m_enableAlert, "Enable color alert", true);
46  addParam("useEpics", m_useEpics, "Whether to update EPICS PVs.", false);
47 }
48 
50 {
51 #ifdef _BELLE2_EPICS
52  if (m_useEpics) {
53  if (ca_current_context()) ca_context_destroy();
54  }
55 #endif
56 }
57 
59 {
60  gROOT->cd();
61 
62  for (unsigned iskim = 0; iskim < nskim_gdldqm; iskim++) {
63  char charhist_eff[1000];
64  sprintf(charhist_eff, "hGDL_ana_eff_%s", skim_smap[iskim].c_str());
65  m_h_eff[iskim] = new TH1D(charhist_eff, charhist_eff, n_eff, 0, n_eff);
66  sprintf(charhist_eff, "hGDL_ana_eff_fast_%s", skim_smap[iskim].c_str());
67  m_h_eff_fast[iskim] = new TH1D(charhist_eff, charhist_eff, n_eff, 0, n_eff);
68  for (int i = 0; i < n_eff; i++) {
69  m_h_eff[iskim]->GetXaxis()->SetBinLabel(i + 1, c_eff[i]);
70  m_h_eff_fast[iskim]->GetXaxis()->SetBinLabel(i + 1, c_eff[i]);
71  }
72  char charhist_c_eff[1000];
73  sprintf(charhist_c_eff, "TRGGDL/hGDL_ana_eff_%s", skim_smap[iskim].c_str());
74  m_c_eff[iskim] = new TCanvas(charhist_c_eff);
75  sprintf(charhist_c_eff, "TRGGDL/hGDL_ana_eff_fast_%s", skim_smap[iskim].c_str());
76  m_c_eff_fast[iskim] = new TCanvas(charhist_c_eff);
77  }
78 
79  m_h_eff_shifter = new TH1D("hGDL_ana_eff_shifter", "hGDL_ana_eff_shifter", n_eff_shifter, 0, n_eff_shifter);
80  m_h_eff_shifter->GetYaxis()->SetTitle("efficiency");
81  m_h_eff_shifter_fast = new TH1D("hGDL_ana_eff_shifter_fast", "hGDL_ana_eff_shifter_fast", n_eff_shifter, 0, n_eff_shifter);
82  m_h_eff_shifter_fast->GetYaxis()->SetTitle("efficiency");
83  for (int i = 0; i < n_eff_shifter; i++) {
84  m_h_eff_shifter->GetXaxis()->SetBinLabel(i + 1, c_eff_shifter[i]);
85  m_h_eff_shifter_fast->GetXaxis()->SetBinLabel(i + 1, c_eff_shifter[i]);
86  m_line_limit_low_shifter[i] = new TLine(i, m_limit_low_shifter[i], i + 1, m_limit_low_shifter[i]);
88  }
89  m_c_eff_shifter = new TCanvas("TRGGDL/hGDL_ana_eff_shifter");
90  m_c_eff_shifter_fast = new TCanvas("TRGGDL/hGDL_ana_eff_shifter_fast");
91 
92  m_h_pure_eff = new TH1D("hGDL_ana_pure_eff", "hGDL_ana_pure_eff", n_pure_eff, 0, n_pure_eff);
93  for (int i = 0; i < n_pure_eff; i++) {
94  m_h_pure_eff->GetXaxis()->SetBinLabel(i + 1, c_pure_eff[i]);
95  }
96  m_c_pure_eff = new TCanvas("TRGGDL/hGDL_ana_pure_eff");
97 
98 
99  m_rtype = findHist("DQMInfo/rtype");
100  m_runtype = m_rtype ? m_rtype->GetTitle() : "";
101 
102 #ifdef _BELLE2_EPICS
103  if (m_useEpics) {
104  if (!ca_current_context()) SEVCHK(ca_context_create(ca_disable_preemptive_callback), "ca_context_create");
105  for (int i = 0; i < n_eff_shifter; i++) {
106  std::string aa = "TRGAna:eff_shift_" + std::to_string(i);
107  SEVCHK(ca_create_channel(aa.c_str(), NULL, NULL, 10, &mychid[i]), "ca_create_channel failure");
108  // Read LO and HI limits from EPICS, seems this needs additional channels?
109  // SEVCHK(ca_get(DBR_DOUBLE,mychid[i],(void*)&data),"ca_get failure"); // data is only valid after ca_pend_io!!
110  }
111  for (int i = 0; i < nskim_gdldqm; i++) {
112  std::string aa = "TRGAna:entry_" + std::to_string(i);
113  SEVCHK(ca_create_channel(aa.c_str(), NULL, NULL, 10, &mychid_entry[i]), "ca_create_channel failure");
114  }
115  SEVCHK(ca_pend_io(5.0), "ca_pend_io failure");
116  }
117 #endif
118 
119  B2DEBUG(20, "DQMHistAnalysisTRGGDL: initialized.");
120 }
121 
123 {
124 }
125 
127 {
128 
129  for (unsigned iskim = 0; iskim < nskim_gdldqm; iskim++) {
130 
131  //get histo
132  char c_psn[1000];
133  sprintf(c_psn, "TRGGDL/hGDL_psn_extra_fast_%s", skim_smap[iskim].c_str());
134  m_h_psn_extra_fast[iskim] = (TH1D*)findHist(c_psn);
136  if (m_h_psn_extra_fast[iskim] == nullptr) {
137  B2WARNING("Histogram/canvas named TRGGDL/hGDL_psn_extra_fast is not found.");
138  continue;
139  }
140 
141  //fill efficiency values
142  if (m_h_psn_extra_fast[iskim]->GetBinContent(0 + 1) == 0)continue;
143  if (m_h_psn_extra_fast[iskim]->GetBinContent(5 + 1) == 0)continue;
144  m_h_eff_fast[iskim]->SetBinContent(1, m_h_psn_extra_fast[iskim]->GetBinContent(1 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
145  5 + 1)); //fff with c4|hie
146  m_h_eff_fast[iskim]->SetBinContent(2, m_h_psn_extra_fast[iskim]->GetBinContent(2 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
147  5 + 1)); //ffo with c4|hie
148  m_h_eff_fast[iskim]->SetBinContent(3, m_h_psn_extra_fast[iskim]->GetBinContent(3 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
149  5 + 1)); //ffb with c4|hie
150  m_h_eff_fast[iskim]->SetBinContent(4, m_h_psn_extra_fast[iskim]->GetBinContent(19 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
151  5 + 1)); //ffy with c4|hie
152  m_h_eff_fast[iskim]->SetBinContent(5, m_h_psn_extra_fast[iskim]->GetBinContent(20 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
153  5 + 1)); //fyo with c4|hie
154  m_h_eff_fast[iskim]->SetBinContent(6, m_h_psn_extra_fast[iskim]->GetBinContent(21 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
155  5 + 1)); //fyb with c4|hie
156  m_h_eff_fast[iskim]->SetBinError(1, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(1 + 1)) /
157  m_h_psn_extra_fast[iskim]->GetBinContent(
158  5 + 1)); //fff with c4|hie
159  m_h_eff_fast[iskim]->SetBinError(2, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(2 + 1)) /
160  m_h_psn_extra_fast[iskim]->GetBinContent(
161  5 + 1)); //ffo with c4|hie
162  m_h_eff_fast[iskim]->SetBinError(3, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(3 + 1)) /
163  m_h_psn_extra_fast[iskim]->GetBinContent(
164  5 + 1)); //ffb with c4|hie
165  m_h_eff_fast[iskim]->SetBinError(4, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(19 + 1)) /
166  m_h_psn_extra_fast[iskim]->GetBinContent(
167  5 + 1)); //ffy with c4|hie
168  m_h_eff_fast[iskim]->SetBinError(5, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(20 + 1)) /
169  m_h_psn_extra_fast[iskim]->GetBinContent(
170  5 + 1)); //fyo with c4|hie
171  m_h_eff_fast[iskim]->SetBinError(6, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(21 + 1)) /
172  m_h_psn_extra_fast[iskim]->GetBinContent(
173  5 + 1)); //fyb with c4|hie
174 
175  if (m_h_psn_extra_fast[iskim]->GetBinContent(6 + 1) == 0)continue;
176  m_h_eff_fast[iskim]->SetBinContent(7, m_h_psn_extra_fast[iskim]->GetBinContent(27 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
177  6 + 1)); //hie with fff|ffo|ffb
178  m_h_eff_fast[iskim]->SetBinContent(8, m_h_psn_extra_fast[iskim]->GetBinContent(26 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
179  6 + 1)); //c4 with fff|ffo|ffb
180  m_h_eff_fast[iskim]->SetBinContent(9, m_h_psn_extra_fast[iskim]->GetBinContent(28 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
181  6 + 1)); //lml0 with fff|ffo|ffb
182  m_h_eff_fast[iskim]->SetBinContent(10, m_h_psn_extra_fast[iskim]->GetBinContent(29 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
183  6 + 1)); //lml1 with fff|ffo|ffb
184  m_h_eff_fast[iskim]->SetBinContent(11, m_h_psn_extra_fast[iskim]->GetBinContent(30 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
185  6 + 1)); //lml2 with fff|ffo|ffb
186  m_h_eff_fast[iskim]->SetBinContent(12, m_h_psn_extra_fast[iskim]->GetBinContent(31 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
187  6 + 1)); //lml3 with fff|ffo|ffb
188  m_h_eff_fast[iskim]->SetBinContent(13, m_h_psn_extra_fast[iskim]->GetBinContent(32 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
189  6 + 1)); //lml4 with fff|ffo|ffb
190  m_h_eff_fast[iskim]->SetBinContent(14, m_h_psn_extra_fast[iskim]->GetBinContent(33 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
191  6 + 1)); //lml5 with fff|ffo|ffb
192  m_h_eff_fast[iskim]->SetBinContent(15, m_h_psn_extra_fast[iskim]->GetBinContent(34 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
193  6 + 1)); //lml6 with fff|ffo|ffb
194  m_h_eff_fast[iskim]->SetBinContent(16, m_h_psn_extra_fast[iskim]->GetBinContent(35 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
195  6 + 1)); //lml7 with fff|ffo|ffb
196  m_h_eff_fast[iskim]->SetBinContent(17, m_h_psn_extra_fast[iskim]->GetBinContent(36 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
197  6 + 1)); //lml8 with fff|ffo|ffb
198  m_h_eff_fast[iskim]->SetBinContent(18, m_h_psn_extra_fast[iskim]->GetBinContent(37 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
199  6 + 1)); //lml9 with fff|ffo|ffb
200  m_h_eff_fast[iskim]->SetBinContent(19, m_h_psn_extra_fast[iskim]->GetBinContent(38 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
201  6 + 1)); //lml10 with fff|ffo|ffb
202  m_h_eff_fast[iskim]->SetBinContent(20, m_h_psn_extra_fast[iskim]->GetBinContent(39 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
203  6 + 1)); //lml12 with fff|ffo|ffb
204  m_h_eff_fast[iskim]->SetBinContent(21, m_h_psn_extra_fast[iskim]->GetBinContent(40 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
205  6 + 1)); //lml13 with fff|ffo|ffb
206  m_h_eff_fast[iskim]->SetBinContent(22, m_h_psn_extra_fast[iskim]->GetBinContent(9 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
207  0 + 1)); //bha3d with all
208  m_h_eff_fast[iskim]->SetBinContent(23, m_h_psn_extra_fast[iskim]->GetBinContent(42 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
209  6 + 1)); //mu_b2b with fff|ffo|ffb
210  m_h_eff_fast[iskim]->SetBinError(7, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(27 + 1)) /
211  m_h_psn_extra_fast[iskim]->GetBinContent(
212  6 + 1)); //hie with fff|ffo|ffb
213  m_h_eff_fast[iskim]->SetBinError(8, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(26 + 1)) /
214  m_h_psn_extra_fast[iskim]->GetBinContent(
215  6 + 1)); //c4 with fff|ffo|ffb
216  m_h_eff_fast[iskim]->SetBinError(9, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(28 + 1)) /
217  m_h_psn_extra_fast[iskim]->GetBinContent(
218  6 + 1)); //lml0 with fff|ffo|ffb
219  m_h_eff_fast[iskim]->SetBinError(10, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(29 + 1)) /
220  m_h_psn_extra_fast[iskim]->GetBinContent(
221  6 + 1)); //lml1 with fff|ffo|ffb
222  m_h_eff_fast[iskim]->SetBinError(11, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(30 + 1)) /
223  m_h_psn_extra_fast[iskim]->GetBinContent(
224  6 + 1)); //lml2 with fff|ffo|ffb
225  m_h_eff_fast[iskim]->SetBinError(12, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(31 + 1)) /
226  m_h_psn_extra_fast[iskim]->GetBinContent(
227  6 + 1)); //lml3 with fff|ffo|ffb
228  m_h_eff_fast[iskim]->SetBinError(13, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(32 + 1)) /
229  m_h_psn_extra_fast[iskim]->GetBinContent(
230  6 + 1)); //lml4 with fff|ffo|ffb
231  m_h_eff_fast[iskim]->SetBinError(14, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(33 + 1)) /
232  m_h_psn_extra_fast[iskim]->GetBinContent(
233  6 + 1)); //lml5 with fff|ffo|ffb
234  m_h_eff_fast[iskim]->SetBinError(15, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(34 + 1)) /
235  m_h_psn_extra_fast[iskim]->GetBinContent(
236  6 + 1)); //lml6 with fff|ffo|ffb
237  m_h_eff_fast[iskim]->SetBinError(16, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(35 + 1)) /
238  m_h_psn_extra_fast[iskim]->GetBinContent(
239  6 + 1)); //lml7 with fff|ffo|ffb
240  m_h_eff_fast[iskim]->SetBinError(17, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(36 + 1)) /
241  m_h_psn_extra_fast[iskim]->GetBinContent(
242  6 + 1)); //lml8 with fff|ffo|ffb
243  m_h_eff_fast[iskim]->SetBinError(18, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(37 + 1)) /
244  m_h_psn_extra_fast[iskim]->GetBinContent(
245  6 + 1)); //lml9 with fff|ffo|ffb
246  m_h_eff_fast[iskim]->SetBinError(19, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(38 + 1)) /
247  m_h_psn_extra_fast[iskim]->GetBinContent(
248  6 + 1)); //lml10 with fff|ffo|ffb
249  m_h_eff_fast[iskim]->SetBinError(20, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(39 + 1)) /
250  m_h_psn_extra_fast[iskim]->GetBinContent(
251  6 + 1)); //lml12 with fff|ffo|ffb
252  m_h_eff_fast[iskim]->SetBinError(21, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(40 + 1)) /
253  m_h_psn_extra_fast[iskim]->GetBinContent(
254  6 + 1)); //lml13 with fff|ffo|ffb
255  m_h_eff_fast[iskim]->SetBinError(22, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(9 + 1)) /
256  m_h_psn_extra_fast[iskim]->GetBinContent(
257  0 + 1)); //bha3d with all
258  m_h_eff_fast[iskim]->SetBinError(23, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(42 + 1)) /
259  m_h_psn_extra_fast[iskim]->GetBinContent(
260  6 + 1)); //mu_b2b with fff|ffo|ffb
261 
262  if (m_h_psn_extra_fast[iskim]->GetBinContent(14 + 1) == 0)continue;
263  m_h_eff_fast[iskim]->SetBinContent(24, m_h_psn_extra_fast[iskim]->GetBinContent(48 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
264  14 + 1)); //mu_b2b with lml|eclmumu
265  m_h_eff_fast[iskim]->SetBinContent(25, m_h_psn_extra_fast[iskim]->GetBinContent(49 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
266  14 + 1)); //mu_eb2b with lml|eclmumu
267  m_h_eff_fast[iskim]->SetBinContent(26, m_h_psn_extra_fast[iskim]->GetBinContent(50 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
268  14 + 1)); //cdcklm1 with fff|ffo|ffb
269  m_h_eff_fast[iskim]->SetBinContent(27, m_h_psn_extra_fast[iskim]->GetBinContent(51 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
270  14 + 1)); //cdcklm2 with fff|ffo|ffb
271  m_h_eff_fast[iskim]->SetBinContent(28, m_h_psn_extra_fast[iskim]->GetBinContent(15 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
272  14 + 1)); //fff with lml|eclmumu
273  m_h_eff_fast[iskim]->SetBinContent(29, m_h_psn_extra_fast[iskim]->GetBinContent(16 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
274  14 + 1)); //ffo with lml|eclmumu
275  m_h_eff_fast[iskim]->SetBinContent(30, m_h_psn_extra_fast[iskim]->GetBinContent(17 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
276  14 + 1)); //ffb with lml|eclmumu
277  m_h_eff_fast[iskim]->SetBinContent(31, m_h_psn_extra_fast[iskim]->GetBinContent(11 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
278  14 + 1)); //ff with lml|eclmumu
279  m_h_eff_fast[iskim]->SetBinContent(32, m_h_psn_extra_fast[iskim]->GetBinContent(13 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
280  14 + 1)); //f with lml|eclmumu
281  m_h_eff_fast[iskim]->SetBinContent(33, m_h_psn_extra_fast[iskim]->GetBinContent(23 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
282  14 + 1)); //ffy with lml|eclmumu
283  m_h_eff_fast[iskim]->SetBinContent(34, m_h_psn_extra_fast[iskim]->GetBinContent(24 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
284  14 + 1)); //fyo with lml|eclmumu
285  m_h_eff_fast[iskim]->SetBinContent(35, m_h_psn_extra_fast[iskim]->GetBinContent(25 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
286  14 + 1)); //fyb with lml|eclmumu
287  m_h_eff_fast[iskim]->SetBinError(24, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(48 + 1)) /
288  m_h_psn_extra_fast[iskim]->GetBinContent(
289  14 + 1)); //mu_b2b with lml|eclmumu
290  m_h_eff_fast[iskim]->SetBinError(25, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(49 + 1)) /
291  m_h_psn_extra_fast[iskim]->GetBinContent(
292  14 + 1)); //mu_eb2b with lml|eclmumu
293  m_h_eff_fast[iskim]->SetBinError(26, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(50 + 1)) /
294  m_h_psn_extra_fast[iskim]->GetBinContent(
295  14 + 1)); //cdcklm1 with lml|eclmumu
296  m_h_eff_fast[iskim]->SetBinError(27, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(51 + 1)) /
297  m_h_psn_extra_fast[iskim]->GetBinContent(
298  14 + 1)); //cdcklm2 with lml|eclmumu
299  m_h_eff_fast[iskim]->SetBinError(28, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(15 + 1)) /
300  m_h_psn_extra_fast[iskim]->GetBinContent(
301  14 + 1)); //fff with lml|eclmumu
302  m_h_eff_fast[iskim]->SetBinError(29, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(16 + 1)) /
303  m_h_psn_extra_fast[iskim]->GetBinContent(
304  14 + 1)); //ffo with lml|eclmumu
305  m_h_eff_fast[iskim]->SetBinError(30, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(17 + 1)) /
306  m_h_psn_extra_fast[iskim]->GetBinContent(
307  14 + 1)); //ffb with lml|eclmumu
308  m_h_eff_fast[iskim]->SetBinError(31, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(11 + 1)) /
309  m_h_psn_extra_fast[iskim]->GetBinContent(
310  14 + 1)); //ff with lml|eclmumu
311  m_h_eff_fast[iskim]->SetBinError(32, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(13 + 1)) /
312  m_h_psn_extra_fast[iskim]->GetBinContent(
313  14 + 1)); //f with lml|eclmumu
314  m_h_eff_fast[iskim]->SetBinError(33, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(23 + 1)) /
315  m_h_psn_extra_fast[iskim]->GetBinContent(
316  14 + 1)); //ffy with lml|eclmumu
317  m_h_eff_fast[iskim]->SetBinError(34, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(24 + 1)) /
318  m_h_psn_extra_fast[iskim]->GetBinContent(
319  14 + 1)); //fyo with lml|eclmumu
320  m_h_eff_fast[iskim]->SetBinError(35, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(25 + 1)) /
321  m_h_psn_extra_fast[iskim]->GetBinContent(
322  14 + 1)); //fyb with lml|eclmumu
323 
324  m_h_eff_fast[iskim]->SetBinContent(36, m_h_psn_extra_fast[iskim]->GetBinContent(55 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
325  6 + 1)); //cdcecl2 with fff|ffo|ffb
326  m_h_eff_fast[iskim]->SetBinContent(37, m_h_psn_extra_fast[iskim]->GetBinContent(68 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
327  14 + 1)); //ecleklm with lml|eclmumu
328  m_h_eff_fast[iskim]->SetBinContent(38, m_h_psn_extra_fast[iskim]->GetBinContent(74 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
329  5 + 1)); //syo with c4|hie
330  m_h_eff_fast[iskim]->SetBinContent(39, m_h_psn_extra_fast[iskim]->GetBinContent(75 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
331  5 + 1)); //yioiecl1 with c4|hie
332  m_h_eff_fast[iskim]->SetBinContent(40, m_h_psn_extra_fast[iskim]->GetBinContent(76 + 1) / m_h_psn_extra_fast[iskim]->GetBinContent(
333  5 + 1)); //stt with c4|hie
334 
335  m_h_eff_fast[iskim]->SetBinError(36, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(55 + 1)) /
336  m_h_psn_extra_fast[iskim]->GetBinContent(
337  6 + 1)); //cdcecl2 with fff|ffo|ffb
338  m_h_eff_fast[iskim]->SetBinError(37, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(68 + 1)) /
339  m_h_psn_extra_fast[iskim]->GetBinContent(
340  14 + 1)); //ecleklm with lml|eclmumu
341  m_h_eff_fast[iskim]->SetBinError(38, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(74 + 1)) /
342  m_h_psn_extra_fast[iskim]->GetBinContent(
343  5 + 1)); //syo with c4|hie
344  m_h_eff_fast[iskim]->SetBinError(39, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(75 + 1)) /
345  m_h_psn_extra_fast[iskim]->GetBinContent(
346  5 + 1)); //yioiecl1 with c4|hie
347  m_h_eff_fast[iskim]->SetBinError(40, sqrt(m_h_psn_extra_fast[iskim]->GetBinContent(76 + 1)) /
348  m_h_psn_extra_fast[iskim]->GetBinContent(
349  5 + 1)); //stt with c4|hie
350  }
351 
352  for (unsigned iskim = 0; iskim < nskim_gdldqm; iskim++) {
353 
354  //get histo
355  char c_psn[1000];
356  sprintf(c_psn, "TRGGDL/hGDL_psn_extra_%s", skim_smap[iskim].c_str());
357  m_h_psn_extra[iskim] = (TH1D*)findHist(c_psn);
359  if (m_h_psn_extra[iskim] == nullptr) {
360  B2WARNING("Histogram/canvas named TRGGDL/hGDL_psn_extra is not found.");
361  continue;
362  }
363 
364  //fill efficiency values
365  if (m_h_psn_extra[iskim]->GetBinContent(0 + 1) == 0)continue;
366  if (m_h_psn_extra[iskim]->GetBinContent(5 + 1) == 0)continue;
367  m_h_eff[iskim]->SetBinContent(1, m_h_psn_extra[iskim]->GetBinContent(1 + 1) / m_h_psn_extra[iskim]->GetBinContent(
368  5 + 1)); //fff with c4|hie
369  m_h_eff[iskim]->SetBinContent(2, m_h_psn_extra[iskim]->GetBinContent(2 + 1) / m_h_psn_extra[iskim]->GetBinContent(
370  5 + 1)); //ffo with c4|hie
371  m_h_eff[iskim]->SetBinContent(3, m_h_psn_extra[iskim]->GetBinContent(3 + 1) / m_h_psn_extra[iskim]->GetBinContent(
372  5 + 1)); //ffb with c4|hie
373  m_h_eff[iskim]->SetBinContent(4, m_h_psn_extra[iskim]->GetBinContent(19 + 1) / m_h_psn_extra[iskim]->GetBinContent(
374  5 + 1)); //ffy with c4|hie
375  m_h_eff[iskim]->SetBinContent(5, m_h_psn_extra[iskim]->GetBinContent(20 + 1) / m_h_psn_extra[iskim]->GetBinContent(
376  5 + 1)); //fyo with c4|hie
377  m_h_eff[iskim]->SetBinContent(6, m_h_psn_extra[iskim]->GetBinContent(21 + 1) / m_h_psn_extra[iskim]->GetBinContent(
378  5 + 1)); //fyb with c4|hie
379  m_h_eff[iskim]->SetBinError(1, sqrt(m_h_psn_extra[iskim]->GetBinContent(1 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
380  5 + 1)); //fff with c4|hie
381  m_h_eff[iskim]->SetBinError(2, sqrt(m_h_psn_extra[iskim]->GetBinContent(2 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
382  5 + 1)); //ffo with c4|hie
383  m_h_eff[iskim]->SetBinError(3, sqrt(m_h_psn_extra[iskim]->GetBinContent(3 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
384  5 + 1)); //ffb with c4|hie
385  m_h_eff[iskim]->SetBinError(4, sqrt(m_h_psn_extra[iskim]->GetBinContent(19 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
386  5 + 1)); //ffy with c4|hie
387  m_h_eff[iskim]->SetBinError(5, sqrt(m_h_psn_extra[iskim]->GetBinContent(20 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
388  5 + 1)); //fyo with c4|hie
389  m_h_eff[iskim]->SetBinError(6, sqrt(m_h_psn_extra[iskim]->GetBinContent(21 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
390  5 + 1)); //fyb with c4|hie
391 
392  if (m_h_psn_extra[iskim]->GetBinContent(6 + 1) == 0)continue;
393  m_h_eff[iskim]->SetBinContent(7, m_h_psn_extra[iskim]->GetBinContent(27 + 1) / m_h_psn_extra[iskim]->GetBinContent(
394  6 + 1)); //hie with fff|ffo|ffb
395  m_h_eff[iskim]->SetBinContent(8, m_h_psn_extra[iskim]->GetBinContent(26 + 1) / m_h_psn_extra[iskim]->GetBinContent(
396  6 + 1)); //c4 with fff|ffo|ffb
397  m_h_eff[iskim]->SetBinContent(9, m_h_psn_extra[iskim]->GetBinContent(28 + 1) / m_h_psn_extra[iskim]->GetBinContent(
398  6 + 1)); //lml0 with fff|ffo|ffb
399  m_h_eff[iskim]->SetBinContent(10, m_h_psn_extra[iskim]->GetBinContent(29 + 1) / m_h_psn_extra[iskim]->GetBinContent(
400  6 + 1)); //lml1 with fff|ffo|ffb
401  m_h_eff[iskim]->SetBinContent(11, m_h_psn_extra[iskim]->GetBinContent(30 + 1) / m_h_psn_extra[iskim]->GetBinContent(
402  6 + 1)); //lml2 with fff|ffo|ffb
403  m_h_eff[iskim]->SetBinContent(12, m_h_psn_extra[iskim]->GetBinContent(31 + 1) / m_h_psn_extra[iskim]->GetBinContent(
404  6 + 1)); //lml3 with fff|ffo|ffb
405  m_h_eff[iskim]->SetBinContent(13, m_h_psn_extra[iskim]->GetBinContent(32 + 1) / m_h_psn_extra[iskim]->GetBinContent(
406  6 + 1)); //lml4 with fff|ffo|ffb
407  m_h_eff[iskim]->SetBinContent(14, m_h_psn_extra[iskim]->GetBinContent(33 + 1) / m_h_psn_extra[iskim]->GetBinContent(
408  6 + 1)); //lml5 with fff|ffo|ffb
409  m_h_eff[iskim]->SetBinContent(15, m_h_psn_extra[iskim]->GetBinContent(34 + 1) / m_h_psn_extra[iskim]->GetBinContent(
410  6 + 1)); //lml6 with fff|ffo|ffb
411  m_h_eff[iskim]->SetBinContent(16, m_h_psn_extra[iskim]->GetBinContent(35 + 1) / m_h_psn_extra[iskim]->GetBinContent(
412  6 + 1)); //lml7 with fff|ffo|ffb
413  m_h_eff[iskim]->SetBinContent(17, m_h_psn_extra[iskim]->GetBinContent(36 + 1) / m_h_psn_extra[iskim]->GetBinContent(
414  6 + 1)); //lml8 with fff|ffo|ffb
415  m_h_eff[iskim]->SetBinContent(18, m_h_psn_extra[iskim]->GetBinContent(37 + 1) / m_h_psn_extra[iskim]->GetBinContent(
416  6 + 1)); //lml9 with fff|ffo|ffb
417  m_h_eff[iskim]->SetBinContent(19, m_h_psn_extra[iskim]->GetBinContent(38 + 1) / m_h_psn_extra[iskim]->GetBinContent(
418  6 + 1)); //lml10 with fff|ffo|ffb
419  m_h_eff[iskim]->SetBinContent(20, m_h_psn_extra[iskim]->GetBinContent(39 + 1) / m_h_psn_extra[iskim]->GetBinContent(
420  6 + 1)); //lml12 with fff|ffo|ffb
421  m_h_eff[iskim]->SetBinContent(21, m_h_psn_extra[iskim]->GetBinContent(40 + 1) / m_h_psn_extra[iskim]->GetBinContent(
422  6 + 1)); //lml13 with fff|ffo|ffb
423  m_h_eff[iskim]->SetBinContent(22, m_h_psn_extra[iskim]->GetBinContent(9 + 1) / m_h_psn_extra[iskim]->GetBinContent(
424  0 + 1)); //bha3d with all
425  m_h_eff[iskim]->SetBinContent(23, m_h_psn_extra[iskim]->GetBinContent(42 + 1) / m_h_psn_extra[iskim]->GetBinContent(
426  6 + 1)); //mu_b2b with fff|ffo|ffb
427  m_h_eff[iskim]->SetBinError(7, sqrt(m_h_psn_extra[iskim]->GetBinContent(27 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
428  6 + 1)); //hie with fff|ffo|ffb
429  m_h_eff[iskim]->SetBinError(8, sqrt(m_h_psn_extra[iskim]->GetBinContent(26 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
430  6 + 1)); //c4 with fff|ffo|ffb
431  m_h_eff[iskim]->SetBinError(9, sqrt(m_h_psn_extra[iskim]->GetBinContent(28 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
432  6 + 1)); //lml0 with fff|ffo|ffb
433  m_h_eff[iskim]->SetBinError(10, sqrt(m_h_psn_extra[iskim]->GetBinContent(29 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
434  6 + 1)); //lml1 with fff|ffo|ffb
435  m_h_eff[iskim]->SetBinError(11, sqrt(m_h_psn_extra[iskim]->GetBinContent(30 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
436  6 + 1)); //lml2 with fff|ffo|ffb
437  m_h_eff[iskim]->SetBinError(12, sqrt(m_h_psn_extra[iskim]->GetBinContent(31 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
438  6 + 1)); //lml3 with fff|ffo|ffb
439  m_h_eff[iskim]->SetBinError(13, sqrt(m_h_psn_extra[iskim]->GetBinContent(32 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
440  6 + 1)); //lml4 with fff|ffo|ffb
441  m_h_eff[iskim]->SetBinError(14, sqrt(m_h_psn_extra[iskim]->GetBinContent(33 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
442  6 + 1)); //lml5 with fff|ffo|ffb
443  m_h_eff[iskim]->SetBinError(15, sqrt(m_h_psn_extra[iskim]->GetBinContent(34 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
444  6 + 1)); //lml6 with fff|ffo|ffb
445  m_h_eff[iskim]->SetBinError(16, sqrt(m_h_psn_extra[iskim]->GetBinContent(35 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
446  6 + 1)); //lml7 with fff|ffo|ffb
447  m_h_eff[iskim]->SetBinError(17, sqrt(m_h_psn_extra[iskim]->GetBinContent(36 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
448  6 + 1)); //lml8 with fff|ffo|ffb
449  m_h_eff[iskim]->SetBinError(18, sqrt(m_h_psn_extra[iskim]->GetBinContent(37 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
450  6 + 1)); //lml9 with fff|ffo|ffb
451  m_h_eff[iskim]->SetBinError(19, sqrt(m_h_psn_extra[iskim]->GetBinContent(38 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
452  6 + 1)); //lml10 with fff|ffo|ffb
453  m_h_eff[iskim]->SetBinError(20, sqrt(m_h_psn_extra[iskim]->GetBinContent(39 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
454  6 + 1)); //lml12 with fff|ffo|ffb
455  m_h_eff[iskim]->SetBinError(21, sqrt(m_h_psn_extra[iskim]->GetBinContent(40 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
456  6 + 1)); //lml13 with fff|ffo|ffb
457  m_h_eff[iskim]->SetBinError(22, sqrt(m_h_psn_extra[iskim]->GetBinContent(9 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
458  0 + 1)); //bha3d with all
459  m_h_eff[iskim]->SetBinError(23, sqrt(m_h_psn_extra[iskim]->GetBinContent(42 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
460  6 + 1)); //mu_b2b with fff|ffo|ffb
461 
462  if (m_h_psn_extra[iskim]->GetBinContent(14 + 1) == 0)continue;
463  m_h_eff[iskim]->SetBinContent(24, m_h_psn_extra[iskim]->GetBinContent(48 + 1) / m_h_psn_extra[iskim]->GetBinContent(
464  14 + 1)); //mu_b2b with lml|eclmumu
465  m_h_eff[iskim]->SetBinContent(25, m_h_psn_extra[iskim]->GetBinContent(49 + 1) / m_h_psn_extra[iskim]->GetBinContent(
466  14 + 1)); //mu_eb2b with lml|eclmumu
467  m_h_eff[iskim]->SetBinContent(26, m_h_psn_extra[iskim]->GetBinContent(50 + 1) / m_h_psn_extra[iskim]->GetBinContent(
468  14 + 1)); //cdcklm1 with fff|ffo|ffb
469  m_h_eff[iskim]->SetBinContent(27, m_h_psn_extra[iskim]->GetBinContent(51 + 1) / m_h_psn_extra[iskim]->GetBinContent(
470  14 + 1)); //cdcklm2 with fff|ffo|ffb
471  m_h_eff[iskim]->SetBinContent(28, m_h_psn_extra[iskim]->GetBinContent(15 + 1) / m_h_psn_extra[iskim]->GetBinContent(
472  14 + 1)); //fff with lml|eclmumu
473  m_h_eff[iskim]->SetBinContent(29, m_h_psn_extra[iskim]->GetBinContent(16 + 1) / m_h_psn_extra[iskim]->GetBinContent(
474  14 + 1)); //ffo with lml|eclmumu
475  m_h_eff[iskim]->SetBinContent(30, m_h_psn_extra[iskim]->GetBinContent(17 + 1) / m_h_psn_extra[iskim]->GetBinContent(
476  14 + 1)); //ffb with lml|eclmumu
477  m_h_eff[iskim]->SetBinContent(31, m_h_psn_extra[iskim]->GetBinContent(11 + 1) / m_h_psn_extra[iskim]->GetBinContent(
478  14 + 1)); //ff with lml|eclmumu
479  m_h_eff[iskim]->SetBinContent(32, m_h_psn_extra[iskim]->GetBinContent(13 + 1) / m_h_psn_extra[iskim]->GetBinContent(
480  14 + 1)); //f with lml|eclmumu
481  m_h_eff[iskim]->SetBinContent(33, m_h_psn_extra[iskim]->GetBinContent(23 + 1) / m_h_psn_extra[iskim]->GetBinContent(
482  14 + 1)); //ffy with lml|eclmumu
483  m_h_eff[iskim]->SetBinContent(34, m_h_psn_extra[iskim]->GetBinContent(24 + 1) / m_h_psn_extra[iskim]->GetBinContent(
484  14 + 1)); //fyo with lml|eclmumu
485  m_h_eff[iskim]->SetBinContent(35, m_h_psn_extra[iskim]->GetBinContent(25 + 1) / m_h_psn_extra[iskim]->GetBinContent(
486  14 + 1)); //fyb with lml|eclmumu
487  m_h_eff[iskim]->SetBinError(24, sqrt(m_h_psn_extra[iskim]->GetBinContent(48 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
488  14 + 1)); //mu_b2b with lml|eclmumu
489  m_h_eff[iskim]->SetBinError(25, sqrt(m_h_psn_extra[iskim]->GetBinContent(49 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
490  14 + 1)); //mu_eb2b with lml|eclmumu
491  m_h_eff[iskim]->SetBinError(26, sqrt(m_h_psn_extra[iskim]->GetBinContent(50 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
492  14 + 1)); //cdcklm1 with lml|eclmumu
493  m_h_eff[iskim]->SetBinError(27, sqrt(m_h_psn_extra[iskim]->GetBinContent(51 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
494  14 + 1)); //cdcklm2 with lml|eclmumu
495  m_h_eff[iskim]->SetBinError(28, sqrt(m_h_psn_extra[iskim]->GetBinContent(15 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
496  14 + 1)); //fff with lml|eclmumu
497  m_h_eff[iskim]->SetBinError(29, sqrt(m_h_psn_extra[iskim]->GetBinContent(16 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
498  14 + 1)); //ffo with lml|eclmumu
499  m_h_eff[iskim]->SetBinError(30, sqrt(m_h_psn_extra[iskim]->GetBinContent(17 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
500  14 + 1)); //ffb with lml|eclmumu
501  m_h_eff[iskim]->SetBinError(31, sqrt(m_h_psn_extra[iskim]->GetBinContent(11 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
502  14 + 1)); //ff with lml|eclmumu
503  m_h_eff[iskim]->SetBinError(32, sqrt(m_h_psn_extra[iskim]->GetBinContent(13 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
504  14 + 1)); //f with lml|eclmumu
505  m_h_eff[iskim]->SetBinError(33, sqrt(m_h_psn_extra[iskim]->GetBinContent(23 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
506  14 + 1)); //ffy with lml|eclmumu
507  m_h_eff[iskim]->SetBinError(34, sqrt(m_h_psn_extra[iskim]->GetBinContent(24 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
508  14 + 1)); //fyo with lml|eclmumu
509  m_h_eff[iskim]->SetBinError(35, sqrt(m_h_psn_extra[iskim]->GetBinContent(25 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
510  14 + 1)); //fyb with lml|eclmumu
511 
512  m_h_eff[iskim]->SetBinContent(36, m_h_psn_extra[iskim]->GetBinContent(55 + 1) / m_h_psn_extra[iskim]->GetBinContent(
513  6 + 1)); //cdcecl2 with fff|ffo|ffb
514  m_h_eff[iskim]->SetBinContent(37, m_h_psn_extra[iskim]->GetBinContent(68 + 1) / m_h_psn_extra[iskim]->GetBinContent(
515  14 + 1)); //ecleklm with lml|eclmumu
516  m_h_eff[iskim]->SetBinContent(38, m_h_psn_extra[iskim]->GetBinContent(74 + 1) / m_h_psn_extra[iskim]->GetBinContent(
517  5 + 1)); //syo with c4|hie
518  m_h_eff[iskim]->SetBinContent(39, m_h_psn_extra[iskim]->GetBinContent(75 + 1) / m_h_psn_extra[iskim]->GetBinContent(
519  5 + 1)); //yioiecl1 with c4|hie
520  m_h_eff[iskim]->SetBinContent(40, m_h_psn_extra[iskim]->GetBinContent(76 + 1) / m_h_psn_extra[iskim]->GetBinContent(
521  5 + 1)); //stt with c4|hie
522 
523  m_h_eff[iskim]->SetBinError(36, sqrt(m_h_psn_extra[iskim]->GetBinContent(55 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
524  6 + 1)); //cdcecl2 with fff|ffo|ffb
525  m_h_eff[iskim]->SetBinError(37, sqrt(m_h_psn_extra[iskim]->GetBinContent(68 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
526  14 + 1)); //ecleklm with lml|eclmumu
527  m_h_eff[iskim]->SetBinError(38, sqrt(m_h_psn_extra[iskim]->GetBinContent(74 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
528  5 + 1)); //syo with c4|hie
529  m_h_eff[iskim]->SetBinError(39, sqrt(m_h_psn_extra[iskim]->GetBinContent(75 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
530  5 + 1)); //yioiecl1 with c4|hie
531  m_h_eff[iskim]->SetBinError(40, sqrt(m_h_psn_extra[iskim]->GetBinContent(76 + 1)) / m_h_psn_extra[iskim]->GetBinContent(
532  5 + 1)); //stt with c4|hie
533  }
534  //fill efficiency for shifter
535  m_h_eff_shifter_fast->SetBinContent(1, m_h_eff_fast[9] ->GetBinContent(0 + 1)); //fff with c4|hie
536  m_h_eff_shifter_fast->SetBinContent(2, m_h_eff_fast[9] ->GetBinContent(1 + 1)); //ffo with c4|hie
537  m_h_eff_shifter_fast->SetBinContent(3, m_h_eff_fast[9] ->GetBinContent(3 + 1)); //ffy with c4|hie
538  m_h_eff_shifter_fast->SetBinContent(4, m_h_eff_fast[9] ->GetBinContent(4 + 1)); //fyo with c4|hie
539  m_h_eff_shifter_fast->SetBinContent(5, m_h_eff_fast[9] ->GetBinContent(6 + 1)); //hie with fff|ffo|ffb
540  m_h_eff_shifter_fast->SetBinContent(6, m_h_eff_fast[9] ->GetBinContent(7 + 1)); //c4 with fff|ffo|ffb
541  m_h_eff_shifter_fast->SetBinContent(7, m_h_eff_fast[10]->GetBinContent(23 + 1)); //mu_b2b with lml|eclmumu
542  m_h_eff_shifter_fast->SetBinContent(8, m_h_eff_fast[10]->GetBinContent(24 + 1)); //mu_eb2b with lml|eclmumu
543  m_h_eff_shifter_fast->SetBinContent(9, m_h_eff_fast[10]->GetBinContent(26 + 1)); //cdcklm2 with lml|eclmumu
544  m_h_eff_shifter_fast->SetBinContent(10, m_h_eff_fast[10]->GetBinContent(35 + 1)); //cdcecl2 with fff|ffo|ffb
545  m_h_eff_shifter_fast->SetBinContent(11, m_h_eff_fast[10]->GetBinContent(36 + 1)); //ecleklm with lml|eclmumu
546  m_h_eff_shifter_fast->SetBinContent(12, m_h_eff_fast[9] ->GetBinContent(37 + 1)); //syo with c4|hie
547  m_h_eff_shifter_fast->SetBinContent(13, m_h_eff_fast[9] ->GetBinContent(38 + 1)); //yioiecl1 with c4|hie
548  m_h_eff_shifter_fast->SetBinContent(14, m_h_eff_fast[9] ->GetBinContent(39 + 1)); //stt with c4|hie
549  m_h_eff_shifter_fast->SetBinError(1, m_h_eff_fast[9] ->GetBinError(0 + 1)); //fff with c4|hie
550  m_h_eff_shifter_fast->SetBinError(2, m_h_eff_fast[9] ->GetBinError(1 + 1)); //ffo with c4|hie
551  m_h_eff_shifter_fast->SetBinError(3, m_h_eff_fast[9] ->GetBinError(3 + 1)); //ffy with c4|hie
552  m_h_eff_shifter_fast->SetBinError(4, m_h_eff_fast[9] ->GetBinError(4 + 1)); //fyo with c4|hie
553  m_h_eff_shifter_fast->SetBinError(5, m_h_eff_fast[9] ->GetBinError(6 + 1)); //hie with fff|ffo|ffb
554  m_h_eff_shifter_fast->SetBinError(6, m_h_eff_fast[9] ->GetBinError(7 + 1)); //c4 with fff|ffo|ffb
555  m_h_eff_shifter_fast->SetBinError(7, m_h_eff_fast[10]->GetBinError(23 + 1)); //mu_b2b with lml|eclmumu
556  m_h_eff_shifter_fast->SetBinError(8, m_h_eff_fast[10]->GetBinError(24 + 1)); //mu_eb2b with lml|eclmumu
557  m_h_eff_shifter_fast->SetBinError(9, m_h_eff_fast[10]->GetBinError(26 + 1)); //cdcklm2 with lml|eclmumu
558  m_h_eff_shifter_fast->SetBinError(10, m_h_eff_fast[10]->GetBinError(35 + 1)); //cdcecl2 with fff|ffo|ffb
559  m_h_eff_shifter_fast->SetBinError(11, m_h_eff_fast[10]->GetBinError(36 + 1)); //ecleklm with lml|eclmumu
560  m_h_eff_shifter_fast->SetBinError(12, m_h_eff_fast[9] ->GetBinError(37 + 1)); //syo with c4|hie
561  m_h_eff_shifter_fast->SetBinError(13, m_h_eff_fast[9] ->GetBinError(38 + 1)); //yioiecl1 with c4|hie
562  m_h_eff_shifter_fast->SetBinError(14, m_h_eff_fast[9] ->GetBinError(39 + 1)); //stt with c4|hie
563 
564  m_h_eff_shifter->SetBinContent(1, m_h_eff[9] ->GetBinContent(0 + 1)); //fff with c4|hie
565  m_h_eff_shifter->SetBinContent(2, m_h_eff[9] ->GetBinContent(1 + 1)); //ffo with c4|hie
566  m_h_eff_shifter->SetBinContent(3, m_h_eff[9] ->GetBinContent(3 + 1)); //ffy with c4|hie
567  m_h_eff_shifter->SetBinContent(4, m_h_eff[9] ->GetBinContent(4 + 1)); //fyo with c4|hie
568  m_h_eff_shifter->SetBinContent(5, m_h_eff[9] ->GetBinContent(6 + 1)); //hie with fff|ffo|ffb
569  m_h_eff_shifter->SetBinContent(6, m_h_eff[9] ->GetBinContent(7 + 1)); //c4 with fff|ffo|ffb
570  m_h_eff_shifter->SetBinContent(7, m_h_eff[10]->GetBinContent(23 + 1)); //mu_b2b with lml|eclmumu
571  m_h_eff_shifter->SetBinContent(8, m_h_eff[10]->GetBinContent(24 + 1)); //mu_eb2b with lml|eclmumu
572  m_h_eff_shifter->SetBinContent(9, m_h_eff[10]->GetBinContent(26 + 1)); //cdcklm2 with lml|eclmumu
573  m_h_eff_shifter->SetBinContent(10, m_h_eff[10]->GetBinContent(35 + 1)); //cdcecl2 with fff|ffo|ffb
574  m_h_eff_shifter->SetBinContent(11, m_h_eff[10]->GetBinContent(36 + 1)); //ecleklm with lml|eclmumu
575  m_h_eff_shifter->SetBinContent(12, m_h_eff[9] ->GetBinContent(37 + 1)); //syo with c4|hie
576  m_h_eff_shifter->SetBinContent(13, m_h_eff[9] ->GetBinContent(38 + 1)); //yioiecl1 with c4|hie
577  m_h_eff_shifter->SetBinContent(14, m_h_eff[9] ->GetBinContent(39 + 1)); //stt with c4|hie
578  m_h_eff_shifter->SetBinError(1, m_h_eff[9] ->GetBinError(0 + 1)); //fff with c4|hie
579  m_h_eff_shifter->SetBinError(2, m_h_eff[9] ->GetBinError(1 + 1)); //ffo with c4|hie
580  m_h_eff_shifter->SetBinError(3, m_h_eff[9] ->GetBinError(3 + 1)); //ffy with c4|hie
581  m_h_eff_shifter->SetBinError(4, m_h_eff[9] ->GetBinError(4 + 1)); //fyo with c4|hie
582  m_h_eff_shifter->SetBinError(5, m_h_eff[9] ->GetBinError(6 + 1)); //hie with fff|ffo|ffb
583  m_h_eff_shifter->SetBinError(6, m_h_eff[9] ->GetBinError(7 + 1)); //c4 with fff|ffo|ffb
584  m_h_eff_shifter->SetBinError(7, m_h_eff[10]->GetBinError(23 + 1)); //mu_b2b with lml|eclmumu
585  m_h_eff_shifter->SetBinError(8, m_h_eff[10]->GetBinError(24 + 1)); //mu_eb2b with lml|eclmumu
586  m_h_eff_shifter->SetBinError(9, m_h_eff[10]->GetBinError(26 + 1)); //cdcklm2 with lml|eclmumu
587  m_h_eff_shifter->SetBinError(10, m_h_eff[10]->GetBinError(35 + 1)); //cdcecl2 with fff|ffo|ffb
588  m_h_eff_shifter->SetBinError(11, m_h_eff[10]->GetBinError(36 + 1)); //ecleklm with lml|eclmumu
589  m_h_eff_shifter->SetBinError(12, m_h_eff[9] ->GetBinError(37 + 1)); //syo with c4|hie
590  m_h_eff_shifter->SetBinError(13, m_h_eff[9] ->GetBinError(38 + 1)); //yioiecl1 with c4|hie
591  m_h_eff_shifter->SetBinError(14, m_h_eff[9] ->GetBinError(39 + 1)); //stt with c4|hie
592 
593 
594  //fill efficiency with offline selection
595  m_h_psn_pure_extra = (TH1D*)findHist("TRGGDL/hGDL_psn_pure_extra_all");
596  if (m_h_psn_pure_extra == nullptr) {
597  B2WARNING("Histogram/canvas named hGDL_psn_pure_extra is not found.");
598  } else {
599  if (m_h_psn_pure_extra->GetBinContent(0 + 1) != 0)
600  m_h_pure_eff->SetBinContent(1, m_h_psn_pure_extra->GetBinContent(1 + 1) / m_h_psn_pure_extra->GetBinContent(
601  0 + 1)); //fff with c4|hie
602  if (m_h_psn_pure_extra->GetBinContent(3 + 1) != 0)
603  m_h_pure_eff->SetBinContent(2, m_h_psn_pure_extra->GetBinContent(4 + 1) / m_h_psn_pure_extra->GetBinContent(
604  3 + 1)); //ffo with c4|hie
605  if (m_h_psn_pure_extra->GetBinContent(6 + 1) != 0)
606  m_h_pure_eff->SetBinContent(3, m_h_psn_pure_extra->GetBinContent(7 + 1) / m_h_psn_pure_extra->GetBinContent(
607  6 + 1)); //ffb with c4|hie
608  if (m_h_psn_pure_extra->GetBinContent(0 + 1) != 0)
609  m_h_pure_eff->SetBinContent(4, m_h_psn_pure_extra->GetBinContent(2 + 1) / m_h_psn_pure_extra->GetBinContent(
610  0 + 1)); //ffy with c4|hie
611  if (m_h_psn_pure_extra->GetBinContent(3 + 1) != 0)
612  m_h_pure_eff->SetBinContent(5, m_h_psn_pure_extra->GetBinContent(5 + 1) / m_h_psn_pure_extra->GetBinContent(
613  3 + 1)); //fyo with c4|hie
614  if (m_h_psn_pure_extra->GetBinContent(6 + 1) != 0)
615  m_h_pure_eff->SetBinContent(6, m_h_psn_pure_extra->GetBinContent(8 + 1) / m_h_psn_pure_extra->GetBinContent(
616  6 + 1)); //fyb with c4|hie
617  if (m_h_psn_pure_extra->GetBinContent(9 + 1) != 0)
618  m_h_pure_eff->SetBinContent(7, m_h_psn_pure_extra->GetBinContent(10 + 1) / m_h_psn_pure_extra->GetBinContent(
619  9 + 1)); //hie with fff|ffo|ffb
620  if (m_h_psn_pure_extra->GetBinContent(11 + 1) != 0)
621  m_h_pure_eff->SetBinContent(8, m_h_psn_pure_extra->GetBinContent(12 + 1) / m_h_psn_pure_extra->GetBinContent(
622  11 + 1)); //hie with fff|ffo|ffb
623  }
624 
625  for (unsigned iskim = 0; iskim < nskim_gdldqm; iskim++) {
626  m_c_eff[iskim]->Clear();
627  m_c_eff[iskim]->cd();
628  m_h_eff[iskim]->SetMinimum(0);
629  m_h_eff[iskim]->Draw();
630  m_c_eff[iskim]->Update();
631  }
632 
633  for (unsigned iskim = 0; iskim < nskim_gdldqm; iskim++) {
634  m_c_eff_fast[iskim]->Clear();
635  m_c_eff_fast[iskim]->cd();
636  m_h_eff_fast[iskim]->SetMinimum(0);
637  m_h_eff_fast[iskim]->Draw();
638  m_c_eff_fast[iskim]->Update();
639  }
640 
641  m_c_eff_shifter->Clear();
642  m_c_eff_shifter->cd();
643  m_c_eff_shifter->SetFillColor(0);
644  m_h_eff_shifter->SetMaximum(1.1);
645  m_h_eff_shifter->SetMinimum(0);
646  m_h_eff_shifter->SetLineWidth(2);
647  m_h_eff_shifter->SetMarkerStyle(20);
648  m_c_eff_shifter_fast->SetFillColor(0);
649  m_h_eff_shifter_fast->SetLineColor(2);
650  m_h_eff_shifter_fast->SetLineStyle(3);
651  m_h_eff_shifter_fast->SetMaximum(1.1);
652  m_h_eff_shifter_fast->SetMinimum(0);
653  m_h_eff_shifter_fast->SetLineWidth(2);
654  m_h_eff_shifter_fast->SetMarkerStyle(20);
655  m_h_eff_shifter_fast->SetMarkerColor(2);
656  m_h_eff_shifter->SetTitle("TRG efficiency");
657  m_h_eff_shifter_fast->SetTitle("TRG efficiency");
658  m_c_eff_shifter->SetFrameLineColor(1);
659  m_h_eff_shifter->GetXaxis()->SetLabelColor(1);
660  m_h_eff_shifter->GetXaxis()->SetAxisColor(1);
661  m_h_eff_shifter->GetYaxis()->SetTitleColor(1);
662  m_h_eff_shifter->GetYaxis()->SetLabelColor(1);
663  m_h_eff_shifter->GetYaxis()->SetAxisColor(1);
664  m_c_eff_shifter_fast->SetFrameLineColor(1);
665  m_h_eff_shifter_fast->GetXaxis()->SetLabelColor(1);
666  m_h_eff_shifter_fast->GetXaxis()->SetAxisColor(1);
667  m_h_eff_shifter_fast->GetYaxis()->SetTitleColor(1);
668  m_h_eff_shifter_fast->GetYaxis()->SetLabelColor(1);
669  m_h_eff_shifter_fast->GetYaxis()->SetAxisColor(1);
670 
671  if (m_runtype == "physics") {
672  for (int i = 0; i < n_eff_shifter; i++) {
673  double eff = m_h_eff_shifter->GetBinContent(i + 1);
674  double err = m_h_eff_shifter->GetBinError(i + 1);
675  double eff_err_min = eff - 2 * err;
676  double eff_err_max = eff + 2 * err;
677  double eff_fast = m_h_eff_shifter_fast->GetBinContent(i + 1);
678  double err_fast = m_h_eff_shifter_fast->GetBinError(i + 1);
679  double eff_err_min_fast = eff_fast - 2 * err_fast;
680  double eff_err_max_fast = eff_fast + 2 * err_fast;
681  if (
682  (eff_err_max < m_limit_low_shifter[i]) || (eff_err_min > m_limit_high_shifter[i]) ||
683  (eff_err_max_fast < m_limit_low_shifter[i]) || (eff_err_min_fast > m_limit_high_shifter[i])
684  ) {
685  m_c_eff_shifter->SetFillColor(5);
686  m_c_eff_shifter_fast->SetFillColor(5);
687  m_h_eff_shifter->SetTitle("Call TRG expert: bad efficiency");
688  m_h_eff_shifter_fast->SetTitle("Call TRG expert: bad efficiency");
689  m_c_eff_shifter->SetFrameLineColor(2);
690  m_h_eff_shifter->GetXaxis()->SetLabelColor(2);
691  m_h_eff_shifter->GetXaxis()->SetAxisColor(2);
692  m_h_eff_shifter->GetYaxis()->SetTitleColor(2);
693  m_h_eff_shifter->GetYaxis()->SetLabelColor(2);
694  m_h_eff_shifter->GetYaxis()->SetAxisColor(2);
695  m_c_eff_shifter_fast->SetFrameLineColor(2);
696  m_h_eff_shifter_fast->GetXaxis()->SetLabelColor(2);
697  m_h_eff_shifter_fast->GetXaxis()->SetAxisColor(2);
698  m_h_eff_shifter_fast->GetYaxis()->SetTitleColor(2);
699  m_h_eff_shifter_fast->GetYaxis()->SetLabelColor(2);
700  m_h_eff_shifter_fast->GetYaxis()->SetAxisColor(2);
701  }
702  }
703  } else {
704  m_h_eff_shifter->SetTitle("Ignore this plot during non-physic run");
705  m_h_eff_shifter_fast->SetTitle("Ignore this plot during non-physic run");
706  }
707 
708 
709  m_h_eff_shifter->Draw();
710  m_h_eff_shifter_fast->Draw("same");
711 
712  for (int i = 0; i < n_eff_shifter; i++) {
713  m_line_limit_low_shifter[i]-> SetLineColor(1);
714  m_line_limit_low_shifter[i]-> SetLineStyle(2);
715  m_line_limit_low_shifter[i]-> SetLineWidth(2);
716  m_line_limit_low_shifter[i]-> Draw("same");
717  m_line_limit_high_shifter[i]->SetLineColor(1);
718  m_line_limit_high_shifter[i]->SetLineStyle(2);
719  m_line_limit_high_shifter[i]-> SetLineWidth(2);
720  m_line_limit_high_shifter[i]->Draw("same");
721  }
722  m_c_eff_shifter->Update();
723 
724  m_c_eff_shifter_fast->Clear();
725  m_c_eff_shifter_fast->cd();
726  m_h_eff_shifter_fast->Draw();
727  for (int i = 0; i < n_eff_shifter; i++) {
728  m_line_limit_low_shifter[i]-> SetLineColor(1);
729  m_line_limit_low_shifter[i]-> SetLineStyle(2);
730  m_line_limit_low_shifter[i]-> SetLineWidth(2);
731  m_line_limit_low_shifter[i]-> Draw("same");
732  m_line_limit_high_shifter[i]->SetLineColor(1);
733  m_line_limit_high_shifter[i]->SetLineStyle(2);
734  m_line_limit_high_shifter[i]-> SetLineWidth(2);
735  m_line_limit_high_shifter[i]->Draw("same");
736  }
737  m_c_eff_shifter_fast->Update();
738 
739  m_c_pure_eff->Clear();
740  m_c_pure_eff->cd();
741  m_h_pure_eff->SetMinimum(0);
742  m_h_pure_eff->Draw();
743  m_c_pure_eff->Update();
744 
745 
746 #ifdef _BELLE2_EPICS
747  if (m_useEpics) {
748  for (auto i = 0; i < n_eff_shifter; i++) {
749  double data;
750  //data = m_h_eff_shifter->GetBinContent(i + 1);
751  data = m_h_eff_shifter_fast->GetBinContent(i + 1);
752  if (mychid[i]) SEVCHK(ca_put(DBR_DOUBLE, mychid[i], (void*)&data), "ca_set failure");
753  }
754  for (auto i = 0; i < nskim_gdldqm; i++) {
755  double data = 0;
756  if (m_h_psn_extra[i] == nullptr) {
757  B2WARNING("Histogram/canvas named hGDL_psn_extra is not found.");
758  } else if (m_h_psn_extra[6] == nullptr) {
759  B2WARNING("Histogram/canvas named hGDL_psn_extra is not found.");
760  } else {
761  if (i == 0 || i == 6) {
762  data = m_h_psn_extra[i]->GetBinContent(0 + 1);
763  } else if (m_h_psn_extra[6]->GetBinContent(0 + 1) != 0) {
764  data = m_h_psn_extra[i]->GetBinContent(0 + 1) / m_h_psn_extra[6]->GetBinContent(0 + 1);
765  }
766  }
767 
768  if (mychid_entry[i]) SEVCHK(ca_put(DBR_DOUBLE, mychid_entry[i], (void*)&data), "ca_set failure");
769  }
770  SEVCHK(ca_pend_io(5.0), "ca_pend_io failure");
771  }
772 #endif
773 
774 }
775 
777 {
778  B2DEBUG(20, "DQMHistAnalysisTRGGDL : endRun called");
779 }
780 
782 {
783 #ifdef _BELLE2_EPICS
784  if (m_useEpics) {
785  for (auto i = 0; i < n_eff_shifter; i++) {
786  if (mychid[i]) SEVCHK(ca_clear_channel(mychid[i]), "ca_clear_channel failure");
787  }
788  for (auto i = 0; i < nskim_gdldqm; i++) {
789  if (mychid_entry[i]) SEVCHK(ca_clear_channel(mychid_entry[i]), "ca_clear_channel failure");
790  }
791  SEVCHK(ca_pend_io(5.0), "ca_pend_io failure");
792  }
793 #endif
794  B2DEBUG(20, "terminate called");
795 }
796 
The base class for the histogram analysis module.
static TH1 * findHist(const std::string &histname)
Find histogram.
TH1D * m_h_eff_shifter_fast
Histogram for TRGGDL efficiency, simplified one for CR shifter.
static const int n_eff_shifter
number of bins for the simplified efficiency histogram
TCanvas * m_c_eff_shifter_fast
Canvas for TRGGDL efficiency, simplified one for CR shifter.
TCanvas * m_c_eff_fast[nskim_gdldqm]
Canvas for TRGGDL efficiency in each HLT skim.
virtual void initialize() override
Initialize the Module.
TH1D * m_h_eff_fast[nskim_gdldqm]
Histogram for TRGGDL efficiency in each HLT skim.
TH1 * m_rtype
histogram from DQMInfo with runtype
bool m_enableAlert
Enable alert by base color of canvases.
TString m_runtype
string with runtype: physics or cosmic
static const int nskim_gdldqm
number of HLT skims
virtual void event() override
Event processor.
TLine * m_line_limit_high_shifter[n_eff_shifter]
upper limit line for the simplified efficiency histogram
virtual void endRun() override
End-of-run action.
double m_limit_low_shifter[n_eff_shifter]
lower limit value in each bin
TH1D * m_h_pure_eff
Histogram for TRGGDL efficiency with offline selection.
virtual void terminate() override
Termination action.
TLine * m_line_limit_low_shifter[n_eff_shifter]
lower limit line for the simplified efficiency histogram
TH1D * m_h_eff[nskim_gdldqm]
Histogram for TRGGDL efficiency in each HLT skim.
const char * c_eff[n_eff]
label of bins for the efficiency histogram
std::string skim_smap[nskim_gdldqm]
name of HLT skims
TH1D * m_h_eff_shifter
Histogram for TRGGDL efficiency, simplified one for CR shifter.
TH1D * m_h_psn_extra_fast[nskim_gdldqm]
DQM Histogram for PSN bits in each HLT skim.
virtual void beginRun() override
Called when entering a new run.
double m_limit_high_shifter[n_eff_shifter]
upper limit value in each bin
TH1D * m_h_psn_pure_extra
DQM Histogram for PSN bits with offline selection.
static const int n_pure_eff
number of bins for the efficiency histogram with offline selection
TH1D * m_h_psn_extra[nskim_gdldqm]
DQM Histogram for PSN bits in each HLT skim.
TCanvas * m_c_pure_eff
Canvas for TRGGDL efficiency with offline selection.
bool m_useEpics
flag if to export to EPICS
TCanvas * m_c_eff[nskim_gdldqm]
Canvas for TRGGDL efficiency in each HLT skim.
const char * c_pure_eff[n_pure_eff]
label of bins for the efficiency histogram with offline selection
TCanvas * m_c_eff_shifter
Canvas for TRGGDL efficiency, simplified one for CR shifter.
static const int n_eff
number of bins for the efficiency histogram
const char * c_eff_shifter[n_eff_shifter]
label of bins for the simplified efficiency histogram
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 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.