00001 #ifndef HelixBarrelCylinderCrossing_H 00002 #define HelixBarrelCylinderCrossing_H 00003 00004 #include "DataFormats/GeometryVector/interface/Basic2DVector.h" 00005 #include "DataFormats/GeometryVector/interface/GlobalPoint.h" 00006 #include "DataFormats/GeometryVector/interface/GlobalVector.h" 00007 #include "DataFormats/TrajectorySeed/interface/PropagationDirection.h" 00008 00009 class Cylinder; 00010 00014 class HelixBarrelCylinderCrossing { 00015 00016 typedef double TmpType; 00017 typedef Basic2DVector<TmpType> Point; // for private use only 00018 typedef Basic2DVector<TmpType> Vector; // for private use only 00019 00020 public: 00021 00022 typedef GlobalPoint PositionType; 00023 typedef GlobalVector DirectionType; 00024 00025 HelixBarrelCylinderCrossing( const GlobalPoint& startingPos, 00026 const GlobalVector& startingDir, 00027 double rho, PropagationDirection propDir, 00028 const Cylinder& cyl); 00029 00030 bool hasSolution() const { return theSolExists;} 00031 00036 double pathLength() const { return theS;} 00037 00044 PositionType position() const { return thePos;} 00045 00051 DirectionType direction() const { return theDir;} 00052 00053 private: 00054 00055 bool theSolExists; 00056 double theS; 00057 PositionType thePos; 00058 DirectionType theDir; 00059 Vector theD; 00060 int theActualDir; 00061 00062 void chooseSolution( const Point& p1, const Point& p2, 00063 const PositionType& startingPos, 00064 const DirectionType& startingDir, 00065 PropagationDirection propDir); 00066 00067 }; 00068 00069 #endif