![]() |
![]() |
00001 #ifndef _TRACKER_FASTMUPROPAGATOR_H_ 00002 #define _TRACKER_FASTMUPROPAGATOR_H_ 00003 #include "DataFormats/GeometryCommonDetAlgo/interface/DeepCopyPointerByClone.h" 00004 #include "TrackingTools/GeomPropagators/interface/Propagator.h" 00005 #include "RecoHIMuon/HiMuPropagator/interface/FmpConst.h" 00006 #include "TrackingTools/MaterialEffects/interface/MaterialEffectsUpdator.h" 00007 #include "MagneticField/Engine/interface/MagneticField.h" 00008 #include <string> 00009 #include <iostream> 00010 #include <map> 00011 #include <vector> 00012 00017 namespace cms { 00018 class FastMuPropagator:public Propagator{ 00019 public: 00020 FastMuPropagator(const MagneticField * mf, PropagationDirection dir = alongMomentum) 00021 {theFmpConst=new FmpConst(); field = mf;} 00022 00023 FastMuPropagator(const MagneticField * mf, FmpConst* fmp, PropagationDirection dir = alongMomentum) 00024 {theFmpConst=fmp; field = mf;} 00025 00026 00027 00028 virtual ~FastMuPropagator() {delete theFmpConst;} 00029 00030 TrajectoryStateOnSurface propagate(const FreeTrajectoryState& fts, 00031 const Cylinder& bound) const; 00032 00033 TrajectoryStateOnSurface propagate(const FreeTrajectoryState& fts, 00034 const Plane&) const; 00035 00036 virtual FastMuPropagator * clone() const 00037 { 00038 PropagationDirection dir = alongMomentum; 00039 return new FastMuPropagator(field,dir); 00040 } 00041 00042 TrajectoryStateOnSurface propagate (const FreeTrajectoryState& fts, 00043 const Surface& surface) const{ 00044 return Propagator::propagate( fts, surface); 00045 } 00046 00047 virtual std::pair< TrajectoryStateOnSurface, double> 00048 propagateWithPath (const FreeTrajectoryState& state, const Plane& bc) const { 00049 std::pair<TrajectoryStateOnSurface,double> tp; 00050 return tp; 00051 } 00052 virtual std::pair< TrajectoryStateOnSurface, double> 00053 propagateWithPath (const FreeTrajectoryState& state, const Cylinder& bc) const{ 00054 std::pair<TrajectoryStateOnSurface,double> tp; 00055 return tp; 00056 } 00057 00058 virtual const MagneticField* magneticField() const {return field;} 00059 00060 private: 00061 bool checkfts(const FreeTrajectoryState& fts) const; 00062 FmpConst* theFmpConst; 00063 const MagneticField * field; 00064 }; 00065 } 00066 #endif 00067 00068 00069