ROOT  6.06/09
Reference Guide
GSLMultiRootFunctionWrapper.h
Go to the documentation of this file.
1 // @(#)root/mathmore:$Id$
2 // Authors: L. Moneta Dec 2006
3 
4  /**********************************************************************
5  * *
6  * Copyright (c) 2004 ROOT Foundation, CERN/PH-SFT *
7  * *
8  * This library is free software; you can redistribute it and/or *
9  * modify it under the terms of the GNU General Public License *
10  * as published by the Free Software Foundation; either version 2 *
11  * of the License, or (at your option) any later version. *
12  * *
13  * This library is distributed in the hope that it will be useful, *
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
16  * General Public License for more details. *
17  * *
18  * You should have received a copy of the GNU General Public License *
19  * along with this library (see file COPYING); if not, write *
20  * to the Free Software Foundation, Inc., 59 Temple Place, Suite *
21  * 330, Boston, MA 02111-1307 USA, or contact the author. *
22  * *
23  **********************************************************************/
24 
25 // Header file for class GSLMultiRootFunctionWrapper
26 //
27 // Created by: moneta at Sat Nov 13 14:54:41 2004
28 //
29 // Last update: Sat Nov 13 14:54:41 2004
30 //
31 #ifndef ROOT_Math_GSLMultiRootFunctionWrapper
32 #define ROOT_Math_GSLMultiRootFunctionWrapper
33 
34 #include "gsl/gsl_multiroots.h"
35 
37 
38 
39 #include <cassert>
40 
41 namespace ROOT {
42 namespace Math {
43 
44 
45 
46 // can re-use same type for multi-fit
47 
48  typedef double ( * GSLMultiRootFPointer ) ( const gsl_vector *, void *, gsl_vector *);
49  typedef void ( * GSLMultiRootDfPointer ) ( const gsl_vector *, void *, gsl_matrix *);
50  typedef void ( * GSLMultiRootFdfPointer ) ( const gsl_vector *, void *, gsl_vector *, gsl_matrix *);
51 
52 
53 /**
54  wrapper to a multi-dim function without derivatives for multi roots
55  algorithm
56 
57  @ingroup MultiRoots
58 */
60 
61 public:
62 
64  {
65  fFunc.f = 0;
66  fFunc.n = 0;
67  fFunc.params = 0;
68  }
69 
70 
71  /// Fill gsl function structure from a C++ function iterator and size and number of residuals
72  template<class FuncVector>
73  void SetFunctions(const FuncVector & f, unsigned int n ) {
74  const void * p = &f;
75  assert (p != 0);
77  fFunc.n = n;
78  fFunc.params = const_cast<void *>(p);
79  }
80 
81  gsl_multiroot_function * GetFunctions() { return &fFunc; }
82 
83 
84  private:
85 
86  gsl_multiroot_function fFunc;
87 
88 };
89 
90 
91 /**
92  wrapper to a multi-dim function with derivatives for multi roots
93  algorithm
94 
95  @ingroup MultiRoot
96 */
97 
99 
100 public:
101 
103  {
104  fFunc.f = 0;
105  fFunc.df = 0;
106  fFunc.fdf = 0;
107  fFunc.n = 0;
108  fFunc.params = 0;
109  }
110 
111 
112  /// Fill gsl function structure from a C++ function iterator and size and number of residuals
113  template<class FuncVector>
114  void SetFunctions(const FuncVector & f, unsigned int n ) {
115  const void * p = &f;
116  assert (p != 0);
120  fFunc.n = n;
121  fFunc.params = const_cast<void *>(p);
122  }
123 
124  gsl_multiroot_function_fdf * GetFunctions() { return &fFunc; }
125 
126 
127  private:
128 
129  gsl_multiroot_function_fdf fFunc;
130 
131 };
132 
133 
134 
135 } // namespace Math
136 } // namespace ROOT
137 
138 #endif /* ROOT_Math_GSLMultiMinFunctionWrapper */
Namespace for new ROOT classes and functions.
Definition: ROOT.py:1
#define assert(cond)
Definition: unittest.h:542
wrapper to a multi-dim function without derivatives for multi roots algorithm
void SetFunctions(const FuncVector &f, unsigned int n)
Fill gsl function structure from a C++ function iterator and size and number of residuals.
void(* GSLMultiRootDfPointer)(const gsl_vector *, void *, gsl_matrix *)
double(* GSLMultiRootFPointer)(const gsl_vector *, void *, gsl_vector *)
void SetFunctions(const FuncVector &f, unsigned int n)
Fill gsl function structure from a C++ function iterator and size and number of residuals.
void(* GSLMultiRootFdfPointer)(const gsl_vector *, void *, gsl_vector *, gsl_matrix *)
double f(double x)
Namespace for new Math classes and functions.
wrapper to a multi-dim function with derivatives for multi roots algorithm
typedef void((*Func_t)())
Class for adapting a C++ functor class to C function pointers used by GSL MultiRoot Algorithm The tem...
const Int_t n
Definition: legend1.C:16