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
00030 #ifndef ANAPHE_AIDA_FITTER_FML_AIDA_FITTER
00031 #define ANAPHE_AIDA_FITTER_FML_AIDA_FITTER 1
00032
00033 #include "AIDA_Dev/IDevFitter.h"
00034
00035 #include <vector>
00036 #include <map>
00037
00038
00039 namespace Anaphe {
00040 namespace FML {
00041 class IFMLFunction;
00042 class Fitter;
00043 }
00044 }
00045
00046 namespace Anaphe {
00047 namespace AIDA_Fitter_FML {
00048
00049 class AIDA_FitParameterSettings;
00050
00051
00052 class AIDA_Fitter : virtual public AIDA::Dev::IDevFitter {
00053
00054 public:
00055 AIDA_Fitter();
00056 virtual ~AIDA_Fitter();
00057
00058 private:
00059
00060 AIDA_Fitter(const AIDA_Fitter &);
00061 AIDA_Fitter & operator = (const AIDA_Fitter &);
00062
00063 public:
00064
00066
00070 AIDA::IFitResult * fit(AIDA::IFitData & fitData, AIDA::IFunction & func) ;
00071
00075 AIDA::IFitResult * fit(AIDA::IBaseHistogram & hist, AIDA::IFunction & func) ;
00076
00080 AIDA::IFitResult * fit(AIDA::IBaseHistogram & hist, std::string model) ;
00081
00085 AIDA::IFitResult * fit(AIDA::IBaseHistogram & hist, std::string model, std::vector<double> & initialParameters) ;
00086
00090 AIDA::IFitResult * fit(AIDA::IDataPointSet & dataPointSet, AIDA::IFunction & f) ;
00091
00095 AIDA::IFitResult * fit(AIDA::IDataPointSet & dataPointSet, std::string model) ;
00096
00100 AIDA::IFitResult * fit(AIDA::IDataPointSet & dataPointSet, std::string model, std::vector<double> & initialParameters) ;
00101
00103 AIDA::IFitResult * fit(AIDA::IFitData & d, std::string model) ;
00104
00105 AIDA::IFitResult * fit(AIDA::IFitData & d, std::string model, std::vector<double> & initialParameters) ;
00106
00110 bool setEngine(std::string name) ;
00111
00115 std::string engineName() ;
00116
00120 AIDA::IFitParameterSettings & fitParameterSettings(std::string name) ;
00121
00125 const std::vector<std::string> & listParameterSettings() ;
00126
00130 void resetParameterSettings() ;
00131
00136 bool setConstraint(std::string expr) ;
00137
00139 const std::vector<std::string> & constraints() ;
00140
00144 void resetConstraints() ;
00145
00149 bool setFitMethod(std::string name);
00150
00154 std::string fitMethodName() ;
00155
00158 AIDA::IDataPointSet * createScan1D(AIDA::IFitData & d, AIDA::IFunction & f, std::string par, int npts, double pmin, double pmax) ;
00159
00164 AIDA::IDataPointSet * createContour(AIDA::IFitData & d, AIDA::IFitResult & r, std::string par1, std::string par2, int npts, double up) ;
00165
00173 void setUseFunctionGradient(bool useGrad) ;
00174
00181 bool useFunctionGradient() ;
00182
00183
00185
00186
00187 bool setOptions(const std::string & options);
00188
00189
00190
00191 protected:
00192
00193 AIDA::IFitResult * fit(AIDA::IFitData& d, Anaphe::FML::IFMLFunction &f);
00194
00195 bool connect(AIDA::IFitData& d, AIDA::IBaseHistogram &h);
00196 bool connect(AIDA::IFitData& d, AIDA::IDataPointSet &dps);
00197
00198
00199 private:
00200
00201 Anaphe::FML::Fitter * m_fitter;
00202
00203 typedef std::map<std::string, AIDA_FitParameterSettings *> FitParMap;
00204 FitParMap m_parmap;
00205 std::vector<std::string> m_constr;
00206
00207
00208 };
00209
00210 }
00211 }
00212 #endif