10 #ifndef ROOT_Minuit2_FumiliFCNBase
11 #define ROOT_Minuit2_FumiliFCNBase
47 class FumiliFCNBase :
public FCNBase {
56 fNumberOfParameters(0),
70 FumiliFCNBase(
unsigned int npar) :
71 fNumberOfParameters(npar),
73 fGradient(std::vector<double>(npar)),
74 fHessian(std::vector<double>(static_cast<int>( 0.5*npar*(npar+1) )) )
83 virtual ~FumiliFCNBase() {}
98 virtual void EvaluateAll(
const std::vector<double> & par ) = 0;
106 virtual double Value()
const {
return fValue; }
112 virtual const std::vector<double> & Gradient()
const {
return fGradient; }
120 virtual double Hessian(
unsigned int row,
unsigned int col)
const {
121 assert( row < fGradient.size() && col < fGradient.size() );
123 return fHessian[col+row*(row+1)/2];
125 return fHessian[row+col*(col+1)/2];
132 virtual unsigned int Dimension() {
return fNumberOfParameters; }
140 virtual void InitAndReset(
unsigned int npar) {
141 fNumberOfParameters = npar;
142 fGradient = std::vector<double>(npar);
143 fHessian = std::vector<double>(
static_cast<int>( 0.5*npar*(npar+1) ));
147 void SetFCNValue(
double value) { fValue = value; }
149 std::vector<double> & Gradient() {
return fGradient; }
151 std::vector<double> & Hessian() {
return fHessian; }
158 unsigned int fNumberOfParameters;
160 std::vector<double> fGradient;
161 std::vector<double> fHessian;
170 #endif // ROOT_Minuit2_FumiliFCNBase