diff -u -r root/math/mathmore/src/GSLMultiFit.h root-patched/math/mathmore/src/GSLMultiFit.h --- root/math/mathmore/src/GSLMultiFit.h 2015-06-23 16:56:20.000000000 +0100 +++ root-patched/math/mathmore/src/GSLMultiFit.h 2015-11-18 22:30:54.300681289 +0000 @@ -32,6 +32,7 @@ #include "gsl/gsl_multifit_nlin.h" #include "gsl/gsl_blas.h" #include "GSLMultiFitFunctionWrapper.h" +#include #include "Math/IFunction.h" #include @@ -139,7 +140,14 @@ /// gradient value at the minimum const double * Gradient() const { if (fSolver == 0) return 0; - gsl_multifit_gradient(fSolver->J, fSolver->f,fVec); +#if GSL_MAJOR_VERSION >=2 + gsl_matrix *J=gsl_matrix_alloc(fSolver->fdf->n, fSolver->fdf->p); + gsl_multifit_fdfsolver_jac (fSolver, J); + gsl_multifit_gradient(J, fSolver->f, fVec); + gsl_matrix_free(J); +#else + gsl_multifit_gradient(fSolver->J, fSolver->f, fVec); +#endif return fVec->data; } @@ -150,7 +158,14 @@ unsigned int npar = fSolver->fdf->p; fCov = gsl_matrix_alloc( npar, npar ); static double kEpsrel = 0.0001; +#if GSL_MAJOR_VERSION >=2 + gsl_matrix *J=gsl_matrix_alloc(fSolver->fdf->n, fSolver->fdf->p); + gsl_multifit_fdfsolver_jac (fSolver, J); + int ret = gsl_multifit_covar(J, kEpsrel, fCov); + gsl_matrix_free(J); +#else int ret = gsl_multifit_covar(fSolver->J, kEpsrel, fCov); +#endif if (ret != GSL_SUCCESS) return 0; return fCov->data; }