Go to the documentation of this file.00001 #ifndef ThirdHitPredictionFromCircle_H
00002 #define ThirdHitPredictionFromCircle_H
00003
00004 #include "DataFormats/GeometryVector/interface/Basic2DVector.h"
00005 #include "DataFormats/GeometryVector/interface/Basic3DVector.h"
00006
00007 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
00008 #include "RecoTracker/TkMSParametrization/interface/PixelRecoRange.h"
00009
00010
00011 class ThirdHitPredictionFromCircle {
00012
00013 public:
00014 typedef PixelRecoRange<float> Range;
00015
00016 ThirdHitPredictionFromCircle(const GlobalPoint & P1, const GlobalPoint & P2,
00017 float tolerance);
00018
00019 double phi(double curvature, double radius) const;
00020 double angle(double curvature, double radius) const;
00021
00022 Range operator()(Range curvature, double radius) const;
00023
00024 Range curvature(double transverseIP) const;
00025 double curvature(const Basic2DVector<double> &thirdPoint) const;
00026 double transverseIP(const Basic2DVector<double> &thirdPoint) const;
00027
00028
00029
00030 class HelixRZ {
00031 public:
00032 HelixRZ() : circle(0) {}
00033 HelixRZ(const ThirdHitPredictionFromCircle *circle,
00034 double z1, double z2, double curvature);
00035
00036 double zAtR(double r) const;
00037 double rAtZ(double z) const;
00038
00039 static double maxCurvature(const ThirdHitPredictionFromCircle *circle,
00040 double z1, double z2, double z3);
00041
00042 private:
00043 const ThirdHitPredictionFromCircle *circle;
00044 double curvature, z1, seg, dzdu;
00045 };
00046
00047 private:
00048 friend class HelixRZ;
00049
00050 double invCenterOnAxis(const Basic2DVector<double> &thirdPoint) const;
00051
00052 Basic2DVector<double> p1, center, axis;
00053 double delta, delta2, theTolerance;
00054 };
00055
00056 #endif