#ifndef ROOT_TMinuitMinimizer
#define ROOT_TMinuitMinimizer
#ifndef ROOT_Math_Minimizer
#include "Math/Minimizer.h"
#endif
#ifndef ROOT_Rtypes
#include "Rtypes.h"
#endif
class TMinuit;
namespace ROOT {
namespace Minuit {
enum EMinimizerType {
kMigrad,
kSimplex,
kCombined,
kMigradImproved,
kScan,
kSeek
};
}
}
class TMinuitMinimizer : public ROOT::Math::Minimizer {
public:
TMinuitMinimizer ( ROOT::Minuit::EMinimizerType type = ROOT::Minuit::kMigrad);
TMinuitMinimizer ( const char * type );
~TMinuitMinimizer ();
private:
TMinuitMinimizer(const TMinuitMinimizer &);
TMinuitMinimizer & operator = (const TMinuitMinimizer & rhs);
public:
virtual void SetFunction(const ROOT::Math::IMultiGenFunction & func);
virtual void SetFunction(const ROOT::Math::IMultiGradFunction & func);
virtual bool SetVariable(unsigned int ivar, const std::string & name, double val, double step);
virtual bool SetLimitedVariable(unsigned int ivar , const std::string & name , double val , double step , double , double );
#ifdef LATER
virtual bool SetLowerLimitedVariable(unsigned int ivar , const std::string & name , double val , double step , double lower );
virtual bool SetUpperLimitedVariable(unsigned int ivar , const std::string & name , double val , double step , double upper );
#endif
virtual bool SetFixedVariable(unsigned int , const std::string & , double );
virtual bool SetVariableValue(unsigned int , double );
virtual bool Minimize();
virtual double MinValue() const;
virtual double Edm() const;
virtual const double * X() const { return &fParams.front(); }
virtual const double * MinGradient() const { return 0; }
virtual unsigned int NCalls() const;
virtual unsigned int NDim() const { return fDim; }
virtual unsigned int NFree() const;
virtual bool ProvidesError() const { return true; }
virtual const double * Errors() const { return &fErrors.front(); }
virtual double CovMatrix(unsigned int i, unsigned int j) const {
return ( fCovar.size() > (i + fDim* j) ) ? fCovar[i + fDim* j] : 0;
}
virtual int CovMatrixStatus() const;
virtual double GlobalCC(unsigned int ) const;
virtual bool GetMinosError(unsigned int i, double & errLow, double & errUp);
virtual bool Hesse();
virtual bool Scan(unsigned int i, unsigned int &nstep, double * x, double * y, double xmin = 0, double xmax = 0);
virtual bool Contour(unsigned int i, unsigned int j, unsigned int & npoints, double *xi, double *xj);
virtual void PrintResults();
protected:
static void Fcn( int &, double * , double & f, double * , int);
static void FcnGrad( int &, double * g, double & f, double * , int);
void DoClear();
void RetrieveParams();
void RetrieveErrorMatrix();
private:
bool fUsed;
bool fMinosRun;
unsigned int fDim;
unsigned int fStrategy;
std::vector<double> fParams;
std::vector<double> fErrors;
std::vector<double> fCovar;
ROOT::Minuit::EMinimizerType fType;
TMinuit * fMinuit;
static ROOT::Math::IMultiGenFunction * fgFunc;
static TMinuit * fgMinuit;
static bool fgUsed;
ClassDef(TMinuitMinimizer,1)
};
#endif /* ROOT_TMinuitMinimizer */