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