00001
00002
00014
00015 #ifdef HAVE_CONFIG_H
00016 #include "config.h"
00017 #endif
00018
00019 #ifndef _MinuitMigrad_H_
00020 #define _MinuitMigrad_H_
00021
00022 #include "Fitter.h"
00023
00024 #ifdef HAVE_MINUIT
00025 class MnMigrad;
00026 #endif
00027
00028 #ifdef HAVE_MINUIT2
00029 namespace ROOT {
00030 namespace Minuit2 {
00031 class MnMigrad;
00032 }
00033 }
00034 #endif
00035
00036 namespace hippodraw {
00037
00054 class MDL_HIPPOPLOT_API MinuitMigrad : public Fitter
00055 {
00056
00057 private:
00058
00061 MinuitMigrad ( const MinuitMigrad & );
00062
00068 struct limit {
00069 double lower;
00070 double upper;
00071 bool set;
00072 };
00073
00076 std::vector < limit > m_limits;
00077
00080 void initLimits ();
00081
00087 #ifdef HAVE_MINUIT
00088 MnMigrad * m_minimizer;
00089 #endif
00090 #ifdef HAVE_MINUIT2
00091 ROOT::Minuit2::MnMigrad * m_minimizer;
00092 #endif
00093
00096 void initialize ();
00097
00100 void checkIndex ( unsigned int index );
00101
00102 public:
00103
00105 MinuitMigrad ( const char * name );
00106
00107 virtual Fitter * clone () const;
00108
00111 virtual void setLimits ( unsigned int i, double lower, double upper );
00112
00115 virtual void setStepSize ( unsigned int i, double size );
00116
00119 virtual bool calcBestFit ();
00120
00122 virtual int calcCovariance ( std::vector< std::vector < double > >& cov );
00123
00124 };
00125
00126 }
00127
00128 #endif // _MinuitMigrad_H_