00001 #ifndef _Tracker_TwoTrackMinimumDistanceHelixHelix_H_
00002 #define _Tracker_TwoTrackMinimumDistanceHelixHelix_H_
00003
00004 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
00005
00006
00007
00008
00016 class GlobalTrajectoryParameters;
00017
00018 class TwoTrackMinimumDistanceHelixHelix {
00019
00020 public:
00021 TwoTrackMinimumDistanceHelixHelix();
00022 ~TwoTrackMinimumDistanceHelixHelix();
00023
00024 bool calculate( const GlobalTrajectoryParameters &,
00025 const GlobalTrajectoryParameters &,
00026 const float qual=.001 );
00027
00028 std::pair <GlobalPoint, GlobalPoint> points() const;
00029 std::pair <double, double> pathLength() const;
00030
00031 double firstAngle() const;
00032 double secondAngle() const;
00033
00034 private:
00035 bool updateCoeffs( const GlobalPoint & , const GlobalPoint & );
00036 bool oneIteration ( double &, double & ) const;
00037
00038 inline bool parallelTracks () const;
00039 void finalPoints() const;
00040
00041 private:
00042 GlobalTrajectoryParameters *theH, *theG;
00043
00044 double thea, theb, thec1, thec2, thed1, thed2, thee1, thee2, theg, theh;
00045 double thelambdaG, thelambdaH;
00046 double thetanlambdaG, thetanlambdaH;
00047 double thesinpG0, thecospG0;
00048 double thesinpH0, thecospH0;
00049 double thepG0, thepH0;
00050
00051
00052
00053 mutable double thepG, thepH;
00054 mutable double thesinpG, thesinpH;
00055 mutable double thecospG, thecospH;
00056 mutable GlobalPoint pointG, pointH;
00057 mutable double pathG, pathH;
00058 mutable bool pointsUpdated;
00059
00060 double themaxjump, thesingjac;
00061 int themaxiter;
00062
00063 };
00064 #endif