commit ee9964210c56e7c1868618a4434c5340fef38fe4 Author: Pere Mato Date: Tue Dec 15 11:58:24 2015 +0100 Fix for ROOT-7776 - Integrate GSL 2.0 in ROOT. Changed the version used when option builtin_gsl=ON to 2.1 (latest production). diff --git a/cmake/modules/SearchInstalledSoftware.cmake b/cmake/modules/SearchInstalledSoftware.cmake index 6f04dad..309a8de 100644 --- a/cmake/modules/SearchInstalledSoftware.cmake +++ b/cmake/modules/SearchInstalledSoftware.cmake @@ -332,7 +332,7 @@ if(mathmore OR builtin_gsl) endif() endif() else() - set(gsl_version 1.15) + set(gsl_version 2.1) message(STATUS "Downloading and building GSL version ${gsl_version}") ExternalProject_Add( GSL diff --git a/math/mathmore/src/GSLMultiFit.h b/math/mathmore/src/GSLMultiFit.h index 1d86da5..5b5a887 100644 --- a/math/mathmore/src/GSLMultiFit.h +++ b/math/mathmore/src/GSLMultiFit.h @@ -31,6 +31,7 @@ #include "gsl/gsl_matrix.h" #include "gsl/gsl_multifit_nlin.h" #include "gsl/gsl_blas.h" +#include "gsl/gsl_version.h" #include "GSLMultiFitFunctionWrapper.h" #include "Math/IFunction.h" @@ -143,7 +144,11 @@ public: /// gradient value at the minimum const double * Gradient() const { if (fSolver == 0) return 0; +#if GSL_MAJOR_VERSION > 1 + fType->gradient(fSolver->state, fVec); +#else gsl_multifit_gradient(fSolver->J, fSolver->f,fVec); +#endif return fVec->data; } @@ -154,7 +159,14 @@ public: unsigned int npar = fSolver->fdf->p; fCov = gsl_matrix_alloc( npar, npar ); static double kEpsrel = 0.0001; +#if GSL_MAJOR_VERSION > 1 + gsl_matrix* J = gsl_matrix_alloc(npar,npar); + 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; }