Hi Yiqun,
You should use it in your objective function fcn:
For instance:
void FitChisquare(Int_t &nrPar,Double_t *grad,Double_t
&chiSquare,
Double_t *par,Int_t flag)
{
// Minimization function using a Chisquare method
const MyClass *fit = (MyClass *)
gMinuit->GetObjectFit();
const Int_t nrPoints = fit->GetN();
const Int_t nrVar = fit->GetNrVar();
const Double_t *x = (fit->GetX()).GetArray();
const Double_t *y = (fit->GetY()).GetArray();
const Double_t *ey = (fit->GetEY()).GetArray();
.
.
.
with
class MyClass : public TObject
{
protected:
Int_t fNrPoints; //#total data point
TArrayD fX;
TArrayD fY;
TArrayD fEY;
.
.
};
Eddy
--- Yiqun Wang <yqwang@rcf.rhic.bnl.gov> wrote:
> Edmont:
>
> Thanks for your reply! However, my problem is not
> with TMinuit. I should
> explained more clearly. The problem is the function
> "fcn(Int_t &npar,
> Double_t *gin, Double_t &f, Double_t *par, Int_t
> iflag)". How can it get
> the data points? It has no knowledge of any
> objects. In "Ifit.C", global
> variables were used. My question is, is there any
> other way?
>
> Yiqun Wang
>
> > Hi Yiqun,
> >
> > Have a look at TMinuit::SetObjectFit and
> > TMinuit::GetObjectFit with which you can set and
> > retrieve apointer to a class that inherits from
> > TObject. In this class you could define data
> > points and other fit information.
> >
> > Eddy
> >
> > --- Yiqun Wang <yqwang@rcf.rhic.bnl.gov> wrote:
> >> Hi, ROOTers:
> >>
> >> I have a question on using TMinuit. I read the
> >> tutorial "Ifit.C", but it
> >> did not answer my question. I am using ROOT
> 3.10.00
> >> self-compiled on
> >> Mandrake 9.1.
> >>
> >> In "Ifit.C", the data points "Float_t
> >> z[5],x[5],y[5],errorz[5];" are
> >> global variables. This is understandable, since
> >> "void fcn(Int_t &npar,
> >> Double_t *gin, Double_t &f, Double_t *par, Int_t
> >> iflag)" has not idea what
> >> data points to use beforehand. However, this is
> >> ugly, not particularly
> >> safe.
> >>
> >> Now suppose I want to make a custom fitter for my
> >> own class. Data points
> >> will come from the members of the class (actually
> I
> >> will reload the data
> >> members every event, use the fitter, and write
> fit
> >> result to a tree). Can
> >> I call "TMinuit::SetFCN(...)" on a memeber
> function
> >> "void fcn(Int_t &npar,
> >> Double_t *gin, Double_t &f, Double_t *par, Int_t
> >> iflag)" (so it knows the
> >> member data, without the need to make the data
> >> global)? Is this possible?
> >> Or there is a better solution?
> >>
> >> Thanks in advance!
> >>
> >> Yiqun Wang
> >>
> >>
>
>
>
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:15 MET