Go to the documentation of this file.00001 #ifndef HELIXARBITRARYPLANECROSSING_H_
00002 #define HELIXARBITRARYPLANECROSSING_H_
00003 #include "DataFormats/TrajectorySeed/interface/PropagationDirection.h"
00004 #include "TrackingTools/GeomPropagators/interface/HelixPlaneCrossing.h"
00005 #include "TrackingTools/GeomPropagators/interface/HelixArbitraryPlaneCrossing2Order.h"
00006
00009 class HelixArbitraryPlaneCrossing : public HelixPlaneCrossing {
00010 public:
00013 HelixArbitraryPlaneCrossing(const PositionType& point,
00014 const DirectionType& direction,
00015 const float curvature,
00016 const PropagationDirection propDir = alongMomentum);
00017
00018 virtual ~HelixArbitraryPlaneCrossing() {}
00019
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
00035
00036 typedef Basic3DVector<double> PositionTypeDouble;
00037 typedef Basic3DVector<double> DirectionTypeDouble;
00038
00041 PositionTypeDouble positionInDouble(double s) const;
00042
00045 DirectionTypeDouble directionInDouble(double s) const;
00046
00047 private:
00050 inline bool notAtSurface (const Plane&,
00051 const PositionTypeDouble&,
00052 const float) const;
00053
00054 private:
00055 HelixArbitraryPlaneCrossing2Order theQuadraticCrossingFromStart;
00056
00057
00058 const double theX0,theY0,theZ0;
00059 double theCosPhi0,theSinPhi0;
00060 double theCosTheta,theSinTheta;
00061 const double theRho;
00062
00063 const PropagationDirection thePropDir;
00064
00065 mutable double theCachedS;
00066 mutable double theCachedDPhi;
00067 mutable double theCachedSDPhi;
00068 mutable double theCachedCDPhi;
00069
00070 static const float theNumericalPrecision;
00071 static const float theMaxDistToPlane;
00072
00073 };
00074
00075 #endif