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