From 19a2f66f59a2aed522d184e69776fb552c2f8760 Mon Sep 17 00:00:00 2001 From: Giovanni Date: Mon, 14 Apr 2014 14:24:16 +0200 Subject: [PATCH] Selective embedding of non-ZS cluster shapes a la 53X --- .../PatAlgos/plugins/PATElectronSlimmer.cc | 27 ++++++++++++++++--- .../PatAlgos/plugins/PATPhotonSlimmer.cc | 24 ++++++++++++++++- .../python/slimming/slimmedElectrons_cfi.py | 1 + .../python/slimming/slimmedPhotons_cfi.py | 1 + 4 files changed, 49 insertions(+), 4 deletions(-) diff --git a/PhysicsTools/PatAlgos/plugins/PATElectronSlimmer.cc b/PhysicsTools/PatAlgos/plugins/PATElectronSlimmer.cc index 4125642c49e29..8e19f2d39a48b 100644 --- a/PhysicsTools/PatAlgos/plugins/PATElectronSlimmer.cc +++ b/PhysicsTools/PatAlgos/plugins/PATElectronSlimmer.cc @@ -27,7 +27,8 @@ #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h" #include "DataFormats/PatCandidates/interface/PackedCandidate.h" #include "CommonTools/UtilAlgos/interface/StringCutObjectSelector.h" - +#include "RecoEcal/EgammaCoreTools/interface/EcalClusterLazyTools.h" +#include "FWCore/Utilities/interface/isFinite.h" namespace pat { @@ -48,6 +49,7 @@ namespace pat { edm::EDGetTokenT> pf2pc_; edm::EDGetTokenT pc_; bool linkToPackedPF_; + StringCutObjectSelector saveNonZSClusterShapes_; }; } // namespace @@ -65,7 +67,8 @@ pat::PATElectronSlimmer::PATElectronSlimmer(const edm::ParameterSet & iConfig) : dropShapes_(iConfig.getParameter("dropShapes")), dropExtrapolations_(iConfig.getParameter("dropExtrapolations")), dropClassifications_(iConfig.getParameter("dropClassifications")), - linkToPackedPF_(iConfig.getParameter("linkToPackedPFCandidates")) + linkToPackedPF_(iConfig.getParameter("linkToPackedPFCandidates")), + saveNonZSClusterShapes_(iConfig.getParameter("saveNonZSClusterShapes")) { produces >(); if (linkToPackedPF_) { @@ -73,6 +76,8 @@ pat::PATElectronSlimmer::PATElectronSlimmer(const edm::ParameterSet & iConfig) : pf2pc_ = consumes>(iConfig.getParameter("packedPFCandidates")); pc_ = consumes(iConfig.getParameter("packedPFCandidates")); } + mayConsume(edm::InputTag("reducedEcalRecHitsEB")); + mayConsume(edm::InputTag("reducedEcalRecHitsEE")); } void @@ -91,6 +96,9 @@ pat::PATElectronSlimmer::produce(edm::Event & iEvent, const edm::EventSetup & iS iEvent.getByToken(pf2pc_, pf2pc); iEvent.getByToken(pc_, pc); } + edm::InputTag reducedBarrelRecHitCollection("reducedEcalRecHitsEB"); + edm::InputTag reducedEndcapRecHitCollection("reducedEcalRecHitsEE"); + noZS::EcalClusterLazyTools lazyToolsNoZS(iEvent, iSetup, reducedBarrelRecHitCollection, reducedEndcapRecHitCollection); auto_ptr > out(new vector()); out->reserve(src->size()); @@ -128,7 +136,20 @@ pat::PATElectronSlimmer::produce(edm::Event & iEvent, const edm::EventSetup & iS } else { electron.refToOrig_ = reco::CandidatePtr(pc.id()); } - } + } + if (saveNonZSClusterShapes_(electron)) { + std::vector vCov = lazyToolsNoZS.localCovariances(*( electron.superCluster()->seed())); + float r9 = lazyToolsNoZS.e3x3( *( electron.superCluster()->seed())) / electron.superCluster()->rawEnergy() ; + float sigmaIetaIeta = ( !edm::isNotFinite(vCov[0]) ) ? sqrt(vCov[0]) : 0; + float sigmaIetaIphi = vCov[1]; + float sigmaIphiIphi = ( !edm::isNotFinite(vCov[2]) ) ? sqrt(vCov[2]) : 0; + float e15o55 = lazyToolsNoZS.e1x5( *( electron.superCluster()->seed()) ) / lazyToolsNoZS.e5x5( *( electron.superCluster()->seed()) ); + electron.addUserFloat("sigmaIetaIeta_NoZS", sigmaIetaIeta); + electron.addUserFloat("sigmaIetaIphi_NoZS", sigmaIetaIphi); + electron.addUserFloat("sigmaIphiIphi_NoZS", sigmaIphiIphi); + electron.addUserFloat("r9_NoZS", r9); + electron.addUserFloat("e1x5_over_e5x5_NoZS", e15o55); + } } diff --git a/PhysicsTools/PatAlgos/plugins/PATPhotonSlimmer.cc b/PhysicsTools/PatAlgos/plugins/PATPhotonSlimmer.cc index 321ad05c78934..3e081789d06e2 100644 --- a/PhysicsTools/PatAlgos/plugins/PATPhotonSlimmer.cc +++ b/PhysicsTools/PatAlgos/plugins/PATPhotonSlimmer.cc @@ -20,6 +20,8 @@ #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h" #include "DataFormats/PatCandidates/interface/PackedCandidate.h" #include "CommonTools/UtilAlgos/interface/StringCutObjectSelector.h" +#include "RecoEcal/EgammaCoreTools/interface/EcalClusterLazyTools.h" +#include "FWCore/Utilities/interface/isFinite.h" namespace pat { @@ -39,6 +41,7 @@ namespace pat { edm::EDGetTokenT> pf2pc_; edm::EDGetTokenT pc_; bool linkToPackedPF_; + StringCutObjectSelector saveNonZSClusterShapes_; }; } // namespace @@ -50,7 +53,8 @@ pat::PATPhotonSlimmer::PATPhotonSlimmer(const edm::ParameterSet & iConfig) : dropPreshowerClusters_(iConfig.getParameter("dropPreshowerClusters")), dropSeedCluster_(iConfig.getParameter("dropSeedCluster")), dropRecHits_(iConfig.getParameter("dropRecHits")), - linkToPackedPF_(iConfig.getParameter("linkToPackedPFCandidates")) + linkToPackedPF_(iConfig.getParameter("linkToPackedPFCandidates")), + saveNonZSClusterShapes_(iConfig.getParameter("saveNonZSClusterShapes")) { produces >(); if (linkToPackedPF_) { @@ -58,6 +62,8 @@ pat::PATPhotonSlimmer::PATPhotonSlimmer(const edm::ParameterSet & iConfig) : pf2pc_ = consumes>(iConfig.getParameter("packedPFCandidates")); pc_ = consumes(iConfig.getParameter("packedPFCandidates")); } + mayConsume(edm::InputTag("reducedEcalRecHitsEB")); + mayConsume(edm::InputTag("reducedEcalRecHitsEE")); } void @@ -76,6 +82,9 @@ pat::PATPhotonSlimmer::produce(edm::Event & iEvent, const edm::EventSetup & iSet iEvent.getByToken(pf2pc_, pf2pc); iEvent.getByToken(pc_, pc); } + edm::InputTag reducedBarrelRecHitCollection("reducedEcalRecHitsEB"); + edm::InputTag reducedEndcapRecHitCollection("reducedEcalRecHitsEE"); + noZS::EcalClusterLazyTools lazyToolsNoZS(iEvent, iSetup, reducedBarrelRecHitCollection, reducedEndcapRecHitCollection); auto_ptr > out(new vector()); out->reserve(src->size()); @@ -108,6 +117,19 @@ pat::PATPhotonSlimmer::produce(edm::Event & iEvent, const edm::EventSetup & iSet photon.refToOrig_ = reco::CandidatePtr(pc.id()); } } + if (saveNonZSClusterShapes_(photon)) { + std::vector vCov = lazyToolsNoZS.localCovariances(*( photon.superCluster()->seed())); + float r9 = lazyToolsNoZS.e3x3( *( photon.superCluster()->seed())) / photon.superCluster()->rawEnergy() ; + float sigmaIetaIeta = ( !edm::isNotFinite(vCov[0]) ) ? sqrt(vCov[0]) : 0; + float sigmaIetaIphi = vCov[1]; + float sigmaIphiIphi = ( !edm::isNotFinite(vCov[2]) ) ? sqrt(vCov[2]) : 0; + float e15o55 = lazyToolsNoZS.e1x5( *( photon.superCluster()->seed()) ) / lazyToolsNoZS.e5x5( *( photon.superCluster()->seed()) ); + photon.addUserFloat("sigmaIetaIeta_NoZS", sigmaIetaIeta); + photon.addUserFloat("sigmaIetaIphi_NoZS", sigmaIetaIphi); + photon.addUserFloat("sigmaIphiIphi_NoZS", sigmaIphiIphi); + photon.addUserFloat("r9_NoZS", r9); + photon.addUserFloat("e1x5_over_e5x5_NoZS", e15o55); + } } iEvent.put(out); diff --git a/PhysicsTools/PatAlgos/python/slimming/slimmedElectrons_cfi.py b/PhysicsTools/PatAlgos/python/slimming/slimmedElectrons_cfi.py index 286e2978ec782..687f6640b3c20 100644 --- a/PhysicsTools/PatAlgos/python/slimming/slimmedElectrons_cfi.py +++ b/PhysicsTools/PatAlgos/python/slimming/slimmedElectrons_cfi.py @@ -16,5 +16,6 @@ linkToPackedPFCandidates = cms.bool(True), recoToPFMap = cms.InputTag("particleBasedIsolation","gedGsfElectrons"), packedPFCandidates = cms.InputTag("packedPFCandidates"), + saveNonZSClusterShapes = cms.string("pt > 5"), # save additional user floats: (sigmaIetaIeta,sigmaIphiIphi,sigmaIetaIphi,r9,e1x5_over_e5x5)_NoZS ) diff --git a/PhysicsTools/PatAlgos/python/slimming/slimmedPhotons_cfi.py b/PhysicsTools/PatAlgos/python/slimming/slimmedPhotons_cfi.py index 1e72a4a4a26bf..895fcb647b882 100644 --- a/PhysicsTools/PatAlgos/python/slimming/slimmedPhotons_cfi.py +++ b/PhysicsTools/PatAlgos/python/slimming/slimmedPhotons_cfi.py @@ -10,4 +10,5 @@ linkToPackedPFCandidates = cms.bool(True), recoToPFMap = cms.InputTag("particleBasedIsolation","gedPhotons"), packedPFCandidates = cms.InputTag("packedPFCandidates"), + saveNonZSClusterShapes = cms.string("(r9()>0.8 || chargedHadronIso()<20 || chargedHadronIso()<0.3*pt())"), # save additional user floats: (sigmaIetaIeta,sigmaIphiIphi,sigmaIetaIphi,r9,e1x5_over_e5x5)_NoZS )