Thanks Rene,
I have been looking at http://root.cern.ch/root/html/TH1.htm and didn't
see this very clear discussion. Sorry: I always feel silly when I miss
a well-documented fact. I will try the full-blown TVirtualFitter method
that I was hoping to avoid.
(What should I have typed into the "search the root reference guide"
window to find the TF1 doc you mentioned? Your excerpt is actually not
in the TH1.htm page that I have been using as a reference, nor in the
"fitting with a user-defined function" etc. pages in the ref guide. I
also didn't see it in the User's Guide 3.02c. A new source of
documentation is always welcome...what is the origin of that excerpt?)
- John
Rene Brun wrote:
> 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