00001 #ifndef HelixForwardPlaneCrossing_H_ 00002 #define HelixForwardPlaneCrossing_H_ 00003 00004 #include "DataFormats/TrajectorySeed/interface/PropagationDirection.h" 00005 #include "TrackingTools/GeomPropagators/interface/HelixPlaneCrossing.h" 00006 00010 class HelixForwardPlaneCrossing : public HelixPlaneCrossing { 00011 public: 00014 HelixForwardPlaneCrossing(const PositionType& point, 00015 const DirectionType& direction, 00016 const float curvature, 00017 const PropagationDirection propDir = alongMomentum); 00018 // destructor 00019 virtual ~HelixForwardPlaneCrossing() {} 00020 00024 virtual std::pair<bool,double> pathLength(const Plane& plane); 00025 00028 virtual PositionType position(double s) const; 00029 00032 virtual DirectionType direction(double s) const; 00033 00034 private: 00035 // 00036 // double precision vectors for internal use 00037 // 00038 typedef Basic3DVector<double> PositionTypeDouble; 00039 typedef Basic3DVector<double> DirectionTypeDouble; 00040 00041 const double theX0,theY0,theZ0; 00042 double theCosPhi0,theSinPhi0; 00043 double theCosTheta,theSinTheta; 00044 const double theRho; 00045 00046 const PropagationDirection thePropDir; 00047 00048 mutable double theCachedS; 00049 mutable double theCachedDPhi; 00050 mutable double theCachedSDPhi; 00051 mutable double theCachedCDPhi; 00052 00053 static const float theNumericalPrecision; 00054 }; 00055 00056 #endif