00001 #ifndef CommonDet_Propagator_H 00002 #define CommonDet_Propagator_H 00003 00004 #include "DataFormats/TrajectorySeed/interface/PropagationDirection.h" 00005 #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h" 00006 #include <utility> 00007 00008 class FreeTrajectoryState; 00009 class TrajectoryStateOnSurface; 00010 class Plane; 00011 class Cylinder; 00012 class Surface; 00013 class MagneticField; 00014 00015 namespace reco{class BeamSpot;} 00016 00038 class Propagator { 00039 public: 00040 00041 Propagator (PropagationDirection dir = alongMomentum) : 00042 theDir(dir) {} 00043 virtual ~Propagator() {} 00044 00052 virtual TrajectoryStateOnSurface 00053 propagate (const FreeTrajectoryState&, const Surface&) const; 00054 00055 virtual TrajectoryStateOnSurface 00056 propagate (const FreeTrajectoryState&, const Plane&) const = 0; 00057 00058 virtual TrajectoryStateOnSurface 00059 propagate (const FreeTrajectoryState&, const Cylinder&) const = 0; 00060 00071 virtual TrajectoryStateOnSurface 00072 propagate (const TrajectoryStateOnSurface&, const Surface&) const; 00073 00074 virtual TrajectoryStateOnSurface 00075 propagate (const TrajectoryStateOnSurface&, const Plane&) const; 00076 00077 virtual TrajectoryStateOnSurface 00078 propagate (const TrajectoryStateOnSurface&, const Cylinder&) const; 00079 00080 virtual FreeTrajectoryState 00081 propagate(const FreeTrajectoryState&, 00082 const reco::BeamSpot&) const; 00083 00093 virtual std::pair< TrajectoryStateOnSurface, double> 00094 propagateWithPath (const FreeTrajectoryState&, const Surface&) const; 00095 00096 virtual std::pair< TrajectoryStateOnSurface, double> 00097 propagateWithPath (const FreeTrajectoryState&, const Plane&) const = 0; 00098 00099 virtual std::pair< TrajectoryStateOnSurface, double> 00100 propagateWithPath (const FreeTrajectoryState&, const Cylinder&) const=0; 00101 00112 virtual std::pair< TrajectoryStateOnSurface, double> 00113 propagateWithPath (const TrajectoryStateOnSurface&, const Surface&) const; 00114 00115 virtual std::pair< TrajectoryStateOnSurface, double> 00116 propagateWithPath (const TrajectoryStateOnSurface&, const Plane&) const; 00117 00118 virtual std::pair< TrajectoryStateOnSurface, double> 00119 propagateWithPath (const TrajectoryStateOnSurface&, const Cylinder&) const; 00120 00121 virtual std::pair<FreeTrajectoryState, double> 00122 propagateWithPath(const FreeTrajectoryState&, 00123 const GlobalPoint&, const GlobalPoint&) const; 00124 00132 virtual void setPropagationDirection(PropagationDirection dir) { 00133 theDir = dir; 00134 } 00135 00143 virtual PropagationDirection propagationDirection() const { 00144 return theDir; 00145 } 00146 00157 virtual bool setMaxDirectionChange( float phiMax) { return false;} 00158 00159 virtual Propagator * clone() const = 0; 00160 00161 virtual const MagneticField* magneticField() const = 0; 00162 00163 private: 00164 00165 PropagationDirection theDir; 00166 }; 00167 00168 #endif // CommonDet_Propagator_H