Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
globalGslFuncs.h
Go to the documentation of this file.
1 #ifndef _GLOBALGSLFUNCS_H_
2 #define _GLOBALGSLFUNCS_H_
3 
4 residFunc *residFuncPtr; // global pointer to a fitter class for gsl callback
5 
6 int fGsl(const gsl_vector *x, void *data, gsl_vector *f) {
7  // cout << "fGsl called\n";
8  unsigned int n = residFuncPtr->getN(), p = residFuncPtr->getP(), i;
9  HepVector xHep(p), fHep(n);
10  for (i = 0; i < p; i++) xHep(i + 1) = gsl_vector_get(x, (size_t)i);
11  // cout << "input params:" << xHep << endl;
12  residFuncPtr->resid(&xHep, data, &fHep);
13  //cout << "residuals:" << fHep;
14  for (i = 0; i < n; i++) gsl_vector_set(f, (size_t)i, fHep(i + 1));
15  return GSL_SUCCESS;
16 }
17 
18 int dfGsl(const gsl_vector *x, void *data, gsl_matrix *J){
19  // cout << "dfGsl called\n";
20  int n = residFuncPtr->getN(), p = residFuncPtr->getP();
21  int i, j;
22  HepVector xHep(p);
23  HepMatrix JHep(n,p);
24  for (i = 0; i < p; i++) xHep(i + 1) = gsl_vector_get(x, (size_t)i);
25  //cout << "input params:" << xHep << endl;
26  residFuncPtr->deriv(&xHep, data, &JHep);
27  //cout << "derivs:" << JHep;
28  for (i = 0; i < n; i++) {
29  for (j = 0; j < p; j++) {
30  gsl_matrix_set(J, (size_t)i, (size_t)j, JHep(i + 1, j + 1));
31  }
32  }
33  return GSL_SUCCESS;
34 }
35 
36 int fdfGsl(const gsl_vector *x, void *data, gsl_vector *f, gsl_matrix *J){
37  // cout << "fdfGsl called\n";
38  fGsl(x, data, f);
39  dfGsl(x, data, J);
40  return GSL_SUCCESS;
41 }
42 
43 #endif // _GLOBALGSLFUNCS_H_
Double_t x[NCHANNELS]
Definition: st_tw_resols.C:39
virtual void deriv(const HepVector *x, void *data, HepMatrix *J)=0
TF1 * f
Definition: FitGains.C:21
virtual unsigned int getP()=0
virtual unsigned int getN()=0
residFunc * residFuncPtr
Definition: globalGslFuncs.h:4
int fGsl(const gsl_vector *x, void *data, gsl_vector *f)
Definition: globalGslFuncs.h:6
int fdfGsl(const gsl_vector *x, void *data, gsl_vector *f, gsl_matrix *J)
virtual void resid(const HepVector *x, void *data, HepVector *f)=0
int dfGsl(const gsl_vector *x, void *data, gsl_matrix *J)