use of TMinuit with FCN = a class member function

Martin Woudstra (woudstra@nikhef.nl)
Wed, 26 Feb 1997 14:36:21 +0100


Hello,

How can I use the TMinuit class with the FCN function being
a member-function of a class?

I've got a
class CGeometry
{
....
public:
void CalcChiSq(Int_t &, Double_t *, Double_t &f, Double_t *, Int_t);
TMinuit Minuit;
Fit(void); // calling the Minuit routines
...
}

The member function CalcChiSq uses data in the class to calculate
the chi-squared for the present set of parameters.

I set the FCN with the statement:
Minuit.SetFCN(CalcChiSq);

When I try to compile I get the following error messages:
CC: "geofix.cpp", line 1089: error: address of bound function (try using
`CGeometry::*' for pointer type and `&CGeometry::CalcChiSq' for address)
(133)
CC: "geofix.cpp", line 1089: error: bad argument 1 type for
TMinuit::SetFCN():
void (CGeometry::*)(Int_t&, Double_t*, Double_t&, Double_t*, Int_t)
( void (*)(Int_t&, Double_t*, Double_t&, Double_t*, Int_t) expected)
(1264)

When I change the SetFCN statement to:
Minuit.SetFCN(&CGeometry::CalcChiSq);

Then the compiler gives only the second error message:
CC: "geofix.cpp", line 1089: error: bad argument 1 type for
TMinuit::SetFCN():
void (CGeometry::*)(Int_t&, Double_t*, Double_t&, Double_t*, Int_t)
( void (*)(Int_t&, Double_t*, Double_t&, Double_t*, Int_t) expected)
(1264)

How can I work around this problem?
Thanks.

Martin.