00001 #ifndef AnalyticalImpactPointExtrapolator_h_ 00002 #define AnalyticalImpactPointExtrapolator_h_ 00003 00004 #include "DataFormats/GeometryVector/interface/GlobalPoint.h" 00005 #include "DataFormats/GeometryVector/interface/GlobalVector.h" 00006 00007 #include "DataFormats/GeometryCommonDetAlgo/interface/DeepCopyPointerByClone.h" 00008 #include "TrackingTools/GeomPropagators/interface/Propagator.h" 00009 00010 class FreeTrajectoryState; 00011 class TrajectoryStateOnSurface; 00012 class IterativeHelixExtrapolatorToLine; 00013 class MagneticField; 00014 00026 class AnalyticalImpactPointExtrapolator { 00027 00028 public: 00029 00031 AnalyticalImpactPointExtrapolator ( const MagneticField* field); 00032 00034 AnalyticalImpactPointExtrapolator (const Propagator&, const MagneticField*); 00035 00037 TrajectoryStateOnSurface extrapolate (const FreeTrajectoryState& fts, 00038 const GlobalPoint& vtx) const; 00040 TrajectoryStateOnSurface extrapolate (const TrajectoryStateOnSurface tsos, 00041 const GlobalPoint& vtx) const; 00042 00043 private: 00045 TrajectoryStateOnSurface extrapolateFullState(const TrajectoryStateOnSurface tsos, 00046 const GlobalPoint& vertex) const; 00048 TrajectoryStateOnSurface extrapolateSingleState(const FreeTrajectoryState& fts, 00049 const GlobalPoint& vertex) const; 00051 bool propagateWithHelix (const IterativeHelixExtrapolatorToLine& extrapolator, 00052 const GlobalPoint& vertex, 00053 GlobalPoint& x, GlobalVector& p, double& s) const; 00054 00055 private: 00056 DeepCopyPointerByClone<Propagator> thePropagator; 00057 const MagneticField* theField; 00058 }; 00059 00060 #endif