00001 #ifndef HELIXARBITRARYPLANECROSSING2ORDER_H_
00002 #define HELIXARBITRARYPLANECROSSING2ORDER_H_
00003 #include "DataFormats/TrajectorySeed/interface/PropagationDirection.h"
00004 #include "TrackingTools/GeomPropagators/interface/HelixPlaneCrossing.h"
00005
00009 class HelixArbitraryPlaneCrossing2Order : public HelixPlaneCrossing {
00010
00011
00012 public:
00015 HelixArbitraryPlaneCrossing2Order(const PositionType& point,
00016 const DirectionType& direction,
00017 const float curvature,
00018 const PropagationDirection propDir = alongMomentum);
00021 HelixArbitraryPlaneCrossing2Order(const double& x0, const double& y0, const double& z0,
00022 const double& cosPhi0, const double& sinPhi0,
00023 const double& cosTheta, const double& sinTheta,
00024 const double& rho,
00025 const PropagationDirection propDir = alongMomentum) :
00026 theX0(x0), theY0(y0), theZ0(z0),
00027 theCosPhi0(cosPhi0), theSinPhi0(sinPhi0),
00028 theCosTheta(cosTheta), theSinTheta(sinTheta),
00029 theRho(rho),
00030 thePropDir(propDir) {}
00031
00032
00033 virtual ~HelixArbitraryPlaneCrossing2Order() {}
00034
00039 virtual std::pair<bool,double> pathLength(const Plane&);
00040
00043 virtual PositionType position(double s) const;
00044
00047 virtual DirectionType direction(double s) const;
00048
00049
00050
00051 typedef Basic3DVector<double> PositionTypeDouble;
00052 typedef Basic3DVector<double> DirectionTypeDouble;
00053
00056 PositionTypeDouble positionInDouble(double s) const;
00057
00060 DirectionTypeDouble directionInDouble(double s) const;
00061
00064 inline double smallestPathLength (const double firstPathLength,
00065 const double secondPathLength) const {
00066 return fabs(firstPathLength)<fabs(secondPathLength) ? firstPathLength : secondPathLength;
00067 }
00068
00069 private:
00070
00073 std::pair<bool,double> solutionByDirection(const double dS1,const double dS2) const;
00074
00075 private:
00076 const double theX0,theY0,theZ0;
00077 double theCosPhi0,theSinPhi0;
00078 double theCosTheta,theSinTheta;
00079 const double theRho;
00080 const PropagationDirection thePropDir;
00081
00082 };
00083
00084 #endif
00085
00086