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 #include "FWCore/Utilities/interface/Visibility.h"
00007
00010 class HelixArbitraryPlaneCrossing : public HelixPlaneCrossing {
00011 public:
00014 HelixArbitraryPlaneCrossing(const PositionType& point,
00015 const DirectionType& direction,
00016 const float curvature,
00017 const PropagationDirection propDir = alongMomentum);
00018
00019 virtual ~HelixArbitraryPlaneCrossing() {}
00020
00025 virtual std::pair<bool,double> pathLength(const Plane& plane);
00026
00029 virtual PositionType position(double s) const;
00030
00033 virtual DirectionType direction(double s) const;
00034
00035
00036
00037 typedef Basic3DVector<double> PositionTypeDouble;
00038 typedef Basic3DVector<double> DirectionTypeDouble;
00039
00042 PositionTypeDouble positionInDouble(double s) const;
00043
00046 DirectionTypeDouble directionInDouble(double s) const;
00047
00048 private:
00051 inline bool notAtSurface (const Plane&,
00052 const PositionTypeDouble&,
00053 const float) const dso_internal;
00054
00055 private:
00056 HelixArbitraryPlaneCrossing2Order theQuadraticCrossingFromStart;
00057
00058
00059 const double theX0,theY0,theZ0;
00060 double theCosPhi0,theSinPhi0;
00061 double theCosTheta,theSinTheta;
00062 const double theRho;
00063
00064 const PropagationDirection thePropDir;
00065
00066 mutable double theCachedS;
00067 mutable double theCachedDPhi;
00068 mutable double theCachedSDPhi;
00069 mutable double theCachedCDPhi;
00070
00071 static const float theNumericalPrecision;
00072 static const float theMaxDistToPlane;
00073
00074 };
00075
00076 #endif