CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_13_patch3/src/RecoPixelVertexing/PixelTriplets/interface/ThirdHitPredictionFromCircle.h

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   // like PixelRecoLineRZ, but makes use of the bending computation
00029   // from the circle fit to get an actual Helix propagation
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