00001
00009 #include "RecoEgamma/EgammaHLTProducers/interface/EgammaHLTElectronTrackIsolationProducers.h"
00010
00011
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
00046
00047 test_ = new EgammaHLTTrackIsolation(egTrkIsoPtMin_,egTrkIsoConeSize_,
00048 egTrkIsoZSpan_,egTrkIsoRSpan_,egTrkIsoVetoConeSize_);
00049
00050
00051
00052 produces < reco::ElectronIsolationMap >();
00053
00054 }
00055
00056
00057 EgammaHLTElectronTrackIsolationProducers::~EgammaHLTElectronTrackIsolationProducers(){delete test_;}
00058
00059
00060
00061
00062
00063
00064
00065 void
00066 EgammaHLTElectronTrackIsolationProducers::produce(edm::Event& iEvent, const edm::EventSetup& iSetup)
00067 {
00068
00069
00070 edm::Handle<reco::ElectronCollection> electronHandle;
00071 iEvent.getByLabel(electronProducer_,electronHandle);
00072
00073
00074 edm::Handle<reco::TrackCollection> trackHandle;
00075 iEvent.getByLabel(trackProducer_, trackHandle);
00076 const reco::TrackCollection* trackCollection = trackHandle.product();
00077
00078 reco::ElectronIsolationMap isoMap;
00079
00080 for(reco::ElectronCollection::const_iterator iElectron = electronHandle->begin(); iElectron != electronHandle->end(); iElectron++){
00081
00082
00083 reco::ElectronRef electronref(reco::ElectronRef(electronHandle,iElectron - electronHandle->begin()));
00084 reco::TrackRef electrontrackref = iElectron->track();
00085
00086 float isol;
00087 if (!egCheckForOtherEleInCone_) {
00088 isol = test_->electronPtSum(&(*electrontrackref),trackCollection);
00089 } else {
00090 isol = test_->electronPtSum(&(*electrontrackref),electronHandle.product(),trackCollection);
00091 }
00092 if(electrontrackref->pt() != 0. ) isol = isol/electrontrackref->pt();
00093
00094 isoMap.insert(electronref, isol);
00095
00096 }
00097
00098 std::auto_ptr<reco::ElectronIsolationMap> isolMap(new reco::ElectronIsolationMap(isoMap));
00099 iEvent.put(isolMap);
00100
00101 }
00102
00103
00104