00001 #ifndef HelixBarrelPlaneCrossingByCircle_H 00002 #define HelixBarrelPlaneCrossingByCircle_H 00003 00004 #include "TrackingTools/GeomPropagators/interface/HelixPlaneCrossing.h" 00005 #include "DataFormats/TrajectorySeed/interface/PropagationDirection.h" 00006 #include "DataFormats/GeometryVector/interface/GlobalPoint.h" 00007 #include "DataFormats/GeometryVector/interface/GlobalVector.h" 00008 00013 class HelixBarrelPlaneCrossingByCircle : public HelixPlaneCrossing { 00014 public: 00015 00016 HelixBarrelPlaneCrossingByCircle( const PositionType& pos, 00017 const DirectionType& dir, 00018 double rho, 00019 PropagationDirection propDir=alongMomentum); 00020 00021 HelixBarrelPlaneCrossingByCircle( const GlobalPoint& pos, 00022 const GlobalVector& dir, 00023 double rho, 00024 PropagationDirection propDir=alongMomentum); 00025 00026 virtual std::pair<bool,double> pathLength( const Plane&); 00027 00028 virtual PositionType position( double s) const; 00029 00030 virtual DirectionType direction( double s) const; 00031 00032 private: 00033 00034 typedef Basic2DVector<double> Vector2D; 00035 00036 PositionType theStartingPos; 00037 DirectionType theStartingDir; 00038 double theRho; 00039 PropagationDirection thePropDir; 00040 00041 double theCosTheta; 00042 double theSinTheta; 00043 double theXCenter; 00044 double theYCenter; 00045 00046 // caching of the solution for faster access 00047 double theS; 00048 Vector2D theD; 00049 double theDmag; 00050 00051 // internal communication - not very clean 00052 double theActualDir; 00053 bool useStraightLine; 00054 00055 void init(); 00056 bool chooseSolution( const Vector2D& d1, const Vector2D& d2); 00057 00058 }; 00059 00060 #endif