summaryrefslogtreecommitdiffstats
path: root/academic/root/root_gsl2.patch
blob: 8f049d7e03bbeefaf52bcb3b74243791aef4d4a7 (plain)
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; 
    }