CMS 3D CMS Logo

CMSSW_4_4_3_patch1/src/TrackingTools/GeomPropagators/interface/HelixExtrapolatorToLine2Order.h

Go to the documentation of this file.
00001 #ifndef HelixExtrapolatorToLine2Order_h_
00002 #define HelixExtrapolatorToLine2Order_h_
00003 
00004 #include "TrackingTools/GeomPropagators/interface/HelixLineExtrapolation.h"
00005 #include "DataFormats/TrajectorySeed/interface/PropagationDirection.h"
00006 #include "FWCore/Utilities/interface/Visibility.h"
00007 
00011 class HelixExtrapolatorToLine2Order : public HelixLineExtrapolation {
00012 public:
00014   HelixExtrapolatorToLine2Order(const PositionType& point,
00015                                 const DirectionType& direction,
00016                                 const float curvature,
00017                                 const PropagationDirection propDir = alongMomentum);
00018 
00020   HelixExtrapolatorToLine2Order(const double& x0, const double& y0, const double& z0,
00021                                 const double& cosPhi0, const double& sinPhi0,
00022                                 const double& cosTheta, const double& sinTheta,
00023                                 const double& rho,
00024                                 const PropagationDirection propDir = alongMomentum) :
00025     thePosition(x0,y0,z0),
00026     theDirection(cosPhi0,sinPhi0,cosTheta/sinTheta),
00027     theSinTheta(sinTheta),
00028     theRho(rho), 
00029     thePropDir(propDir) {}
00030   
00031   // destructor
00032   virtual ~HelixExtrapolatorToLine2Order() {}
00033 
00038   virtual std::pair<bool,double> pathLength (const GlobalPoint& point) const;
00039 
00044   virtual std::pair<bool,double> pathLength (const Line& line) const;
00045 
00047   virtual PositionType position(double s) const;
00048 
00050   virtual DirectionType direction(double s) const;
00051 
00053   PositionTypeDouble positionInDouble(double s) const;
00054 
00056   DirectionTypeDouble directionInDouble(double s) const;
00057 
00058 private:
00060   virtual std::pair<bool,double> pathLengthFromCoefficients (const double ceq[4]) const dso_internal;
00062   int solve3rdOrder (const double ceq[], double sol[]) const dso_internal;
00064   int solve2ndOrder (const double ceq[], double sol[]) const dso_internal;
00065 
00066 private:
00067   const PositionTypeDouble thePosition;
00068   DirectionTypeDouble theDirection;
00069   double theSinTheta;
00070   const double theRho;
00071   const PropagationDirection thePropDir;
00072 };
00073 
00074 #endif
00075 
00076