summaryrefslogtreecommitdiffstats
path: root/academic/root/root_gsl2.patch
diff options
context:
space:
mode:
Diffstat (limited to 'academic/root/root_gsl2.patch')
-rw-r--r--academic/root/root_gsl2.patch42
1 files changed, 42 insertions, 0 deletions
diff --git a/academic/root/root_gsl2.patch b/academic/root/root_gsl2.patch
new file mode 100644
index 0000000000..8f049d7e03
--- /dev/null
+++ b/academic/root/root_gsl2.patch
@@ -0,0 +1,42 @@
+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 <gsl/gsl_version.h>
+
+ #include "Math/IFunction.h"
+ #include <string>
+@@ -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;
+ }