Re: [ROOT] fitting with a member function

From: Rene Brun (Rene.Brun@cern.ch)
Date: Tue Jul 22 2003 - 18:31:36 MEST


Hi John,

The TF1 doc has this remark:

//
//     WHY TF1 CANNOT ACCEPT A CLASS MEMBER FUNCTION ?
//     ===============================================
// This is a frequently asked question.
// C++ is a strongly typed language. There is no way for TF1 (without
// recompiling this class) to know about all possible user defined data types.
// This also apply to the case of a static class function.


In the C-style function referenced by TF1 and called from TH1::Fit,
you can call your class member function.
You can either use a global to access an object of your class
or use TVirtualFitter::SetUserFunc to register the address of a TObject*
to the fitter. In the C-style function, you can retrieve this pointer
with something like:
  TObject *myobject = TVirtualfitter::GetFitter()->GetUserFunc();

Rene Brun


"Dr. John Krane" wrote:
> 
> Hi,
> 
> I'm trying to use weighted histograms to fit a distribution.  Because I
> want to be able to change the histos that I'm using as components, I
> made a little class that holds an array of TH1F.  A member function
> provides the weighted sum of these histograms, with the weights being
> the fit parameters and the interface being as required by TF1.  So I
> tried to make a TF1 for use with the ->Fit method, like this:
> 
>    cerr<< "Assign the histos that contribute to fit"<<endl;
>    func_fit fclass;
>    fclass.add_param(d1or);   //first histo
>    fclass.add_param(d1crl);  //second histo...etc.
> 
>    TF1 *fitFcn = new
>       TF1("fitFcn",fclass.func_val,-600.,-1.,fclass.get_nparam());
> 
> Well the compiler within ROOT doesn't like that, so I tried making a
> pointer-to-member-function and giving that to root, but I didn't get
> anywhere.  Does anybody know how to provide a member-function to TF1?  I
> think my class solution is quite clean for what I'd like to do, but I
> need to get around this barrier...
> 
>         - John



This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:13 MET