00001 00011 #ifndef CBM_RICH_RING_FITTER_ELLIPSE_TAU 00012 #define CBM_RICH_RING_FITTER_ELLIPSE_TAU 00013 00014 #include <vector> 00015 #include "CbmRichRingFitterEllipseBase.h" 00016 #include "TMath.h" 00017 #include "TVectorD.h" 00018 #include "TMatrixD.h" 00019 #include "TMatrixDEigen.h" 00020 00021 #include <iostream> 00022 00023 using std::vector; 00024 00025 00035 class CbmRichRingFitterEllipseTau : public CbmRichRingFitterEllipseBase 00036 { 00037 public: 00038 00042 CbmRichRingFitterEllipseTau(); 00043 00047 virtual ~CbmRichRingFitterEllipseTau(); 00048 00052 virtual void DoFit( 00053 CbmRichRingLight *ring); 00054 00055 private: 00056 00057 double fM[36]; 00058 double fP[25]; 00059 double fQ[25]; 00060 double fZ[MAX_NOF_HITS_IN_RING*6]; 00061 double fZT[MAX_NOF_HITS_IN_RING*6]; 00062 double fAlgPar[6]; 00063 00068 void TransformEllipse( 00069 CbmRichRingLight* ring); 00070 00074 void InitMatrices( 00075 CbmRichRingLight* ring); 00076 00080 void Taubin(); 00081 00085 void Inv5x5(); 00086 00090 void AMultB( 00091 const double * const ap, 00092 int na, 00093 int ncolsa, 00094 const double * const bp, 00095 int nb, 00096 int ncolsb, 00097 double *cp); 00098 00102 void Jacobi( 00103 double a[5][5], 00104 double d[5], 00105 double v[5][5]); 00106 00110 void Eigsrt( 00111 double d[5], 00112 double v[5][5]); 00113 }; 00114 00115 #endif