00001 #ifndef _TangentCircle_H_
00002 #define _TangentCircle_H_
00003
00004 #include "RecoTracker/TkSeedGenerator/interface/FastCircle.h"
00005 #include "DataFormats/GeometryVector/interface/GlobalVector.h"
00006
00007 class TangentCircle
00008 {
00009
00010
00011
00012
00013 public :
00014 TangentCircle(){}
00015
00018 TangentCircle(const GlobalVector& direction, const GlobalPoint& innerPoint, const GlobalPoint& outerPoint);
00019
00021 TangentCircle(const GlobalPoint& outerPoint, const GlobalPoint& innerPoint, const GlobalPoint& vertexPoint);
00022
00024 TangentCircle(const TangentCircle& primCircle, const GlobalPoint& outerPoint, const GlobalPoint& innerPoint);
00025
00027 GlobalVector directionAtVertex();
00028
00029 double x0() const {return theX0;}
00030
00031 double y0() const {return theY0;}
00032
00033 double rho() const {return theRho;}
00034
00035 GlobalPoint outerPoint() const { return theOuterPoint; }
00036
00037 GlobalPoint innerPoint() const { return theInnerPoint; }
00038
00039 GlobalPoint vertexPoint() const { return theVertexPoint; }
00040
00041 double vertexError() const { return theVertexError; }
00042
00043 double curvatureError();
00044
00045 int charge(float magz);
00046
00047 bool isValid() const { return isValid(); }
00048
00049 private :
00050 GlobalPoint theInnerPoint;
00051 GlobalPoint theOuterPoint;
00052 GlobalPoint theVertexPoint;
00053
00054 GlobalVector theDirectionAtVertex;
00055
00056 double theX0;
00057 double theY0;
00058 double theRho;
00060 double theVertexError;
00062 bool valid;
00063 int theCharge;
00064
00065 double isTangent(const TangentCircle& primCircle, const TangentCircle& secCircle) const;
00066 GlobalPoint getPosition(const TangentCircle& circle, const GlobalPoint& initalPosition, double theta, int direction) const;
00067 int chargeLocally(float magz, GlobalVector v) const;
00068 GlobalVector direction(const GlobalPoint& point) const;
00069
00070 };
00071
00072 #endif