Belle II Software development
TRGEFFDQMModule.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 <trg/gdl/modules/trggdlDQM/TRGEFFDQMModule.h>
11
12// Dataobject classes
13#include <TF1.h>
14#include <Math/Vector3D.h>
15#include <TVector3.h>
16#include <TDirectory.h>
17#include <fstream>
18#include <math.h>
19#include <mdst/dataobjects/HitPatternCDC.h>
20
21using namespace std;
22using namespace Belle2;
23
24//-----------------------------------------------------------------
25// Register module
26//-----------------------------------------------------------------
27
28REG_MODULE(TRGEFFDQM);
29
31{
32 // set module description (e.g. insert text)
33 setDescription("Make kinematics dependent efficiency plot");
35}
36
38{
39}
40
42{
43 TDirectory* oldDir = gDirectory;
44 oldDir->mkdir("TRGEFF");
45 oldDir->cd("TRGEFF");
46
47 m_hPhi = new TH1F("hPhi", "", 36, -180.0, 180.0);
48 m_hPhi_psnecl = new TH1F("hPhi_psnecl", "", 36, -180.0, 180.0);
49 m_hPhi_psnecl_ftdf = new TH1F("hPhi_psnecl_ftdf", "", 36, -180.0, 180.0);
50
51 m_hPt = new TH1F("hPt", "", 50, 0, 5);
52 m_hPt_psnecl = new TH1F("hPt_psnecl", "", 50, 0, 5);
53 m_hPt_psnecl_ftdf = new TH1F("hPt_psnecl_ftdf", "", 50, 0, 5);
54
55 m_nobha_f_phi = new TH1F("nobha_f_phi", "", 36, -180., 180.);
56 m_nobha_f_phi_psnecl = new TH1F("nobha_f_phi_psnecl", "", 36, -180., 180.);
57 m_nobha_f_phi_psnecl_ftdf = new TH1F("nobha_f_phi_psnecl_ftdf", "", 36, -180., 180.);
58
59 m_nobha_hPt = new TH1F("nobha_hPt", "", 50, 0, 5);
60 m_nobha_hPt_psnecl = new TH1F("nobha_hPt_psnecl", "", 50, 0, 5);
61 m_nobha_hPt_psnecl_ftdf = new TH1F("nobha_hPt_psnecl_ftdf", "", 50, 0, 5);
62
63 m_hP3_y = new TH1F("hP3_y", "", 50, 0, 5);
64 m_hP3_y_psnecl = new TH1F("hP3_y_psnecl", "", 50, 0, 5);
65 m_hP3_y_psnecl_ftdf = new TH1F("hP3_y_psnecl_ftdf", "", 50, 0, 5);
66
67 m_hP3_z = new TH1F("hP3_z", "", 50, 0, 5);
68 m_hP3_z_psnecl = new TH1F("hP3_z_psnecl", "", 50, 0, 5);
69 m_hP3_z_psnecl_ftdf = new TH1F("hP3_z_psnecl_ftdf", "", 50, 0, 5);
70
71 m_nobha_hP3_y = new TH1F("nobha_hP3_y", "", 50, 0, 5);
72 m_nobha_hP3_y_psnecl = new TH1F("nobha_hP3_y_psnecl", "", 50, 0, 5);
73 m_nobha_hP3_y_psnecl_ftdf = new TH1F("nobha_hP3_y_psnecl_ftdf", "", 50, 0, 5);
74
75 m_nobha_hP3_z = new TH1F("nobha_hP3_z", "", 50, 0, 5);
76 m_nobha_hP3_z_psnecl = new TH1F("nobha_hP3_z_psnecl", "", 50, 0, 5);
77 m_nobha_hP3_z_psnecl_ftdf = new TH1F("nobha_hP3_z_psnecl_ftdf", "", 50, 0, 5);
78
79 m_nobha_phi_y = new TH1F("nobha_phi_y", "", 36, -180., 180.);
80 m_nobha_phi_y_psnecl = new TH1F("nobha_phi_y_psnecl", "", 36, -180., 180.);
81 m_nobha_phi_y_psnecl_ftdf = new TH1F("nobha_phi_y_psnecl_ftdf", "", 36, -180., 180.);
82
83 m_nobha_phi_z = new TH1F("nobha_phi_z", "", 36, -180., 180.);
84 m_nobha_phi_z_psnecl = new TH1F("nobha_phi_z_psnecl", "", 36, -180., 180.);
85 m_nobha_phi_z_psnecl_ftdf = new TH1F("nobha_phi_z_psnecl_ftdf", "", 36, -180., 180.);
86
87 m_fyo_dphi = new TH1F("fyo_dphi", "", 18, 0., 180.);
88 m_fyo_dphi_psnecl = new TH1F("fyo_dphi_psnecl", "", 18, 0., 180.);
89 m_fyo_dphi_psnecl_ftdf = new TH1F("fyo_dphi_psnecl_ftdf", "", 18, 0., 180.);
90
91 m_nobha_fyo_dphi = new TH1F("nobha_fyo_dphi", "", 18, 0., 180.);
92 m_nobha_fyo_dphi_psnecl = new TH1F("nobha_fyo_dphi_psnecl", "", 18, 0., 180.);
93 m_nobha_fyo_dphi_psnecl_ftdf = new TH1F("nobha_fyo_dphi_psnecl_ftdf", "", 18, 0., 180.);
94
95 m_stt_phi = new TH1F("stt_phi", "", 36, -180., 180.);
96 m_stt_phi_psnecl = new TH1F("stt_phi_psnecl", "", 36, -180., 180.);
97 m_stt_phi_psnecl_ftdf = new TH1F("stt_phi_psnecl_ftdf", "", 36, -180., 180.);
98
99 m_stt_P3 = new TH1F("stt_P3", "", 50, 0, 5);
100 m_stt_P3_psnecl = new TH1F("stt_P3_psnecl", "", 50, 0, 5);
101 m_stt_P3_psnecl_ftdf = new TH1F("stt_P3_psnecl_ftdf", "", 50, 0, 5);
102
103 m_stt_theta = new TH1F("stt_theta", "", 18, 0, 180);
104 m_stt_theta_psnecl = new TH1F("stt_theta_psnecl", "", 18, 0, 180);
105 m_stt_theta_psnecl_ftdf = new TH1F("stt_theta_psnecl_ftdf", "", 18, 0, 180);
106
107 m_nobha_stt_phi = new TH1F("nobha_stt_phi", "", 36, -180., 180.);
108 m_nobha_stt_phi_psnecl = new TH1F("nobha_stt_phi_psnecl", "", 36, -180., 180.);
109 m_nobha_stt_phi_psnecl_ftdf = new TH1F("nobha_stt_phi_psnecl_ftdf", "", 36, -180., 180.);
110
111 m_nobha_stt_P3 = new TH1F("nobha_stt_P3", "", 50, 0, 5);
112 m_nobha_stt_P3_psnecl = new TH1F("nobha_stt_P3_psnecl", "", 50, 0, 5);
113 m_nobha_stt_P3_psnecl_ftdf = new TH1F("nobha_stt_P3_psnecl_ftdf", "", 50, 0, 5);
114
115 m_nobha_stt_theta = new TH1F("nobha_stt_theta", "", 18, 0, 180);
116 m_nobha_stt_theta_psnecl = new TH1F("nobha_stt_theta_psnecl", "", 18, 0, 180);
117 m_nobha_stt_theta_psnecl_ftdf = new TH1F("nobha_stt_theta_psnecl_ftdf", "", 18, 0, 180);
118
119 m_hie_E = new TH1F("hie_E", "", 60, 0, 12);
120 m_hie_E_psnecl = new TH1F("hie_E_psnecl", "", 60, 0, 12);
121 m_hie_E_psnecl_ftdf = new TH1F("hie_E_psnecl_ftdf", "", 60, 0, 12);
122
123 m_nobha_hie_E = new TH1F("nobha_hie_E", "", 60, 0, 12);
124 m_nobha_hie_E_psnecl = new TH1F("nobha_hie_E_psnecl", "", 60, 0, 12);
125 m_nobha_hie_E_psnecl_ftdf = new TH1F("nobha_hie_E_psnecl_ftdf", "", 60, 0, 12);
126
127 m_ecltiming_E = new TH1F("ecltiming_E", "", 60, 0, 12);
128 m_ecltiming_E_psnecl = new TH1F("ecltiming_E_psnecl", "", 60, 0, 12);
129 m_ecltiming_E_psnecl_ftdf = new TH1F("ecltiming_E_psnecl_ftdf", "", 60, 0, 12);
130
131 m_ecltiming_theta = new TH1F("ecltiming_theta", "", 18, 0, 180);
132 m_ecltiming_theta_psnecl = new TH1F("ecltiming_theta_psnecl", "", 18, 0, 180);
133 m_ecltiming_theta_psnecl_ftdf = new TH1F("ecltiming_theta_psnecl_ftdf", "", 18, 0, 180);
134
135 m_ecltiming_phi = new TH1F("ecltiming_phi", "", 36, -180., 180.);
136 m_ecltiming_phi_psnecl = new TH1F("ecltiming_phi_psnecl", "", 36, -180., 180.);
137 m_ecltiming_phi_psnecl_ftdf = new TH1F("ecltiming_phi_psnecl_ftdf", "", 36, -180., 180.);
138
139 m_klmhit_phi = new TH1F("klmhit_phi", "", 18, -180., 180.);
140 m_klmhit_phi_psnecl = new TH1F("klmhit_phi_psnecl", "", 18, -180., 180.);
141 m_klmhit_phi_psnecl_ftdf = new TH1F("klmhit_phi_psnecl_ftdf", "", 18, -180., 180.);
142
143 m_klmhit_theta = new TH1F("klmhit_theta", "", 18, 0, 180);
144 m_klmhit_theta_psnecl = new TH1F("klmhit_theta_psnecl", "", 18, 0, 180);
145 m_klmhit_theta_psnecl_ftdf = new TH1F("klmhit_theta_psnecl_ftdf", "", 18, 0, 180);
146
147 m_eklmhit_phi = new TH1F("eklmhit_phi", "", 18, -180., 180.);
148 m_eklmhit_phi_psnecl = new TH1F("eklmhit_phi_psnecl", "", 18, -180., 180.);
149 m_eklmhit_phi_psnecl_ftdf = new TH1F("eklmhit_phi_psnecl_ftdf", "", 18, -180., 180.);
150
151 m_eklmhit_theta = new TH1F("eklmhit_theta", "", 18, 0, 180);
152 m_eklmhit_theta_psnecl = new TH1F("eklmhit_theta_psnecl", "", 18, 0, 180);
153 m_eklmhit_theta_psnecl_ftdf = new TH1F("eklmhit_theta_psnecl_ftdf", "", 18, 0, 180);
154
155
156
157
158
159
160
161 oldDir->cd();
162}
163
165{
166 REG_HISTOGRAM
167
168 if (!m_Tracks.isOptional()) {
169 B2WARNING("Missing Tracks array");
170 return;
171 }
172 if (!m_ECLClusters.isOptional()) {
173 B2WARNING("Missing ECLCLuster array");
174 return;
175 }
176 if (!m_KLMClusters.isOptional()) {
177 B2WARNING("Missing KLMCLuster array");
178 return;
179 }
180 if (!m_trgSummary.isOptional()) {
181 B2WARNING("Missing TRGSummary");
182 return;
183 }
184}
185
187{
188 if (!m_RecoTracks.isOptional()) {
189 B2DEBUG(22, "Missing recoTracks array in beginRun() ");
190 return;
191 }
192
193}
194
196{
197 if (!m_trgSummary.isValid()) {
198 B2WARNING("TRGSummary object not available but require to estimate trg efficiency");
199 return;
200 }
201
202 if (!m_TrgResult.isValid()) {
203 B2WARNING("SoftwareTriggerResult object not available but require to select bhabha/mumu/hadron events skim");
204 return;
205 }
206
207 const std::map<std::string, int>& fresults = m_TrgResult->getResults();
208 if ((fresults.find("software_trigger_cut&skim&accept_bhabha") == fresults.end())
209 || (fresults.find("software_trigger_cut&skim&accept_hadron") == fresults.end())) {
210 B2WARNING("TRGEFFDQMModule: Can't find required bhabha or mumu or hadron trigger identifier");
211 return;
212 }
213
214
215 /*///////////////////////////////////////////////////////////////////
218
219 // calculate the total energy
220 double E_ecl_all = 0; // the ECL total energy
221 double E_ecl_hie =
222 0; // the ECL total energy in the thetaID range 2<=ThetaID<=15 (corresponds to 22.49<=theta<=126.80) for ehigh bit
223 for (const auto& test_b2eclcluster : m_ECLClusters) {
224 if (!(test_b2eclcluster.hasHypothesis(ECLCluster::EHypothesisBit::c_nPhotons))) continue;
225 double energy = test_b2eclcluster.getEnergyRaw();
226 double theta = test_b2eclcluster.getTheta() / Unit::deg;
227
228 if (energy < 0.1) continue;
229
230 E_ecl_all = E_ecl_all + energy;
231 if (theta >= 22.49 && theta <= 126.8) {
232 E_ecl_hie = E_ecl_hie + energy;
233 }
234 }
235
236 bool trg_hie_psncdc = 0; // for ECL energy trigger, for hie
237 bool trg_hie_Eecl = 0; // for ECL energy trigger, for hie
238 bool trg_ecltiming_psncdc = 0; // for ECL energy trigger, for ecltiming
239 bool trg_ecltiming_Eecl = 0; // for ECL energy trigger. for ecltiming
240 bool trg_nobha_hie_Eecl = 0;
241
242 for (const auto& b2eclcluster : m_ECLClusters) {
243 if (!(b2eclcluster.hasHypothesis(ECLCluster::EHypothesisBit::c_nPhotons))) continue;
244 double phi = b2eclcluster.getPhi() / Unit::deg;
245 double theta = b2eclcluster.getTheta() / Unit::deg;
246 double energy = b2eclcluster.getEnergyRaw();
247
248 if (energy < 0.1) continue;
249
250 bool trg_psncdc = m_trgSummary->testPsnm("ffy") || m_trgSummary->testPsnm("fyo") || m_trgSummary->testPsnm("stt");
251 bool trg_hie = m_trgSummary->testFtdl("hie");
252 bool trg_hie_nobha = m_trgSummary->testInput("ehigh"); // remove the bha_veto for hie bit
253 bool trg_ecltiming = m_trgSummary->testFtdl("ecltiming");
254
255 m_ecltiming_theta->Fill(theta);
256 m_ecltiming_phi->Fill(phi);
257
258 if (trg_psncdc) {
259 trg_hie_psncdc = 1;
260 trg_ecltiming_psncdc = 1;
261
262 m_ecltiming_theta_psnecl->Fill(theta);
263 m_ecltiming_phi_psnecl->Fill(phi);
264 }
265
266 if (trg_psncdc && trg_hie) {
267 trg_hie_Eecl = 1;
268 }
269 if (trg_psncdc && trg_hie_nobha) {
270 trg_nobha_hie_Eecl = 1;
271 }
272 if (trg_psncdc && trg_ecltiming) {
273 trg_ecltiming_Eecl = 1;
274
275 m_ecltiming_theta_psnecl_ftdf->Fill(theta);
276 m_ecltiming_phi_psnecl_ftdf->Fill(phi);
277 }
278 }
279
280 // sum of the ECL total energy
281 m_hie_E->Fill(E_ecl_hie);
282 m_nobha_hie_E->Fill(E_ecl_hie);
283 if (trg_hie_psncdc) {
284 m_hie_E_psnecl->Fill(E_ecl_hie);
285 m_nobha_hie_E_psnecl->Fill(E_ecl_hie);
286 }
287 if (trg_hie_Eecl) {
288 m_hie_E_psnecl_ftdf->Fill(E_ecl_hie);
289 }
290 if (trg_nobha_hie_Eecl) {
291 m_nobha_hie_E_psnecl_ftdf->Fill(E_ecl_hie);
292 }
293
294 m_ecltiming_E->Fill(E_ecl_all);
295 if (trg_ecltiming_psncdc) {
296 m_ecltiming_E_psnecl->Fill(E_ecl_all);
297 }
298 if (trg_ecltiming_Eecl) {
299 m_ecltiming_E_psnecl_ftdf->Fill(E_ecl_all);
300 }
301
302
303
304
305
306
307 /*/
310 for (const auto& b2klmcluster : m_KLMClusters) {
311 int nlayer = b2klmcluster.getLayers();
312 // ROOT::Math::XYZVector position = b2klmcluster.getClusterPosition();
313
314 if (nlayer <= 6)
315 continue;
316
317 // double p3 = b2klmcluster.getMomentum().R(); // 3-momentum
318 double theta = b2klmcluster.getMomentum().Theta() / Unit::deg;
319 double phiDegree = b2klmcluster.getMomentum().Phi() / Unit::deg;
320
321 bool trg_KLMecl = m_trgSummary->testPsnm("hie") || m_trgSummary->testPsnm("c4") || m_trgSummary->testPsnm("eclmumu") ||
322 m_trgSummary->testPsnm("lml1") || m_trgSummary->testPsnm("lml2") || m_trgSummary->testPsnm("lml6") ||
323 m_trgSummary->testPsnm("lml7") || m_trgSummary->testPsnm("lml8") || m_trgSummary->testPsnm("lml9") ||
324 m_trgSummary->testPsnm("lml10");
325 // these trigger flags are not available in older data
326 try {
327 trg_KLMecl |= m_trgSummary->testPsnm("ecltaub2b3") || m_trgSummary->testPsnm("hie4");
328 } catch (const std::exception&) {
329 }
330
331
332 bool trg_klmhit = m_trgSummary->testFtdl("klmhit");
333 bool trg_eklmhit = m_trgSummary->testFtdl("eklmhit");
334
335 m_klmhit_phi->Fill(phiDegree);
336 m_klmhit_theta->Fill(theta);
337 m_eklmhit_phi->Fill(phiDegree);
338 m_eklmhit_theta->Fill(theta);
339
340 if (trg_KLMecl) {
341 // m_klmhit_phi_psnecl->Fill(phiDegree);
342 m_klmhit_theta_psnecl->Fill(theta);
343 // m_eklmhit_phi_psnecl->Fill(phiDegree);
344 m_eklmhit_theta_psnecl->Fill(theta);
345 }
346 if (trg_KLMecl && trg_klmhit) {
347 // m_klmhit_phi_psnecl_ftdf->Fill(phiDegree);
348 m_klmhit_theta_psnecl_ftdf->Fill(theta);
349 }
350 if (trg_KLMecl && trg_eklmhit) {
351 // m_eklmhit_phi_psnecl_ftdf->Fill(phiDegree);
352 m_eklmhit_theta_psnecl_ftdf->Fill(theta);
353 }
354
355 // add theta cut for phi distribution, since the efficiency at some theta range is very low.
356 if (trg_KLMecl && theta > 50 && theta < 120) {
357 m_klmhit_phi_psnecl->Fill(phiDegree);
358 }
359 if (trg_KLMecl && ((theta > 20 && theta < 40) || (theta > 120 && theta < 160))) {
360 m_eklmhit_phi_psnecl->Fill(phiDegree);
361 }
362 if (trg_KLMecl && trg_klmhit && theta > 50 && theta < 120) {
363 m_klmhit_phi_psnecl_ftdf->Fill(phiDegree);
364 }
365 if (trg_KLMecl && trg_eklmhit && ((theta > 20 && theta < 40) || (theta > 120 && theta < 160))) {
366 m_eklmhit_phi_psnecl_ftdf->Fill(phiDegree);
367 }
368 }
369
370
371
372 /*///////////////////////////////////////////////////////////////////
375
376
377 vector<double> p_stt_P3_psnecl_ftdf, p_stt_P3_psnecl, p_stt_P3, phi_fyo_dphi, phi_fyo_dphi_psnecl, phi_fyo_dphi_psnecl_ftdf ;
378 p_stt_P3_psnecl_ftdf.clear();
379 p_stt_P3_psnecl.clear();
380 p_stt_P3.clear();
381
382 phi_fyo_dphi.clear();
383 phi_fyo_dphi_psnecl.clear();
384 phi_fyo_dphi_psnecl_ftdf.clear();
385
386 vector<double> p_nobha_stt_P3_psnecl_ftdf, p_nobha_stt_P3_psnecl, p_nobha_stt_P3, phi_nobha_fyo_dphi, phi_nobha_fyo_dphi_psnecl,
387 phi_nobha_fyo_dphi_psnecl_ftdf ;
388 p_nobha_stt_P3_psnecl_ftdf.clear();
389 p_nobha_stt_P3_psnecl.clear();
390 p_nobha_stt_P3.clear();
391
392 phi_nobha_fyo_dphi.clear();
393 phi_nobha_fyo_dphi_psnecl.clear();
394 phi_nobha_fyo_dphi_psnecl_ftdf.clear();
395
396 int nitrack = 0; // the i track of the m_Tracks
397 for (const auto& b2track : m_Tracks) {
398 const Belle2::TrackFitResult* fitresult = b2track.getTrackFitResultWithClosestMass(Const::pion);
399 if (!fitresult) {
400 B2WARNING("No track fit result found.");
401 nitrack++;
402 continue;
403 }
404
405 // require high NDF track
406 int ndf = fitresult->getNDF();
407 if (ndf < 20) {
408 nitrack++;
409 continue;
410 }
411
412 // IP tracks at barrel
413 if (fabs(fitresult->getD0()) < 1.0 && fabs(fitresult->getZ0()) < 1.0 && fitresult->getHitPatternCDC().getLastLayer() > 50
414 && fitresult->getHitPatternCDC().getFirstLayer() < 5) {
415 double phiDegree = fitresult->getPhi() / Unit::deg;
416 double pt = fitresult->getTransverseMomentum();
417 double p3 = fitresult->getMomentum().R(); // 3-momentum
418 double theta = fitresult->getMomentum().Theta() / Unit::deg;
419
420 bool trg_psnecl = m_trgSummary->testPsnm("hie") || m_trgSummary->testPsnm("c4") || m_trgSummary->testPsnm("eclmumu") ||
421 m_trgSummary->testPsnm("lml1") || m_trgSummary->testPsnm("lml2") || m_trgSummary->testPsnm("lml6") ||
422 m_trgSummary->testPsnm("lml7") || m_trgSummary->testPsnm("lml8") || m_trgSummary->testPsnm("lml9") ||
423 m_trgSummary->testPsnm("lml10");
424 // these trigger flags are not available in older data
425 try {
426 trg_psnecl |= m_trgSummary->testPsnm("ecltaub2b3") || m_trgSummary->testPsnm("hie4");
427 } catch (const std::exception&) {
428 }
429
430 bool trg_ftdf = m_trgSummary->testFtdl("f");
431
432 // for f bit, reomove the Bhabha_veto
433 bool trg_itdt2 = (m_trgSummary->testInput("t2_0") || m_trgSummary->testInput("t2_1") || m_trgSummary->testInput("t2_2")
434 || m_trgSummary->testInput("t2_3"));
435
436 // for z, reomove the Bhabha_veto
437 bool trg_itdt3 = (m_trgSummary->testInput("t3_0") || m_trgSummary->testInput("t3_1") || m_trgSummary->testInput("t3_2")
438 || m_trgSummary->testInput("t3_3"));
439
440 // for y, reomove the Bhabha_veto
441 bool trg_itdt4 = (m_trgSummary->testInput("ty_0") || m_trgSummary->testInput("ty_1") || m_trgSummary->testInput("ty_2")
442 || m_trgSummary->testInput("ty_3"));
443
444 // (t3>0 and !bhaveto and !veto) for z
445 bool trg_ftdz = m_trgSummary->testFtdl("z");
446
447 // (ty>0 and !bhaveto and !veto) for y
448 bool trg_ftdy = m_trgSummary->testFtdl("y");
449
450 // typ and !bha veto and !veto
451 bool trg_stt = m_trgSummary->testFtdl("stt");
452
453 // remove bha_veto
454 bool trg_stt_nobha = m_trgSummary->testInput("typ") ;
455
456
457 // require pt > 0.3 GeV
458 if (pt > 0.3) {
459 m_hPhi->Fill(phiDegree);
460 if (trg_psnecl) {
461 m_hPhi_psnecl->Fill(phiDegree);
462 }
463 if (trg_psnecl && trg_ftdf) {
464 m_hPhi_psnecl_ftdf->Fill(phiDegree);
465 }
466 }
467
468 m_hPt->Fill(pt);
469 m_nobha_hPt->Fill(pt);
470 m_nobha_f_phi->Fill(phiDegree);
471
472 m_hP3_z->Fill(p3);
473 m_hP3_y->Fill(p3);
474
475 m_nobha_hP3_z->Fill(p3);
476 m_nobha_hP3_y->Fill(p3);
477
478 m_nobha_phi_z->Fill(phiDegree);
479 m_nobha_phi_y->Fill(phiDegree);
480
481 m_stt_theta->Fill(theta);
482 m_stt_phi->Fill(phiDegree);
483 p_stt_P3.push_back(p3);
484
485 m_nobha_stt_theta->Fill(theta);
486 m_nobha_stt_phi->Fill(phiDegree);
487 p_nobha_stt_P3.push_back(p3);
488
489
490 if (trg_psnecl) {
491 m_hPt_psnecl->Fill(pt);
492 m_nobha_hPt_psnecl->Fill(pt);
493 m_nobha_f_phi_psnecl->Fill(phiDegree);
494
495 m_hP3_z_psnecl->Fill(p3); // for z bit
496 m_hP3_y_psnecl->Fill(p3); // for y bit
497
498 m_nobha_hP3_z_psnecl->Fill(p3); // remove bhabha veto for z bit
499 m_nobha_hP3_y_psnecl->Fill(p3); // remove bhabha veto for y bit
500
501 m_nobha_phi_z_psnecl->Fill(phiDegree);
502 m_nobha_phi_y_psnecl->Fill(phiDegree);
503
504 m_stt_phi_psnecl->Fill(phiDegree);
505 p_stt_P3_psnecl.push_back(p3);
506 m_stt_theta_psnecl->Fill(theta);
507
508 m_nobha_stt_phi_psnecl->Fill(phiDegree);
509 p_nobha_stt_P3_psnecl.push_back(p3);
510 m_nobha_stt_theta_psnecl->Fill(theta);
511 }
512
513 if (trg_psnecl && trg_ftdf) {
514 m_hPt_psnecl_ftdf->Fill(pt);
515 }
516 if (trg_psnecl && trg_itdt2) {
517 m_nobha_hPt_psnecl_ftdf->Fill(pt);
518 m_nobha_f_phi_psnecl_ftdf->Fill(phiDegree);
519 }
520
521 if (trg_psnecl && trg_ftdz) {
522 m_hP3_z_psnecl_ftdf->Fill(p3);
523 }
524 if (trg_psnecl && trg_ftdy) {
525 m_hP3_y_psnecl_ftdf->Fill(p3);
526 }
527 if (trg_psnecl && trg_itdt3) {
528 m_nobha_hP3_z_psnecl_ftdf->Fill(p3);
529 m_nobha_phi_z_psnecl_ftdf->Fill(phiDegree);
530 }
531 if (trg_psnecl && trg_itdt4) {
532 m_nobha_hP3_y_psnecl_ftdf->Fill(p3);
533 m_nobha_phi_y_psnecl_ftdf->Fill(phiDegree);
534 }
535
536 if (trg_psnecl && trg_stt) {
537 m_stt_phi_psnecl_ftdf->Fill(phiDegree);
538 p_stt_P3_psnecl_ftdf.push_back(p3);
539 m_stt_theta_psnecl_ftdf->Fill(theta);
540 }
541 if (trg_psnecl && trg_stt_nobha) {
542 m_nobha_stt_phi_psnecl_ftdf->Fill(phiDegree);
543 p_nobha_stt_P3_psnecl_ftdf.push_back(p3);
544 m_nobha_stt_theta_psnecl_ftdf->Fill(theta);
545 }
546
547
548 // the following is for fyo \deleta_phi
549 int njtrack = 0; // the j track of the m_Tracks
550 for (const auto& j_b2track : m_Tracks) {
551 if (nitrack >= njtrack) {
552 njtrack++;
553 continue;
554 }
555
556 const Belle2::TrackFitResult* jfitresult = j_b2track.getTrackFitResultWithClosestMass(Const::pion);
557 if (!jfitresult) {
558 B2WARNING("No track fit result found.");
559 njtrack++;
560 continue;
561 }
562
563 // require high NDF track
564 int jndf = jfitresult->getNDF();
565 if (jndf < 20) {
566 njtrack++;
567 continue;
568 }
569
570 // IP tracks at barrel
571 if (fabs(jfitresult->getD0()) < 1.0 && fabs(jfitresult->getZ0()) < 1.0 && jfitresult->getHitPatternCDC().getLastLayer() > 50
572 && jfitresult->getHitPatternCDC().getFirstLayer() < 5) {
573 double jrk_phiDegree = jfitresult->getPhi() / Unit::deg;
574 double deltea_phi = fabs(phiDegree - jrk_phiDegree);
575 double dphi = deltea_phi;
576
577 if (deltea_phi > 180)
578 dphi = 360 - deltea_phi;
579
580 bool trg_fyo = m_trgSummary->testFtdl("fyo");
581 bool trg_fyo_nobha = (m_trgSummary->testInput("t2_1") || m_trgSummary->testInput("t2_2") || m_trgSummary->testInput("t2_3"))
582 &&
583 (m_trgSummary->testInput("ty_0") || m_trgSummary->testInput("ty_1") || m_trgSummary->testInput("ty_2")
584 || m_trgSummary->testInput("ty_3")) &&
585 m_trgSummary->testInput("cdc_open90");
586
587 // cout<<"i = "<<nitrack <<" j= "<<njtrack <<" phiDegree = "<<phiDegree<<" jrk_phiDegree = "<<jrk_phiDegree<<" dphi "<<dphi<<endl;
588
589 phi_fyo_dphi.push_back(dphi);
590 phi_nobha_fyo_dphi.push_back(dphi);
591
592 if (trg_psnecl) {
593 phi_fyo_dphi_psnecl.push_back(dphi);
594 phi_nobha_fyo_dphi_psnecl.push_back(dphi);
595 }
596 if (trg_psnecl && trg_fyo) {
597 phi_fyo_dphi_psnecl_ftdf.push_back(dphi);
598 }
599 if (trg_psnecl && trg_fyo_nobha) {
600 phi_nobha_fyo_dphi_psnecl_ftdf.push_back(dphi);
601 }
602 }
603 njtrack++;
604 }
605 }
606 nitrack++;
607 }
608
609
610 // the largest cdc_open angle in an event for fyo bit
611 if (phi_fyo_dphi_psnecl_ftdf.size() != 0) {
612 auto max_it = std::max_element(phi_fyo_dphi_psnecl_ftdf.begin(), phi_fyo_dphi_psnecl_ftdf.end());
613 double max_value = *max_it;
614 m_fyo_dphi_psnecl_ftdf->Fill(max_value);
615 }
616 if (phi_fyo_dphi_psnecl.size() != 0) {
617 auto max_it = std::max_element(phi_fyo_dphi_psnecl.begin(), phi_fyo_dphi_psnecl.end());
618 double max_value = *max_it;
619 m_fyo_dphi_psnecl->Fill(max_value);
620 }
621 if (phi_fyo_dphi.size() != 0) {
622 auto max_it = std::max_element(phi_fyo_dphi.begin(), phi_fyo_dphi.end());
623 double max_value = *max_it;
624 m_fyo_dphi->Fill(max_value);
625 }
626
627 //
628 if (phi_nobha_fyo_dphi_psnecl_ftdf.size() != 0) {
629 auto max_it = std::max_element(phi_nobha_fyo_dphi_psnecl_ftdf.begin(), phi_nobha_fyo_dphi_psnecl_ftdf.end());
630 double max_value = *max_it;
631 m_nobha_fyo_dphi_psnecl_ftdf->Fill(max_value);
632 }
633 if (phi_nobha_fyo_dphi_psnecl.size() != 0) {
634 auto max_it = std::max_element(phi_nobha_fyo_dphi_psnecl.begin(), phi_nobha_fyo_dphi_psnecl.end());
635 double max_value = *max_it;
636 m_nobha_fyo_dphi_psnecl->Fill(max_value);
637 }
638 if (phi_nobha_fyo_dphi.size() != 0) {
639 auto max_it = std::max_element(phi_nobha_fyo_dphi.begin(), phi_nobha_fyo_dphi.end());
640 double max_value = *max_it;
641 m_nobha_fyo_dphi->Fill(max_value);
642 }
643
644
645 // the largest momentum track p in an event for stt bit
646 if (p_stt_P3_psnecl_ftdf.size() != 0) {
647 auto max_it = std::max_element(p_stt_P3_psnecl_ftdf.begin(), p_stt_P3_psnecl_ftdf.end());
648 double max_value = *max_it;
649 m_stt_P3_psnecl_ftdf->Fill(max_value);
650 }
651 if (p_stt_P3_psnecl.size() != 0) {
652 auto max_it = std::max_element(p_stt_P3_psnecl.begin(), p_stt_P3_psnecl.end());
653 double max_value = *max_it;
654 m_stt_P3_psnecl->Fill(max_value);
655 }
656 if (p_stt_P3.size() != 0) {
657 auto max_it = std::max_element(p_stt_P3.begin(), p_stt_P3.end());
658 double max_value = *max_it;
659 m_stt_P3->Fill(max_value);
660 }
661
662 //
663 if (p_nobha_stt_P3_psnecl_ftdf.size() != 0) {
664 auto max_it = std::max_element(p_nobha_stt_P3_psnecl_ftdf.begin(), p_nobha_stt_P3_psnecl_ftdf.end());
665 double max_value = *max_it;
666 m_nobha_stt_P3_psnecl_ftdf->Fill(max_value);
667 }
668 if (p_nobha_stt_P3_psnecl.size() != 0) {
669 auto max_it = std::max_element(p_nobha_stt_P3_psnecl.begin(), p_nobha_stt_P3_psnecl.end());
670 double max_value = *max_it;
671 m_nobha_stt_P3_psnecl->Fill(max_value);
672 }
673 if (p_nobha_stt_P3.size() != 0) {
674 auto max_it = std::max_element(p_nobha_stt_P3.begin(), p_nobha_stt_P3.end());
675 double max_value = *max_it;
676 m_nobha_stt_P3->Fill(max_value);
677 }
678
679
680
681
682}
683
684
685
686void TRGEFFDQMModule::endRun()
687{
688}
689
690void TRGEFFDQMModule::terminate()
691{
692}
HistoModule.h is supposed to be used instead of Module.h for the modules with histogram definitions t...
Definition: HistoModule.h:29
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 initialize() override
Initialize the Module.
TH1F * m_hPhi_psnecl_ftdf
Histogram of cdc phi of IP tracks with ecl and f bit.
virtual ~TRGEFFDQMModule()
Destructor.
void event() override
Event processor.
StoreObjPtr< TRGSummary > m_trgSummary
Trigger summary.
TH1F * m_hPhi_psnecl
Histogram of cdc phi of IP tracks with ecl bit.
void beginRun() override
Called when entering a new run.
StoreArray< ECLCluster > m_ECLClusters
ECL Clusters.
TH1F * m_hPhi
Histogram of cdc phi of IP tracks.
StoreArray< KLMCluster > m_KLMClusters
KLM Clusters.
StoreArray< RecoTrack > m_RecoTracks
RecoTracks.
StoreArray< Track > m_Tracks
Tracks.
TRGEFFDQMModule()
Constructor.
StoreObjPtr< SoftwareTriggerResult > m_TrgResult
Store array for Trigger selection.
void defineHisto() override
Histogram definitions.
static const double deg
degree to radians
Definition: Unit.h:109
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Definition: Module.h:649
Abstract base class for different kinds of events.
STL namespace.