From d371ade2390a6aa9d209143c261149511bcc9915 Mon Sep 17 00:00:00 2001 From: Teng Jian Khoo <teng.jian.khoo@cern.ch> Date: Fri, 17 Feb 2017 19:54:42 +0100 Subject: [PATCH] 'apply track cleaning to cPFO jet constituents' (METReconstruction-00-03-30) * Apply track cleaning to charged PF jet constituents as well * Tagging as METReconstruction-00-03-30 2017-02-12 Teng Jian Khoo <khoo@cern.ch> * Disable core corrections in the calo isolation tools for track cleaning * Tagging as METReconstruction-00-03-29 2017-02-08 Teng Jian Khoo <khoo@cern.ch> * Lower track cleaning threshold again to 30 GeV * Flags for control of PFlow cleaning * Tagging as METReconstruction-00-03-28 2017-02-07 Teng Jian Khoo <khoo@cern.ch> * Require isGoodEoverP track cleaning for charged PFlow objects * Lower track cleaning threshold to 40 GeV * Tagging as METReconstruction-00-03-27 2017-02-05 Teng Jian Khoo <khoo@cern.ch> * Disable writing of constituent weights from METUtilities * Switch to loose track association for Track MET ... (Long ChangeLog diff - truncated) Former-commit-id: 30dac4156d14bb60fa7fe146b24bf687acf0fc7d --- .../METReconstruction/METAssociator.h | 2 +- .../METReconstruction/METSoftAssociator.h | 1 + .../METReconstruction/Root/METAssociator.cxx | 16 ++--- .../Root/METEgammaAssociator.cxx | 5 +- .../Root/METJetAssocTool.cxx | 4 +- .../Root/METMuonAssociator.cxx | 4 +- .../Root/METSoftAssociator.cxx | 13 +++- .../Root/METTauAssociator.cxx | 66 +------------------ .../python/METAssocConfig.py | 6 +- .../METReconstruction/python/METRecoConfig.py | 9 ++- ...TReconstructionOutputAODList_jobOptions.py | 2 +- ...TReconstructionOutputESDList_jobOptions.py | 2 +- 12 files changed, 43 insertions(+), 87 deletions(-) diff --git a/Reconstruction/MET/METReconstruction/METReconstruction/METAssociator.h b/Reconstruction/MET/METReconstruction/METReconstruction/METAssociator.h index f23250ace43b..4f7d8ec1001c 100644 --- a/Reconstruction/MET/METReconstruction/METReconstruction/METAssociator.h +++ b/Reconstruction/MET/METReconstruction/METReconstruction/METAssociator.h @@ -85,7 +85,6 @@ namespace met { std::string m_pvcoll; std::string m_trkcoll; std::string m_clcoll; - std::string m_goodtracks_coll; bool m_pflow; bool m_useTracks; @@ -93,6 +92,7 @@ namespace met { bool m_useIsolationTools; bool m_useModifiedClus; bool m_weight_charged_pfo; + bool m_cleanChargedPFO; ToolHandle<CP::IRetrievePFOTool> m_pfotool; ToolHandle<CP::IWeightPFOTool> m_pfoweighttool; diff --git a/Reconstruction/MET/METReconstruction/METReconstruction/METSoftAssociator.h b/Reconstruction/MET/METReconstruction/METReconstruction/METSoftAssociator.h index f2bf51d0f030..ffdcfc94c6ff 100644 --- a/Reconstruction/MET/METReconstruction/METReconstruction/METSoftAssociator.h +++ b/Reconstruction/MET/METReconstruction/METReconstruction/METSoftAssociator.h @@ -75,6 +75,7 @@ namespace met{ bool m_decorateSoftTermConst; std::string m_lcmodclus_key; std::string m_emmodclus_key; + bool m_weight_soft_pfo; }; diff --git a/Reconstruction/MET/METReconstruction/Root/METAssociator.cxx b/Reconstruction/MET/METReconstruction/Root/METAssociator.cxx index 59b3410a2204..d2ce010b0c0b 100644 --- a/Reconstruction/MET/METReconstruction/Root/METAssociator.cxx +++ b/Reconstruction/MET/METReconstruction/Root/METAssociator.cxx @@ -60,22 +60,22 @@ namespace met { declareProperty( "PrimVxColl", m_pvcoll = "PrimaryVertices" ); declareProperty( "TrkColl", m_trkcoll = "InDetTrackParticles" ); declareProperty( "ClusColl", m_clcoll = "CaloCalTopoClusters" ); - declareProperty( "UseModifiedClus", m_useModifiedClus = false ); + declareProperty( "UseModifiedClus", m_useModifiedClus = false ); declareProperty( "UseTracks", m_useTracks = true ); declareProperty( "PFlow", m_pflow = false ); - declareProperty( "WeightCPFO", m_weight_charged_pfo = true ); + declareProperty( "WeightCPFO", m_weight_charged_pfo = true ); declareProperty( "UseRapidity", m_useRapidity = false ); declareProperty( "PFOTool", m_pfotool ); - declareProperty( "PFOWeightTool", m_pfoweighttool ); + declareProperty( "PFOWeightTool", m_pfoweighttool ); declareProperty( "TrackSelectorTool", m_trkseltool ); declareProperty( "TrackIsolationTool", m_trkIsolationTool ); declareProperty( "CaloIsolationTool", m_caloIsolationTool ); - declareProperty( "GoodTracksColl", m_goodtracks_coll = "METRecoGoodTrackParticles" ); declareProperty( "IgnoreJetConst", m_skipconst = false ); - declareProperty( "ForwardColl", m_forcoll = "" ); + declareProperty( "ForwardColl", m_forcoll = "" ); declareProperty( "ForwardDef", m_foreta = 2.5 ); - declareProperty( "CentralTrackPtThr", m_cenTrackPtThr = 200e+3 ); - declareProperty( "ForwardTrackPtThr", m_forTrackPtThr = 120e+3 ); + declareProperty( "CentralTrackPtThr", m_cenTrackPtThr = 30e+3 ); + declareProperty( "ForwardTrackPtThr", m_forTrackPtThr = 30e+3 ); + declareProperty( "CleanCPFO", m_cleanChargedPFO = true ); } // Destructor @@ -325,7 +325,7 @@ namespace met { std::vector<Iso::IsolationType> caloIsoCones_coreCone; caloIsoCones_coreCone.push_back(xAOD::Iso::IsolationType::etcone20); xAOD::CaloCorrection caloIsoCorr_coreCone; - caloIsoCorr_coreCone.calobitset.set(xAOD::Iso::IsolationCaloCorrection::coreCone); + caloIsoCorr_coreCone.calobitset.set(xAOD::Iso::IsolationCaloCorrection::noneCaloCorrection); m_caloIsolationTool->caloTopoClusterIsolation(caloIsoResult_coreCone, *trk, caloIsoCones_coreCone, diff --git a/Reconstruction/MET/METReconstruction/Root/METEgammaAssociator.cxx b/Reconstruction/MET/METReconstruction/Root/METEgammaAssociator.cxx index 1ce604a194f7..a23bbd8c03c9 100644 --- a/Reconstruction/MET/METReconstruction/Root/METEgammaAssociator.cxx +++ b/Reconstruction/MET/METReconstruction/Root/METEgammaAssociator.cxx @@ -162,7 +162,10 @@ namespace met { nearbyPFO.reserve(20); for(const auto& pfo : *constits.pfoCont) { if(P4Helpers::isInDeltaR(*pfo, *swclus, 0.4, m_useRapidity)) { - if(fabs(pfo->charge())<FLT_MIN || acceptChargedPFO(pfo->track(0),constits.pv)) { + if(fabs(pfo->charge())<FLT_MIN + || (acceptChargedPFO(pfo->track(0),constits.pv) + && ( !m_cleanChargedPFO || isGoodEoverP(pfo->track(0)) ) + )) { nearbyPFO.push_back(pfo); } // retain neutral PFOs and charged PFOs passing PV association } // DeltaR check diff --git a/Reconstruction/MET/METReconstruction/Root/METJetAssocTool.cxx b/Reconstruction/MET/METReconstruction/Root/METJetAssocTool.cxx index d3a56770fee2..284ae7a07161 100644 --- a/Reconstruction/MET/METReconstruction/Root/METJetAssocTool.cxx +++ b/Reconstruction/MET/METReconstruction/Root/METJetAssocTool.cxx @@ -103,7 +103,6 @@ namespace met { } // Create jet associations - MissingETBase::Types::constvec_t trkvec; for(const auto& jet : *jetCont) { std::vector<const IParticle*> selectedTracks; bool mismatchedPFlow = m_pflow && jet->rawConstituent(0)->type()!=xAOD::Type::ParticleFlow; @@ -113,9 +112,8 @@ namespace met { for (size_t consti = 0; consti < jet->numConstituents(); consti++) { const xAOD::PFO *pfo = static_cast<const xAOD::PFO*>(jet->rawConstituent(consti)); ATH_MSG_VERBOSE("Jet constituent PFO, pt " << pfo->pt()); - if (fabs(pfo->charge())>1e-9) { + if (fabs(pfo->charge())>1e-9 && isGoodEoverP(pfo->track(0))) { ATH_MSG_VERBOSE(" Accepted charged PFO, pt " << pfo->pt()); - trkvec += *pfo; selectedTracks.push_back(pfo); } } diff --git a/Reconstruction/MET/METReconstruction/Root/METMuonAssociator.cxx b/Reconstruction/MET/METReconstruction/Root/METMuonAssociator.cxx index 1cc01c2c6b27..5b2fe4f26d5c 100644 --- a/Reconstruction/MET/METReconstruction/Root/METMuonAssociator.cxx +++ b/Reconstruction/MET/METReconstruction/Root/METMuonAssociator.cxx @@ -154,7 +154,9 @@ namespace met { for(const auto& pfo : *constits.pfoCont) { if(fabs(pfo->charge())>1e-9) { // get charged PFOs by matching the muon ID track - if(idtrack && acceptChargedPFO(idtrack,constits.pv) && pfo->track(0) == idtrack) { + if(idtrack && pfo->track(0) == idtrack && acceptChargedPFO(idtrack,constits.pv) && + ( !m_cleanChargedPFO || isGoodEoverP(pfo->track(0)) ) + ) { ATH_MSG_VERBOSE("Accept muon PFO " << pfo << " px, py = " << pfo->p4().Px() << ", " << pfo->p4().Py()); ATH_MSG_VERBOSE("Muon PFO index: " << pfo->index() << ", pt: " << pfo->pt() << ", eta: " << pfo->eta() << ", phi: " << pfo->phi() ); ATH_MSG_VERBOSE("Muon ID Track index: " << idtrack->index() << ", pt: " << idtrack->pt() << ", eta: " << idtrack->eta() << ", phi: " << idtrack->phi() ); diff --git a/Reconstruction/MET/METReconstruction/Root/METSoftAssociator.cxx b/Reconstruction/MET/METReconstruction/Root/METSoftAssociator.cxx index fe7e597c2ae5..116cd322739b 100644 --- a/Reconstruction/MET/METReconstruction/Root/METSoftAssociator.cxx +++ b/Reconstruction/MET/METReconstruction/Root/METSoftAssociator.cxx @@ -17,6 +17,8 @@ #include "xAODCaloEvent/CaloClusterChangeSignalState.h" #include "xAODCaloEvent/CaloClusterContainer.h" +#include "PFlowUtils/IWeightPFOTool.h" + namespace met { using namespace xAOD; @@ -31,6 +33,7 @@ namespace met { declareProperty("DecorateSoftConst", m_decorateSoftTermConst=false); declareProperty("LCModClusterKey", m_lcmodclus_key = "LCOriginTopoClusters"); declareProperty("EMModClusterKey", m_emmodclus_key = "EMOriginTopoClusters"); + declareProperty("WeightSoftPFO", m_weight_soft_pfo = false); } // Destructor @@ -96,9 +99,15 @@ namespace met { for(const auto& sig : *uniquePFOs) { const PFO *pfo = static_cast<const PFO*>(sig); if (fabs(pfo->charge())>1e-9) { - if (acceptChargedPFO(pfo->track(0),constits.pv)) { + if (acceptChargedPFO(pfo->track(0),constits.pv) && + ( !m_cleanChargedPFO || isGoodEoverP(pfo->track(0)) ) + ) { *metCoreTrk += sig; - *metCoreCl += sig; + float weight = 1.0; + if(m_weight_charged_pfo && m_weight_soft_pfo) { + ATH_CHECK( m_pfoweighttool->fillWeight( *pfo, weight ) ); + } + metCoreCl->add(sig,weight); if(m_decorateSoftTermConst) { dec_softConst(*metCoreTrk).push_back(ElementLink<IParticleContainer>(*static_cast<const IParticleContainer*>(sig->container()),sig->index())); dec_softConst(*metCoreCl).push_back(ElementLink<IParticleContainer>(*static_cast<const IParticleContainer*>(sig->container()),sig->index())); diff --git a/Reconstruction/MET/METReconstruction/Root/METTauAssociator.cxx b/Reconstruction/MET/METReconstruction/Root/METTauAssociator.cxx index de558e9c623e..84793a007d7c 100644 --- a/Reconstruction/MET/METReconstruction/Root/METTauAssociator.cxx +++ b/Reconstruction/MET/METReconstruction/Root/METTauAssociator.cxx @@ -101,29 +101,6 @@ namespace met { const met::METAssociator::ConstitHolder& /*tcCont*/) const { const TauJet* tau = static_cast<const TauJet*>(obj); - /////////////////////////////////////////// TO-BE REMOVED!!! - /////////////////////////////////////////// TO-BE REMOVED!!! - ////// <<<===== OLD TAU EDM : ASM 19/4/2016 - //const Jet* seedjet = *tau->jetLink(); - //JetConstituentVector constit = seedjet->getConstituents(); - //ATH_MSG_VERBOSE("Current tau has " << constit.size() << " constituents."); - //// test for used topoclusters, and retrieve unused ones (ok until/unless we use PFlow taus) - //// only use clusters for computing the overlap removal relative to other objects - //for(const auto& cl : constit) { - // // TEMP: use jet seed axis - // // taus will provide an accessor - // if(!xAOD::P4Helpers::isInDeltaR(*seedjet,*cl->rawConstituent(),0.2,m_useRapidity)) continue; - // // skip cluster if dR>0.2 - // if(cl->rawConstituent()->type() == xAOD::Type::CaloCluster) { - // const CaloCluster* pClus = static_cast<const CaloCluster*>( cl->rawConstituent() ); - // tclist.push_back(pClus); - // } else { - // ATH_MSG_WARNING("Expected an object of type CaloCluster, received one of type " << cl->rawConstituent()->type()); - // } - //} // loop over jet constituents - ////// <<<===== OLD TAU EDM : ASM 19/4/2016 - /////////////////////////////////////////// TO-BE REMOVED!!! - /////////////////////////////////////////// TO-BE REMOVED!!! for( ElementLink< xAOD::IParticleContainer > cluster_link : tau->clusterLinks() ){ const xAOD::IParticle* ipart = *cluster_link; if(ipart->type() != xAOD::Type::CaloCluster) { @@ -145,32 +122,9 @@ namespace met { const met::METAssociator::ConstitHolder& constits) const { const TauJet* tau = static_cast<const TauJet*>(obj); - /////////////////////////////////////////// TO-BE REMOVED!!! - /////////////////////////////////////////// TO-BE REMOVED!!! - ////// <<<===== OLD TAU EDM : ASM 18/4/2016 - //const Jet* jet = *tau->jetLink(); - //for(size_t iTrk=0; iTrk<tau->nTracks(); ++iTrk) { - // const TrackParticle* tautrk = tau->track(iTrk); - // if(acceptTrack(tautrk,pv) && isGoodEoverP(tautrk,tcCont)) { - // // if(acceptTrack(tautrk,pv)) { - //ATH_MSG_VERBOSE("Accept tau track " << tautrk << " px, py = " << tautrk->p4().Px() << ", " << tautrk->p4().Py()); - //constlist.push_back(tautrk); - // } - //} - //for(size_t iTrk=0; iTrk<tau->nOtherTracks(); ++iTrk) { - // const TrackParticle* tautrk = tau->otherTrack(iTrk); - // if(xAOD::P4Helpers::isInDeltaR(*jet,*tautrk,0.2,m_useRapidity) && acceptTrack(tautrk,pv) && isGoodEoverP(tautrk,tcCont)) { - // // if(dR<0.2 && acceptTrack(tautrk,pv)) { - //ATH_MSG_VERBOSE("Accept track " << tautrk << " px, py = " << tautrk->p4().Px() << ", " << tautrk->p4().Py()); - //constlist.push_back(tautrk); - // } - //} - ////// <<<===== OLD TAU EDM : ASM 18/4/2016 - /////////////////////////////////////////// TO-BE REMOVED!!! - /////////////////////////////////////////// TO-BE REMOVED!!! for( const xAOD::TauTrack* tauTrk : tau->tracks(xAOD::TauJetParameters::coreTrack) ){//all tracks dR<0.2 regardless of quality const TrackParticle* trk = tauTrk->track(); - if(acceptTrack(trk,constits.pv) && isGoodEoverP(trk)){ + if(acceptTrack(trk,constits.pv) && ( !m_cleanChargedPFO || isGoodEoverP(trk) ) ){ ATH_MSG_VERBOSE("Accept tau track " << trk << " px, py = " << trk->p4().Px() << ", " << trk->p4().Py()); constlist.push_back(trk); } @@ -198,27 +152,11 @@ namespace met { } else { const TrackParticle* pfotrk = pfo->track(0); - /////////////////////////////////////////// TO-BE REMOVED!!! - /////////////////////////////////////////// TO-BE REMOVED!!! - ////// <<<===== OLD TAU EDM : ASM 18/4/2016 - //for(size_t iTrk=0; iTrk<tau->nTracks(); ++iTrk) { - // const TrackParticle* tautrk = tau->track(iTrk); - // if(tautrk==pfotrk) { - // if(acceptChargedPFO(tautrk,pv)) match = true; - // } - //} - //for(size_t iTrk=0; iTrk<tau->nOtherTracks(); ++iTrk) { - // const TrackParticle* tautrk = tau->otherTrack(iTrk); - // if(tautrk==pfotrk && xAOD::P4Helpers::isInDeltaR(*seedjet,*tautrk,0.2,m_useRapidity) && acceptChargedPFO(tautrk,pv)) match = true; - //} - ////// <<<===== OLD TAU EDM : ASM 18/4/2016 - /////////////////////////////////////////// TO-BE REMOVED!!! - /////////////////////////////////////////// TO-BE REMOVED!!! for( const xAOD::TauTrack* ttrk : tau->tracks(xAOD::TauJetParameters::coreTrack) ){//all tracks <0.2, no quality const TrackParticle* tautrk = ttrk->track(); if(tautrk==pfotrk) { ATH_MSG_VERBOSE("Found cPFO with dR " << seedjet->p4().DeltaR(ttrk->p4())); - if(acceptChargedPFO(tautrk,constits.pv)) match = true; + if(acceptChargedPFO(tautrk,constits.pv) && isGoodEoverP(pfotrk)) match = true; } } } diff --git a/Reconstruction/MET/METReconstruction/python/METAssocConfig.py b/Reconstruction/MET/METReconstruction/python/METAssocConfig.py index ce54120c386a..181fb5bfd7ab 100644 --- a/Reconstruction/MET/METReconstruction/python/METAssocConfig.py +++ b/Reconstruction/MET/METReconstruction/python/METAssocConfig.py @@ -160,7 +160,8 @@ class METAssocConfig: self.trkseltool=CfgMgr.InDet__InDetTrackSelectionTool("IDTrkSel_METAssoc", CutLevel="TightPrimary", maxZ0SinTheta=3, - maxD0=2) + maxD0=2, + minPt=500) if not hasattr(ToolSvc,self.trkseltool.name()): ToolSvc += self.trkseltool @@ -169,7 +170,8 @@ class METAssocConfig: if not hasattr(ToolSvc,self.trkisotool.name()): ToolSvc += self.trkisotool - self.caloisotool = CfgMgr.xAOD__CaloIsolationTool("CaloIsolationTool_MET") + self.caloisotool = CfgMgr.xAOD__CaloIsolationTool("CaloIsolationTool_MET", + saveOnlyRequestedCorrections=True) if not hasattr(ToolSvc,self.caloisotool.name()): ToolSvc += self.caloisotool diff --git a/Reconstruction/MET/METReconstruction/python/METRecoConfig.py b/Reconstruction/MET/METReconstruction/python/METRecoConfig.py index f9636b107f10..5218cfddd6b9 100644 --- a/Reconstruction/MET/METReconstruction/python/METRecoConfig.py +++ b/Reconstruction/MET/METReconstruction/python/METRecoConfig.py @@ -268,11 +268,13 @@ class METConfig: self.trkseltool=CfgMgr.InDet__InDetTrackSelectionTool("IDTrkSel_MET", CutLevel="TightPrimary", maxZ0SinTheta=3, - maxD0=2) + maxD0=2, + minPt=500) if not hasattr(ToolSvc,self.trkseltool.name()): ToolSvc += self.trkseltool # - self.trkvxtool=CfgMgr.CP__TightTrackVertexAssociationTool("TightTrackVertexAssociationTool_MET", dzSinTheta_cut=1.5, doPV=False) + self.trkvxtool=CfgMgr.CP__LooseTrackVertexAssociationTool("LooseTrackVertexAssociationTool_MET") + #self.trkvxtool=CfgMgr.CP__TightTrackVertexAssociationTool("TightTrackVertexAssociationTool_MET", dzSinTheta_cut=3, doPV=False) if not hasattr(ToolSvc,self.trkvxtool.name()): ToolSvc += self.trkvxtool # @@ -281,7 +283,8 @@ class METConfig: if not hasattr(ToolSvc,self.trkisotool.name()): ToolSvc += self.trkisotool # - self.caloisotool = CfgMgr.xAOD__CaloIsolationTool("CaloIsolationTool_MET") + self.caloisotool = CfgMgr.xAOD__CaloIsolationTool("CaloIsolationTool_MET", + saveOnlyRequestedCorrections=True) if not hasattr(ToolSvc,self.caloisotool.name()): ToolSvc += self.caloisotool diff --git a/Reconstruction/MET/METReconstruction/share/METReconstructionOutputAODList_jobOptions.py b/Reconstruction/MET/METReconstruction/share/METReconstructionOutputAODList_jobOptions.py index eccdd0fc3ecc..7474135f61e8 100644 --- a/Reconstruction/MET/METReconstruction/share/METReconstructionOutputAODList_jobOptions.py +++ b/Reconstruction/MET/METReconstruction/share/METReconstructionOutputAODList_jobOptions.py @@ -26,4 +26,4 @@ for config in assocoutput: MissingETAODList.append( 'xAOD::MissingETContainer#MET_Core_'+config ) MissingETAODList.append( 'xAOD::MissingETAuxContainer#MET_Core_'+config+'Aux.' ) MissingETAODList.append( 'xAOD::MissingETContainer#MET_Reference_'+config ) - MissingETAODList.append( 'xAOD::MissingETAuxContainer#MET_Reference_'+config+'Aux.-ConstitObjectLinks' ) + MissingETAODList.append( 'xAOD::MissingETAuxContainer#MET_Reference_'+config+'Aux.-ConstitObjectLinks.-ConstitObjectWeights' ) diff --git a/Reconstruction/MET/METReconstruction/share/METReconstructionOutputESDList_jobOptions.py b/Reconstruction/MET/METReconstruction/share/METReconstructionOutputESDList_jobOptions.py index 3194c3b8cc56..32718a10d12e 100644 --- a/Reconstruction/MET/METReconstruction/share/METReconstructionOutputESDList_jobOptions.py +++ b/Reconstruction/MET/METReconstruction/share/METReconstructionOutputESDList_jobOptions.py @@ -26,4 +26,4 @@ for config in assocoutput: MissingETESDList.append( 'xAOD::MissingETContainer#MET_Core_'+config ) MissingETESDList.append( 'xAOD::MissingETAuxContainer#MET_Core_'+config+'Aux.' ) MissingETESDList.append( 'xAOD::MissingETContainer#MET_Reference_'+config ) - MissingETESDList.append( 'xAOD::MissingETAuxContainer#MET_Reference_'+config+'Aux.-ConstitObjectLinks' ) + MissingETESDList.append( 'xAOD::MissingETAuxContainer#MET_Reference_'+config+'Aux.-ConstitObjectLinks.-ConstitObjectWeights' ) -- GitLab