00001 #ifndef TR_FastCircle_H_ 00002 #define TR_FastCircle_H_ 00003 #include "DataFormats/GeometryVector/interface/GlobalPoint.h" 00004 #include "DataFormats/Math/interface/AlgebraicROOTObjects.h" 00005 #include <vector> 00006 00033 class FastCircle { 00034 00035 public: 00036 00037 FastCircle(const GlobalPoint& outerHit, 00038 const GlobalPoint& middleHit, 00039 const GlobalPoint& aVertex); 00040 00041 FastCircle(const GlobalPoint& outerHit, 00042 const GlobalPoint& middleHit, 00043 const GlobalPoint& aVertex, 00044 double norm); 00045 00046 ~FastCircle() {} 00047 00048 // all returned values have dimensions of cm 00049 // parameters of the circle (circle is valid) 00050 double x0() const {return theX0;} 00051 00052 double y0() const {return theY0;} 00053 00054 double rho() const {return theRho;} 00055 00056 bool isValid() const {return theValid;} 00057 00058 // parameters of the straight line 00059 // (if circle is invalid only these are available) 00060 double n1() const {return theN1;} 00061 00062 double n2() const {return theN2;} 00063 00064 double c() const {return theC;} 00065 00066 private: 00067 00068 GlobalPoint theOuterPoint; 00069 GlobalPoint theInnerPoint; 00070 GlobalPoint theVertexPoint; 00071 double theNorm; 00072 00073 double theX0; 00074 double theY0; 00075 double theRho; 00076 00077 double theN1; 00078 double theN2; 00079 double theC; 00080 00081 bool theValid; 00082 00083 void createCircleParameters(); 00084 AlgebraicVector3 transform(const GlobalPoint& aPoint) const; 00085 00086 }; 00087 00088 #endif //TR_Circle_H_