#ifndef ROOT_Minuit2_MnHesse
#define ROOT_Minuit2_MnHesse
#include "Minuit2/MnConfig.h"
#include "Minuit2/MnStrategy.h"
#include <vector>
namespace ROOT {
namespace Minuit2 {
class FCNBase;
class MnUserParameterState;
class MnUserParameters;
class MnUserCovariance;
class MnUserTransformation;
class MinimumState;
class MnMachinePrecision;
class MnFcn;
class FunctionMinimum;
class MnHesse {
public:
MnHesse() : fStrategy(MnStrategy(1)) {}
MnHesse(unsigned int stra) : fStrategy(MnStrategy(stra)) {}
MnHesse(const MnStrategy& stra) : fStrategy(stra) {}
~MnHesse() {}
MnUserParameterState operator()(const FCNBase&, const std::vector<double>&, const std::vector<double>&, unsigned int maxcalls=0) const;
MnUserParameterState operator()(const FCNBase&, const std::vector<double>&, unsigned int nrow, const std::vector<double>&, unsigned int maxcalls = 0) const;
MnUserParameterState operator()(const FCNBase&, const std::vector<double>&, const MnUserCovariance&, unsigned int maxcalls=0) const;
MnUserParameterState operator()(const FCNBase&, const MnUserParameters&, unsigned int maxcalls=0) const;
MnUserParameterState operator()(const FCNBase&, const MnUserParameters&, const MnUserCovariance&, unsigned int maxcalls=0) const;
MnUserParameterState operator()(const FCNBase&, const MnUserParameterState&, unsigned int maxcalls=0) const;
void operator()(const FCNBase&, FunctionMinimum&, unsigned int maxcalls=0) const;
MinimumState operator()(const MnFcn&, const MinimumState&, const MnUserTransformation&, unsigned int maxcalls=0) const;
unsigned int Ncycles() const {return fStrategy.HessianNCycles();}
double Tolerstp() const {return fStrategy.HessianStepTolerance();}
double TolerG2() const {return fStrategy.HessianG2Tolerance();}
private:
MnStrategy fStrategy;
};
}
}
#endif // ROOT_Minuit2_MnHesse