Event processor.
196{
198 B2WARNING("TRGSummary object not available but require to estimate trg efficiency");
199 return;
200 }
201
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 /*/
311 int nlayer = b2klmcluster.getLayers();
312
313
314 if (nlayer <= 6)
315 continue;
316
317
318 double theta = b2klmcluster.getMomentum().Theta() /
Unit::deg;
319 double phiDegree = b2klmcluster.getMomentum().Phi() /
Unit::deg;
320
325
326 try {
328 } catch (const std::exception&) {
329 }
330
331
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
342 m_klmhit_theta_psnecl->Fill(theta);
343
344 m_eklmhit_theta_psnecl->Fill(theta);
345 }
346 if (trg_KLMecl && trg_klmhit) {
347
348 m_klmhit_theta_psnecl_ftdf->Fill(theta);
349 }
350 if (trg_KLMecl && trg_eklmhit) {
351
352 m_eklmhit_theta_psnecl_ftdf->Fill(theta);
353 }
354
355
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}
StoreObjPtr< TRGSummary > m_trgSummary
Trigger summary.
StoreArray< KLMCluster > m_KLMClusters
KLM Clusters.
StoreObjPtr< SoftwareTriggerResult > m_TrgResult
Store array for Trigger selection.
static const double deg
degree to radians