diff --git a/DataFormats/PatCandidates/interface/Electron.h b/DataFormats/PatCandidates/interface/Electron.h index eb7730d280b80..b5b7e11ecd317 100644 --- a/DataFormats/PatCandidates/interface/Electron.h +++ b/DataFormats/PatCandidates/interface/Electron.h @@ -160,6 +160,17 @@ namespace pat { void setEcalPFClusterIso(float ecalPFClus) { ecalPFClusIso_ = ecalPFClus; }; void setHcalPFClusterIso(float hcalPFClus) { hcalPFClusIso_ = hcalPFClus; }; + float puppiChargedHardonsIso() const {return puppiChargedHardonsIso_; }; + float puppiNeutralHardonsIso() const {return puppiNeutralHardonsIso_; }; + float puppiPhotonsIso() const {return puppiPhotonsIso_; }; + + void setIsolationPUPPI(float chargedhadrons_, float neutralhadrons_, float photons_) + { + puppiChargedHardonsIso_ = chargedhadrons_; + puppiNeutralHardonsIso_ = neutralhadrons_; + puppiPhotonsIso_ = photons_; + + } // ---- PF specific methods ---- bool isPF() const{ return isPF_; } void setIsPF(bool hasPFCandidate) { isPF_ = hasPFCandidate ; } @@ -344,6 +355,11 @@ namespace pat { float ecalPFClusIso_; float hcalPFClusIso_; + //PUPPI isolations + float puppiChargedHardonsIso_; + float puppiNeutralHardonsIso_; + float puppiPhotonsIso_; + /// conversion veto bool passConversionVeto_; diff --git a/DataFormats/PatCandidates/interface/Photon.h b/DataFormats/PatCandidates/interface/Photon.h index 03e3deee2aaba..3aaec82d5b478 100644 --- a/DataFormats/PatCandidates/interface/Photon.h +++ b/DataFormats/PatCandidates/interface/Photon.h @@ -169,6 +169,11 @@ namespace pat { //<< key << " was not stored for this particle."; } } + + float puppiChargedHardonsIso() const {return puppiChargedHardonsIso_; }; + float puppiNeutralHardonsIso() const {return puppiNeutralHardonsIso_; }; + float puppiPhotonsIso() const {return puppiPhotonsIso_; }; + /// Sets the isolation variable for a specifc key. /// Note that you can't set isolation for a pseudo-key like CaloIso void setIsolation(IsolationKeys key, float value) { @@ -191,6 +196,14 @@ namespace pat { void setHcalIso(float caloIso) { setIsolation(HcalIso, caloIso); } /// Sets user isolation variable #index void setUserIso(float value, uint8_t index=0) { setIsolation(IsolationKeys(UserBaseIso + index), value); } + /// Sets PUPPI isolation + void setIsolationPUPPI(float chargedhadrons_, float neutralhadrons_, float photons_) + { + puppiChargedHardonsIso_ = chargedhadrons_; + puppiNeutralHardonsIso_ = neutralhadrons_; + puppiPhotonsIso_ = photons_; + + } // ---- methods for photon isolation deposits ---- /// Returns the IsoDeposit associated with some key, or a null pointer if it is not available @@ -392,6 +405,11 @@ namespace pat { float ecalPFClusIso_; float hcalPFClusIso_; + //PUPPI isolations + float puppiChargedHardonsIso_; + float puppiNeutralHardonsIso_; + float puppiPhotonsIso_; + // ---- link to PackedPFCandidates edm::RefProd packedPFCandidates_; std::vector associatedPackedFCandidateIndices_; diff --git a/DataFormats/PatCandidates/src/classes_def_objects.xml b/DataFormats/PatCandidates/src/classes_def_objects.xml index 51916b2b96c6c..acd86855e4a1a 100644 --- a/DataFormats/PatCandidates/src/classes_def_objects.xml +++ b/DataFormats/PatCandidates/src/classes_def_objects.xml @@ -16,7 +16,9 @@ - + + + @@ -189,7 +191,8 @@ - + + diff --git a/PhysicsTools/IsolationAlgos/plugins/CITKPFIsolationSumProducerForPUPPI.cc b/PhysicsTools/IsolationAlgos/plugins/CITKPFIsolationSumProducerForPUPPI.cc index 9a1c2f64ddf01..8bfa2de4f3932 100644 --- a/PhysicsTools/IsolationAlgos/plugins/CITKPFIsolationSumProducerForPUPPI.cc +++ b/PhysicsTools/IsolationAlgos/plugins/CITKPFIsolationSumProducerForPUPPI.cc @@ -34,6 +34,8 @@ namespace citk { const edm::EventSetup&) override final; virtual void produce(edm::Event&, const edm::EventSetup&) override final; + + static void fillDescriptions(edm::ConfigurationDescriptions & descriptions); private: // datamembers @@ -49,6 +51,7 @@ namespace citk { std::array _isolation_types; std::array,kNPFTypes> _product_names; bool useValueMapForPUPPI = true; + bool usePUPPINoLepton = false;// in case puppi weights are taken from packedCandidate can take weights for puppiNoLeptons }; } @@ -153,8 +156,9 @@ namespace citk { for( unsigned i = 0; i < isolations.size(); ++ i ) { if( isolations[i]->isInIsolationCone(cand_to_isolate,isocand) ) { double puppiWeight = 0.; - if (!useValueMapForPUPPI) puppiWeight = aspackedCandidate -> puppiWeight(); // if miniAOD, take puppiWeight directly from the object - else puppiWeight = (*puppiValueMap)[isocand]; // if AOD, take puppiWeight from the valueMap + if (!useValueMapForPUPPI && !usePUPPINoLepton) puppiWeight = aspackedCandidate -> puppiWeight(); // if miniAOD, take puppiWeight directly from the object + else if (!useValueMapForPUPPI && usePUPPINoLepton) puppiWeight = aspackedCandidate -> puppiWeightNoLep(); // if miniAOD, take puppiWeightNoLep directly from the object + else puppiWeight = (*puppiValueMap)[isocand]; // if AOD, take puppiWeight from the valueMap if (puppiWeight > 0.)cand_values[isotype][i] += (isocand->pt())*puppiWeight; // this is basically the main change to Lindsey's code: scale pt with puppiWeight for candidates with puppiWeight > 0. } } @@ -179,4 +183,37 @@ namespace citk { } } } + + +// ParameterSet description for module +void PFIsolationSumProducerForPUPPI::fillDescriptions(edm::ConfigurationDescriptions & descriptions) +{ + edm::ParameterSetDescription iDesc; + iDesc.setComment("PUPPI isolation sum producer"); + + iDesc.add("srcToIsolate", edm::InputTag("no default"))->setComment("calculate isolation for this collection"); + iDesc.add("srcForIsolationCone", edm::InputTag("no default"))->setComment("collection for the isolation calculation: like particleFlow "); + iDesc.add("puppiValueMap", edm::InputTag("puppi"))->setComment("source for puppi, if left empty weight from packedCandidate is taken"); + + edm::ParameterSetDescription descIsoConeDefinitions; + descIsoConeDefinitions.add("isolationAlgo", "no default"); + descIsoConeDefinitions.add("coneSize", 0.3); + descIsoConeDefinitions.add("isolateAgainst", "no default"); + descIsoConeDefinitions.add>("miniAODVertexCodes", {2,3}); + descIsoConeDefinitions.addOptional("VetoConeSizeBarrel", 0.0); + descIsoConeDefinitions.addOptional("VetoConeSizeEndcaps", 0.0); + descIsoConeDefinitions.addOptional("vertexIndex",0); + + + std::vector isolationConeDefinitions; + edm::ParameterSet chargedHadrons, neutralHadrons,photons; + isolationConeDefinitions.push_back(chargedHadrons); + isolationConeDefinitions.push_back(neutralHadrons); + isolationConeDefinitions.push_back(photons); + iDesc.addVPSet("isolationConeDefinitions", descIsoConeDefinitions, isolationConeDefinitions); + iDesc.addOptional("usePUPPINoLepton",false); + + descriptions.add("CITKPFIsolationSumProducerForPUPPI", iDesc); +} + } diff --git a/PhysicsTools/PatAlgos/plugins/PATElectronProducer.cc b/PhysicsTools/PatAlgos/plugins/PATElectronProducer.cc index 5c1a7953a9acf..9cc591332caca 100755 --- a/PhysicsTools/PatAlgos/plugins/PATElectronProducer.cc +++ b/PhysicsTools/PatAlgos/plugins/PATElectronProducer.cc @@ -87,7 +87,10 @@ PATElectronProducer::PATElectronProducer(const edm::ParameterSet & iConfig) : isolator_(iConfig.exists("userIsolation") ? iConfig.getParameter("userIsolation") : edm::ParameterSet(), consumesCollector(), false) , addEfficiencies_(iConfig.getParameter("addEfficiencies")), addResolutions_(iConfig.getParameter( "addResolutions" )), - useUserData_(iConfig.exists("userData")) + useUserData_(iConfig.exists("userData")), + PUPPIIsolation_charged_hadrons_(consumes >(iConfig.getParameter("puppiIsolationChargedHadrons"))), + PUPPIIsolation_neutral_hadrons_(consumes >(iConfig.getParameter("puppiIsolationNeutralHadrons"))), + PUPPIIsolation_photons_(consumes >(iConfig.getParameter("puppiIsolationPhotons"))) { // MC matching configurables (scheduled mode) @@ -280,6 +283,15 @@ void PATElectronProducer::produce(edm::Event & iEvent, const edm::EventSetup & i } } + //value maps for puppi isolation + edm::Handle> PUPPIIsolation_charged_hadrons; + edm::Handle> PUPPIIsolation_neutral_hadrons; + edm::Handle> PUPPIIsolation_photons; + iEvent.getByToken(PUPPIIsolation_charged_hadrons_, PUPPIIsolation_charged_hadrons); + iEvent.getByToken(PUPPIIsolation_neutral_hadrons_, PUPPIIsolation_neutral_hadrons); + iEvent.getByToken(PUPPIIsolation_photons_, PUPPIIsolation_photons); + + std::vector * patElectrons = new std::vector(); if( useParticleFlow_ ) { @@ -300,17 +312,19 @@ void PATElectronProducer::produce(edm::Event & iEvent, const edm::EventSetup & i bool MatchedToAmbiguousGsfTrack=false; for (edm::View::const_iterator itElectron = electrons->begin(); itElectron != electrons->end(); ++itElectron) { unsigned int idx = itElectron - electrons->begin(); - if (Matched || MatchedToAmbiguousGsfTrack) continue; + auto elePtr = electrons -> ptrAt(idx); + if (Matched || MatchedToAmbiguousGsfTrack) continue; - reco::GsfTrackRef EgTk= itElectron->gsfTrack(); + reco::GsfTrackRef EgTk= itElectron->gsfTrack(); - if (itElectron->gsfTrack()==i->gsfTrackRef()){ - Matched=true; - } - else { - for( reco::GsfTrackRefVector::const_iterator it = itElectron->ambiguousGsfTracksBegin() ; + if (itElectron->gsfTrack()==i->gsfTrackRef()){ + Matched=true; + } + else { + + for( reco::GsfTrackRefVector::const_iterator it = itElectron->ambiguousGsfTracksBegin() ; it!=itElectron->ambiguousGsfTracksEnd(); it++ ){ - MatchedToAmbiguousGsfTrack |= (bool)(i->gsfTrackRef()==(*it)); + MatchedToAmbiguousGsfTrack |= (bool)(i->gsfTrackRef()==(*it)); } } @@ -319,10 +333,11 @@ void PATElectronProducer::produce(edm::Event & iEvent, const edm::EventSetup & i // ptr needed for finding the matched gen particle reco::CandidatePtr ptrToGsfElectron(electrons,idx); - // ref to base needed for the construction of the pat object - const edm::RefToBase& elecsRef = electrons->refAt(idx); - Electron anElectron(elecsRef); - anElectron.setPFCandidateRef( pfRef ); + // ref to base needed for the construction of the pat object + const edm::RefToBase& elecsRef = electrons->refAt(idx); + Electron anElectron(elecsRef); + anElectron.setPFCandidateRef( pfRef ); + anElectron.setIsolationPUPPI((*PUPPIIsolation_charged_hadrons)[elePtr], (*PUPPIIsolation_neutral_hadrons)[elePtr], (*PUPPIIsolation_photons)[elePtr]); //it should be always true when particleFlow electrons are used. anElectron.setIsPF( true ); @@ -503,7 +518,8 @@ void PATElectronProducer::produce(edm::Event & iEvent, const edm::EventSetup & i edm::RefToBase elecsRef = electrons->refAt(idx); reco::CandidateBaseRef elecBaseRef(elecsRef); Electron anElectron(elecsRef); - + auto elePtr = electrons -> ptrAt(idx); + anElectron.setIsolationPUPPI((*PUPPIIsolation_charged_hadrons)[elePtr], (*PUPPIIsolation_neutral_hadrons)[elePtr], (*PUPPIIsolation_photons)[elePtr]); // Is this GsfElectron also identified as an e- in the particle flow? bool pfId = false; @@ -771,6 +787,7 @@ void PATElectronProducer::fillElectron(Electron& anElectron, (*deposits[j])[elecRef]); } + for (size_t j = 0; jsourceCandidatePtr(0); @@ -980,6 +997,12 @@ void PATElectronProducer::fillDescriptions(edm::ConfigurationDescriptions & desc PATUserDataHelper::fillDescription(userDataPSet); iDesc.addOptional("userData", userDataPSet); + iDesc.add("puppiIsolationChargedHadrons", edm::InputTag("egmElectronIsolationAODPUPPI","h+-DR030-BarVeto000-EndVeto001"))->setComment("puppi isolation sum for charged hadrons"); + iDesc.add("puppiIsolationNeutralHadrons", edm::InputTag("egmElectronIsolationAODPUPPI","h0-DR030-BarVeto000-EndVeto000"))->setComment("puppi isolation sum for neutral hadrons"); + iDesc.add("puppiIsolationPhotons", edm::InputTag("egmElectronIsolationAODPUPPI","gamma-DR030-BarVeto000-EndVeto008"))->setComment("puppi isolation sum for photons"); + + + // electron shapes iDesc.add("addElectronShapes", true); iDesc.add("reducedBarrelRecHitCollection", edm::InputTag("reducedEcalRecHitsEB")); diff --git a/PhysicsTools/PatAlgos/plugins/PATElectronProducer.h b/PhysicsTools/PatAlgos/plugins/PATElectronProducer.h index 7f926a1c91930..a6c98f9fe0914 100644 --- a/PhysicsTools/PatAlgos/plugins/PATElectronProducer.h +++ b/PhysicsTools/PatAlgos/plugins/PATElectronProducer.h @@ -173,6 +173,10 @@ namespace pat { pat::helper::KinResolutionsLoader resolutionLoader_; const bool useUserData_; + //PUPPI isolation tokens + edm::EDGetTokenT > PUPPIIsolation_charged_hadrons_; + edm::EDGetTokenT > PUPPIIsolation_neutral_hadrons_; + edm::EDGetTokenT > PUPPIIsolation_photons_; pat::PATUserDataHelper userDataHelper_; const CaloTopology * ecalTopology_; diff --git a/PhysicsTools/PatAlgos/plugins/PATElectronSlimmer.cc b/PhysicsTools/PatAlgos/plugins/PATElectronSlimmer.cc index d4cf06e1da813..20e2b0c2ddcc8 100644 --- a/PhysicsTools/PatAlgos/plugins/PATElectronSlimmer.cc +++ b/PhysicsTools/PatAlgos/plugins/PATElectronSlimmer.cc @@ -20,6 +20,7 @@ #include "CommonTools/UtilAlgos/interface/StringCutObjectSelector.h" #include "RecoEcal/EgammaCoreTools/interface/EcalClusterLazyTools.h" #include "FWCore/Utilities/interface/isFinite.h" +#include "DataFormats/Common/interface/ValueMap.h" namespace pat { @@ -70,6 +71,7 @@ pat::PATElectronSlimmer::PATElectronSlimmer(const edm::ParameterSet & iConfig) : reducedBarrelRecHitCollectionToken_(consumes(iConfig.getParameter("reducedBarrelRecHitCollection"))), reducedEndcapRecHitCollectionToken_(consumes(iConfig.getParameter("reducedEndcapRecHitCollection"))), modifyElectron_(iConfig.getParameter("modifyElectrons")) + { edm::ConsumesCollector sumes(consumesCollector()); if( modifyElectron_ ) { diff --git a/PhysicsTools/PatAlgos/plugins/PATPhotonProducer.cc b/PhysicsTools/PatAlgos/plugins/PATPhotonProducer.cc index 8f47bf3785e33..2392d7090db96 100755 --- a/PhysicsTools/PatAlgos/plugins/PATPhotonProducer.cc +++ b/PhysicsTools/PatAlgos/plugins/PATPhotonProducer.cc @@ -30,7 +30,10 @@ using namespace pat; PATPhotonProducer::PATPhotonProducer(const edm::ParameterSet & iConfig) : isolator_(iConfig.exists("userIsolation") ? iConfig.getParameter("userIsolation") : edm::ParameterSet(), consumesCollector(), false) , - useUserData_(iConfig.exists("userData")) + useUserData_(iConfig.exists("userData")), + PUPPIIsolation_charged_hadrons_(consumes >(iConfig.getParameter("puppiIsolationChargedHadrons"))), + PUPPIIsolation_neutral_hadrons_(consumes >(iConfig.getParameter("puppiIsolationNeutralHadrons"))), + PUPPIIsolation_photons_(consumes >(iConfig.getParameter("puppiIsolationPhotons"))) { // initialize the configurables photonToken_ = consumes >(iConfig.getParameter("photonSource")); @@ -187,6 +190,14 @@ void PATPhotonProducer::produce(edm::Event & iEvent, const edm::EventSetup & iSe } } + //value maps for puppi isolation + edm::Handle> PUPPIIsolation_charged_hadrons; + edm::Handle> PUPPIIsolation_neutral_hadrons; + edm::Handle> PUPPIIsolation_photons; + iEvent.getByToken(PUPPIIsolation_charged_hadrons_, PUPPIIsolation_charged_hadrons); + iEvent.getByToken(PUPPIIsolation_neutral_hadrons_, PUPPIIsolation_neutral_hadrons); + iEvent.getByToken(PUPPIIsolation_photons_, PUPPIIsolation_photons); + // loop over photons std::vector * PATPhotons = new std::vector(); for (edm::View::const_iterator itPhoton = photons->begin(); itPhoton != photons->end(); itPhoton++) { @@ -195,6 +206,7 @@ void PATPhotonProducer::produce(edm::Event & iEvent, const edm::EventSetup & iSe edm::RefToBase photonRef = photons->refAt(idx); edm::Ptr photonPtr = photons->ptrAt(idx); Photon aPhoton(photonRef); + auto phoPtr = photons -> ptrAt(idx); if (embedSuperCluster_) aPhoton.embedSuperCluster(); if (embedSeedCluster_) aPhoton.embedSeedCluster(); if (embedBasicClusters_) aPhoton.embedBasicClusters(); @@ -351,6 +363,7 @@ void PATPhotonProducer::produce(edm::Event & iEvent, const edm::EventSetup & iSe aPhoton.setCryEta( ecalRegData.seedCrysEtaOrX() ); aPhoton.setIEta( ecalRegData.seedCrysIEtaOrIX() ); aPhoton.setIPhi( ecalRegData.seedCrysIPhiOrIY() ); + aPhoton.setIsolationPUPPI((*PUPPIIsolation_charged_hadrons)[phoPtr], (*PUPPIIsolation_neutral_hadrons)[phoPtr], (*PUPPIIsolation_photons)[phoPtr]); // Get PFCluster Isolation if (addPFClusterIso_) { @@ -461,6 +474,10 @@ void PATPhotonProducer::fillDescriptions(edm::ConfigurationDescriptions & descri edm::ParameterSetDescription userDataPSet; PATUserDataHelper::fillDescription(userDataPSet); iDesc.addOptional("userData", userDataPSet); + // isolation sums for PUPPI + iDesc.add("puppiIsolationChargedHadrons", edm::InputTag("egmElectronIsolationAODPUPPI","h+-DR030-BarVeto000-EndVeto001"))->setComment("puppi isolation sum for charged hadrons"); + iDesc.add("puppiIsolationNeutralHadrons", edm::InputTag("egmElectronIsolationAODPUPPI","h0-DR030-BarVeto000-EndVeto000"))->setComment("puppi isolation sum for neutral hadrons"); + iDesc.add("puppiIsolationPhotons", edm::InputTag("egmElectronIsolationAODPUPPI","gamma-DR030-BarVeto000-EndVeto008"))->setComment("puppi isolation sum for photons"); edm::ParameterSetDescription isolationPSet; isolationPSet.setAllowAnything(); // TODO: the pat helper needs to implement a description. diff --git a/PhysicsTools/PatAlgos/plugins/PATPhotonProducer.h b/PhysicsTools/PatAlgos/plugins/PATPhotonProducer.h index 2846d0b327284..af0a0ad15d49d 100644 --- a/PhysicsTools/PatAlgos/plugins/PATPhotonProducer.h +++ b/PhysicsTools/PatAlgos/plugins/PATPhotonProducer.h @@ -123,6 +123,10 @@ namespace pat { std::vector > > photIDTokens_; bool useUserData_; + //PUPPI isolation tokens + edm::EDGetTokenT > PUPPIIsolation_charged_hadrons_; + edm::EDGetTokenT > PUPPIIsolation_neutral_hadrons_; + edm::EDGetTokenT > PUPPIIsolation_photons_; pat::PATUserDataHelper userDataHelper_; const CaloTopology * ecalTopology_; diff --git a/PhysicsTools/PatAlgos/plugins/PATPhotonSlimmer.cc b/PhysicsTools/PatAlgos/plugins/PATPhotonSlimmer.cc index 9fefae787dad3..2584165e3fe41 100644 --- a/PhysicsTools/PatAlgos/plugins/PATPhotonSlimmer.cc +++ b/PhysicsTools/PatAlgos/plugins/PATPhotonSlimmer.cc @@ -45,8 +45,6 @@ namespace pat { const StringCutObjectSelector saveNonZSClusterShapes_; const edm::EDGetTokenT reducedBarrelRecHitCollectionToken_, reducedEndcapRecHitCollectionToken_; const bool modifyPhoton_; - // value maps for PUPPI isolation - edm::EDGetTokenT > PUPPIIsolation_charged_hadrons_,PUPPIIsolation_neutral_hadrons_, PUPPIIsolation_photons_; std::unique_ptr > photonModifier_; }; @@ -66,10 +64,7 @@ pat::PATPhotonSlimmer::PATPhotonSlimmer(const edm::ParameterSet & iConfig) : saveNonZSClusterShapes_(iConfig.getParameter("saveNonZSClusterShapes")), reducedBarrelRecHitCollectionToken_(consumes(iConfig.getParameter("reducedBarrelRecHitCollection"))), reducedEndcapRecHitCollectionToken_(consumes(iConfig.getParameter("reducedEndcapRecHitCollection"))), - modifyPhoton_(iConfig.getParameter("modifyPhotons")), - PUPPIIsolation_charged_hadrons_(consumes >(iConfig.getParameter("puppiIsolationChargedHadrons"))), - PUPPIIsolation_neutral_hadrons_(consumes >(iConfig.getParameter("puppiIsolationNeutralHadrons"))), - PUPPIIsolation_photons_(consumes >(iConfig.getParameter("puppiIsolationPhotons"))) + modifyPhoton_(iConfig.getParameter("modifyPhotons")) { edm::ConsumesCollector sumes(consumesCollector()); if( modifyPhoton_ ) { @@ -114,21 +109,11 @@ pat::PATPhotonSlimmer::produce(edm::Event & iEvent, const edm::EventSetup & iSet if( modifyPhoton_ ) { photonModifier_->setEvent(iEvent); } if( modifyPhoton_ ) photonModifier_->setEventContent(iSetup); - Handle> PUPPIIsolation_charged_hadrons; - Handle> PUPPIIsolation_neutral_hadrons; - Handle> PUPPIIsolation_photons; - - iEvent.getByToken(PUPPIIsolation_charged_hadrons_, PUPPIIsolation_charged_hadrons); - iEvent.getByToken(PUPPIIsolation_neutral_hadrons_, PUPPIIsolation_neutral_hadrons); - iEvent.getByToken(PUPPIIsolation_photons_, PUPPIIsolation_photons); std::vector keys; for (View::const_iterator it = src->begin(), ed = src->end(); it != ed; ++it) { out->push_back(*it); pat::Photon & photon = out->back(); - auto phoPtr = src -> ptrAt(it - src->begin()); - double PUPPI_Isolation = (*PUPPIIsolation_charged_hadrons)[phoPtr] + (*PUPPIIsolation_neutral_hadrons)[phoPtr] + (*PUPPIIsolation_photons)[phoPtr]; - photon.addUserFloat("PUPPI_Isolation", PUPPI_Isolation); if( modifyPhoton_ ) { photonModifier_->modify(photon); } diff --git a/PhysicsTools/PatAlgos/python/producersLayer1/electronProducer_cfi.py b/PhysicsTools/PatAlgos/python/producersLayer1/electronProducer_cfi.py index 39f4346ad99d1..273bbb697e7cb 100644 --- a/PhysicsTools/PatAlgos/python/producersLayer1/electronProducer_cfi.py +++ b/PhysicsTools/PatAlgos/python/producersLayer1/electronProducer_cfi.py @@ -36,6 +36,11 @@ userFunctionLabels = cms.vstring() ), + + puppiIsolationChargedHadrons = cms.InputTag("egmElectronPUPPIIsolation","h+-DR030-BarVeto000-EndVeto001"), + puppiIsolationNeutralHadrons = cms.InputTag("egmElectronPUPPIIsolation","h0-DR030-BarVeto000-EndVeto000"), + puppiIsolationPhotons = cms.InputTag("egmElectronPUPPIIsolation","gamma-DR030-BarVeto000-EndVeto008"), + # embedding of AOD items embedGsfElectronCore = cms.bool(True), ## embed in AOD externally stored gsf electron core embedGsfTrack = cms.bool(True), ## embed in AOD externally stored gsf track diff --git a/PhysicsTools/PatAlgos/python/producersLayer1/photonProducer_cfi.py b/PhysicsTools/PatAlgos/python/producersLayer1/photonProducer_cfi.py index f2d408d1bb8a4..24e400180e8ef 100644 --- a/PhysicsTools/PatAlgos/python/producersLayer1/photonProducer_cfi.py +++ b/PhysicsTools/PatAlgos/python/producersLayer1/photonProducer_cfi.py @@ -32,6 +32,10 @@ userFunctionLabels = cms.vstring() ), + puppiIsolationChargedHadrons = cms.InputTag("egmPhotonPUPPIIsolation","h+-DR030-"), + puppiIsolationNeutralHadrons = cms.InputTag("egmPhotonPUPPIIsolation","h0-DR030-"), + puppiIsolationPhotons = cms.InputTag("egmPhotonPUPPIIsolation","gamma-DR030-"), + # embedding of AOD items embedSuperCluster = cms.bool(True), ## whether to embed in AOD externally stored supercluster embedSeedCluster = cms.bool(True), ## embed in AOD externally stored the photon's seedcluster diff --git a/PhysicsTools/PatAlgos/python/slimming/egmIsolationsPUPPI_cfi.py b/PhysicsTools/PatAlgos/python/slimming/egmIsolationsPUPPI_cfi.py index a05999cb4c8a2..25886e1ed662f 100644 --- a/PhysicsTools/PatAlgos/python/slimming/egmIsolationsPUPPI_cfi.py +++ b/PhysicsTools/PatAlgos/python/slimming/egmIsolationsPUPPI_cfi.py @@ -1,10 +1,19 @@ import FWCore.ParameterSet.Config as cms from RecoEgamma.EgammaIsolationAlgos.egmPhotonIsolationPUPPI_cff import egmPhotonIsolationMiniAODPUPPI as _egmPhotonPUPPIIsolationForPhotons +from RecoEgamma.EgammaIsolationAlgos.egmElectronIsolationPUPPI_cff import egmElectronIsolationMiniAODPUPPI as _egmElectronIsolationMiniAODPUPPI +from RecoEgamma.EgammaIsolationAlgos.egmElectronIsolationPUPPI_cff import egmElectronIsolationMiniAODPUPPINoLeptons as _egmElectronIsolationMiniAODPUPPINoLeptons def makeInputForPUPPIIsolationEgm(process): - - process.load('RecoEgamma.EgammaIsolationAlgos.egmPhotonIsolationPUPPI_cff') - process.egmPhotonPUPPIIsolationForPhotons = _egmPhotonPUPPIIsolationForPhotons.clone() - process.egmPhotonPUPPIIsolationForPhotons.srcToIsolate = cms.InputTag("selectedPatPhotons") - process.egmPhotonPUPPIIsolationForPhotons.srcForIsolationCone = cms.InputTag("packedPFCandidates") + + process.egmPhotonPUPPIIsolation = _egmPhotonPUPPIIsolationForPhotons.clone() + process.egmPhotonPUPPIIsolation.srcToIsolate = cms.InputTag("reducedEgamma","reducedGedPhotons") + process.egmPhotonPUPPIIsolation.srcForIsolationCone = cms.InputTag("packedPFCandidates") + + process.egmElectronPUPPIIsolation = _egmElectronIsolationMiniAODPUPPI.clone() + process.egmElectronPUPPIIsolation.srcToIsolate = cms.InputTag("reducedEgamma","reducedGedGsfElectrons") + process.egmElectronPUPPIIsolation.srcForIsolationCone = cms.InputTag("packedPFCandidates") + + process.egmElectronPUPPINoLeptonsIsolation = _egmElectronIsolationMiniAODPUPPINoLeptons.clone() + process.egmElectronPUPPINoLeptonsIsolation.srcToIsolate = cms.InputTag("reducedEgamma","reducedGedGsfElectrons") + process.egmElectronPUPPINoLeptonsIsolation.srcForIsolationCone = cms.InputTag("packedPFCandidates") diff --git a/PhysicsTools/PatAlgos/python/slimming/slimmedPhotons_cfi.py b/PhysicsTools/PatAlgos/python/slimming/slimmedPhotons_cfi.py index c4f5a9552148a..909dbb9c6d1ac 100644 --- a/PhysicsTools/PatAlgos/python/slimming/slimmedPhotons_cfi.py +++ b/PhysicsTools/PatAlgos/python/slimming/slimmedPhotons_cfi.py @@ -14,8 +14,5 @@ reducedBarrelRecHitCollection = cms.InputTag("reducedEcalRecHitsEB"), reducedEndcapRecHitCollection = cms.InputTag("reducedEcalRecHitsEE"), modifyPhotons = cms.bool(True), - modifierConfig = cms.PSet( modifications = cms.VPSet() ), - puppiIsolationChargedHadrons = cms.InputTag("egmPhotonPUPPIIsolationForPhotons", "h+-DR030-"), - puppiIsolationNeutralHadrons = cms.InputTag("egmPhotonPUPPIIsolationForPhotons", "h0-DR030-"), - puppiIsolationPhotons = cms.InputTag("egmPhotonPUPPIIsolationForPhotons", "gamma-DR030-"), + modifierConfig = cms.PSet( modifications = cms.VPSet() ) ) diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/isolation_cones/PhotonPFIsolationWithMapBasedVeto.cc b/RecoEgamma/EgammaIsolationAlgos/plugins/isolation_cones/PhotonPFIsolationWithMapBasedVeto.cc index 1b6350c376e39..8cbb86112a304 100644 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/isolation_cones/PhotonPFIsolationWithMapBasedVeto.cc +++ b/RecoEgamma/EgammaIsolationAlgos/plugins/isolation_cones/PhotonPFIsolationWithMapBasedVeto.cc @@ -132,9 +132,9 @@ bool PhotonPFIsolationWithMapBasedVeto::isInIsolationCone(const reco::CandidateP // dealing here with patObjects: miniAOD case if ( aspacked.get() ) { - inFootprint = isInFootprint(aspat_photonptr ->associatedPackedPFCandidates(),aspacked); - - //checking if the charged candidates come from the appropriate vertex + //inFootprint = isInFootprint(aspat_photonptr ->associatedPackedPFCandidates(),aspacked); + inFootprint = true; + //checking if the charged candidates come from the appropriate vertex if( aspacked->charge() != 0 ) { bool is_vertex_allowed = false; diff --git a/RecoEgamma/EgammaIsolationAlgos/python/egmElectronIsolationPUPPI_cff.py b/RecoEgamma/EgammaIsolationAlgos/python/egmElectronIsolationPUPPI_cff.py new file mode 100644 index 0000000000000..943673c14aece --- /dev/null +++ b/RecoEgamma/EgammaIsolationAlgos/python/egmElectronIsolationPUPPI_cff.py @@ -0,0 +1,43 @@ +import FWCore.ParameterSet.Config as cms + +IsoConeDefinitions = cms.VPSet( + cms.PSet( isolationAlgo = cms.string('ElectronPFIsolationWithConeVeto'), + coneSize = cms.double(0.3), + VetoConeSizeBarrel = cms.double(0.0), + VetoConeSizeEndcaps = cms.double(0.015), + isolateAgainst = cms.string('h+'), + miniAODVertexCodes = cms.vuint32(2,3) ), + cms.PSet( isolationAlgo = cms.string('ElectronPFIsolationWithConeVeto'), + coneSize = cms.double(0.3), + VetoConeSizeBarrel = cms.double(0.0), + VetoConeSizeEndcaps = cms.double(0.0), + isolateAgainst = cms.string('h0'), + miniAODVertexCodes = cms.vuint32(2,3) ), + cms.PSet( isolationAlgo = cms.string('ElectronPFIsolationWithConeVeto'), + coneSize = cms.double(0.3), + VetoConeSizeBarrel = cms.double(0.0), + VetoConeSizeEndcaps = cms.double(0.08), + isolateAgainst = cms.string('gamma'), + miniAODVertexCodes = cms.vuint32(2,3) ) + ) + +egmElectronIsolationAODPUPPI = cms.EDProducer( "CITKPFIsolationSumProducerForPUPPI", + srcToIsolate = cms.InputTag("gedGsfElectrons"), + srcForIsolationCone = cms.InputTag(''), + isolationConeDefinitions = IsoConeDefinitions +) + +egmElectronIsolationMiniAODPUPPI = cms.EDProducer( "CITKPFIsolationSumProducerForPUPPI", + srcToIsolate = cms.InputTag("slimmedElectrons"), + srcForIsolationCone = cms.InputTag('packedPFCandidates'), + puppiValueMap = cms.InputTag(''), + isolationConeDefinitions = IsoConeDefinitions +) + +egmElectronIsolationMiniAODPUPPINoLeptons = cms.EDProducer( "CITKPFIsolationSumProducerForPUPPI", + srcToIsolate = cms.InputTag("slimmedElectrons"), + srcForIsolationCone = cms.InputTag('packedPFCandidates'), + puppiValueMap = cms.InputTag(''), + usePUPPINoLepton = cms.bool(True), + isolationConeDefinitions = IsoConeDefinitions +) \ No newline at end of file