From 29ee74c7ef4b5234bbf54bb020f617d0cfd90672 Mon Sep 17 00:00:00 2001 From: Sam Harper Date: Tue, 9 Jan 2018 11:08:34 +0000 Subject: [PATCH] adapting producing modules to store pf cluster isol in the reco ele/pho --- .../PatAlgos/plugins/PATElectronProducer.cc | 24 +++-- .../PatAlgos/plugins/PATElectronSlimmer.cc | 2 +- .../PatAlgos/plugins/PATPhotonProducer.cc | 14 ++- .../producersLayer1/ootPhotonProducer_cff.py | 6 +- .../PatAlgos/python/slimming/miniAOD_tools.py | 18 ++-- .../python/RecoEgamma_EventContent_cff.py | 18 ---- .../plugins/GEDGsfElectronFinalizer.cc | 8 ++ .../python/gedGsfElectronFinalizer_cfi.py | 4 +- .../python/pfClusterIsolation_cfi.py | 12 +-- .../interface/GEDPhotonProducer.h | 29 ++++-- .../python/gedPhotonSequence_cff.py | 2 + .../python/ootPhotonSequence_cff.py | 1 + .../python/ootPhotons_cff.py | 24 ++++- .../python/reducedEgamma_cfi.py | 56 ++++++------ .../src/GEDPhotonProducer.cc | 89 +++++++++++++------ .../python/Reconstruction_hiPF_cff.py | 2 + 16 files changed, 186 insertions(+), 123 deletions(-) diff --git a/PhysicsTools/PatAlgos/plugins/PATElectronProducer.cc b/PhysicsTools/PatAlgos/plugins/PATElectronProducer.cc index 6ebe74aaa637d..98ead7940937e 100755 --- a/PhysicsTools/PatAlgos/plugins/PATElectronProducer.cc +++ b/PhysicsTools/PatAlgos/plugins/PATElectronProducer.cc @@ -446,14 +446,12 @@ void PATElectronProducer::produce(edm::Event & iEvent, const edm::EventSetup & i iEvent.getByToken(ecalPFClusterIsoT_, ecalPFClusterIsoMapH); edm::Handle > hcalPFClusterIsoMapH; iEvent.getByToken(hcalPFClusterIsoT_, hcalPFClusterIsoMapH); - - anElectron.setEcalPFClusterIso((*ecalPFClusterIsoMapH)[elecsRef]); - anElectron.setHcalPFClusterIso((*hcalPFClusterIsoMapH)[elecsRef]); - } else { - anElectron.setEcalPFClusterIso(-999.); - anElectron.setHcalPFClusterIso(-999.); + reco::GsfElectron::PflowIsolationVariables newPFIsol = anElectron.pfIsolationVariables(); + newPFIsol.sumEcalClusterEt = (*ecalPFClusterIsoMapH)[elecsRef]; + newPFIsol.sumHcalClusterEt = (*hcalPFClusterIsoMapH)[elecsRef]; + anElectron.setPfIsolationVariables(newPFIsol); } - + std::vector selectedCells; bool barrel = itElectron->isEB(); //loop over sub clusters @@ -675,6 +673,7 @@ void PATElectronProducer::produce(edm::Event & iEvent, const edm::EventSetup & i std::vector vCov = lazyTools.localCovariances(*( itElectron->superCluster()->seed())); anElectron.setMvaVariables(vCov[1], ip3d); } + // PFCluster Isolation if (addPFClusterIso_) { // Get PFCluster Isolation @@ -682,13 +681,12 @@ void PATElectronProducer::produce(edm::Event & iEvent, const edm::EventSetup & i iEvent.getByToken(ecalPFClusterIsoT_, ecalPFClusterIsoMapH); edm::Handle > hcalPFClusterIsoMapH; iEvent.getByToken(hcalPFClusterIsoT_, hcalPFClusterIsoMapH); - - anElectron.setEcalPFClusterIso((*ecalPFClusterIsoMapH)[elecsRef]); - anElectron.setHcalPFClusterIso((*hcalPFClusterIsoMapH)[elecsRef]); - } else { - anElectron.setEcalPFClusterIso(-999.); - anElectron.setHcalPFClusterIso(-999.); + reco::GsfElectron::PflowIsolationVariables newPFIsol = anElectron.pfIsolationVariables(); + newPFIsol.sumEcalClusterEt = (*ecalPFClusterIsoMapH)[elecsRef]; + newPFIsol.sumHcalClusterEt = (*hcalPFClusterIsoMapH)[elecsRef]; + anElectron.setPfIsolationVariables(newPFIsol); } + if (addPuppiIsolation_) { anElectron.setIsolationPUPPI((*PUPPIIsolation_charged_hadrons)[elePtr], (*PUPPIIsolation_neutral_hadrons)[elePtr], (*PUPPIIsolation_photons)[elePtr]); anElectron.setIsolationPUPPINoLeptons((*PUPPINoLeptonsIsolation_charged_hadrons)[elePtr], (*PUPPINoLeptonsIsolation_neutral_hadrons)[elePtr], (*PUPPINoLeptonsIsolation_photons)[elePtr]); diff --git a/PhysicsTools/PatAlgos/plugins/PATElectronSlimmer.cc b/PhysicsTools/PatAlgos/plugins/PATElectronSlimmer.cc index 96ff51e4d0a27..aa0bb8e35b111 100644 --- a/PhysicsTools/PatAlgos/plugins/PATElectronSlimmer.cc +++ b/PhysicsTools/PatAlgos/plugins/PATElectronSlimmer.cc @@ -131,7 +131,7 @@ pat::PATElectronSlimmer::produce(edm::Event & iEvent, const edm::EventSetup & iS if (dropSeedCluster_(electron)) { electron.seedCluster_.clear(); electron.embeddedSeedCluster_ = false; } if (dropRecHits_(electron)) { electron.recHits_ = EcalRecHitCollection(); electron.embeddedRecHits_ = false; } if (dropCorrections_(electron)) { electron.setCorrections(reco::GsfElectron::Corrections()); } - if (dropIsolations_(electron)) { electron.setDr03Isolation(reco::GsfElectron::IsolationVariables()); electron.setDr04Isolation(reco::GsfElectron::IsolationVariables()); electron.setPfIsolationVariables(reco::GsfElectron::PflowIsolationVariables()); electron.setEcalPFClusterIso(0); electron.setHcalPFClusterIso(0); } + if (dropIsolations_(electron)) { electron.setDr03Isolation(reco::GsfElectron::IsolationVariables()); electron.setDr04Isolation(reco::GsfElectron::IsolationVariables()); electron.setPfIsolationVariables(reco::GsfElectron::PflowIsolationVariables()); } if (dropShapes_(electron)) { electron.setShowerShape(reco::GsfElectron::ShowerShape()); } if (dropSaturation_(electron)) { electron.setSaturationInfo(reco::GsfElectron::SaturationInfo()); } if (dropExtrapolations_(electron)) { electron.setTrackExtrapolations(reco::GsfElectron::TrackExtrapolations()); } diff --git a/PhysicsTools/PatAlgos/plugins/PATPhotonProducer.cc b/PhysicsTools/PatAlgos/plugins/PATPhotonProducer.cc index ed897f389ebc7..cd9491836eee5 100755 --- a/PhysicsTools/PatAlgos/plugins/PATPhotonProducer.cc +++ b/PhysicsTools/PatAlgos/plugins/PATPhotonProducer.cc @@ -414,21 +414,19 @@ void PATPhotonProducer::produce(edm::Event & iEvent, const edm::EventSetup & iSe // Get PFCluster Isolation if (addPFClusterIso_) { + reco::Photon::PflowIsolationVariables newPFIsol = aPhoton.getPflowIsolationVariables(); edm::Handle > ecalPFClusterIsoMapH; iEvent.getByToken(ecalPFClusterIsoT_, ecalPFClusterIsoMapH); - aPhoton.setEcalPFClusterIso((*ecalPFClusterIsoMapH)[photonRef]); + newPFIsol.sumEcalClusterEt = (*ecalPFClusterIsoMapH)[photonRef]; edm::Handle > hcalPFClusterIsoMapH; if (not hcalPFClusterIsoT_.isUninitialized()){ iEvent.getByToken(hcalPFClusterIsoT_, hcalPFClusterIsoMapH); - aPhoton.setHcalPFClusterIso((*hcalPFClusterIsoMapH)[photonRef]); + newPFIsol.sumHcalClusterEt = (*hcalPFClusterIsoMapH)[photonRef]; } - else - { - aPhoton.setHcalPFClusterIso(-999.); + else{ + newPFIsol.sumHcalClusterEt = -999.; } - } else { - aPhoton.setEcalPFClusterIso(-999.); - aPhoton.setHcalPFClusterIso(-999.); + aPhoton.setPflowIsolationVariables(newPFIsol); } // add the Photon to the vector of Photons diff --git a/PhysicsTools/PatAlgos/python/producersLayer1/ootPhotonProducer_cff.py b/PhysicsTools/PatAlgos/python/producersLayer1/ootPhotonProducer_cff.py index b151ee8a40b40..17b33f3b17cba 100644 --- a/PhysicsTools/PatAlgos/python/producersLayer1/ootPhotonProducer_cff.py +++ b/PhysicsTools/PatAlgos/python/producersLayer1/ootPhotonProducer_cff.py @@ -34,9 +34,7 @@ patOOTPhotons.addPuppiIsolation = cms.bool(False) # PFClusterIso -patOOTPhotons.addPFClusterIso = cms.bool(True) -patOOTPhotons.ecalPFClusterIsoMap = cms.InputTag("reducedEgamma", "ootPhoEcalPFClusIso") -patOOTPhotons.hcalPFClusterIsoMap = cms.InputTag("reducedEgamma", "ootPhoHcalPFClusIso") +patOOTPhotons.addPFClusterIso = cms.bool(False) # MC Match patOOTPhotons.genParticleMatch = cms.InputTag("ootPhotonMatch") ## particles source to be used for the matching @@ -61,4 +59,4 @@ makePatOOTPhotonsTask.copy() )) -run2_miniAOD_80XLegacy.toModify(patOOTPhotons, hcalPFClusterIsoMap = "") +run2_miniAOD_80XLegacy.toModify(patOOTPhotons, addPFClusterIso = cms.bool(True),ecalPFClusterIsoMap = cms.InputTag("reducedEgamma", "ootPhoEcalPFClusIso") ) diff --git a/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py b/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py index 447bd2114b8fe..0b080776c1060 100644 --- a/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py +++ b/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py @@ -51,7 +51,11 @@ def miniAOD_customizeCommon(process): eidTight = cms.InputTag("reducedEgamma","eidTight"), eidRobustHighEnergy = cms.InputTag("reducedEgamma","eidRobustHighEnergy"), ) - process.patElectrons.addPFClusterIso = cms.bool(True) + from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy + run2_miniAOD_80XLegacy.toModify(process.patElectrons, + addPFClusterIso = cms.bool(True), + ecalPFClusterIsoMap = cms.InputTag("reducedEgamma", "eleEcalPFClusIso"), + hcalPFClusterIsoMap = cms.InputTag("reducedEgamma", "eleHcalPFClusIso")) #add puppi isolation in miniAOD process.patElectrons.addPuppiIsolation = cms.bool(True) process.patElectrons.puppiIsolationChargedHadrons = cms.InputTag("egmElectronPUPPIIsolation","h+-DR030-BarVeto000-EndVeto001") @@ -63,9 +67,6 @@ def miniAOD_customizeCommon(process): process.patElectrons.computeMiniIso = cms.bool(True) - process.patElectrons.ecalPFClusterIsoMap = cms.InputTag("reducedEgamma", "eleEcalPFClusIso") - process.patElectrons.hcalPFClusterIsoMap = cms.InputTag("reducedEgamma", "eleHcalPFClusIso") - process.elPFIsoDepositChargedPAT.src = cms.InputTag("reducedEgamma","reducedGedGsfElectrons") process.elPFIsoDepositChargedAllPAT.src = cms.InputTag("reducedEgamma","reducedGedGsfElectrons") process.elPFIsoDepositNeutralPAT.src = cms.InputTag("reducedEgamma","reducedGedGsfElectrons") @@ -77,7 +78,6 @@ def miniAOD_customizeCommon(process): process.patPhotons.embedBasicClusters = False ## process.patPhotons.embed in AOD externally stored the photon's basic clusters process.patPhotons.embedPreshowerClusters = False ## process.patPhotons.embed in AOD externally stored the photon's preshower clusters process.patPhotons.embedRecHits = False ## process.patPhotons.embed in AOD externally stored the RecHits - can be called from the PATPhotonProducer - process.patPhotons.addPFClusterIso = cms.bool(True) #add puppi isolation in miniAOD process.patPhotons.addPuppiIsolation = cms.bool(True) @@ -85,8 +85,12 @@ def miniAOD_customizeCommon(process): process.patPhotons.puppiIsolationNeutralHadrons = cms.InputTag("egmPhotonPUPPIIsolation","h0-DR030-") process.patPhotons.puppiIsolationPhotons = cms.InputTag("egmPhotonPUPPIIsolation","gamma-DR030-") - process.patPhotons.ecalPFClusterIsoMap = cms.InputTag("reducedEgamma", "phoEcalPFClusIso") - process.patPhotons.hcalPFClusterIsoMap = cms.InputTag("reducedEgamma", "phoHcalPFClusIso") + from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy + run2_miniAOD_80XLegacy.toModify(process.patPhotons, + addPFClusterIso = cms.bool(True), + ecalPFClusterIsoMap = cms.InputTag("reducedEgamma", "phoEcalPFClusIso"), + hcalPFClusterIsoMap = cms.InputTag("reducedEgamma", "phoHcalPFClusIso")) + process.patPhotons.photonSource = cms.InputTag("reducedEgamma","reducedGedPhotons") process.patPhotons.electronSource = cms.InputTag("reducedEgamma","reducedGedGsfElectrons") process.patPhotons.photonIDSources = cms.PSet( diff --git a/RecoEgamma/Configuration/python/RecoEgamma_EventContent_cff.py b/RecoEgamma/Configuration/python/RecoEgamma_EventContent_cff.py index a29a31dd5e5c2..7e02713d80560 100644 --- a/RecoEgamma/Configuration/python/RecoEgamma_EventContent_cff.py +++ b/RecoEgamma/Configuration/python/RecoEgamma_EventContent_cff.py @@ -15,12 +15,6 @@ 'keep *_egmGedGsfElectronPF*Isolation_*_*', 'keep *_egmGsfElectronIDs_*_*', 'keep *_egmPhotonIDs_*_*', - 'keep *_photonEcalPFClusterIsolationProducer_*_*', - 'keep *_ootPhotonEcalPFClusterIsolationProducer_*_*', - 'keep *_electronEcalPFClusterIsolationProducer_*_*', - 'keep *_photonHcalPFClusterIsolationProducer_*_*', - 'keep *_ootPhotonHcalPFClusterIsolationProducer_*_*', - 'keep *_electronHcalPFClusterIsolationProducer_*_*', 'keep *_conversions_*_*', 'keep *_mustacheConversions_*_*', 'drop *_conversions_uncleanedConversions_*', @@ -65,12 +59,6 @@ 'keep floatedmValueMap_eidLoose_*_*', 'keep floatedmValueMap_eidTight_*_*', 'keep *_egmGedGsfElectronPFIsolation_*_*', - 'keep *_photonEcalPFClusterIsolationProducer_*_*', - 'keep *_ootPhotonEcalPFClusterIsolationProducer_*_*', - 'keep *_electronEcalPFClusterIsolationProducer_*_*', - 'keep *_photonHcalPFClusterIsolationProducer_*_*', - 'keep *_ootPhotonHcalPFClusterIsolationProducer_*_*', - 'keep *_electronHcalPFClusterIsolationProducer_*_*', 'drop *_egmGsfElectronIDs_*_*', 'drop *_egmPhotonIDs_*_*', 'keep *_gedPhotonCore_*_*', @@ -127,12 +115,6 @@ 'keep floatedmValueMap_eidLoose_*_*', 'keep floatedmValueMap_eidTight_*_*', 'keep *_egmGedGsfElectronPFIsolation_*_*', - 'keep *_photonEcalPFClusterIsolationProducer_*_*', - 'keep *_ootPhotonEcalPFClusterIsolationProducer_*_*', - 'keep *_electronEcalPFClusterIsolationProducer_*_*', - 'keep *_photonHcalPFClusterIsolationProducer_*_*', - 'keep *_ootPhotonHcalPFClusterIsolationProducer_*_*', - 'keep *_electronHcalPFClusterIsolationProducer_*_*', 'drop *_egmGsfElectronIDs_*_*', 'drop *_egmPhotonIDs_*_*', 'keep recoPhotonCores_gedPhotonCore_*_*', diff --git a/RecoEgamma/EgammaElectronProducers/plugins/GEDGsfElectronFinalizer.cc b/RecoEgamma/EgammaElectronProducers/plugins/GEDGsfElectronFinalizer.cc index 5bf4563d58d8d..7e4c1354a5cfb 100644 --- a/RecoEgamma/EgammaElectronProducers/plugins/GEDGsfElectronFinalizer.cc +++ b/RecoEgamma/EgammaElectronProducers/plugins/GEDGsfElectronFinalizer.cc @@ -25,6 +25,8 @@ GEDGsfElectronFinalizer::GEDGsfElectronFinalizer( const edm::ParameterSet & cfg tokenElectronIsoVals_.push_back(consumes >(pfIsoVals.getParameter("pfSumPhotonEt"))); tokenElectronIsoVals_.push_back(consumes >(pfIsoVals.getParameter("pfSumNeutralHadronEt"))); tokenElectronIsoVals_.push_back(consumes >(pfIsoVals.getParameter("pfSumPUPt"))); + tokenElectronIsoVals_.push_back(consumes >(pfIsoVals.getParameter("pfSumEcalClusterEt"))); + tokenElectronIsoVals_.push_back(consumes >(pfIsoVals.getParameter("pfSumHcalClusterEt"))); // std::vector isoNames = pfIsoVals.getParameterNamesForType(); // for(const std::string& name : isoNames) { // edm::InputTag tag = @@ -103,6 +105,12 @@ void GEDGsfElectronFinalizer::produce( edm::Event & event, const edm::EventSetup isoVariables.sumPhotonEt = (*(isolationValueMaps)[1])[myElectronRef]; isoVariables.sumNeutralHadronEt = (*(isolationValueMaps)[2])[myElectronRef]; isoVariables.sumPUPt = (*(isolationValueMaps)[3])[myElectronRef]; + if(isolationValueMaps.size()<=4){ + throw cms::Exception("ArrayError") <<" looks like we a got a producer not updated"< { void produce(edm::Event& evt, const edm::EventSetup& es) override; private: + class RecoStepInfo { + public: + enum FlagBits{kOOT=0x1,kFinal=0x2}; + explicit RecoStepInfo(const std::string& recoStep); + + bool isOOT()const{return flags_&kOOT;} + bool isFinal()const{return flags_&kFinal;} + private: + unsigned int flags_; + }; + void fillPhotonCollection(edm::Event& evt, edm::EventSetup const & es, @@ -73,7 +84,13 @@ class GEDPhotonProducer : public edm::stream::EDProducer<> { edm::ValueMap pfEGCandToPhotonMap, edm::Handle< reco::VertexCollection >& pvVertices, reco::PhotonCollection & outputCollection, - int& iSC, const edm::Handle>& chargedHadrons_, const edm::Handle>& neutralHadrons_, const edm::Handle>& photons_); + int& iSC, const edm::Handle>& chargedHadrons, + const edm::Handle>& neutralHadrons, + const edm::Handle>& photons, + const edm::Handle>& pfEcalClusters, + const edm::Handle>& pfHcalClusters); + + // std::string PhotonCoreCollection_; @@ -92,9 +109,11 @@ class GEDPhotonProducer : public edm::stream::EDProducer<> { //for isolation with map-based veto edm::EDGetTokenT > > particleBasedIsolationToken; //photon isolation sums - edm::EDGetTokenT > phoChargedIsolationToken_CITK; - edm::EDGetTokenT > phoNeutralHadronIsolationToken_CITK; - edm::EDGetTokenT > phoPhotonIsolationToken_CITK; + edm::EDGetTokenT > phoChargedIsolationTokenCITK_; + edm::EDGetTokenT > phoNeutralHadronIsolationTokenCITK_; + edm::EDGetTokenT > phoPhotonIsolationTokenCITK_; + edm::EDGetTokenT > phoPFECALClusIsolationToken_; + edm::EDGetTokenT > phoPFHCALClusIsolationToken_; std::string conversionProducer_; std::string conversionCollection_; @@ -120,7 +139,7 @@ class GEDPhotonProducer : public edm::stream::EDProducer<> { bool runMIPTagger_; bool validConversions_; - std::string reconstructionStep_; + RecoStepInfo recoStep_; bool usePrimaryVertex_; edm::ParameterSet conf_; diff --git a/RecoEgamma/EgammaPhotonProducers/python/gedPhotonSequence_cff.py b/RecoEgamma/EgammaPhotonProducers/python/gedPhotonSequence_cff.py index af51ef4e36160..7bd6f62a4281f 100644 --- a/RecoEgamma/EgammaPhotonProducers/python/gedPhotonSequence_cff.py +++ b/RecoEgamma/EgammaPhotonProducers/python/gedPhotonSequence_cff.py @@ -25,6 +25,8 @@ gedPhotons.chargedHadronIsolation = cms.InputTag("egmPhotonIsolationCITK:h+-DR030-") gedPhotons.neutralHadronIsolation = cms.InputTag("egmPhotonIsolationCITK:h0-DR030-") gedPhotons.photonIsolation = cms.InputTag("egmPhotonIsolationCITK:gamma-DR030-") +gedPhotons.pfECALClusIsolation = cms.InputTag("photonEcalPFClusterIsolationProducer") +gedPhotons.pfHCALClusIsolation = cms.InputTag("photonHcalPFClusterIsolationProducer") gedPhotonSequence = cms.Sequence(gedPhotons) diff --git a/RecoEgamma/EgammaPhotonProducers/python/ootPhotonSequence_cff.py b/RecoEgamma/EgammaPhotonProducers/python/ootPhotonSequence_cff.py index 98a49b7ae8dc6..d5ad2335ade17 100644 --- a/RecoEgamma/EgammaPhotonProducers/python/ootPhotonSequence_cff.py +++ b/RecoEgamma/EgammaPhotonProducers/python/ootPhotonSequence_cff.py @@ -14,6 +14,7 @@ particleFlowClusterOOTECAL, particleFlowSuperClusterOOTECAL, ootPhotonCore, + ootPhotonsTmp, ootPhotons ) diff --git a/RecoEgamma/EgammaPhotonProducers/python/ootPhotons_cff.py b/RecoEgamma/EgammaPhotonProducers/python/ootPhotons_cff.py index d95c2116ce8b2..874d747c8f32b 100644 --- a/RecoEgamma/EgammaPhotonProducers/python/ootPhotons_cff.py +++ b/RecoEgamma/EgammaPhotonProducers/python/ootPhotons_cff.py @@ -1,32 +1,48 @@ import FWCore.ParameterSet.Config as cms from RecoEgamma.EgammaPhotonProducers.gedPhotons_cfi import gedPhotons as _gedPhotons -ootPhotons = _gedPhotons.clone( +ootPhotonsTmp = _gedPhotons.clone( photonProducer = 'ootPhotonCore', candidateP4type = "fromEcalEnergy", reconstructionStep = "oot", pfEgammaCandidates = "", valueMapPhotons = "" ) +del ootPhotonsTmp.regressionConfig + +ootPhotons = _gedPhotons.clone( + photonProducer = 'ootPhotonsTmp', + candidateP4type = "fromEcalEnergy", + reconstructionStep = "ootfinal", + pfEgammaCandidates = "", + chargedHadronIsolation = cms.InputTag(""), + neutralHadronIsolation = cms.InputTag(""), + photonIsolation = cms.InputTag(""), + pfECALClusIsolation = cms.InputTag("ootPhotonEcalPFClusterIsolationProducer"), + pfHCALClusIsolation = cms.InputTag("ootPhotonHcalPFClusterIsolationProducer"), + valueMapPhotons = "" + ) del ootPhotons.regressionConfig + + from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy run2_miniAOD_80XLegacy.toModify( - ootPhotons, + ootPhotonsTmp, barrelEcalHits = "reducedEcalRecHitsEB", endcapEcalHits = "reducedEcalRecHitsEE", preshowerHits = "reducedEcalRecHitsES", hcalTowers = "" ) run2_miniAOD_80XLegacy.toModify( - ootPhotons.isolationSumsCalculatorSet, + ootPhotonsTmp.isolationSumsCalculatorSet, barrelEcalRecHitCollection = "reducedEcalRecHitsEB", endcapEcalRecHitCollection = "reducedEcalRecHitsEE", HcalRecHitCollection = "" ) run2_miniAOD_80XLegacy.toModify( - ootPhotons.mipVariableSet, + ootPhotonsTmp.mipVariableSet, barrelEcalRecHitCollection = "reducedEcalRecHitsEB", endcapEcalRecHitCollection = "reducedEcalRecHitsEE", ) diff --git a/RecoEgamma/EgammaPhotonProducers/python/reducedEgamma_cfi.py b/RecoEgamma/EgammaPhotonProducers/python/reducedEgamma_cfi.py index 2ff629d762a75..c7582312d0d67 100644 --- a/RecoEgamma/EgammaPhotonProducers/python/reducedEgamma_cfi.py +++ b/RecoEgamma/EgammaPhotonProducers/python/reducedEgamma_cfi.py @@ -45,30 +45,12 @@ "eidRobustTight", "eidTight", ), - photonPFClusterIsoSources = cms.VInputTag( - cms.InputTag("photonEcalPFClusterIsolationProducer"), - cms.InputTag("photonHcalPFClusterIsolationProducer"), - ), - photonPFClusterIsoOutput = cms.vstring( - "phoEcalPFClusIso", - "phoHcalPFClusIso", - ), - ootPhotonPFClusterIsoSources = cms.VInputTag( - cms.InputTag("ootPhotonEcalPFClusterIsolationProducer"), - cms.InputTag("ootPhotonHcalPFClusterIsolationProducer"), - ), - ootPhotonPFClusterIsoOutput = cms.vstring( - "ootPhoEcalPFClusIso", - "ootPhoHcalPFClusIso", - ), - gsfElectronPFClusterIsoSources = cms.VInputTag( - cms.InputTag("electronEcalPFClusterIsolationProducer"), - cms.InputTag("electronHcalPFClusterIsolationProducer"), - ), - gsfElectronPFClusterIsoOutput = cms.vstring( - "eleEcalPFClusIso", - "eleHcalPFClusIso", - ), + photonPFClusterIsoSources = cms.VInputTag(), + photonPFClusterIsoOutput = cms.vstring(), + ootPhotonPFClusterIsoSources = cms.VInputTag(), + ootPhotonPFClusterIsoOutput = cms.vstring(), + gsfElectronPFClusterIsoSources = cms.VInputTag(), + gsfElectronPFClusterIsoOutput = cms.vstring(), ) from Configuration.Eras.Modifier_phase2_common_cff import phase2_common @@ -79,6 +61,26 @@ from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy run2_miniAOD_80XLegacy.toModify( reducedEgamma, - ootPhotonPFClusterIsoSources = [ "ootPhotonEcalPFClusterIsolationProducer" ], - ootPhotonPFClusterIsoOutput = [ "ootPhoEcalPFClusIso" ] -) + photonPFClusterIsoSources = cms.VInputTag( + cms.InputTag("photonEcalPFClusterIsolationProducer"), + cms.InputTag("photonHcalPFClusterIsolationProducer"), + ), + photonPFClusterIsoOutput = cms.vstring( + "phoEcalPFClusIso", + "phoHcalPFClusIso", + ), + ootPhotonPFClusterIsoSources = cms.VInputTag( + cms.InputTag("ootPhotonEcalPFClusterIsolationProducer"), + ), + ootPhotonPFClusterIsoOutput = cms.vstring( + "ootPhoEcalPFClusIso", + ), + gsfElectronPFClusterIsoSources = cms.VInputTag( + cms.InputTag("electronEcalPFClusterIsolationProducer"), + cms.InputTag("electronHcalPFClusterIsolationProducer"), + ), + gsfElectronPFClusterIsoOutput = cms.vstring( + "eleEcalPFClusIso", + "eleHcalPFClusIso", + ) + ) diff --git a/RecoEgamma/EgammaPhotonProducers/src/GEDPhotonProducer.cc b/RecoEgamma/EgammaPhotonProducers/src/GEDPhotonProducer.cc index 47977d5b1d8c1..4c767a425ae27 100644 --- a/RecoEgamma/EgammaPhotonProducers/src/GEDPhotonProducer.cc +++ b/RecoEgamma/EgammaPhotonProducers/src/GEDPhotonProducer.cc @@ -52,29 +52,43 @@ namespace { } } -GEDPhotonProducer::GEDPhotonProducer(const edm::ParameterSet& config) : +GEDPhotonProducer::RecoStepInfo::RecoStepInfo(const std::string& step): + flags_(0) +{ + if(step=="final") flags_ = kFinal; + else if(step=="oot") flags_ = kOOT; + else if(step=="ootfinal") flags_ = (kOOT|kFinal); + else if(step=="tmp") flags_ = 0; + else{ + throw cms::Exception("InvalidConfig") <<" reconstructStep "<("reconstructionStep")), conf_(config) { // use configuration file to setup input/output collection names // photonProducer_ = conf_.getParameter("photonProducer"); - reconstructionStep_ = conf_.getParameter("reconstructionStep"); - - if ( reconstructionStep_ == "final" ) { + + if ( recoStep_.isFinal() ) { photonProducerT_ = consumes(photonProducer_); pfCandidates_ = consumes(conf_.getParameter("pfCandidates")); - phoChargedIsolationToken_CITK = + phoChargedIsolationTokenCITK_ = consumes>(conf_.getParameter("chargedHadronIsolation")); - phoNeutralHadronIsolationToken_CITK = + phoNeutralHadronIsolationTokenCITK_ = consumes>(conf_.getParameter("neutralHadronIsolation")); - phoPhotonIsolationToken_CITK = + phoPhotonIsolationTokenCITK_ = consumes>(conf_.getParameter("photonIsolation")); - + phoPFECALClusIsolationToken_ = + consumes>(conf_.getParameter("pfECALClusIsolation")); + phoPFHCALClusIsolationToken_ = + consumes>(conf_.getParameter("pfHCALClusIsolation")); } else { photonCoreProducerT_ = @@ -191,7 +205,7 @@ GEDPhotonProducer::GEDPhotonProducer(const edm::ParameterSet& config) : // //moved from beginRun to here, I dont see how this could cause harm as its just reading in the exactly same parameters each run - if ( reconstructionStep_ != "final"){ + if ( !recoStep_.isFinal()){ thePhotonIsolationCalculator_ = new PhotonIsolationCalculator(); edm::ParameterSet isolationSumsCalculatorSet = conf_.getParameter("isolationSumsCalculatorSet"); thePhotonIsolationCalculator_->setup(isolationSumsCalculatorSet, flagsexclEB_, flagsexclEE_, severitiesexclEB_, severitiesexclEE_,consumesCollector()); @@ -223,7 +237,7 @@ GEDPhotonProducer::~GEDPhotonProducer() void GEDPhotonProducer::beginRun (edm::Run const& r, edm::EventSetup const & theEventSetup) { - if ( reconstructionStep_ != "final" ) { + if ( !recoStep_.isFinal() ) { thePhotonEnergyCorrector_ -> init(theEventSetup); } @@ -249,16 +263,21 @@ void GEDPhotonProducer::produce(edm::Event& theEvent, const edm::EventSetup& the bool validPhotonHandle= false; Handle photonHandle; //value maps for isolation - edm::Handle > phoChargedIsolationMap_CITK; - edm::Handle > phoNeutralHadronIsolationMap_CITK; - edm::Handle > phoPhotonIsolationMap_CITK; + edm::Handle > phoChargedIsolationMapCITK; + edm::Handle > phoNeutralHadronIsolationMapCITK; + edm::Handle > phoPhotonIsolationMapCITK; + edm::Handle > phoPFECALClusIsolationMap; + edm::Handle > phoPFHCALClusIsolationMap; - if ( reconstructionStep_ == "final" ) { + if ( recoStep_.isFinal() ) { theEvent.getByToken(photonProducerT_,photonHandle); //get isolation objects - theEvent.getByToken(phoChargedIsolationToken_CITK,phoChargedIsolationMap_CITK); - theEvent.getByToken(phoNeutralHadronIsolationToken_CITK,phoNeutralHadronIsolationMap_CITK); - theEvent.getByToken(phoPhotonIsolationToken_CITK,phoPhotonIsolationMap_CITK); + theEvent.getByToken(phoChargedIsolationTokenCITK_,phoChargedIsolationMapCITK); + theEvent.getByToken(phoNeutralHadronIsolationTokenCITK_,phoNeutralHadronIsolationMapCITK); + theEvent.getByToken(phoPhotonIsolationTokenCITK_,phoPhotonIsolationMapCITK); + theEvent.getByToken(phoPFECALClusIsolationToken_,phoPFECALClusIsolationMap); + theEvent.getByToken(phoPFHCALClusIsolationToken_,phoPFHCALClusIsolationMap); + if ( photonHandle.isValid()) { validPhotonHandle=true; } else { @@ -271,7 +290,7 @@ void GEDPhotonProducer::produce(edm::Event& theEvent, const edm::EventSetup& the validPhotonCoreHandle=true; } else { throw cms::Exception("GEDPhotonProducer") - << "Error! Can't get the photonCoreProducer" << photonProducer_.label() << "\n"; + << "Error! Can't get the photonCoreProducer " << photonProducer_.label() << "\n"; } } @@ -319,10 +338,11 @@ void GEDPhotonProducer::produce(edm::Event& theEvent, const edm::EventSetup& the Handle pfCandidateHandle; - if ( reconstructionStep_ == "final" ) { + if ( recoStep_.isFinal() ) { // Get the PF candidates collection theEvent.getByToken(pfCandidates_,pfCandidateHandle); - if (!pfCandidateHandle.isValid()) { + //OOT photons have no PF candidates so its not an error in this case + if (!pfCandidateHandle.isValid() && !recoStep_.isOOT()) { throw cms::Exception("GEDPhotonProducer") << "Error! Can't get the pfCandidates"; } @@ -393,7 +413,7 @@ void GEDPhotonProducer::produce(edm::Event& theEvent, const edm::EventSetup& the iSC); iSC=0; - if ( validPhotonHandle && reconstructionStep_ == "final" ) + if ( validPhotonHandle && recoStep_.isFinal() ) fillPhotonCollection(theEvent, theEventSetup, photonHandle, @@ -403,9 +423,11 @@ void GEDPhotonProducer::produce(edm::Event& theEvent, const edm::EventSetup& the vertexHandle, outputPhotonCollection, iSC, - phoChargedIsolationMap_CITK, - phoNeutralHadronIsolationMap_CITK, - phoPhotonIsolationMap_CITK); + phoChargedIsolationMapCITK, + phoNeutralHadronIsolationMapCITK, + phoPhotonIsolationMapCITK, + phoPFECALClusIsolationMap, + phoPFHCALClusIsolationMap); @@ -415,7 +437,7 @@ void GEDPhotonProducer::produce(edm::Event& theEvent, const edm::EventSetup& the const edm::OrphanHandle photonOrphHandle = theEvent.put(std::move(outputPhotonCollection_p), photonCollection_); - if ( reconstructionStep_ != "final" && not pfEgammaCandidates_.isUninitialized()) { + if ( !recoStep_.isFinal() && not pfEgammaCandidates_.isUninitialized()) { //// Define the value map which associate to each Egamma-unbiassaed candidate (key-ref) the corresponding PhotonRef auto pfEGCandToPhotonMap_p = std::make_unique>(); edm::ValueMap::Filler filler(*pfEGCandToPhotonMap_p); @@ -759,7 +781,12 @@ void GEDPhotonProducer::fillPhotonCollection(edm::Event& evt, const edm::Handle pfEGCandidateHandle, edm::ValueMap pfEGCandToPhotonMap, edm::Handle< reco::VertexCollection > & vertexHandle, - reco::PhotonCollection & outputPhotonCollection, int& iSC, const edm::Handle>& chargedHadrons_, const edm::Handle>& neutralHadrons_, const edm::Handle>& photons_) { + reco::PhotonCollection & outputPhotonCollection, int& iSC, + const edm::Handle>& chargedHadrons, + const edm::Handle>& neutralHadrons, + const edm::Handle>& photons, + const edm::Handle>& pfEcalClusters, + const edm::Handle>& pfHcalClusters){ @@ -798,9 +825,13 @@ void GEDPhotonProducer::fillPhotonCollection(edm::Event& evt, //get the pointer for the photon object edm::Ptr photonPtr(photonHandle, lSC); - pfIso.chargedHadronIso = (*chargedHadrons_)[photonPtr] ; - pfIso.neutralHadronIso = (*neutralHadrons_)[photonPtr]; - pfIso.photonIso = (*photons_)[photonPtr]; + if(!recoStep_.isOOT()){ //out of time photons do not have PF info so skip in this case + pfIso.chargedHadronIso = (*chargedHadrons)[photonPtr] ; + pfIso.neutralHadronIso = (*neutralHadrons)[photonPtr]; + pfIso.photonIso = (*photons)[photonPtr]; + } + pfIso.sumEcalClusterEt = (*pfEcalClusters)[photonPtr]; + pfIso.sumHcalClusterEt = (*pfHcalClusters)[photonPtr]; newCandidate.setPflowIsolationVariables(pfIso); newCandidate.setPflowIDVariables(pfID); diff --git a/RecoHI/Configuration/python/Reconstruction_hiPF_cff.py b/RecoHI/Configuration/python/Reconstruction_hiPF_cff.py index 06265eb97bf23..67c02d24db7f4 100644 --- a/RecoHI/Configuration/python/Reconstruction_hiPF_cff.py +++ b/RecoHI/Configuration/python/Reconstruction_hiPF_cff.py @@ -25,6 +25,8 @@ gedGsfElectronsTmp.maxEOverPBarrel = cms.double(2.) gedGsfElectronsTmp.maxEOverPEndcaps = cms.double(2.) +ootPhotonsTmp.primaryVertexProducer = cms.InputTag("hiSelectedVertex") +ootPhotonsTmp.isolationSumsCalculatorSet.trackProducer = cms.InputTag("hiGeneralTracks") ootPhotons.primaryVertexProducer = cms.InputTag("hiSelectedVertex") ootPhotons.isolationSumsCalculatorSet.trackProducer = cms.InputTag("hiGeneralTracks")