00001 #ifndef EgammaHLTAlgos_EgammaHLTTrackIsolation_h
00002 #define EgammaHLTAlgos_EgammaHLTTrackIsolation_h
00003
00004
00005
00006
00007
00015
00016
00017
00018
00019
00020
00021
00022 #include "DataFormats/EgammaCandidates/interface/Electron.h"
00023 #include "DataFormats/EgammaCandidates/interface/ElectronFwd.h"
00024 #include "DataFormats/EgammaCandidates/interface/Photon.h"
00025 #include "DataFormats/EgammaReco/interface/SuperCluster.h"
00026 #include "DataFormats/EgammaReco/interface/BasicCluster.h"
00027 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00028 #include "DataFormats/TrackReco/interface/Track.h"
00029 #include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h"
00030
00031 #include "DataFormats/RecoCandidate/interface/RecoCandidate.h"
00032
00033 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
00034 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
00035 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
00036
00037 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
00038 #include "DataFormats/Math/interface/Vector3D.h"
00039 #include "DataFormats/Math/interface/Vector.h"
00040 #include "DataFormats/Math/interface/Point3D.h"
00041
00042
00043
00044 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00045
00046
00047
00048 class EgammaHLTTrackIsolation
00049 {
00050
00051 public:
00052
00053
00054 EgammaHLTTrackIsolation(double egTrkIso_PtMin,
00055 double egTrkIso_ConeSize,
00056 double egTrkIso_ZSpan,
00057 double egTrkIso_RSpan,
00058 double egTrkIso_VetoConeSize) :
00059 ptMin(egTrkIso_PtMin),
00060 conesize(egTrkIso_ConeSize),
00061 zspan(egTrkIso_ZSpan),
00062 rspan(egTrkIso_RSpan),
00063 vetoConesize(egTrkIso_VetoConeSize) {
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074 }
00075
00076
00078 std::pair<int,float> electronIsolation(const reco::Track * const tr, const reco::TrackCollection* isoTracks);
00079 std::pair<int,float> electronIsolation(const reco::Track * const tr, const reco::ElectronCollection* allEle, const reco::TrackCollection* isoTracks);
00080 std::pair<int,float> electronIsolation(const reco::Track * const tr, const reco::TrackCollection* isoTracks, GlobalPoint vertex);
00081
00085 std::pair<int,float> photonIsolation(const reco::RecoCandidate * const recocand, const reco::TrackCollection* isoTracks, bool useVertex);
00086 std::pair<int,float> photonIsolation(const reco::RecoCandidate * const recocand, const reco::TrackCollection* isoTracks, GlobalPoint vertex);
00087 std::pair<int,float> photonIsolation(const reco::RecoCandidate * const recocand, const reco::ElectronCollection* allEle, const reco::TrackCollection* isoTracks);
00088
00090 int electronTrackCount(const reco::Track * const tr, const reco::TrackCollection* isoTracks)
00091 {return electronIsolation(tr,isoTracks).first;}
00092 int electronTrackCount(const reco::Track * const tr, const reco::TrackCollection* isoTracks, GlobalPoint vertex)
00093 {return electronIsolation(tr,isoTracks,vertex).first;}
00094
00098 int photonTrackCount(const reco::RecoCandidate * const recocand, const reco::TrackCollection* isoTracks, bool useVertex)
00099 {return photonIsolation(recocand,isoTracks,useVertex).first;}
00100 int photonTrackCount(const reco::RecoCandidate * const recocand, const reco::TrackCollection* isoTracks, GlobalPoint vertex)
00101 {return photonIsolation(recocand,isoTracks,vertex).first;}
00102 int photonTrackCount(const reco::RecoCandidate * const recocand, const reco::ElectronCollection* allEle, const reco::TrackCollection* isoTracks)
00103 {return photonIsolation(recocand,allEle,isoTracks).first;}
00104
00106 float electronPtSum(const reco::Track * const tr, const reco::TrackCollection* isoTracks)
00107 {return electronIsolation(tr,isoTracks).second;}
00108 float electronPtSum(const reco::Track * const tr, const reco::TrackCollection* isoTracks, GlobalPoint vertex)
00109 {return electronIsolation(tr,isoTracks,vertex).second;}
00110 float electronPtSum(const reco::Track * const tr, const reco::ElectronCollection* allEle ,const reco::TrackCollection* isoTracks)
00111 {return electronIsolation(tr,allEle,isoTracks).second;}
00112
00116 float photonPtSum(const reco::RecoCandidate * const recocand, const reco::TrackCollection* isoTracks, bool useVertex)
00117 {return photonIsolation(recocand,isoTracks, useVertex).second;}
00118 float photonPtSum(const reco::RecoCandidate * const recocand, const reco::TrackCollection* isoTracks, GlobalPoint vertex)
00119 {return photonIsolation(recocand,isoTracks, vertex).second;}
00120 float photonPtSum(const reco::RecoCandidate * const recocand, const reco::ElectronCollection* allEle, const reco::TrackCollection* isoTracks)
00121 {return photonIsolation(recocand,allEle,isoTracks).second;}
00122
00123
00125 double getPtMin() { return ptMin;}
00127 double getConeSize() { return conesize; }
00129 double getZspan() {return zspan; }
00131 double getRspan() { return rspan; }
00133 double getvetoConesize() { return vetoConesize; }
00134
00135 private:
00136
00137 std::pair<int,float> findIsoTracks(GlobalVector mom, GlobalPoint vtx, const reco::TrackCollection* isoTracks, bool isElectron, bool useVertex=true);
00138 std::pair<int,float> findIsoTracksWithoutEle(GlobalVector mom, GlobalPoint vtx, const reco::ElectronCollection* allEle, const reco::TrackCollection* isoTracks);
00139
00140
00141 double ptMin;
00142 double conesize;
00143 double zspan;
00144 double rspan;
00145 double vetoConesize;
00146
00147 };
00148
00149
00150 #endif