Function executing the tool.
388 el.SetPtEtaPhiE(
event.m_electrons.at(0)->pt() / 1.e3,
event.m_electrons.at(0)->eta(),
event.m_electrons.at(
389 0)->phi(),
event.m_electrons.at(0)->e() / 1.e3);
394 mu.SetPtEtaPhiE(
event.m_muons.at(0)->pt() / 1.e3,
event.m_muons.at(0)->eta(),
event.m_muons.at(
395 0)->phi(),
event.m_muons.at(0)->e() / 1.e3);
402 el.SetPtEtaPhiE(
event.m_electrons.at(0)->pt() / 1.e3,
event.m_electrons.at(0)->eta(),
event.m_electrons.at(
403 0)->phi(),
event.m_electrons.at(0)->e() / 1.e3);
408 mu.SetPtEtaPhiE(
event.m_muons.at(0)->pt() / 1.e3,
event.m_muons.at(0)->eta(),
event.m_muons.at(
409 0)->phi(),
event.m_muons.at(0)->e() / 1.e3);
413 if (
m_LHType ==
"ttbar_JetAngles") {
416 el.SetPtEtaPhiE(
event.m_electrons.at(0)->pt() / 1.e3,
event.m_electrons.at(0)->eta(),
event.m_electrons.at(
417 0)->phi(),
event.m_electrons.at(0)->e() / 1.e3);
422 mu.SetPtEtaPhiE(
event.m_muons.at(0)->pt() / 1.e3,
event.m_muons.at(0)->eta(),
event.m_muons.at(
423 0)->phi(),
event.m_muons.at(0)->e() / 1.e3);
430 el.SetPtEtaPhiE(
event.m_electrons.at(0)->pt() / 1.e3,
event.m_electrons.at(0)->eta(),
event.m_electrons.at(
431 0)->phi(),
event.m_electrons.at(0)->e() / 1.e3);
436 mu.SetPtEtaPhiE(
event.m_muons.at(0)->pt() / 1.e3,
event.m_muons.at(0)->eta(),
event.m_muons.at(
437 0)->phi(),
event.m_muons.at(0)->e() / 1.e3);
445 if (
event.m_electrons.size() < 3) {
446 ATH_MSG_ERROR(
"KLFitter: kTriElectron requires three electrons...");
447 return StatusCode::FAILURE;
450 for (
unsigned int i = 0;
i < 3; ++
i) {
451 const auto&
electron =
event.m_electrons.at(
i);
458 el.SetPtEtaPhiE(
event.m_electrons.at(0)->pt() / 1.e3,
event.m_electrons.at(0)->eta(),
event.m_electrons.at(
459 0)->phi(),
event.m_electrons.at(0)->e() / 1.e3);
460 myParticles->AddParticle(&
el,
event.m_electrons.at(0)->caloCluster()->etaBE(2),
468 if (
event.m_muons.size() < 3) {
470 return StatusCode::FAILURE;
473 for (
unsigned int i = 0;
i < 3; ++
i) {
474 const auto&
muon =
event.m_muons.at(
i);
481 mu.SetPtEtaPhiE(
event.m_muons.at(0)->pt() / 1.e3,
event.m_muons.at(0)->eta(),
event.m_muons.at(
482 0)->phi(),
event.m_muons.at(0)->e() / 1.e3);
487 if (
m_LHType ==
"ttbar_BoostedLJets") {
490 el.SetPtEtaPhiE(
event.m_electrons.at(0)->pt() / 1.e3,
event.m_electrons.at(0)->eta(),
event.m_electrons.at(
491 0)->phi(),
event.m_electrons.at(0)->e() / 1.e3);
496 mu.SetPtEtaPhiE(
event.m_muons.at(0)->pt() / 1.e3,
event.m_muons.at(0)->eta(),
event.m_muons.at(
497 0)->phi(),
event.m_muons.at(0)->e() / 1.e3);
505 "KLFitterTool::execute: error at event " <<
event.m_info->eventNumber() <<
506 ". It was not possible to properly fill the jets. Are you trying to use a KLeadingX Jet Selection mode with a signal region with less than X jets? Please check your configuration!");
507 return StatusCode::FAILURE;
512 ATH_MSG_ERROR(
"KLFitter: Error adding particles to fitter...");
513 return StatusCode::FAILURE;
517 const double met_ex =
event.m_met->mpx() / 1.e3;
518 const double met_ey =
event.m_met->mpy() / 1.e3;
519 const double met_sumet =
event.m_met->sumet() / 1.e3;
521 if (!
m_myFitter->SetET_miss_XY_SumET(met_ex, met_ey, met_sumet)) {
523 return StatusCode::FAILURE;
526 std::string outputSGKey(
"SetMe");
527 if (!
event.m_isLoose) {
530 if (
event.m_isLoose) {
531 outputSGKey =
m_config->sgKeyKLFitterLoose(
event.m_hashValue);
533 std::string outputSGKeyAux = outputSGKey +
"Aux.";
537 if ((!
m_config->KLFitterSaveAllPermutations()) ||
538 ((
m_config->KLFitterSaveAllPermutations()) &&
539 (!
evtStore()->tds()->contains<xAOD::KLFitterResultContainer>(outputSGKey)))) {
542 resultContainer->setStore(resultAuxContainer);
545 "KLFitterTools::execute(): can not retrieve xAOD::KLFitterResultContainer from evtStore()");
548 const int nperm =
m_myFitter->Permutations()->NPermutations();
549 for (
int iperm = 0; iperm < nperm; ++iperm) {
557 std::hash<std::string> hash_string;
560 unsigned int ConvergenceStatusBitWord =
m_myFitter->ConvergenceStatus();
561 bool MinuitDidNotConverge = (ConvergenceStatusBitWord &
m_myFitter->MinuitDidNotConvergeMask) != 0;
562 bool FitAbortedDueToNaN = (ConvergenceStatusBitWord &
m_myFitter->FitAbortedDueToNaNMask) != 0;
563 bool AtLeastOneFitParameterAtItsLimit =
564 (ConvergenceStatusBitWord &
m_myFitter->AtLeastOneFitParameterAtItsLimitMask) != 0;
565 bool InvalidTransferFunctionAtConvergence =
566 (ConvergenceStatusBitWord &
m_myFitter->InvalidTransferFunctionAtConvergenceMask) != 0;
568 result->setMinuitDidNotConverge(((MinuitDidNotConverge) ? 1 : 0));
569 result->setFitAbortedDueToNaN(((FitAbortedDueToNaN) ? 1 : 0));
570 result->setAtLeastOneFitParameterAtItsLimit(((AtLeastOneFitParameterAtItsLimit) ? 1 : 0));
571 result->setInvalidTransferFunctionAtConvergence(((InvalidTransferFunctionAtConvergence) ? 1 : 0));
576 result->setParameterErrors(
m_myFitter->Likelihood()->GetBestFitParameterErrors());
584 result->setModel_bhad_pt(myModelParticles->Parton(0)->Pt());
585 result->setModel_bhad_eta(myModelParticles->Parton(0)->Eta());
586 result->setModel_bhad_phi(myModelParticles->Parton(0)->Phi());
587 result->setModel_bhad_E(myModelParticles->Parton(0)->E());
588 result->setModel_bhad_jetIndex((*myPermutedParticles)->JetIndex(0));
590 result->setModel_blep_pt(myModelParticles->Parton(1)->Pt());
591 result->setModel_blep_eta(myModelParticles->Parton(1)->Eta());
592 result->setModel_blep_phi(myModelParticles->Parton(1)->Phi());
593 result->setModel_blep_E(myModelParticles->Parton(1)->E());
594 result->setModel_blep_jetIndex((*myPermutedParticles)->JetIndex(1));
596 result->setModel_lq1_pt(myModelParticles->Parton(2)->Pt());
597 result->setModel_lq1_eta(myModelParticles->Parton(2)->Eta());
598 result->setModel_lq1_phi(myModelParticles->Parton(2)->Phi());
599 result->setModel_lq1_E(myModelParticles->Parton(2)->E());
600 result->setModel_lq1_jetIndex((*myPermutedParticles)->JetIndex(2));
603 if (
m_LHType !=
"ttbar_BoostedLJets") {
604 result->setModel_lq2_pt(myModelParticles->Parton(3)->Pt());
605 result->setModel_lq2_eta(myModelParticles->Parton(3)->Eta());
606 result->setModel_lq2_phi(myModelParticles->Parton(3)->Phi());
607 result->setModel_lq2_E(myModelParticles->Parton(3)->E());
608 result->setModel_lq2_jetIndex((*myPermutedParticles)->JetIndex(3));
611 result->setModel_Higgs_b1_pt(myModelParticles->Parton(4)->Pt());
612 result->setModel_Higgs_b1_eta(myModelParticles->Parton(4)->Eta());
613 result->setModel_Higgs_b1_phi(myModelParticles->Parton(4)->Phi());
614 result->setModel_Higgs_b1_E(myModelParticles->Parton(4)->E());
615 result->setModel_Higgs_b1_jetIndex((*myPermutedParticles)->JetIndex(4));
617 result->setModel_Higgs_b2_pt(myModelParticles->Parton(5)->Pt());
618 result->setModel_Higgs_b2_eta(myModelParticles->Parton(5)->Eta());
619 result->setModel_Higgs_b2_phi(myModelParticles->Parton(5)->Phi());
620 result->setModel_Higgs_b2_E(myModelParticles->Parton(5)->E());
621 result->setModel_Higgs_b2_jetIndex((*myPermutedParticles)->JetIndex(5));
631 result->setModel_lep_pt(myModelParticles->Electron(0)->Pt());
632 result->setModel_lep_eta(myModelParticles->Electron(0)->Eta());
633 result->setModel_lep_phi(myModelParticles->Electron(0)->Phi());
634 result->setModel_lep_E(myModelParticles->Electron(0)->E());
637 result->setModel_lep_index((*myPermutedParticles)->ElectronIndex(0));
639 result->setModel_lepZ1_pt(myModelParticles->Electron(1)->Pt());
640 result->setModel_lepZ1_eta(myModelParticles->Electron(1)->Eta());
641 result->setModel_lepZ1_phi(myModelParticles->Electron(1)->Phi());
642 result->setModel_lepZ1_E(myModelParticles->Electron(1)->E());
643 result->setModel_lepZ1_index((*myPermutedParticles)->ElectronIndex(1));
645 result->setModel_lepZ2_pt(myModelParticles->Electron(2)->Pt());
646 result->setModel_lepZ2_eta(myModelParticles->Electron(2)->Eta());
647 result->setModel_lepZ2_phi(myModelParticles->Electron(2)->Phi());
648 result->setModel_lepZ2_E(myModelParticles->Electron(2)->E());
649 result->setModel_lepZ2_index((*myPermutedParticles)->ElectronIndex(2));
659 result->setModel_lep_pt(myModelParticles->Muon(0)->Pt());
660 result->setModel_lep_eta(myModelParticles->Muon(0)->Eta());
661 result->setModel_lep_phi(myModelParticles->Muon(0)->Phi());
662 result->setModel_lep_E(myModelParticles->Muon(0)->E());
665 result->setModel_lep_index((*myPermutedParticles)->MuonIndex(0));
667 result->setModel_lepZ1_pt(myModelParticles->Muon(1)->Pt());
668 result->setModel_lepZ1_eta(myModelParticles->Muon(1)->Eta());
669 result->setModel_lepZ1_phi(myModelParticles->Muon(1)->Phi());
670 result->setModel_lepZ1_E(myModelParticles->Muon(1)->E());
671 result->setModel_lepZ1_index((*myPermutedParticles)->MuonIndex(1));
673 result->setModel_lepZ2_pt(myModelParticles->Muon(2)->Pt());
674 result->setModel_lepZ2_eta(myModelParticles->Muon(2)->Eta());
675 result->setModel_lepZ2_phi(myModelParticles->Muon(2)->Phi());
676 result->setModel_lepZ2_E(myModelParticles->Muon(2)->E());
677 result->setModel_lepZ2_index((*myPermutedParticles)->MuonIndex(2));
681 result->setModel_nu_pt(myModelParticles->Neutrino(0)->Pt());
682 result->setModel_nu_eta(myModelParticles->Neutrino(0)->Eta());
683 result->setModel_nu_phi(myModelParticles->Neutrino(0)->Phi());
684 result->setModel_nu_E(myModelParticles->Neutrino(0)->E());
685 }
else if (
m_LHType ==
"ttbar_AllHadronic") {
686 result->setModel_b_from_top1_pt(myModelParticles->Parton(0)->Pt());
687 result->setModel_b_from_top1_eta(myModelParticles->Parton(0)->Eta());
688 result->setModel_b_from_top1_phi(myModelParticles->Parton(0)->Phi());
689 result->setModel_b_from_top1_E(myModelParticles->Parton(0)->E());
690 result->setModel_b_from_top1_jetIndex((*myPermutedParticles)->JetIndex(0));
692 result->setModel_b_from_top2_pt(myModelParticles->Parton(1)->Pt());
693 result->setModel_b_from_top2_eta(myModelParticles->Parton(1)->Eta());
694 result->setModel_b_from_top2_phi(myModelParticles->Parton(1)->Phi());
695 result->setModel_b_from_top2_E(myModelParticles->Parton(1)->E());
696 result->setModel_b_from_top2_jetIndex((*myPermutedParticles)->JetIndex(1));
698 result->setModel_lj1_from_top1_pt(myModelParticles->Parton(2)->Pt());
699 result->setModel_lj1_from_top1_eta(myModelParticles->Parton(2)->Eta());
700 result->setModel_lj1_from_top1_phi(myModelParticles->Parton(2)->Phi());
701 result->setModel_lj1_from_top1_E(myModelParticles->Parton(2)->E());
702 result->setModel_lj1_from_top1_jetIndex((*myPermutedParticles)->JetIndex(2));
704 result->setModel_lj2_from_top1_pt(myModelParticles->Parton(3)->Pt());
705 result->setModel_lj2_from_top1_eta(myModelParticles->Parton(3)->Eta());
706 result->setModel_lj2_from_top1_phi(myModelParticles->Parton(3)->Phi());
707 result->setModel_lj2_from_top1_E(myModelParticles->Parton(3)->E());
708 result->setModel_lj2_from_top1_jetIndex((*myPermutedParticles)->JetIndex(3));
710 result->setModel_lj1_from_top2_pt(myModelParticles->Parton(4)->Pt());
711 result->setModel_lj1_from_top2_eta(myModelParticles->Parton(4)->Eta());
712 result->setModel_lj1_from_top2_phi(myModelParticles->Parton(4)->Phi());
713 result->setModel_lj1_from_top2_E(myModelParticles->Parton(4)->E());
714 result->setModel_lj1_from_top2_jetIndex((*myPermutedParticles)->JetIndex(4));
716 result->setModel_lj2_from_top2_pt(myModelParticles->Parton(5)->Pt());
717 result->setModel_lj2_from_top2_eta(myModelParticles->Parton(5)->Eta());
718 result->setModel_lj2_from_top2_phi(myModelParticles->Parton(5)->Phi());
719 result->setModel_lj2_from_top2_E(myModelParticles->Parton(5)->E());
720 result->setModel_lj2_from_top2_jetIndex((*myPermutedParticles)->JetIndex(5));
726 float sumEventProbability(0.), bestEventProbability(0.);
727 unsigned int bestPermutation(999), iPerm(0);
730 for (
auto x : *resultContainer) {
731 float prob =
x->eventProbability();
732 short minuitDidNotConverge =
x->minuitDidNotConverge();
733 short fitAbortedDueToNaN =
x->fitAbortedDueToNaN();
734 short atLeastOneFitParameterAtItsLimit =
x->atLeastOneFitParameterAtItsLimit();
736 sumEventProbability +=
prob;
740 if (minuitDidNotConverge)
continue;
741 if (fitAbortedDueToNaN)
continue;
742 if (atLeastOneFitParameterAtItsLimit)
continue;
745 if (
prob > bestEventProbability) {
746 bestEventProbability =
prob;
748 bestPermutation = iPerm - 1;
754 for (
auto x : *resultContainer) {
755 x->setEventProbability(
x->eventProbability() / sumEventProbability);
756 if (iPerm == bestPermutation) {
757 x->setBestPermutation(1);
759 x->setBestPermutation(0);
769 if (
m_config->KLFitterSaveAllPermutations()) {
770 if (!
evtStore()->tds()->contains<xAOD::KLFitterResultContainer>(outputSGKey)) {
773 "KLFitterTools: ERROR! Was not able to write KLFitterResultContainer");
776 "KLFitterTools: ERROR! Was not able to write KLFitterResultAuxContainer");
784 if (!
evtStore()->tds()->contains<xAOD::KLFitterResultContainer>(outputSGKey)) {
787 bestContainer->setStore(bestAuxContainer);
790 "KLFitterTools::execute(): can not retrieve xAOD::KLFitterResultContainer from evtStore()");
792 for (
auto x : *resultContainer) {
793 if (
x->bestPermutation() == 1) {
799 if (!
evtStore()->tds()->contains<xAOD::KLFitterResultContainer>(outputSGKey)) {
802 "KLFitterTools: ERROR! Was not able to write KLFitterResultContainer with best permutation");
805 "KLFitterTools: ERROR! Was not able to write KLFitterResultAuxContainer with best permutation");
811 delete resultContainer;
812 delete resultAuxContainer;
817 "Failed to add KLFitterResults to top::Event");
822 return StatusCode::SUCCESS;