Re: minuit fcn

From: Jonathan M. Gilligan (jonathan.gilligan@vanderbilt.edu)
Date: Wed Feb 02 2000 - 18:05:50 MET


I have solved similar problems posed by CINT's inability to handle pointers 
to member functions by declaring a function that wraps the access:

static DPrecAlign * g_DPA_Object = NULL;
// global object, to give fcn a context...

void fcn_wrapper(Int_t &npar, Double_t *gin,
Double_t &f, Double_t *u, Int_t flag)
{
     assert(g_DPA_Object != NULL);
     if (g_DPA_Object)
         g_DPA_Object->fcn(npar, gin, f, u, flag);
         // if fcn needs a this context (to access member variables),
         // it gets it from g_DPA_Object.
}

then in your code, you can write:

DPrecAlign * localObject;
...
g_DPA_Object = localObject;
fit->SetFCN(fcn_wrapper);
...
// do your fitting here...
...
g_DPA_Object = NULL;    // when you're done.

If DPrecAlign::fit() does not use any non-static member variables, then you 
can dispense with the need for a global g_DPS_Object altogether

At 04:57 AM 2/2/2000 , Gilles Orazi wrote:
>Hello,
>
>Is it possible to use Minuit with a fcn which is a member of an
>object ?  I have some problems when trying to do it.
>
>
>Here is a more precise description of what I'm trying to do:
>
>I have created a class called DPrecAlign which contains a list of data
>points.
>
>I also have a class called DPrecAlignWithFit declared as follows :
>
>class DPrecAlignWithFit : public TObject {
>  public:
>   DPrecAlign *alignement ;
>   TMinuit *fit ;
>...
>}
>
>The TMinuit object is used to fit the list of data points contained in
>the DPrecAlign object.
>
>The likelihood function is computed by a method of DPrecAlign,
>declared as follows:
>void DPrecAlign::fcn(...)
>
>My problem is that when I'm trying to define this method as the minuit
>FCN:
>
>   fit->SetFCN(&DPrecAlign::fcn);
>
>I get a compiler error:
>"Argument of type 'void (DPrecAlign::*)(int,double *,double,double *,int)'
>could not be converted to 'void *'"
>
>I tryed many things to solve it but nothing worked.
>
>
>
>Thanks a lot by advance for your answers.
>
>Cheers,
>--
>                 Gilles
>
>

===========================================================================
Jonathan M. Gilligan                     <jonathan.gilligan@vanderbilt.edu>
Research Assistant Professor of Physics                      (615) 343-6252
Dept. of Physics and Astronomy, Box 1807-B                    Fax: 343-7263
6823 Stevenson Center
Vanderbilt University, Nashville, TN 37235           Dep't Office: 322-2828



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:18 MET