Hi
On Tue, 19 Mar 2002 16:56:28 -0500
Chris Crawford <chris2@lns.mit.edu> wrote
concerning "[ROOT] follow-up of Re: minuit fcn":
> hi rooters,
> i was wondering if TMinuit can accept function objects for fitting?
> i.e. with operator() defined
> --thanks,
See [1]
In essence, you make a static function, and a singleton class:
static void fitFunction(Int_t& nPar, Double_t* in, Double_t& f,
Double_t* p, Int_t flag)
{
FitObject::Instance()->operator()(nPar, in, f, p);
}
class FitObject : public TObject
{
protected:
static FitObject* fgInstance;
public
FitObject() { fgInstance = this; }
static Use(TFitter* fitter) { fitter->SetFCN(fitFunction); }
static FitObject* Instance() { return fgInstance; }
virtual void operator()(Int_t& nPar, Double_t* in,
Double_t& f, Double_t* p) = 0;
ClassDef(FitObject, 0) // Fitting ABC
};
and then you can subclass that class, to say
class MyFitObject : public FitObject {
MyFitObject() { fgInstance = this; }
void operator()(Int_t& nPar, Double_t* in,
Double_t& f, Double_t* p) { ... }
};
and use that to do your fit
TFitter* fitter = new TFitter(...);
FitObject::Use(fitter);
FitObject* fitObject = new MyFitObject;
Double_t arguments[] = { 500, 1 }
fitter->ExecuteCommand("MIGRAD", arguments, 2);
The cited mail has some more ideas.
Yours,
Christian Holm Christensen -------------------------------------------
Address: Sankt Hansgade 23, 1. th. Phone: (+45) 35 35 96 91
DK-2200 Copenhagen N Cell: (+45) 28 82 16 23
Denmark Office: (+45) 353 25 305
Email: cholm@nbi.dk Web: www.nbi.dk/~cholm
[1] http://root.cern.ch/root/roottalk/roottalk02/0602.html
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:46 MET