diff --git a/PhysicsAnalysis/AnalysisCommon/AssociationUtils/Root/TauAntiTauJetOverlapTool.cxx b/PhysicsAnalysis/AnalysisCommon/AssociationUtils/Root/TauAntiTauJetOverlapTool.cxx index 25a35caa67c594965311e60ff95a7fafc0e5dc98..c857bf32a5e34e91d1c4e72765db8e34f75c4947 100644 --- a/PhysicsAnalysis/AnalysisCommon/AssociationUtils/Root/TauAntiTauJetOverlapTool.cxx +++ b/PhysicsAnalysis/AnalysisCommon/AssociationUtils/Root/TauAntiTauJetOverlapTool.cxx @@ -114,6 +114,15 @@ namespace ORUtils m_decHelper->initializeDecorations(taus); m_decHelper->initializeDecorations(jets); + // Start by discarding all taus which are not ID or anti-ID + for(const auto tau : taus) { + if(!m_decHelper->isSurvivingObject(*tau)) continue; + if(isSurvivingTau(*tau)) continue; + if(isSurvivingAntiTau(*tau)) continue; + // remove it with trivial overlap with itself + ATH_CHECK( handleOverlap(tau, tau) ); + } + // Remove bjets overlapping with ID taus int ntaus = 0; for(const auto tau : taus) { @@ -134,6 +143,7 @@ namespace ORUtils if(!m_decHelper->isSurvivingObject(*jet)) continue; if(!isBJet(*jet)) continue; for(const auto tau : taus) { + if(!m_decHelper->isSurvivingObject(*jet)) continue; if(!isSurvivingAntiTau(*tau)) continue; if(m_dRMatcher->objectsMatch(*tau, *jet)) { ATH_CHECK( handleOverlap(tau, jet) ); @@ -145,8 +155,8 @@ namespace ORUtils int antiTauCategory = 0; static const SG::AuxElement::ConstAccessor<int> categoryAcc(m_antiTauEventCategoryDecorName); for(const auto tau : taus) { - if(!m_decHelper->isSurvivingObject(*tau) && - !isSurvivingAntiTau(*tau) ) continue; + if(!m_decHelper->isSurvivingObject(*tau)) continue; + if(!isSurvivingAntiTau(*tau)) continue; nantitaus++; antiTauCategory = categoryAcc(*tau); } @@ -163,20 +173,21 @@ namespace ORUtils int nSelectedAntitaus = 0; int idx = 0; for(const auto tau : taus) { - if(!m_decHelper->isSurvivingObject(*tau) && - !isSurvivingAntiTau(*tau) ) continue; - if (idx == selIndex && nSelectedAntitaus < nAntiTauMax) nSelectedAntitaus++; - else { - // remove excess anti-taus by applying OR fail (it trivially overlaps with itself) - ATH_CHECK( handleOverlap(tau, tau) ); - } - idx++; + if(!m_decHelper->isSurvivingObject(*tau)) continue; + if(!isSurvivingAntiTau(*tau) ) continue; + if (idx == selIndex && nSelectedAntitaus < nAntiTauMax) nSelectedAntitaus++; + else { + // remove excess anti-taus by applying OR fail (it trivially overlaps with itself) + ATH_CHECK( handleOverlap(tau, tau) ); + } + idx++; } } + // Remove light jets from remaining anti-taus. for(const auto tau : taus) { - if(!m_decHelper->isSurvivingObject(*tau) && - !isSurvivingAntiTau(*tau) ) continue; + if(!m_decHelper->isSurvivingObject(*tau)) continue; + if(!isSurvivingAntiTau(*tau)) continue; // if isSurviving for(const auto jet : jets) { if(!m_decHelper->isSurvivingObject(*jet)) continue;