198 B2WARNING(
"TRGSummary object not available but require to estimate trg efficiency");
203 B2WARNING(
"SoftwareTriggerResult object not available but require to select bhabha/mumu/hadron events skim");
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");
219 // calculate the total energy
220 double E_ecl_all = 0; // the ECL total energy
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;
228 if (energy < 0.1) continue;
230 E_ecl_all = E_ecl_all + energy;
231 if (theta >= 22.49 && theta <= 126.8) {
232 E_ecl_hie = E_ecl_hie + energy;
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;
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();
248 if (energy < 0.1) continue;
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");
255 m_ecltiming_theta->Fill(theta);
256 m_ecltiming_phi->Fill(phi);
260 trg_ecltiming_psncdc = 1;
262 m_ecltiming_theta_psnecl->Fill(theta);
263 m_ecltiming_phi_psnecl->Fill(phi);
266 if (trg_psncdc && trg_hie) {
269 if (trg_psncdc && trg_hie_nobha) {
270 trg_nobha_hie_Eecl = 1;
272 if (trg_psncdc && trg_ecltiming) {
273 trg_ecltiming_Eecl = 1;
275 m_ecltiming_theta_psnecl_ftdf->Fill(theta);
276 m_ecltiming_phi_psnecl_ftdf->Fill(phi);
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);
288 m_hie_E_psnecl_ftdf->Fill(E_ecl_hie);
290 if (trg_nobha_hie_Eecl) {
291 m_nobha_hie_E_psnecl_ftdf->Fill(E_ecl_hie);
294 m_ecltiming_E->Fill(E_ecl_all);
295 if (trg_ecltiming_psncdc) {
296 m_ecltiming_E_psnecl->Fill(E_ecl_all);
298 if (trg_ecltiming_Eecl) {
299 m_ecltiming_E_psnecl_ftdf->Fill(E_ecl_all);
311 int nlayer = b2klmcluster.getLayers();
318 double theta = b2klmcluster.getMomentum().Theta() /
Unit::deg;
319 double phiDegree = b2klmcluster.getMomentum().Phi() /
Unit::deg;
328 }
catch (
const std::exception&) {
335 m_klmhit_phi->Fill(phiDegree);
336 m_klmhit_theta->Fill(theta);
337 m_eklmhit_phi->Fill(phiDegree);
338 m_eklmhit_theta->Fill(theta);
342 m_klmhit_theta_psnecl->Fill(theta);
344 m_eklmhit_theta_psnecl->Fill(theta);
346 if (trg_KLMecl && trg_klmhit) {
348 m_klmhit_theta_psnecl_ftdf->Fill(theta);
350 if (trg_KLMecl && trg_eklmhit) {
352 m_eklmhit_theta_psnecl_ftdf->Fill(theta);
356 if (trg_KLMecl && theta > 50 && theta < 120) {
357 m_klmhit_phi_psnecl->Fill(phiDegree);
359 if (trg_KLMecl && ((theta > 20 && theta < 40) || (theta > 120 && theta < 160))) {
360 m_eklmhit_phi_psnecl->Fill(phiDegree);
362 if (trg_KLMecl && trg_klmhit && theta > 50 && theta < 120) {
363 m_klmhit_phi_psnecl_ftdf->Fill(phiDegree);
365 if (trg_KLMecl && trg_eklmhit && ((theta > 20 && theta < 40) || (theta > 120 && theta < 160))) {
366 m_eklmhit_phi_psnecl_ftdf->Fill(phiDegree);
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();
382 phi_fyo_dphi.clear();
383 phi_fyo_dphi_psnecl.clear();
384 phi_fyo_dphi_psnecl_ftdf.clear();
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();
392 phi_nobha_fyo_dphi.clear();
393 phi_nobha_fyo_dphi_psnecl.clear();
394 phi_nobha_fyo_dphi_psnecl_ftdf.clear();
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);
400 B2WARNING("No track fit result found.");
405 // require high NDF track
406 int ndf = fitresult->getNDF();
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;
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
426 trg_psnecl |= m_trgSummary->testPsnm("ecltaub2b3") || m_trgSummary->testPsnm("hie4");
427 } catch (const std::exception&) {
430 bool trg_ftdf = m_trgSummary->testFtdl("f");
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"));
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"));
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"));
444 // (t3>0 and !bhaveto and !veto) for z
445 bool trg_ftdz = m_trgSummary->testFtdl("z");
447 // (ty>0 and !bhaveto and !veto) for y
448 bool trg_ftdy = m_trgSummary->testFtdl("y");
450 // typ and !bha veto and !veto
451 bool trg_stt = m_trgSummary->testFtdl("stt");
454 bool trg_stt_nobha = m_trgSummary->testInput("typ") ;
457 // require pt > 0.3 GeV
459 m_hPhi->Fill(phiDegree);
461 m_hPhi_psnecl->Fill(phiDegree);
463 if (trg_psnecl && trg_ftdf) {
464 m_hPhi_psnecl_ftdf->Fill(phiDegree);
469 m_nobha_hPt->Fill(pt);
470 m_nobha_f_phi->Fill(phiDegree);
475 m_nobha_hP3_z->Fill(p3);
476 m_nobha_hP3_y->Fill(p3);
478 m_nobha_phi_z->Fill(phiDegree);
479 m_nobha_phi_y->Fill(phiDegree);
481 m_stt_theta->Fill(theta);
482 m_stt_phi->Fill(phiDegree);
483 p_stt_P3.push_back(p3);
485 m_nobha_stt_theta->Fill(theta);
486 m_nobha_stt_phi->Fill(phiDegree);
487 p_nobha_stt_P3.push_back(p3);
491 m_hPt_psnecl->Fill(pt);
492 m_nobha_hPt_psnecl->Fill(pt);
493 m_nobha_f_phi_psnecl->Fill(phiDegree);
495 m_hP3_z_psnecl->Fill(p3); // for z bit
496 m_hP3_y_psnecl->Fill(p3); // for y bit
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
501 m_nobha_phi_z_psnecl->Fill(phiDegree);
502 m_nobha_phi_y_psnecl->Fill(phiDegree);
504 m_stt_phi_psnecl->Fill(phiDegree);
505 p_stt_P3_psnecl.push_back(p3);
506 m_stt_theta_psnecl->Fill(theta);
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);
513 if (trg_psnecl && trg_ftdf) {
514 m_hPt_psnecl_ftdf->Fill(pt);
516 if (trg_psnecl && trg_itdt2) {
517 m_nobha_hPt_psnecl_ftdf->Fill(pt);
518 m_nobha_f_phi_psnecl_ftdf->Fill(phiDegree);
521 if (trg_psnecl && trg_ftdz) {
522 m_hP3_z_psnecl_ftdf->Fill(p3);
524 if (trg_psnecl && trg_ftdy) {
525 m_hP3_y_psnecl_ftdf->Fill(p3);
527 if (trg_psnecl && trg_itdt3) {
528 m_nobha_hP3_z_psnecl_ftdf->Fill(p3);
529 m_nobha_phi_z_psnecl_ftdf->Fill(phiDegree);
531 if (trg_psnecl && trg_itdt4) {
532 m_nobha_hP3_y_psnecl_ftdf->Fill(p3);
533 m_nobha_phi_y_psnecl_ftdf->Fill(phiDegree);
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);
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);
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) {
556 const Belle2::TrackFitResult* jfitresult = j_b2track.getTrackFitResultWithClosestMass(Const::pion);
558 B2WARNING("No track fit result found.");
563 // require high NDF track
564 int jndf = jfitresult->getNDF();
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;
577 if (deltea_phi > 180)
578 dphi = 360 - deltea_phi;
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"))
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");
587 // cout<<"i = "<<nitrack <<" j= "<<njtrack <<" phiDegree = "<<phiDegree<<" jrk_phiDegree = "<<jrk_phiDegree<<" dphi "<<dphi<<endl;
589 phi_fyo_dphi.push_back(dphi);
590 phi_nobha_fyo_dphi.push_back(dphi);
593 phi_fyo_dphi_psnecl.push_back(dphi);
594 phi_nobha_fyo_dphi_psnecl.push_back(dphi);
596 if (trg_psnecl && trg_fyo) {
597 phi_fyo_dphi_psnecl_ftdf.push_back(dphi);
599 if (trg_psnecl && trg_fyo_nobha) {
600 phi_nobha_fyo_dphi_psnecl_ftdf.push_back(dphi);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);