CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_5/src/RecoEgamma/EgammaPhotonAlgos/interface/ConversionTrackEcalImpactPoint.h

Go to the documentation of this file.
00001 #ifndef ConversionTrackEcalImpactPoint_H
00002 #define ConversionTrackEcalImpactPoint_H
00003 
00013 #include "DataFormats/TrajectorySeed/interface/PropagationDirection.h"
00014 #include "DataFormats/TrackReco/interface/Track.h"
00015 #include "DataFormats/TrackReco/interface/TrackExtra.h"
00016 //
00017 #include "FWCore/Framework/interface/ESHandle.h"
00018 #include "FWCore/Framework/interface/EventSetup.h"
00019 #include "FWCore/Framework/interface/Event.h"
00020 //
00021 #include "DataFormats/Common/interface/Handle.h"
00022 #include "DataFormats/EgammaTrackReco/interface/TrackSuperClusterAssociation.h"
00023 #include "DataFormats/CaloRecHit/interface/CaloCluster.h"
00024 #include "DataFormats/CaloRecHit/interface/CaloClusterFwd.h"
00025 //
00026 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
00027 #include "TrackingTools/TransientTrack/interface/TransientTrack.h"
00028 #include "TrackingTools/TransientTrack/interface/TrackTransientTrack.h"
00029 #include "TrackingTools/MaterialEffects/interface/PropagatorWithMaterial.h"
00030 //
00031 #include "DataFormats/GeometrySurface/interface/SimpleCylinderBounds.h"
00032 #include "DataFormats/GeometrySurface/interface/SimpleDiskBounds.h"
00033 #include "DataFormats/GeometrySurface/interface/Cylinder.h"
00034 #include "DataFormats/GeometrySurface/interface/BoundCylinder.h"
00035 #include "DataFormats/GeometrySurface/interface/BoundDisk.h"
00036 
00037 
00038 
00039 class ConversionTrackEcalImpactPoint {
00040 
00041 public:
00042 
00043   ConversionTrackEcalImpactPoint(const MagneticField* field );
00044 
00045 
00046   ~ConversionTrackEcalImpactPoint();
00047 
00048   std::vector<math::XYZPointF> find( const std::vector<reco::TransientTrack>& tracks, 
00049                                     const edm::Handle<edm::View<reco::CaloCluster> >&  bcHandle );
00050 
00051   std::vector<reco::CaloClusterPtr> matchingBC() const {return matchingBC_;}
00052   void setMagneticField ( const MagneticField* mf ) { theMF_=mf;}
00053  
00054 
00055  
00056 
00057  
00058 private:
00059   
00060   const MagneticField* theMF_;
00061 
00062   TrajectoryStateOnSurface  stateAtECAL_;
00063 
00064   mutable PropagatorWithMaterial*    forwardPropagator_ ;
00065   PropagationDirection       dir_;
00066   std::vector<reco::CaloClusterPtr> matchingBC_;
00067 
00068 
00069 
00071   static float barrelRadius() {return 129.f;} //p81, p50, ECAL TDR
00072   static float barrelHalfLength() {return 270.9f;} //p81, p50, ECAL TDR
00073   static float endcapRadius() {return 171.1f;} // fig 3.26, p81, ECAL TDR
00074   static float endcapZ() {return 320.5f;} // fig 3.26, p81, ECAL TDR
00075 
00076   static void initialize();
00077   static void check() {if (!theInit_) initialize();}
00078 
00079 
00080 
00081 
00082   static ReferenceCountingPointer<BoundCylinder>  theBarrel_;
00083   static ReferenceCountingPointer<BoundDisk>      theNegativeEtaEndcap_;
00084   static ReferenceCountingPointer<BoundDisk>      thePositiveEtaEndcap_;
00085 
00086   static const BoundCylinder& barrel()        { check(); return *theBarrel_;}
00087   static const BoundDisk& negativeEtaEndcap() { check(); return *theNegativeEtaEndcap_;}
00088   static const BoundDisk& positiveEtaEndcap() { check(); return *thePositiveEtaEndcap_;}
00089   static bool theInit_;
00090 
00091 
00092 };
00093 
00094 #endif // ConversionTrackEcalImpactPoint_H
00095 
00096