From 4d8e15f9842756dd138a7b4a6670150ba78721d9 Mon Sep 17 00:00:00 2001 From: Matthias Ulrich Mozer Date: Wed, 15 Oct 2008 07:11:06 +0000 Subject: [PATCH] moved isolation prudcers that will run during RECO from EgammaAnalysis/EgammaIsolationProducers --- yaml --- svn_rev: 53413 current_ref: refs/heads/CMSSW_7_2_X current_commit: b9278cf6ca06275d9fe652a9cdf87460ad156162 head_branch: refs/heads/CMSSW_7_2_X migrated_from: v3 --- [refs] | 2 +- .../EgammaEcalRecHitIsolationProducer.cc | 149 ++++++++++++++++++ .../EgammaEcalRecHitIsolationProducer.h | 67 ++++++++ .../EgammaElectronTkIsolationProducer.cc | 80 ++++++++++ .../EgammaElectronTkIsolationProducer.h | 43 +++++ .../EgammaElectronTkNumIsolationProducer.cc | 81 ++++++++++ .../EgammaElectronTkNumIsolationProducer.h | 47 ++++++ .../EgammaPhotonTkIsolationProducer.cc | 89 +++++++++++ .../plugins/EgammaPhotonTkIsolationProducer.h | 43 +++++ .../EgammaPhotonTkNumIsolationProducer.cc | 90 +++++++++++ .../EgammaPhotonTkNumIsolationProducer.h | 43 +++++ .../plugins/EgammaTowerIsolationProducer.cc | 86 ++++++++++ .../plugins/EgammaTowerIsolationProducer.h | 56 +++++++ 13 files changed, 875 insertions(+), 1 deletion(-) create mode 100644 trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalRecHitIsolationProducer.cc create mode 100644 trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalRecHitIsolationProducer.h create mode 100644 trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkIsolationProducer.cc create mode 100644 trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkIsolationProducer.h create mode 100644 trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkNumIsolationProducer.cc create mode 100644 trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkNumIsolationProducer.h create mode 100755 trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkIsolationProducer.cc create mode 100644 trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkIsolationProducer.h create mode 100755 trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkNumIsolationProducer.cc create mode 100644 trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkNumIsolationProducer.h create mode 100755 trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTowerIsolationProducer.cc create mode 100755 trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTowerIsolationProducer.h diff --git a/[refs] b/[refs] index 23bd62688bfff..c80a36bc5c344 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/CMSSW_7_2_X: 9ee4ea890a4db58ba508f09381f883b5cef602f0 +refs/heads/CMSSW_7_2_X: b9278cf6ca06275d9fe652a9cdf87460ad156162 diff --git a/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalRecHitIsolationProducer.cc b/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalRecHitIsolationProducer.cc new file mode 100644 index 0000000000000..55681af53e12d --- /dev/null +++ b/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalRecHitIsolationProducer.cc @@ -0,0 +1,149 @@ +//***************************************************************************** +// File: EgammaEcalRecHitIsolationProducer.cc +// ---------------------------------------------------------------------------- +// OrigAuth: Matthias Mozer +// Institute: IIHE-VUB +//============================================================================= +//***************************************************************************** + + +#include "RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalRecHitIsolationProducer.h" + +// Framework +#include "FWCore/Framework/interface/EventSetup.h" +#include "DataFormats/Common/interface/Handle.h" +#include "FWCore/Framework/interface/ESHandle.h" + +#include "DataFormats/Candidate/interface/Candidate.h" +#include "DataFormats/Candidate/interface/CandAssociation.h" +#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" +#include "DataFormats/EgammaReco/interface/SuperCluster.h" +#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" + +#include "DataFormats/DetId/interface/DetId.h" +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" + +#include "Geometry/Records/interface/CaloGeometryRecord.h" + +EgammaEcalRecHitIsolationProducer::EgammaEcalRecHitIsolationProducer(const edm::ParameterSet& config) : conf_(config) +{ + // use configuration file to setup input/output collection names + //inputs + emObjectProducer_ = conf_.getParameter("emObjectProducer"); + ecalBarrelRecHitProducer_ = conf_.getParameter("ecalBarrelRecHitProducer"); + ecalBarrelRecHitCollection_ = conf_.getParameter("ecalBarrelRecHitCollection"); + ecalEndcapRecHitProducer_ = conf_.getParameter("ecalEndcapRecHitProducer"); + ecalEndcapRecHitCollection_ = conf_.getParameter("ecalEndcapRecHitCollection"); + + //vetos + egIsoPtMinBarrel_ = conf_.getParameter("etMinBarrel"); + egIsoEMinBarrel_ = conf_.getParameter("eMinBarrel"); + egIsoPtMinEndcap_ = conf_.getParameter("etMinEndcap"); + egIsoEMinEndcap_ = conf_.getParameter("eMinEndcap"); + egIsoConeSizeInBarrel_ = conf_.getParameter("intRadiusBarrel"); + egIsoConeSizeInEndcap_ = conf_.getParameter("intRadiusEndcap"); + egIsoConeSizeOut_ = conf_.getParameter("extRadius"); + egIsoJurassicWidth_ = conf_.getParameter("jurassicWidth"); + + + // options + useIsolEt_ = conf_.getParameter("useIsolEt"); + tryBoth_ = conf_.getParameter("tryBoth"); + subtract_ = conf_.getParameter("subtract"); + + //register your products + produces < edm::ValueMap >(); +} + + +EgammaEcalRecHitIsolationProducer::~EgammaEcalRecHitIsolationProducer(){} + + +// +// member functions +// + +// ------------ method called to produce the data ------------ +void +EgammaEcalRecHitIsolationProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) +{ + + + // Get the filtered objects + edm::Handle< edm::View > emObjectHandle; + iEvent.getByLabel(emObjectProducer_,emObjectHandle); + + // Next get Ecal hits barrel + edm::Handle ecalBarrelRecHitHandle; //EcalRecHitCollection is a typedef to + iEvent.getByLabel(ecalBarrelRecHitProducer_.label(),ecalBarrelRecHitCollection_.label(), ecalBarrelRecHitHandle); + + // Next get Ecal hits endcap + edm::Handle ecalEndcapRecHitHandle; + iEvent.getByLabel(ecalEndcapRecHitProducer_.label(), ecalEndcapRecHitCollection_.label(),ecalEndcapRecHitHandle); + + //create the meta hit collections inorder that we can pass them into the isolation objects + + EcalRecHitMetaCollection ecalBarrelHits(*ecalBarrelRecHitHandle); + EcalRecHitMetaCollection ecalEndcapHits(*ecalEndcapRecHitHandle); + + //Get Calo Geometry + edm::ESHandle pG; + iSetup.get().get(pG); + const CaloGeometry* caloGeom = pG.product(); + + //reco::CandViewDoubleAssociations* isoMap = new reco::CandViewDoubleAssociations( reco::CandidateBaseRefProd( emObjectHandle ) ); + std::auto_ptr > isoMap(new edm::ValueMap()); + edm::ValueMap::Filler filler(*isoMap); + std::vector retV(emObjectHandle->size(),0); + + + EgammaRecHitIsolation ecalBarrelIsol(egIsoConeSizeOut_,egIsoConeSizeInBarrel_,egIsoJurassicWidth_,egIsoPtMinBarrel_,egIsoEMinBarrel_,caloGeom,&ecalBarrelHits,DetId::Ecal); + EgammaRecHitIsolation ecalEndcapIsol(egIsoConeSizeOut_,egIsoConeSizeInEndcap_,egIsoJurassicWidth_,egIsoPtMinEndcap_,egIsoEMinEndcap_,caloGeom,&ecalEndcapHits,DetId::Ecal); + + + for( size_t i = 0 ; i < emObjectHandle->size(); ++i) { + + //i need to know if its in the barrel/endcap so I get the supercluster handle to find out the detector eta + //this might not be the best way, are we guaranteed that eta<1.5 is barrel + //this can be safely replaced by another method which determines where the emobject is + //then we either get the isolation Et or isolation Energy depending on user selection + double isoValue =0.; + + reco::SuperClusterRef superClus = emObjectHandle->at(i).get(); + + if(tryBoth_){ //barrel + endcap + if(useIsolEt_) isoValue = ecalBarrelIsol.getEtSum(&(emObjectHandle->at(i))) + ecalEndcapIsol.getEtSum(&(emObjectHandle->at(i))); + else isoValue = ecalBarrelIsol.getEnergySum(&(emObjectHandle->at(i))) + ecalEndcapIsol.getEnergySum(&(emObjectHandle->at(i))); + } + else if( fabs(superClus->eta())<1.479) { //barrel + if(useIsolEt_) isoValue = ecalBarrelIsol.getEtSum(&(emObjectHandle->at(i))); + else isoValue = ecalBarrelIsol.getEnergySum(&(emObjectHandle->at(i))); + } + else{ //endcap + if(useIsolEt_) isoValue = ecalEndcapIsol.getEtSum(&(emObjectHandle->at(i))); + else isoValue = ecalEndcapIsol.getEnergySum(&(emObjectHandle->at(i))); + } + + //we subtract off the electron energy here as well + double subtractVal=0; + + if(useIsolEt_) subtractVal = superClus.get()->rawEnergy()*sin(2*atan(exp(-superClus.get()->eta()))); + else subtractVal = superClus.get()->rawEnergy(); + + if(subtract_) isoValue-= subtractVal; + + retV[i]=isoValue; + //all done, isolation is now in the map + + }//end of loop over em objects + + filler.insert(emObjectHandle,retV.begin(),retV.end()); + filler.fill(); + + //std::auto_ptr isolMap(isoMap); + iEvent.put(isoMap); + +} + +//define this as a plug-in +//DEFINE_FWK_MODULE(EgammaRecHitIsolation,Producer); diff --git a/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalRecHitIsolationProducer.h b/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalRecHitIsolationProducer.h new file mode 100644 index 0000000000000..12ce53fee8c17 --- /dev/null +++ b/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalRecHitIsolationProducer.h @@ -0,0 +1,67 @@ +#ifndef EgammaIsolationProducers_EgammaEcalRecHitIsolationProducer_h +#define EgammaIsolationProducers_EgammaEcalRecHitIsolationProducer_h + +//***************************************************************************** +// File: EgammaRecHitIsolationProducer.h +// ---------------------------------------------------------------------------- +// OrigAuth: Matthias Mozer, adapted from EgammaHcalIsolationProducer by S. Harper +// Institute: IIHE-VUB, RAL +//============================================================================= +//***************************************************************************** + +// -*- C++ -*- +// + + +// system include files +#include + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EDProducer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaRecHitIsolation.h" + +// +// class declaration +// + +class EgammaEcalRecHitIsolationProducer : public edm::EDProducer { + public: + explicit EgammaEcalRecHitIsolationProducer(const edm::ParameterSet&); + ~EgammaEcalRecHitIsolationProducer(); + + + virtual void produce(edm::Event&, const edm::EventSetup&); + private: + // ----------member data --------------------------- + + edm::InputTag emObjectProducer_; + edm::InputTag ecalBarrelRecHitProducer_; + edm::InputTag ecalBarrelRecHitCollection_; + edm::InputTag ecalEndcapRecHitProducer_; + edm::InputTag ecalEndcapRecHitCollection_; + + double egIsoPtMinBarrel_; //minimum Et noise cut + double egIsoEMinBarrel_; //minimum E noise cut + double egIsoPtMinEndcap_; //minimum Et noise cut + double egIsoEMinEndcap_; //minimum E noise cut + double egIsoConeSizeOut_; //outer cone size + double egIsoConeSizeInBarrel_; //inner cone size + double egIsoConeSizeInEndcap_; //inner cone size + double egIsoJurassicWidth_ ; // exclusion strip width for jurassic veto + + bool useIsolEt_; //switch for isolEt rather than isolE + bool tryBoth_ ; // use rechits from barrel + endcap + bool subtract_ ; // subtract SC energy (allows veto cone of zero size) + + edm::ParameterSet conf_; + +}; + +#endif diff --git a/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkIsolationProducer.cc b/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkIsolationProducer.cc new file mode 100644 index 0000000000000..5e27fffe067d9 --- /dev/null +++ b/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkIsolationProducer.cc @@ -0,0 +1,80 @@ +//***************************************************************************** +// File: EgammaElectronTkIsolationProducer.cc +// ---------------------------------------------------------------------------- +// OrigAuth: Matthias Mozer +// Institute: IIHE-VUB +//============================================================================= +//***************************************************************************** + + +// Framework +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "DataFormats/Common/interface/Handle.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/Utilities/interface/Exception.h" +#include "DataFormats/BeamSpot/interface/BeamSpot.h" + +#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" +#include "DataFormats/Candidate/interface/CandAssociation.h" + + +#include "RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkIsolationProducer.h" +#include "RecoEgamma/EgammaIsolationAlgos/interface/ElectronTkIsolation.h" + +EgammaElectronTkIsolationProducer::EgammaElectronTkIsolationProducer(const edm::ParameterSet& config) : conf_(config) +{ + // use configuration file to setup input/output collection names + electronProducer_ = conf_.getParameter("electronProducer"); + + trackProducer_ = conf_.getParameter("trackProducer"); + beamspotProducer_ = conf_.getParameter("BeamspotProducer"); + + ptMin_ = conf_.getParameter("ptMin"); + intRadius_ = conf_.getParameter("intRadius"); + extRadius_ = conf_.getParameter("extRadius"); + maxVtxDist_ = conf_.getParameter("maxVtxDist"); + drb_ = conf_.getParameter("maxVtxDistXY"); + + //register your products + produces < edm::ValueMap >(); + +} + +EgammaElectronTkIsolationProducer::~EgammaElectronTkIsolationProducer(){} + + + +void EgammaElectronTkIsolationProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) +{ + // Get the filtered objects + edm::Handle< reco::PixelMatchGsfElectronCollection> electronHandle; + iEvent.getByLabel(electronProducer_,electronHandle); + + //get the tracks + edm::Handle tracks; + iEvent.getByLabel(trackProducer_,tracks); + const reco::TrackCollection* trackCollection = tracks.product(); + + //prepare product + std::auto_ptr > isoMap(new edm::ValueMap()); + edm::ValueMap::Filler filler(*isoMap); + std::vector retV(electronHandle->size(),0); + + edm::Handle beamSpotH; + iEvent.getByLabel(beamspotProducer_,beamSpotH); + reco::TrackBase::Point beamspot = beamSpotH->position(); + + ElectronTkIsolation myTkIsolation (extRadius_,intRadius_,ptMin_,maxVtxDist_,drb_,trackCollection,beamspot) ; + + for(unsigned int i = 0 ; i < electronHandle->size(); ++i ){ + double isoValue = myTkIsolation.getPtTracks(&(electronHandle->at(i))); + retV[i] = isoValue; + } + + //fill and insert valuemap + filler.insert(electronHandle,retV.begin(),retV.end()); + filler.fill(); + iEvent.put(isoMap); +} diff --git a/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkIsolationProducer.h b/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkIsolationProducer.h new file mode 100644 index 0000000000000..5156378e2cbc1 --- /dev/null +++ b/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkIsolationProducer.h @@ -0,0 +1,43 @@ +#ifndef EgammaIsolationProducers_EgammaElectronTkIsolationProducer_h +#define EgammaIsolationProducers_EgammaElectronTkIsolationProducer_h + +//***************************************************************************** +// File: EgammaElectronTkIsolationProducer.h +// ---------------------------------------------------------------------------- +// OrigAuth: Matthias Mozer +// Institute: IIHE-VUB +//============================================================================= +//***************************************************************************** + +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EDProducer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +class EgammaElectronTkIsolationProducer : public edm::EDProducer { + public: + explicit EgammaElectronTkIsolationProducer(const edm::ParameterSet&); + ~EgammaElectronTkIsolationProducer(); + + virtual void produce(edm::Event&, const edm::EventSetup&); + + private: + edm::InputTag electronProducer_; + edm::InputTag trackProducer_; + edm::InputTag beamspotProducer_; + + double ptMin_; + double intRadius_; + double extRadius_; + double maxVtxDist_; + double drb_; + + edm::ParameterSet conf_; + +}; + + +#endif diff --git a/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkNumIsolationProducer.cc b/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkNumIsolationProducer.cc new file mode 100644 index 0000000000000..cd2c3b5db0ba3 --- /dev/null +++ b/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkNumIsolationProducer.cc @@ -0,0 +1,81 @@ +//***************************************************************************** +// File: EgammaElectronTkNumIsolationProducer.cc +// ---------------------------------------------------------------------------- +// OrigAuth: Matthias Mozer +// Institute: IIHE-VUB +//============================================================================= +//***************************************************************************** + + +// Framework +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "DataFormats/Common/interface/Handle.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/Utilities/interface/Exception.h" + +#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" +#include "DataFormats/Candidate/interface/CandAssociation.h" +#include "DataFormats/BeamSpot/interface/BeamSpot.h" + + +#include "RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkNumIsolationProducer.h" +#include "RecoEgamma/EgammaIsolationAlgos/interface/ElectronTkIsolation.h" + +EgammaElectronTkNumIsolationProducer::EgammaElectronTkNumIsolationProducer(const edm::ParameterSet& config) : conf_(config) +{ + // use configuration file to setup input/output collection names + electronProducer_ = conf_.getParameter("electronProducer"); + + trackProducer_ = conf_.getParameter("trackProducer"); + beamspotProducer_ = conf_.getParameter("BeamspotProducer"); + + ptMin_ = conf_.getParameter("ptMin"); + intRadius_ = conf_.getParameter("intRadius"); + extRadius_ = conf_.getParameter("extRadius"); + maxVtxDist_ = conf_.getParameter("maxVtxDist"); + drb_ = conf_.getParameter("maxVtxDistXY"); + + //register your products + produces < edm::ValueMap >(); + +} + +EgammaElectronTkNumIsolationProducer::~EgammaElectronTkNumIsolationProducer(){} + + + +void EgammaElectronTkNumIsolationProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) +{ + // Get the filtered objects + edm::Handle< reco::PixelMatchGsfElectronCollection> electronHandle; + iEvent.getByLabel(electronProducer_,electronHandle); + + //get the tracks + edm::Handle tracks; + iEvent.getByLabel(trackProducer_,tracks); + const reco::TrackCollection* trackCollection = tracks.product(); + + //prepare product + std::auto_ptr > isoMap(new edm::ValueMap()); + edm::ValueMap::Filler filler(*isoMap); + std::vector retV(electronHandle->size(),0); + + //get beamspot + edm::Handle beamSpotH; + iEvent.getByLabel(beamspotProducer_,beamSpotH); + reco::TrackBase::Point beamspot = beamSpotH->position(); + + ElectronTkIsolation myTkIsolation (extRadius_,intRadius_,ptMin_,maxVtxDist_,drb_,trackCollection,beamspot) ; + + for(unsigned int i = 0 ; i < electronHandle->size(); ++i ){ + int isoValue = myTkIsolation.getNumberTracks(&(electronHandle->at(i))); + retV[i] = isoValue; + } + + //fill and insert valuemap + filler.insert(electronHandle,retV.begin(),retV.end()); + filler.fill(); + iEvent.put(isoMap); +} diff --git a/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkNumIsolationProducer.h b/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkNumIsolationProducer.h new file mode 100644 index 0000000000000..4211b019fa5a7 --- /dev/null +++ b/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaElectronTkNumIsolationProducer.h @@ -0,0 +1,47 @@ +#ifndef EgammaIsolationProducers_EgammaElectronTkNumIsolationProducer_h +#define EgammaIsolationProducers_EgammaElectronTkNumIsolationProducer_h + +//***************************************************************************** +// File: EgammaElectronTkNumIsolationProducer.h +// ---------------------------------------------------------------------------- +// OrigAuth: Matthias Mozer +// Institute: IIHE-VUB +//============================================================================= +//***************************************************************************** + +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EDProducer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + + + + +class EgammaElectronTkNumIsolationProducer : public edm::EDProducer { + + public: + explicit EgammaElectronTkNumIsolationProducer(const edm::ParameterSet&); + ~EgammaElectronTkNumIsolationProducer(); + + virtual void produce(edm::Event&, const edm::EventSetup&); + + private: + edm::InputTag electronProducer_; + edm::InputTag trackProducer_; + edm::InputTag beamspotProducer_; + + double ptMin_; + double intRadius_; + double extRadius_; + double maxVtxDist_; + double drb_; + + edm::ParameterSet conf_; + +}; + + +#endif diff --git a/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkIsolationProducer.cc b/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkIsolationProducer.cc new file mode 100755 index 0000000000000..9c646f1dbc42f --- /dev/null +++ b/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkIsolationProducer.cc @@ -0,0 +1,89 @@ +//***************************************************************************** +// File: EgammaPhotonTkIsolationProducer.cc +// ---------------------------------------------------------------------------- +// OrigAuth: Matthias Mozer +// Institute: IIHE-VUB +//============================================================================= +//***************************************************************************** + + +#include "RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkIsolationProducer.h" + +// Framework +#include "DataFormats/Common/interface/Handle.h" + +#include "DataFormats/Candidate/interface/Candidate.h" +#include "DataFormats/Candidate/interface/CandAssociation.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" +#include "DataFormats/EgammaReco/interface/SuperCluster.h" +#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" +#include "DataFormats/BeamSpot/interface/BeamSpot.h" + +#include "RecoEgamma/EgammaIsolationAlgos/interface/PhotonTkIsolation.h" + + +EgammaPhotonTkIsolationProducer::EgammaPhotonTkIsolationProducer(const edm::ParameterSet& config) : conf_(config) +{ + // use configuration file to setup input/output collection names + photonProducer_ = conf_.getParameter("photonProducer"); + + trackProducer_ = conf_.getParameter("trackProducer"); + beamspotProducer_ = conf_.getParameter("BeamspotProducer"); + + ptMin_ = conf_.getParameter("ptMin"); + intRadius_ = conf_.getParameter("intRadius"); + extRadius_ = conf_.getParameter("extRadius"); + maxVtxDist_ = conf_.getParameter("maxVtxDist"); + drb_ = conf_.getParameter("maxVtxDistXY"); + + //register your products + produces < edm::ValueMap >(); +} + + +EgammaPhotonTkIsolationProducer::~EgammaPhotonTkIsolationProducer(){} + + +// +// member functions +// + +// ------------ method called to produce the data ------------ +void +EgammaPhotonTkIsolationProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) +{ + + // Get the filtered objects + edm::Handle< edm::View > photonHandle; + iEvent.getByLabel(photonProducer_,photonHandle); + + //get the tracks + edm::Handle tracks; + iEvent.getByLabel(trackProducer_,tracks); + const reco::TrackCollection* trackCollection = tracks.product(); + + edm::Handle beamSpotH; + iEvent.getByLabel(beamspotProducer_,beamSpotH); + reco::TrackBase::Point beamspot = beamSpotH->position(); + + //prepare product + std::auto_ptr > isoMap(new edm::ValueMap()); + edm::ValueMap::Filler filler(*isoMap); + std::vector retV(photonHandle->size(),0); + + PhotonTkIsolation myTkIsolation (extRadius_,intRadius_,ptMin_,maxVtxDist_,drb_,trackCollection,beamspot) ; + + for(unsigned int i = 0 ; i < photonHandle->size(); ++i ){ + double isoValue = myTkIsolation.getPtTracks(&(photonHandle->at(i))); + retV[i] = isoValue; + } + + //fill and insert valuemap + filler.insert(photonHandle,retV.begin(),retV.end()); + filler.fill(); + iEvent.put(isoMap); + +} + + diff --git a/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkIsolationProducer.h b/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkIsolationProducer.h new file mode 100644 index 0000000000000..b7f0bfa98aa52 --- /dev/null +++ b/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkIsolationProducer.h @@ -0,0 +1,43 @@ +#ifndef EgammaIsolationProducers_EgammaPhotonTkIsolationProducer_h +#define EgammaIsolationProducers_EgammaPhotonTkIsolationProducer_h + +//***************************************************************************** +// File: EgammaPhotonTkIsolationProducer.h +// ---------------------------------------------------------------------------- +// OrigAuth: Matthias Mozer +// Institute: IIHE-VUB +//============================================================================= +//***************************************************************************** + +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EDProducer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +class EgammaPhotonTkIsolationProducer : public edm::EDProducer { + public: + explicit EgammaPhotonTkIsolationProducer(const edm::ParameterSet&); + ~EgammaPhotonTkIsolationProducer(); + + virtual void produce(edm::Event&, const edm::EventSetup&); + + private: + edm::InputTag photonProducer_; + edm::InputTag trackProducer_; + edm::InputTag beamspotProducer_; + + double ptMin_; + double intRadius_; + double extRadius_; + double maxVtxDist_; + double drb_; + + edm::ParameterSet conf_; + +}; + + +#endif diff --git a/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkNumIsolationProducer.cc b/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkNumIsolationProducer.cc new file mode 100755 index 0000000000000..c96f7f86547e8 --- /dev/null +++ b/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkNumIsolationProducer.cc @@ -0,0 +1,90 @@ +//***************************************************************************** +// File: EgammaPhotonTkNumIsolationProducer.cc +// ---------------------------------------------------------------------------- +// OrigAuth: Matthias Mozer +// Institute: IIHE-VUB +//============================================================================= +//***************************************************************************** + + +#include "RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkNumIsolationProducer.h" + +// Framework +#include "DataFormats/Common/interface/Handle.h" + +#include "DataFormats/Candidate/interface/Candidate.h" +#include "DataFormats/Candidate/interface/CandAssociation.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "DataFormats/BeamSpot/interface/BeamSpot.h" + +#include "RecoEgamma/EgammaIsolationAlgos/interface/PhotonTkIsolation.h" + + +EgammaPhotonTkNumIsolationProducer::EgammaPhotonTkNumIsolationProducer(const edm::ParameterSet& config) : conf_(config) +{ + // use configuration file to setup input/output collection names + photonProducer_ = conf_.getParameter("photonProducer"); + + trackProducer_ = conf_.getParameter("trackProducer"); + beamspotProducer_ = conf_.getParameter("BeamspotProducer"); + + ptMin_ = conf_.getParameter("ptMin"); + intRadius_ = conf_.getParameter("intRadius"); + extRadius_ = conf_.getParameter("extRadius"); + maxVtxDist_ = conf_.getParameter("maxVtxDist"); + drb_ = conf_.getParameter("maxVtxDistXY"); + + //register your products + produces < edm::ValueMap >(); +} + + +EgammaPhotonTkNumIsolationProducer::~EgammaPhotonTkNumIsolationProducer(){} + + +// +// member functions +// + +// ------------ method called to produce the data ------------ +void +EgammaPhotonTkNumIsolationProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) +{ + + // Get the filtered objects + edm::Handle< edm::View > photonHandle; + iEvent.getByLabel(photonProducer_,photonHandle); + + //get the tracks + edm::Handle tracks; + iEvent.getByLabel(trackProducer_,tracks); + const reco::TrackCollection* trackCollection = tracks.product(); + + //get beamspot + edm::Handle beamSpotH; + iEvent.getByLabel(beamspotProducer_,beamSpotH); + reco::TrackBase::Point beamspot = beamSpotH->position(); + + //prepare product + std::auto_ptr > isoMap(new edm::ValueMap()); + edm::ValueMap::Filler filler(*isoMap); + std::vector retV(photonHandle->size(),0); + + PhotonTkIsolation myTkIsolation(extRadius_,intRadius_,ptMin_,maxVtxDist_,drb_,trackCollection,beamspot) ; + + for(unsigned int i = 0 ; i < photonHandle->size(); ++i ){ + int isoValue = myTkIsolation.getNumberTracks(&(photonHandle->at(i))); + retV[i] = isoValue; + } + + + + //fill and insert valuemap + filler.insert(photonHandle,retV.begin(),retV.end()); + filler.fill(); + iEvent.put(isoMap); + + +} + + diff --git a/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkNumIsolationProducer.h b/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkNumIsolationProducer.h new file mode 100644 index 0000000000000..8d6af41963174 --- /dev/null +++ b/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaPhotonTkNumIsolationProducer.h @@ -0,0 +1,43 @@ +#ifndef EgammaIsolationProducers_EgammaPhotonTkNumIsolationProducer_h +#define EgammaIsolationProducers_EgammaPhotonTkNumIsolationProducer_h + +//***************************************************************************** +// File: EgammaPhotonTkNumIsolationProducer.h +// ---------------------------------------------------------------------------- +// OrigAuth: Matthias Mozer +// Institute: IIHE-VUB +//============================================================================= +//***************************************************************************** + +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EDProducer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +class EgammaPhotonTkNumIsolationProducer : public edm::EDProducer { + public: + explicit EgammaPhotonTkNumIsolationProducer(const edm::ParameterSet&); + ~EgammaPhotonTkNumIsolationProducer(); + + virtual void produce(edm::Event&, const edm::EventSetup&); + + private: + edm::InputTag photonProducer_; + edm::InputTag trackProducer_; + edm::InputTag beamspotProducer_; + + double ptMin_; + double intRadius_; + double extRadius_; + double maxVtxDist_; + double drb_; + + edm::ParameterSet conf_; + +}; + + +#endif diff --git a/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTowerIsolationProducer.cc b/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTowerIsolationProducer.cc new file mode 100755 index 0000000000000..0e14fe691d3ed --- /dev/null +++ b/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTowerIsolationProducer.cc @@ -0,0 +1,86 @@ +//***************************************************************************** +// File: EgammaTowerIsolationProducer.cc +// ---------------------------------------------------------------------------- +// OrigAuth: Matthias Mozer +// Institute: IIHE-VUB +//============================================================================= +//***************************************************************************** + + +#include "RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTowerIsolationProducer.h" + +// Framework +#include "DataFormats/Common/interface/Handle.h" + +#include "DataFormats/Candidate/interface/Candidate.h" +#include "DataFormats/Candidate/interface/CandAssociation.h" +#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" +#include "DataFormats/EgammaReco/interface/SuperCluster.h" +#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" + +#include "DataFormats/CaloTowers/interface/CaloTowerCollection.h" + + +EgammaTowerIsolationProducer::EgammaTowerIsolationProducer(const edm::ParameterSet& config) : conf_(config) +{ + // use configuration file to setup input/output collection names + emObjectProducer_ = conf_.getParameter("emObjectProducer"); + + towerProducer_ = conf_.getParameter("towerProducer"); + + egHcalIsoPtMin_ = conf_.getParameter("etMin"); + egHcalIsoConeSizeIn_ = conf_.getParameter("intRadius"); + egHcalIsoConeSizeOut_ = conf_.getParameter("extRadius"); + egHcalDepth_ = conf_.getParameter("Depth"); + + + //register your products + produces < edm::ValueMap >(); +} + + +EgammaTowerIsolationProducer::~EgammaTowerIsolationProducer(){} + + +// +// member functions +// + +// ------------ method called to produce the data ------------ +void +EgammaTowerIsolationProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) +{ + + // Get the filtered objects + edm::Handle< edm::View > emObjectHandle; + iEvent.getByLabel(emObjectProducer_,emObjectHandle); + + // Get the barrel hcal hits + edm::Handle towerHandle; + iEvent.getByLabel(towerProducer_, towerHandle); + const CaloTowerCollection* towers = towerHandle.product(); + + std::auto_ptr > isoMap(new edm::ValueMap()); + edm::ValueMap::Filler filler(*isoMap); + std::vector retV(emObjectHandle->size(),0); + + EgammaTowerIsolation myHadIsolation(egHcalIsoConeSizeOut_, + egHcalIsoConeSizeIn_, + egHcalIsoPtMin_, + egHcalDepth_, + towers) ; + + + for( size_t i = 0 ; i < emObjectHandle->size(); ++i) { + double isoValue = myHadIsolation.getTowerEtSum(&(emObjectHandle->at(i))); + retV[i]=isoValue; + } + + filler.insert(emObjectHandle,retV.begin(),retV.end()); + filler.fill(); + iEvent.put(isoMap); + +} + +//define this as a plug-in +//DEFINE_FWK_MODULE(EgammaTowerIsolationProducer); diff --git a/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTowerIsolationProducer.h b/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTowerIsolationProducer.h new file mode 100755 index 0000000000000..9806fba181e37 --- /dev/null +++ b/trunk/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaTowerIsolationProducer.h @@ -0,0 +1,56 @@ +#ifndef EgammaIsolationProducers_EgammaTowerIsolationProducer_h +#define EgammaIsolationProducers_EgammaTowerIsolationProducer_h + +//***************************************************************************** +// File: EgammaTowerIsolationProducer.h +// ---------------------------------------------------------------------------- +// OrigAuth: Matthias Mozer +// Institute: IIHE-VUB +//============================================================================= +//***************************************************************************** + +// -*- C++ -*- +// + + +// system include files +#include + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/EDProducer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaTowerIsolation.h" + +// +// class declaration +// + +class EgammaTowerIsolationProducer : public edm::EDProducer { + public: + explicit EgammaTowerIsolationProducer(const edm::ParameterSet&); + ~EgammaTowerIsolationProducer(); + + + virtual void produce(edm::Event&, const edm::EventSetup&); + private: + // ----------member data --------------------------- + + edm::InputTag emObjectProducer_; + edm::InputTag towerProducer_; + + double egHcalIsoPtMin_; + double egHcalIsoConeSizeOut_; + double egHcalIsoConeSizeIn_; + signed int egHcalDepth_; + + edm::ParameterSet conf_; + +}; + +#endif