CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_3_10_patch1/src/TrackingTools/GeomPropagators/interface/IterativeHelixExtrapolatorToLine.h

Go to the documentation of this file.
00001 #ifndef IterativeHelixExtrapolatorToLine_h_
00002 #define IterativeHelixExtrapolatorToLine_h_
00003 
00004 #include "DataFormats/TrajectorySeed/interface/PropagationDirection.h"
00005 #include "TrackingTools/GeomPropagators/interface/HelixLineExtrapolation.h"
00006 #include "TrackingTools/GeomPropagators/interface/HelixExtrapolatorToLine2Order.h"
00007 #include "FWCore/Utilities/interface/Visibility.h"
00008 
00013 class IterativeHelixExtrapolatorToLine : public HelixLineExtrapolation {
00014 public:
00017   IterativeHelixExtrapolatorToLine (const PositionType& point,
00018                                     const DirectionType& direction,
00019                                     const float curvature,
00020                                     const PropagationDirection propDir = anyDirection);
00021   // destructor
00022   virtual ~IterativeHelixExtrapolatorToLine() {}
00023 
00028   virtual std::pair<bool,double> pathLength (const GlobalPoint& point) const;
00029 
00034   virtual std::pair<bool,double> pathLength (const Line& line) const;
00035 
00038   virtual PositionType position (double s) const;
00039 
00042   virtual DirectionType direction (double s) const;
00043 
00046   PositionTypeDouble positionInDouble (double s) const;
00047 
00050   DirectionTypeDouble directionInDouble (double s) const;
00051 
00052 private:
00054   template <class T> 
00055   std::pair<bool,double> genericPathLength (const T& object) const dso_internal;
00056 
00057 private:
00058   const double theX0,theY0,theZ0;
00059   double theCosPhi0,theSinPhi0;
00060   double theCosTheta,theSinTheta;
00061   const double theRho;
00062 
00063   HelixExtrapolatorToLine2Order theQuadraticSolutionFromStart;
00064 
00065   const PropagationDirection thePropDir;
00066 
00067   mutable double theCachedS;
00068   mutable double theCachedDPhi;
00069   mutable double theCachedSDPhi;
00070   mutable double theCachedCDPhi;
00071 };
00072 
00073 #endif