CMS 3D CMS Logo

ElectronTkIsolation.cc

Go to the documentation of this file.
00001 //*****************************************************************************
00002 // File:      ElectronTkIsolation.cc
00003 // ----------------------------------------------------------------------------
00004 // OrigAuth:  Matthias Mozer
00005 // Institute: IIHE-VUB
00006 //=============================================================================
00007 //*****************************************************************************
00008 //C++ includes
00009 #include <vector>
00010 #include <functional>
00011 
00012 //ROOT includes
00013 #include <Math/VectorUtil.h>
00014 
00015 //CMSSW includes
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 // unified acces to isolations
00045 std::pair<int,double> ElectronTkIsolation::getIso(const reco::GsfElectron* electron) const  
00046 {
00047   int counter  =0 ;
00048   double ptSum =0.;
00049   //Take the electron track
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     }//end loop over tracks                 
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   //counter for the tracks in the isolation cone
00083   return getIso(electron).first ;
00084 }
00085 
00086 double ElectronTkIsolation::getPtTracks (const reco::GsfElectron* electron) const
00087 {
00088   return getIso(electron).second ;
00089 }
00090 

Generated on Tue Jun 9 17:43:25 2009 for CMSSW by  doxygen 1.5.4