CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_4_5_patch3/src/RecoEgamma/EgammaHLTProducers/src/EgammaHLTElectronTrackIsolationProducers.cc

Go to the documentation of this file.
00001 
00009 #include "RecoEgamma/EgammaHLTProducers/interface/EgammaHLTElectronTrackIsolationProducers.h"
00010 
00011 // Framework
00012 #include "FWCore/Framework/interface/Event.h"
00013 #include "FWCore/Framework/interface/EventSetup.h"
00014 #include "DataFormats/Common/interface/Handle.h"
00015 #include "FWCore/Framework/interface/ESHandle.h"
00016 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00017 #include "FWCore/Utilities/interface/Exception.h"
00018 
00019 #include "DataFormats/EgammaCandidates/interface/Electron.h"
00020 #include "DataFormats/EgammaCandidates/interface/ElectronIsolationAssociation.h"
00021 
00022 #include "DataFormats/Common/interface/RefToBase.h"
00023 #include "DataFormats/Common/interface/Ref.h"
00024 #include "DataFormats/Common/interface/RefProd.h"
00025 
00026 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00027 #include "DataFormats/TrackReco/interface/Track.h"
00028 #include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h"
00029 
00030 
00031 
00032 
00033 EgammaHLTElectronTrackIsolationProducers::EgammaHLTElectronTrackIsolationProducers(const edm::ParameterSet& config) : conf_(config)
00034 {
00035 
00036   electronProducer_         = conf_.getParameter<edm::InputTag>("electronProducer");
00037   trackProducer_                = conf_.getParameter<edm::InputTag>("trackProducer");
00038 
00039   egTrkIsoPtMin_                = conf_.getParameter<double>("egTrkIsoPtMin");
00040   egTrkIsoConeSize_             = conf_.getParameter<double>("egTrkIsoConeSize");
00041   egTrkIsoZSpan_                = conf_.getParameter<double>("egTrkIsoZSpan");
00042   egTrkIsoRSpan_                = conf_.getParameter<double>("egTrkIsoRSpan");
00043   egTrkIsoVetoConeSize_         = conf_.getParameter<double>("egTrkIsoVetoConeSize");
00044   egCheckForOtherEleInCone_     = conf_.getUntrackedParameter<bool>("egCheckForOtherEleInCone",false);
00045   double egTrkIsoStripBarrel    = conf_.getParameter<double>("egTrkIsoStripBarrel");
00046   double egTrkIsoStripEndcap    = conf_.getParameter<double>("egTrkIsoStripEndcap");
00047 
00048   test_ = new EgammaHLTTrackIsolation(egTrkIsoPtMin_,egTrkIsoConeSize_,
00049                                       egTrkIsoZSpan_,egTrkIsoRSpan_,egTrkIsoVetoConeSize_,egTrkIsoStripBarrel,egTrkIsoStripEndcap);
00050 
00051 
00052   //register your products
00053   produces < reco::ElectronIsolationMap >();
00054 
00055 }
00056 
00057 
00058 EgammaHLTElectronTrackIsolationProducers::~EgammaHLTElectronTrackIsolationProducers(){delete test_;}
00059 
00060 
00061 //
00062 // member functions
00063 //
00064 
00065 // ------------ method called to produce the data  ------------
00066 void
00067 EgammaHLTElectronTrackIsolationProducers::produce(edm::Event& iEvent, const edm::EventSetup& iSetup)
00068 {
00069 
00070   // Get the HLT filtered objects
00071   edm::Handle<reco::ElectronCollection> electronHandle;
00072   iEvent.getByLabel(electronProducer_,electronHandle);
00073 
00074  // Get the general tracks
00075   edm::Handle<reco::TrackCollection> trackHandle;
00076   iEvent.getByLabel(trackProducer_, trackHandle);
00077   const reco::TrackCollection* trackCollection = trackHandle.product();
00078 
00079   reco::ElectronIsolationMap isoMap;
00080 
00081   for(reco::ElectronCollection::const_iterator iElectron = electronHandle->begin(); iElectron != electronHandle->end(); iElectron++){
00082     
00083     
00084     reco::ElectronRef electronref(reco::ElectronRef(electronHandle,iElectron - electronHandle->begin()));
00085     reco::TrackRef electrontrackref = iElectron->track();
00086     
00087     float isol;
00088     if (!egCheckForOtherEleInCone_) {
00089       isol = test_->electronPtSum(&(*electrontrackref),trackCollection);
00090     } else {
00091       isol = test_->electronPtSum(&(*electrontrackref),electronHandle.product(),trackCollection);
00092     }
00093     //if(electronref->pt() != 0. ) isol = isol/electronref->pt();
00094     
00095     isoMap.insert(electronref, isol);
00096       
00097   }
00098 
00099   std::auto_ptr<reco::ElectronIsolationMap> isolMap(new reco::ElectronIsolationMap(isoMap));
00100   iEvent.put(isolMap);
00101 
00102 }
00103 
00104 //define this as a plug-in
00105 //DEFINE_FWK_MODULE(EgammaHLTTrackIsolationProducers);