00001
00002
00003
00004
00005
00006
00007
00008
00009 #include <vector>
00010 #include <functional>
00011
00012
00013 #include <Math/VectorUtil.h>
00014
00015
00016 #include "RecoEgamma/EgammaIsolationAlgos/interface/ElectronTkIsolation.h"
00017 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00018 #include "TrackingTools/PatternTools/interface/Trajectory.h"
00019 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h"
00020 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
00021 #include "DataFormats/GeometryVector/interface/GlobalVector.h"
00022 #include "DataFormats/GsfTrackReco/interface/GsfTrack.h"
00023
00024 using namespace ROOT::Math::VectorUtil ;
00025
00026
00027 ElectronTkIsolation::ElectronTkIsolation (double extRadius,
00028 double intRadius,
00029 double ptLow,
00030 double lip,
00031 const reco::TrackCollection* trackCollection) :
00032 extRadius_(extRadius),
00033 intRadius_(intRadius),
00034 ptLow_(ptLow),
00035 lip_(lip),
00036 trackCollection_(trackCollection)
00037 {
00038 }
00039
00040 ElectronTkIsolation::~ElectronTkIsolation ()
00041 {
00042 }
00043
00044
00045 std::pair<int,double> ElectronTkIsolation::getIso(const reco::GsfElectron* electron) const
00046 {
00047 int counter =0 ;
00048 double ptSum =0.;
00049
00050 reco::GsfTrackRef tmpTrack = electron->gsfTrack() ;
00051 math::XYZVector tmpElectronMomentumAtVtx = (*tmpTrack).momentum () ;
00052
00053 for ( reco::TrackCollection::const_iterator itrTr = (*trackCollection_).begin() ;
00054 itrTr != (*trackCollection_).end() ;
00055 ++itrTr )
00056 {
00057 math::XYZVector tmpTrackMomentumAtVtx = (*itrTr).momentum () ;
00058 double this_pt = (*itrTr).pt();
00059 if ( this_pt < ptLow_ )
00060 continue ;
00061 if (fabs( (*itrTr).dz() - (*tmpTrack).dz() ) > lip_ )
00062 continue ;
00063 double dr = DeltaR(tmpTrackMomentumAtVtx,tmpElectronMomentumAtVtx) ;
00064 if ( fabs(dr) < extRadius_ &&
00065 fabs(dr) >= intRadius_ )
00066 {
00067 ++counter ;
00068 ptSum += this_pt;
00069 }
00070 }
00071
00072 std::pair<int,double> retval;
00073 retval.first = counter;
00074 retval.second = ptSum;
00075
00076 return retval;
00077 }
00078
00079
00080 int ElectronTkIsolation::getNumberTracks (const reco::GsfElectron* electron) const
00081 {
00082
00083 return getIso(electron).first ;
00084 }
00085
00086 double ElectronTkIsolation::getPtTracks (const reco::GsfElectron* electron) const
00087 {
00088 return getIso(electron).second ;
00089 }
00090