00001 #ifndef IterativeHelixExtrapolatorToLine_h_
00002 #define IterativeHelixExtrapolatorToLine_h_
00003
00004 #include "DataFormats/TrajectorySeed/interface/PropagationDirection.h"
00005 #include "TrackingTools/GeomPropagators/interface/HelixLineExtrapolation.h"
00006 #include "TrackingTools/GeomPropagators/interface/HelixExtrapolatorToLine2Order.h"
00007
00012 class IterativeHelixExtrapolatorToLine : public HelixLineExtrapolation {
00013 public:
00016 IterativeHelixExtrapolatorToLine (const PositionType& point,
00017 const DirectionType& direction,
00018 const float curvature,
00019 const PropagationDirection propDir = anyDirection);
00020
00021 virtual ~IterativeHelixExtrapolatorToLine() {}
00022
00027 virtual std::pair<bool,double> pathLength (const GlobalPoint& point) const {
00028 return genericPathLength(point);
00029 }
00030
00035 virtual std::pair<bool,double> pathLength (const Line& line) const {
00036 return genericPathLength(line);
00037 }
00038
00041 virtual PositionType position (double s) const;
00042
00045 virtual DirectionType direction (double s) const;
00046
00049 PositionTypeDouble positionInDouble (double s) const;
00050
00053 DirectionTypeDouble directionInDouble (double s) const;
00054
00055 private:
00057 template <class T>
00058 std::pair<bool,double> genericPathLength (const T& object) const;
00059
00060 private:
00061 const double theX0,theY0,theZ0;
00062 double theCosPhi0,theSinPhi0;
00063 double theCosTheta,theSinTheta;
00064 const double theRho;
00065
00066 HelixExtrapolatorToLine2Order theQuadraticSolutionFromStart;
00067
00068 const PropagationDirection thePropDir;
00069
00070 mutable double theCachedS;
00071 mutable double theCachedDPhi;
00072 mutable double theCachedSDPhi;
00073 mutable double theCachedCDPhi;
00074 };
00075
00076 #endif