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