![]() |
![]() |
00001 //***************************************************************************** 00002 // File: EgammaTowerIsolationProducer.cc 00003 // ---------------------------------------------------------------------------- 00004 // OrigAuth: Matthias Mozer 00005 // Institute: IIHE-VUB 00006 //============================================================================= 00007 //***************************************************************************** 00008 00009 00010 #include "EgammaAnalysis/EgammaIsolationProducers/interface/EgammaTowerIsolationProducer.h" 00011 00012 // Framework 00013 #include "DataFormats/Common/interface/Handle.h" 00014 00015 #include "DataFormats/Candidate/interface/Candidate.h" 00016 #include "DataFormats/Candidate/interface/CandAssociation.h" 00017 #include "DataFormats/RecoCandidate/interface/RecoCandidate.h" 00018 #include "DataFormats/EgammaReco/interface/SuperCluster.h" 00019 #include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" 00020 00021 #include "DataFormats/CaloTowers/interface/CaloTowerCollection.h" 00022 00023 00024 EgammaTowerIsolationProducer::EgammaTowerIsolationProducer(const edm::ParameterSet& config) : conf_(config) 00025 { 00026 // use configuration file to setup input/output collection names 00027 emObjectProducer_ = conf_.getParameter<edm::InputTag>("emObjectProducer"); 00028 00029 towerProducer_ = conf_.getParameter<edm::InputTag>("towerProducer"); 00030 00031 egHcalIsoPtMin_ = conf_.getParameter<double>("etMin"); 00032 egHcalIsoConeSizeIn_ = conf_.getParameter<double>("intRadius"); 00033 egHcalIsoConeSizeOut_ = conf_.getParameter<double>("extRadius"); 00034 00035 absolut_ = conf_.getParameter<bool>("absolut"); 00036 00037 //register your products 00038 produces < reco::CandViewDoubleAssociations >(); 00039 } 00040 00041 00042 EgammaTowerIsolationProducer::~EgammaTowerIsolationProducer(){} 00043 00044 00045 // 00046 // member functions 00047 // 00048 00049 // ------------ method called to produce the data ------------ 00050 void 00051 EgammaTowerIsolationProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) 00052 { 00053 00054 // Get the filtered objects 00055 edm::Handle< edm::View<reco::Candidate> > emObjectHandle; 00056 iEvent.getByLabel(emObjectProducer_,emObjectHandle); 00057 00058 // Get the barrel hcal hits 00059 edm::Handle<CaloTowerCollection> towerHandle; 00060 iEvent.getByLabel(towerProducer_, towerHandle); 00061 00062 const CaloTowerCollection* towers = towerHandle.product(); 00063 00064 reco::CandViewDoubleAssociations* isoMap = new reco::CandViewDoubleAssociations( reco::CandidateBaseRefProd( emObjectHandle ) ); 00065 00066 00067 EgammaTowerIsolation myHadIsolation(egHcalIsoConeSizeOut_, 00068 egHcalIsoConeSizeIn_, 00069 egHcalIsoPtMin_, 00070 towers) ; 00071 00072 00073 for( size_t i = 0 ; i < emObjectHandle->size(); ++i) { 00074 double isoValue = myHadIsolation.getTowerEtSum(&(emObjectHandle->at(i))); 00075 if(absolut_==true){ 00076 isoMap->setValue(i,isoValue); 00077 } 00078 else{ 00079 reco::SuperClusterRef sc = (emObjectHandle->at(i)).get<reco::SuperClusterRef>(); 00080 double et = sc.get()->energy()*sin(2*atan(exp(-sc.get()->eta()))); 00081 isoMap->setValue(i,isoValue/et); 00082 } 00083 } 00084 00085 00086 00087 std::auto_ptr<reco::CandViewDoubleAssociations> isolMap(isoMap); 00088 iEvent.put(isolMap); 00089 00090 } 00091 00092 //define this as a plug-in 00093 //DEFINE_FWK_MODULE(EgammaTowerIsolationProducer);