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 #include "FWCore/Utilities/interface/Visibility.h" 00010 00011 class Cylinder; 00012 00016 class HelixBarrelCylinderCrossing { 00017 00018 typedef double TmpType; 00019 typedef Basic2DVector<TmpType> Point; // for private use only 00020 typedef Basic2DVector<TmpType> Vector; // for private use only 00021 00022 public: 00023 00024 typedef GlobalPoint PositionType; 00025 typedef GlobalVector DirectionType; 00026 00027 HelixBarrelCylinderCrossing( const GlobalPoint& startingPos, 00028 const GlobalVector& startingDir, 00029 double rho, PropagationDirection propDir, 00030 const Cylinder& cyl); 00031 00032 bool hasSolution() const { return theSolExists;} 00033 00038 double pathLength() const { return theS;} 00039 00046 PositionType position() const { return thePos;} 00047 00049 PositionType position1() const { return thePos1;} 00050 00052 PositionType position2() const { return thePos2;} 00053 00054 00060 DirectionType direction() const { return theDir;} 00061 00062 private: 00063 00064 bool theSolExists; 00065 double theS; 00066 PositionType thePos; 00067 DirectionType theDir; 00068 Vector theD; 00069 int theActualDir; 00070 00071 PositionType thePos1; 00072 PositionType thePos2; 00073 00074 00075 void chooseSolution( const Point& p1, const Point& p2, 00076 const PositionType& startingPos, 00077 const DirectionType& startingDir, 00078 PropagationDirection propDir) dso_internal; 00079 00080 }; 00081 00082 #endif