00001 #ifndef _Q_FITTER_HH_ 00002 #define _Q_FITTER_HH_ 00003 00011 #include "QError.hh" 00012 #include "QCuore.hh" 00013 #include "QVector.hh" 00014 #include "QMathFunction.hh" 00015 00016 Q_BEGIN_NAMESPACE 00017 00018 class QFitter : public QMathFunction 00019 { 00020 public: 00021 00023 QFitter(QRoutinePointer funcpointer, unsigned int NParameters, double LowBound, double UpBound); 00024 00026 QFitter(const QMathFunction& func); 00027 00029 ~QFitter(); 00030 00032 void SetParameter(unsigned int p, double val, double min, double max); 00033 00035 void SetParameter(unsigned int p, const char* name, double val, double min, double max); 00036 00038 void FixParameter(unsigned int p, double val); 00039 00041 void FixParameter(unsigned int p, const char* name, double val); 00042 00044 void Print(); 00045 00047 void PrintResult(); 00048 00050 QError Fit(const QVector& data, double minfit, double maxfit); 00051 00054 QError Fit(const QVector& data, double error, double minfit, double maxfit); 00055 00063 QError Fit(const QVector& data, const QVector& errors, double minfit, double maxfit, double eqlenght = -1); 00064 00066 QMathFunction GetFittedFunction(); 00067 00069 QVector& GetResiduals() {return fResiduals;} 00070 00072 double GetChiSquare() {return fChiSquare;} 00073 00075 void SetTF1(TF1& f1); 00076 00077 private: 00078 00080 static double RootRoutine(double* x, double* params); 00081 00083 static const QMathFunction* fFunctionP; 00084 00085 double* fParMin; 00086 double* fParMax; 00087 double* fParErr; 00088 bool* fIsFixed; 00089 00090 QVector fResiduals; 00091 QVector fErrors; 00092 double fChiSquare; 00093 00094 }; 00095 00096 Q_END_NAMESPACE 00097 00098 #endif