Belle II Software  release-08-02-06
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 
21 using namespace std;
22 using namespace Belle2;
23 
24 //-----------------------------------------------------------------
25 // Register module
26 //-----------------------------------------------------------------
27 
28 REG_MODULE(TRGEFFDQM);
29 
30 TRGEFFDQMModule::TRGEFFDQMModule() : HistoModule()
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 
686 void TRGEFFDQMModule::endRun()
687 {
688 }
689 
690 void 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
bool isOptional(const std::string &name="")
Tell the DataStore about an optional input.
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.
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:650
Abstract base class for different kinds of events.