CMS 3D CMS Logo

EgammaTowerIsolationProducer.cc

Go to the documentation of this file.
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);

Generated on Tue Jun 9 17:34:16 2009 for CMSSW by  doxygen 1.5.4