From d84f4dea2fb5a70746b2ec39f3140c97d6c8c325 Mon Sep 17 00:00:00 2001 From: Sanghyun Ko Date: Thu, 10 Oct 2024 19:23:16 +0200 Subject: [PATCH 1/6] add unbiased SCs pt > 5 GeV to miniAOD --- .../PatAlgos/python/slimming/slimming_cff.py | 1 + .../python/reducedEgamma_cfi.py | 11 ++++++++ .../src/ReducedEGProducer.cc | 27 ++++++++++++++++++- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py b/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py index 17aeba0c5b5fe..92499ab0b21d1 100644 --- a/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py +++ b/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py @@ -66,6 +66,7 @@ slimmedLambdaVertices, slimmedMETs, metFilterPathsTask, + superClusterMerger, reducedEgamma, slimmedHcalRecHits, bunchSpacingProducer, diff --git a/RecoEgamma/EgammaPhotonProducers/python/reducedEgamma_cfi.py b/RecoEgamma/EgammaPhotonProducers/python/reducedEgamma_cfi.py index 6001c246d1e38..458f0f6868a7b 100644 --- a/RecoEgamma/EgammaPhotonProducers/python/reducedEgamma_cfi.py +++ b/RecoEgamma/EgammaPhotonProducers/python/reducedEgamma_cfi.py @@ -4,6 +4,9 @@ from RecoJets.Configuration.CaloTowersES_cfi import * reducedEgamma = cms.EDProducer("ReducedEGProducer", + keepPfSuperclusterPtMin = cms.double(5.), + keepPfSuperclusterAbsetaMax = cms.double(2.5), + relinkSupercluster = cms.bool(True), keepPhotons = cms.string("hadTowOverEm()<0.15 && pt>10 && (pt>14 || chargedHadronIso()<10)"), #keep in output slimRelinkPhotons = cms.string("hadTowOverEm()<0.15 && pt>10 && (pt>14 || chargedHadronIso()<10)"), #keep only slimmed SuperCluster plus seed cluster relinkPhotons = cms.string("(r9()>0.8 || chargedHadronIso()<20 || chargedHadronIso()<0.3*pt())"), #keep all associated clusters/rechits/conversions @@ -13,6 +16,7 @@ keepGsfElectrons = cms.string(""), #keep in output slimRelinkGsfElectrons = cms.string(""), #keep only slimmed SuperCluster plus seed cluster relinkGsfElectrons = cms.string("pt>5"), #keep all associated clusters/rechits/conversions + pflowSuperclusters = cms.InputTag("superClusterMerger"), photons = cms.InputTag("gedPhotons"), ootPhotons = cms.InputTag("ootPhotons"), gsfElectrons = cms.InputTag("gedGsfElectrons"), @@ -50,6 +54,13 @@ hcalHitSel = interestingEgammaIsoHCALSel ) +superClusterMerger = cms.EDProducer("EgammaSuperClusterMerger", + src = cms.VInputTag( + cms.InputTag("particleFlowSuperClusterECAL:particleFlowSuperClusterECALBarrel"), + cms.InputTag("particleFlowSuperClusterECAL:particleFlowSuperClusterECALEndcapWithPreshower"), + ) +) + from Configuration.Eras.Modifier_phase2_common_cff import phase2_common phase2_common.toModify(reducedEgamma, preshowerEcalHits = "", diff --git a/RecoEgamma/EgammaPhotonProducers/src/ReducedEGProducer.cc b/RecoEgamma/EgammaPhotonProducers/src/ReducedEGProducer.cc index 56a87fd6abbbd..61f8e38125c9b 100644 --- a/RecoEgamma/EgammaPhotonProducers/src/ReducedEGProducer.cc +++ b/RecoEgamma/EgammaPhotonProducers/src/ReducedEGProducer.cc @@ -153,6 +153,7 @@ class ReducedEGProducer : public edm::stream::EDProducer<> { } //tokens for input collections + const edm::EDGetTokenT superclusterT_; const edm::EDGetTokenT photonT_; edm::EDGetTokenT ootPhotonT_; const edm::EDGetTokenT gsfElectronT_; @@ -178,6 +179,10 @@ class ReducedEGProducer : public edm::stream::EDProducer<> { const edm::EDGetTokenT recoHIPhotonIsolationMapInputToken_; edm::EDPutTokenT recoHIPhotonIsolationMapOutputName_; + const double scPtMin_; + const double scAbsetaMax_; + const bool relinkSupercluster_; + const bool applyPhotonCalibOnData_; const bool applyPhotonCalibOnMC_; const bool applyGsfElectronCalibOnData_; @@ -263,7 +268,8 @@ namespace { } // namespace ReducedEGProducer::ReducedEGProducer(const edm::ParameterSet& config) - : photonT_(consumes(config.getParameter("photons"))), + : superclusterT_(consumes(config.getParameter("pflowSuperclusters"))), + photonT_(consumes(config.getParameter("photons"))), gsfElectronT_(consumes(config.getParameter("gsfElectrons"))), conversionT_(consumes(config.getParameter("conversions"))), singleConversionT_(consumes(config.getParameter("singleConversions"))), @@ -280,6 +286,9 @@ ReducedEGProducer::ReducedEGProducer(const edm::ParameterSet& config) !config.getParameter("hiPhotonIsolationMapInput").label().empty() ? consumes(config.getParameter("hiPhotonIsolationMapInput")) : edm::EDGetTokenT{}}, + scPtMin_(config.getParameter("keepPfSuperclusterPtMin")), + scAbsetaMax_(config.getParameter("keepPfSuperclusterAbsetaMax")), + relinkSupercluster_(config.getParameter("relinkSupercluster")), //calibration flags applyPhotonCalibOnData_(config.getParameter("applyPhotonCalibOnData")), applyPhotonCalibOnMC_(config.getParameter("applyPhotonCalibOnMC")), @@ -380,6 +389,7 @@ void ReducedEGProducer::beginRun(edm::Run const& run, const edm::EventSetup& iSe void ReducedEGProducer::produce(edm::Event& event, const edm::EventSetup& eventSetup) { //get input collections + auto scHandle = event.getHandle(superclusterT_); auto photonHandle = event.getHandle(photonT_); auto ootPhotonHandle = @@ -682,6 +692,21 @@ void ReducedEGProducer::produce(edm::Event& event, const edm::EventSetup& eventS linkHcalHits(*gsfElectron.superCluster(), *hbheHitHandle, hcalRechitMap); } + //loop over input SuperClusters + index = -1; + for (const auto& superCluster : *scHandle) { + index++; + + if ( superCluster.energy()/std::cosh(superCluster.eta()) < scPtMin_ ) + continue; + + if ( std::abs(superCluster.eta()) > scAbsetaMax_ ) + continue; + + reco::SuperClusterRef superClusterRef(scHandle, index); + linkSuperCluster(superClusterRef, superClusterMap, superClusters, relinkSupercluster_, superClusterFullRelinkMap); + } + //loop over output SuperClusters and fill maps index = 0; for (auto& superCluster : superClusters) { From 9c6091bd8495d9b9f682004fa0f9566d16409586 Mon Sep 17 00:00:00 2001 From: Sanghyun Ko Date: Wed, 16 Oct 2024 01:06:35 +0200 Subject: [PATCH 2/6] differentiate supercluster Pt cut and linking Pt cut --- .../python/reducedEgamma_cfi.py | 2 +- .../EgammaPhotonProducers/src/ReducedEGProducer.cc | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/RecoEgamma/EgammaPhotonProducers/python/reducedEgamma_cfi.py b/RecoEgamma/EgammaPhotonProducers/python/reducedEgamma_cfi.py index 458f0f6868a7b..335965e57a9be 100644 --- a/RecoEgamma/EgammaPhotonProducers/python/reducedEgamma_cfi.py +++ b/RecoEgamma/EgammaPhotonProducers/python/reducedEgamma_cfi.py @@ -6,7 +6,7 @@ reducedEgamma = cms.EDProducer("ReducedEGProducer", keepPfSuperclusterPtMin = cms.double(5.), keepPfSuperclusterAbsetaMax = cms.double(2.5), - relinkSupercluster = cms.bool(True), + relinkSuperclusterPtMin = cms.double(10.), keepPhotons = cms.string("hadTowOverEm()<0.15 && pt>10 && (pt>14 || chargedHadronIso()<10)"), #keep in output slimRelinkPhotons = cms.string("hadTowOverEm()<0.15 && pt>10 && (pt>14 || chargedHadronIso()<10)"), #keep only slimmed SuperCluster plus seed cluster relinkPhotons = cms.string("(r9()>0.8 || chargedHadronIso()<20 || chargedHadronIso()<0.3*pt())"), #keep all associated clusters/rechits/conversions diff --git a/RecoEgamma/EgammaPhotonProducers/src/ReducedEGProducer.cc b/RecoEgamma/EgammaPhotonProducers/src/ReducedEGProducer.cc index 61f8e38125c9b..1fb9e3d5f29a3 100644 --- a/RecoEgamma/EgammaPhotonProducers/src/ReducedEGProducer.cc +++ b/RecoEgamma/EgammaPhotonProducers/src/ReducedEGProducer.cc @@ -181,7 +181,7 @@ class ReducedEGProducer : public edm::stream::EDProducer<> { const double scPtMin_; const double scAbsetaMax_; - const bool relinkSupercluster_; + const double relinkSuperclusterPtMin_; const bool applyPhotonCalibOnData_; const bool applyPhotonCalibOnMC_; @@ -288,7 +288,7 @@ ReducedEGProducer::ReducedEGProducer(const edm::ParameterSet& config) : edm::EDGetTokenT{}}, scPtMin_(config.getParameter("keepPfSuperclusterPtMin")), scAbsetaMax_(config.getParameter("keepPfSuperclusterAbsetaMax")), - relinkSupercluster_(config.getParameter("relinkSupercluster")), + relinkSuperclusterPtMin_(config.getParameter("relinkSuperclusterPtMin")), //calibration flags applyPhotonCalibOnData_(config.getParameter("applyPhotonCalibOnData")), applyPhotonCalibOnMC_(config.getParameter("applyPhotonCalibOnMC")), @@ -697,14 +697,18 @@ void ReducedEGProducer::produce(edm::Event& event, const edm::EventSetup& eventS for (const auto& superCluster : *scHandle) { index++; - if ( superCluster.energy()/std::cosh(superCluster.eta()) < scPtMin_ ) + const double superclusPt = superCluster.energy()/std::cosh(superCluster.eta()); + + if ( superclusPt < scPtMin_ ) continue; if ( std::abs(superCluster.eta()) > scAbsetaMax_ ) continue; + bool relinkSupercluster = superclusPt > relinkSuperclusterPtMin_; + reco::SuperClusterRef superClusterRef(scHandle, index); - linkSuperCluster(superClusterRef, superClusterMap, superClusters, relinkSupercluster_, superClusterFullRelinkMap); + linkSuperCluster(superClusterRef, superClusterMap, superClusters, relinkSupercluster, superClusterFullRelinkMap); } //loop over output SuperClusters and fill maps From af375a2d22c5becd4a05130d8751f8b15bedce62 Mon Sep 17 00:00:00 2001 From: Sanghyun Ko Date: Wed, 16 Oct 2024 12:14:00 +0200 Subject: [PATCH 3/6] propagate SC collection to the EGM flavor nano --- .../plugins/SimpleFlatTableProducerPlugins.cc | 4 ++++ .../NanoAOD/python/egamma_custom_cff.py | 24 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/PhysicsTools/NanoAOD/plugins/SimpleFlatTableProducerPlugins.cc b/PhysicsTools/NanoAOD/plugins/SimpleFlatTableProducerPlugins.cc index 53fc6f16ee47e..c3c3b1e769575 100644 --- a/PhysicsTools/NanoAOD/plugins/SimpleFlatTableProducerPlugins.cc +++ b/PhysicsTools/NanoAOD/plugins/SimpleFlatTableProducerPlugins.cc @@ -6,6 +6,9 @@ typedef SimpleFlatTableProducer SimpleCandidateFlatTableProduce #include "DataFormats/TrackReco/interface/Track.h" typedef SimpleFlatTableProducer SimpleTrackFlatTableProducer; +#include "DataFormats/EgammaReco/interface/SuperCluster.h" +typedef SimpleFlatTableProducer SimpleSuperclusterFlatTableProducer; + #include "DataFormats/JetReco/interface/PFJet.h" typedef SimpleFlatTableProducer SimplePFJetFlatTableProducer; @@ -48,6 +51,7 @@ typedef EventSingletonSimpleFlatTableProducer SimpleBeamspotFlat #include "FWCore/Framework/interface/MakerMacros.h" DEFINE_FWK_MODULE(SimpleCandidateFlatTableProducer); DEFINE_FWK_MODULE(SimpleTrackFlatTableProducer); +DEFINE_FWK_MODULE(SimpleSuperclusterFlatTableProducer); DEFINE_FWK_MODULE(SimplePFJetFlatTableProducer); DEFINE_FWK_MODULE(SimpleVertexFlatTableProducer); DEFINE_FWK_MODULE(SimpleSecondaryVertexFlatTableProducer); diff --git a/PhysicsTools/NanoAOD/python/egamma_custom_cff.py b/PhysicsTools/NanoAOD/python/egamma_custom_cff.py index 176115a1b1cbf..af39bae36bf20 100644 --- a/PhysicsTools/NanoAOD/python/egamma_custom_cff.py +++ b/PhysicsTools/NanoAOD/python/egamma_custom_cff.py @@ -81,6 +81,24 @@ ) ) +superclusterTable = cms.EDProducer("SimpleSuperclusterFlatTableProducer", + src = cms.InputTag("reducedEgamma","reducedSuperClusters"), + name = cms.string("Supercluster"), + doc = cms.string("Supercluster collection"), + variables = cms.PSet( + energy = Var("energy()",float,doc="supercluster energy",precision=10), + eta = Var("eta()",float,doc="supercluster eta",precision=10), + phi = Var("phi()",float,doc="supercluster phi",precision=10), + rawEnergy = Var("rawEnergy()",float,doc="sum of basic clusters energy",precision=10), + preshowerEnergy = Var("preshowerEnergy()",float,doc="sum of energy in preshower",precision=10), + etaWidth = Var("etaWidth()",float,doc="supercluster eta width",precision=10), + phiWidth = Var("etaWidth()",float,doc="supercluster phi width",precision=10), + seedClusEnergy = Var("seed().energy()",float,doc="seed cluster energy",precision=10), + seedClusterEta = Var("seed().eta()",float,doc="seed cluster eta",precision=10), + seedClusterPhi = Var("seed().phi()",float,doc="seed cluster phi",precision=10), + ) +) + def addExtraEGammaVarsCustomize(process): #photon process.finalPhotons.cut = cms.string("pt > 1 ") @@ -97,5 +115,11 @@ def addExtraEGammaVarsCustomize(process): if hasattr(process,'nanoDQM'): process.nanoDQM.vplots.Electron.plots = _Electron_extra_plots + + #superCluster + process.superclusterTable = superclusterTable + + process.superclusterTask = cms.Task(process.superclusterTable) + process.nanoTableTaskCommon.add(process.superclusterTask) return process From d0d570d56279b4a72feed80420f11ee4c4ac1e36 Mon Sep 17 00:00:00 2001 From: Sanghyun Ko Date: Thu, 17 Oct 2024 14:28:26 +0200 Subject: [PATCH 4/6] minimize the file size increase of miniAOD --- RecoEgamma/EgammaPhotonProducers/python/reducedEgamma_cfi.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/RecoEgamma/EgammaPhotonProducers/python/reducedEgamma_cfi.py b/RecoEgamma/EgammaPhotonProducers/python/reducedEgamma_cfi.py index 335965e57a9be..6be63221991a8 100644 --- a/RecoEgamma/EgammaPhotonProducers/python/reducedEgamma_cfi.py +++ b/RecoEgamma/EgammaPhotonProducers/python/reducedEgamma_cfi.py @@ -4,9 +4,9 @@ from RecoJets.Configuration.CaloTowersES_cfi import * reducedEgamma = cms.EDProducer("ReducedEGProducer", - keepPfSuperclusterPtMin = cms.double(5.), + keepPfSuperclusterPtMin = cms.double(10.), keepPfSuperclusterAbsetaMax = cms.double(2.5), - relinkSuperclusterPtMin = cms.double(10.), + relinkSuperclusterPtMin = cms.double(99999.), # no SC linking keepPhotons = cms.string("hadTowOverEm()<0.15 && pt>10 && (pt>14 || chargedHadronIso()<10)"), #keep in output slimRelinkPhotons = cms.string("hadTowOverEm()<0.15 && pt>10 && (pt>14 || chargedHadronIso()<10)"), #keep only slimmed SuperCluster plus seed cluster relinkPhotons = cms.string("(r9()>0.8 || chargedHadronIso()<20 || chargedHadronIso()<0.3*pt())"), #keep all associated clusters/rechits/conversions From 3f7ea8287ccd934f17c97dd86dd86b8a24dc1d59 Mon Sep 17 00:00:00 2001 From: Sanghyun Ko Date: Thu, 17 Oct 2024 14:58:44 +0200 Subject: [PATCH 5/6] replace the ratio of corr/uncorr variable to the uncorrected pt (to avoid issues like #46046) --- PhysicsTools/NanoAOD/python/electrons_cff.py | 2 +- PhysicsTools/NanoAOD/python/photons_cff.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/PhysicsTools/NanoAOD/python/electrons_cff.py b/PhysicsTools/NanoAOD/python/electrons_cff.py index 0ae00ce1e79d4..7bc2fb06467c3 100644 --- a/PhysicsTools/NanoAOD/python/electrons_cff.py +++ b/PhysicsTools/NanoAOD/python/electrons_cff.py @@ -433,7 +433,7 @@ def _get_bitmapVIDForEle_docstring(modules,WorkingPoints): electronTable.variables, pt = Var("pt*userFloat('ecalTrkEnergyPostCorrNew')/userFloat('ecalTrkEnergyPreCorrNew')", float, precision=-1, doc="p_{T}"), energyErr = Var("userFloat('ecalTrkEnergyErrPostCorrNew')", float, precision=6, doc="energy error of the cluster-track combination"), - eCorr = Var("userFloat('ecalTrkEnergyPostCorrNew')/userFloat('ecalTrkEnergyPreCorrNew')", float, doc="ratio of the calibrated energy/miniaod energy"), + ptPreCorr = Var("pt", float, doc="pt of the electron before energy corrections"), scEtOverPt = Var("(superCluster().energy()/(pt*userFloat('ecalTrkEnergyPostCorrNew')/userFloat('ecalTrkEnergyPreCorrNew')*cosh(superCluster().eta())))-1",float,doc="(supercluster transverse energy)/pt-1",precision=8), dEscaleUp=Var("userFloat('ecalTrkEnergyPostCorrNew')-userFloat('energyScaleUpNew')", float, doc="ecal energy scale shifted 1 sigma up(adding gain/stat/syst in quadrature)", precision=8), dEscaleDown=Var("userFloat('ecalTrkEnergyPostCorrNew')-userFloat('energyScaleDownNew')", float, doc="ecal energy scale shifted 1 sigma down (adding gain/stat/syst in quadrature)", precision=8), diff --git a/PhysicsTools/NanoAOD/python/photons_cff.py b/PhysicsTools/NanoAOD/python/photons_cff.py index be2c620dba4ed..bd9ce7ebd0c2d 100644 --- a/PhysicsTools/NanoAOD/python/photons_cff.py +++ b/PhysicsTools/NanoAOD/python/photons_cff.py @@ -283,7 +283,7 @@ def make_bitmapVID_docstring(id_modules_working_points_pset): photonTable.variables, pt = Var("pt*userFloat('ecalEnergyPostCorrNew')/userFloat('ecalEnergyPreCorrNew')", float, precision=-1, doc="p_{T}"), energyErr = Var("userFloat('ecalEnergyErrPostCorrNew')",float,doc="energy error of the cluster from regression",precision=6), - eCorr = Var("userFloat('ecalEnergyPostCorrNew')/userFloat('ecalEnergyPreCorrNew')",float,doc="ratio of the calibrated energy/miniaod energy"), + ptPreCorr = Var("pt",float,doc="pt of the photon before energy corrections"), cutBased = Var( "userInt('cutBasedID_Fall17V2_loose')+userInt('cutBasedID_Fall17V2_medium')+userInt('cutBasedID_Fall17V2_tight')", "uint8", From d4762a9632816174d337167d1ed82a3a676f998d Mon Sep 17 00:00:00 2001 From: Sanghyun Ko Date: Thu, 17 Oct 2024 15:13:38 +0200 Subject: [PATCH 6/6] apply code-checks --- RecoEgamma/EgammaPhotonProducers/src/ReducedEGProducer.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/RecoEgamma/EgammaPhotonProducers/src/ReducedEGProducer.cc b/RecoEgamma/EgammaPhotonProducers/src/ReducedEGProducer.cc index 1fb9e3d5f29a3..7afae9aab9dbf 100644 --- a/RecoEgamma/EgammaPhotonProducers/src/ReducedEGProducer.cc +++ b/RecoEgamma/EgammaPhotonProducers/src/ReducedEGProducer.cc @@ -697,12 +697,12 @@ void ReducedEGProducer::produce(edm::Event& event, const edm::EventSetup& eventS for (const auto& superCluster : *scHandle) { index++; - const double superclusPt = superCluster.energy()/std::cosh(superCluster.eta()); + const double superclusPt = superCluster.energy() / std::cosh(superCluster.eta()); - if ( superclusPt < scPtMin_ ) + if (superclusPt < scPtMin_) continue; - if ( std::abs(superCluster.eta()) > scAbsetaMax_ ) + if (std::abs(superCluster.eta()) > scAbsetaMax_) continue; bool relinkSupercluster = superclusPt > relinkSuperclusterPtMin_;