00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef MULTIPEAKFIT_H
00030 #define MULTIPEAKFIT_H
00031
00032 #include "Fit.h"
00033
00034 class MultiPeakFit : public Fit
00035 {
00036 Q_OBJECT
00037
00038 public:
00039 enum PeakProfile{Gauss, Lorentz};
00040 MultiPeakFit(ApplicationWindow *parent, QwtPlotCurve *c, PeakProfile profile = Gauss, int peaks = 1);
00041 MultiPeakFit(ApplicationWindow *parent, Graph *g = 0, PeakProfile profile = Gauss, int peaks = 1);
00042 MultiPeakFit(ApplicationWindow *parent, Table *t, const QString& xCol, const QString& yCol,
00043 int startRow = 0, int endRow = -1, PeakProfile profile = Gauss, int peaks = 1);
00044
00045 int peaks(){return d_peaks;};
00046 void setNumPeaks(int n);
00047
00048 void enablePeakCurves(bool on){generate_peak_curves = on;};
00049 void setPeakCurvesColor(int colorIndex);
00050 void setPeakCurvesColor(const QColor& color){d_peaks_color = color;};
00051
00052 static QString generateFormula(int order, PeakProfile profile);
00053 static QStringList generateParameterList(int order);
00054 static QStringList generateExplanationList(int order);
00055
00057 void guessInitialValues();
00058
00059 virtual double eval(double *par, double x);
00060 double evalPeak(double *par, double x, int peak);
00061
00062 PeakProfile profile(){return d_profile;};
00063
00064 private:
00065 void init(int);
00066
00067 QString logFitInfo(int iterations, int status);
00068 void generateFitCurve();
00069 static QString peakFormula(int peakIndex, PeakProfile profile);
00071 void insertPeakFunctionCurve(int peak);
00072 void customizeFitResults();
00073
00075 int d_peaks;
00076
00078 bool generate_peak_curves;
00079
00081 QColor d_peaks_color;
00082
00084 PeakProfile d_profile;
00085 };
00086
00087 class LorentzFit : public MultiPeakFit
00088 {
00089 Q_OBJECT
00090
00091 public:
00092 LorentzFit(ApplicationWindow *parent, QwtPlotCurve *);
00093 LorentzFit(ApplicationWindow *parent, QwtPlotCurve *, double, double);
00094 LorentzFit(ApplicationWindow *parent, Graph *g);
00095 LorentzFit(ApplicationWindow *parent, Graph *g, const QString& curveTitle);
00096 LorentzFit(ApplicationWindow *parent, Graph *g, const QString& curveTitle, double start, double end);
00097 LorentzFit(ApplicationWindow *parent, Table *t, const QString& xCol, const QString& yCol, int startRow = 0, int endRow = -1);
00098
00099 private:
00100 void init();
00101 };
00102
00103 class GaussFit : public MultiPeakFit
00104 {
00105 Q_OBJECT
00106
00107 public:
00108 GaussFit(ApplicationWindow *parent, QwtPlotCurve *);
00109 GaussFit(ApplicationWindow *parent, QwtPlotCurve *, double, double);
00110 GaussFit(ApplicationWindow *parent, Graph *g);
00111 GaussFit(ApplicationWindow *parent, Graph *g, const QString& curveTitle);
00112 GaussFit(ApplicationWindow *parent, Graph *g, const QString& curveTitle, double start, double end);
00113 GaussFit( ApplicationWindow *parent, Table *t, const QString& xCol, const QString& yCol, int startRow = 0, int endRow = -1);
00114
00115 private:
00116 void init();
00117 };
00118
00119 class GaussAmpFit : public Fit
00120 {
00121 Q_OBJECT
00122
00123 public:
00124 GaussAmpFit(ApplicationWindow *parent, QwtPlotCurve *);
00125 GaussAmpFit(ApplicationWindow *parent, QwtPlotCurve *, double, double);
00126 GaussAmpFit(ApplicationWindow *parent, Graph *g);
00127 GaussAmpFit(ApplicationWindow *parent, Graph *g, const QString& curveTitle);
00128 GaussAmpFit(ApplicationWindow *parent, Graph *g, const QString& curveTitle, double start, double end);
00129 GaussAmpFit(ApplicationWindow *parent, Table *t, const QString& xCol, const QString& yCol, int startRow = 0, int endRow = -1);
00130
00131 void guessInitialValues();
00132 double eval(double *par, double x);
00133
00134 private:
00135 void init();
00136 void calculateFitCurveData(double *X, double *Y);
00137 };
00138 #endif