#ifndef ROOT_TFcnAdapter_H_
#define ROOT_TFcnAdapter_H_
#ifndef ROOT_Minuit2_FCNGradientBase
#include "Minuit2/FCNGradientBase.h"
#endif
#ifndef ROOT_Rtypes
#include "Rtypes.h"
#endif
class TFcnAdapter : public ROOT::Minuit2::FCNGradientBase {
public:
TFcnAdapter(void (*fcn)(int&, double*, double&, double*, int)) : fFCN(fcn), fUp(1) {}
virtual ~TFcnAdapter() {}
const ROOT::Minuit2::FCNBase& Base() const {return *this;}
double operator()(const std::vector<double>&) const;
double Up() const {return fUp; }
void SetErrorDef(double up) { fUp = up; }
std::vector<double> Gradient(const std::vector<double>&) const;
double operator()(int npar, double* params,int iflag = 4) const;
private:
void (*fFCN)(int&, double*, double&, double*, int);
double fUp;
mutable std::vector<double> fGradCache;
ClassDef(TFcnAdapter,0)
};
#endif //ROOT_GFcnAdapter_H_