again fitting

From: Pasha Murat (murat@cdfsga.fnal.gov)
Date: Fri Sep 12 1997 - 23:51:41 MEST


	Hi Wolfgang,

just do:

root [0] .L a1.c
root [1] lfit()

(I guess you tried to execute your macro instead - .x a1.c ...)

			Pasha.

P.S. It would be nice if postings like the one below contain not only
     a bunch of code, but the commands you issued as well. It makes much
     more easy to figure out what is going wrong.
--------------------------------------------------------------------------------

Wolfgang Korsch writes:
 >   Hi again,
 >    I still have problems with the fitiing:
 >    
 >    Here is my code:
 >    
 >    
 > {
 > 
 > Float_t     z[5],x[5],y[5],errorz[5];
 > 
 > void lfit()
 > {
 > //the z values
 > 	z[0]=1;
 > 	z[1]=0.96;
 > 	z[2]=0.89;
 > 	z[3]=0.85;
 > 	z[4]=0.78;
 > // The errors on z values
 >         Float_t error = 0.01;
 > 	errorz[0]=error;
 > 	errorz[1]=error;
 > 	errorz[2]=error;
 > 	errorz[3]=error;
 > 	errorz[4]=error;
 > // the x values
 > 	x[0]=1.5751;
 > 	x[1]=1.5825;
 > 	x[2]=1.6069;
 > 	x[3]=1.6339;
 > 	x[4]=1.6706;
 > // the y values
 > 	y[0]=1.0642;
 > 	y[1]=0.97685;
 > 	y[2]=1.13168;
 > 	y[3]=1.128654;
 > 	y[4]=1.44016;
 > 
 >    TMinuit *gMinuit = new TMinuit(5);  
 > //initialize TMinuit with a maximum of 5 params
 >    gMinuit->SetFCN(fcn);
 > 
 >    Double_t arglist[10];
 >    Int_t ierflg = 0;
 > 
 >    arglist[0] = 1;
 >    gMinuit->mnexcm("SET ERR", arglist ,1,ierflg);
 > 
 > // Set starting values and step sizes for parameters
 >    static Double_t vstart[4] = {3, 1 , 0.1 , 0.01};
 >    static Double_t step[4] = {0.1 , 0.1 , 0.01 , 0.001};
 >    gMinuit->mnparm(0, "a1", vstart[0], step[0], 0,0,ierflg);
 >    gMinuit->mnparm(1, "a2", vstart[1], step[1], 0,0,ierflg);
 >    gMinuit->mnparm(2, "a3", vstart[2], step[2], 0,0,ierflg);
 >    gMinuit->mnparm(3, "a4", vstart[3], step[3], 0,0,ierflg);
 > 
 > // Now ready for minimization step
 >    arglist[0] = 500;
 >    arglist[1] = 1.;
 >    gMinuit->mnexcm("MIGRAD", arglist ,2,ierflg);
 > 
 > // Print results
 >    Double_t amin,edm,errdef;
 >    Int_t nvpar,nparx,icstat;
 >    gMinuit->mnstat(amin,edm,errdef,nvpar,nparx,icstat);
 >    gMinuit->mnprin(3,amin);
 > }
 > 
 > void fcn(Int_t &npar, Double_t *gin, Double_t &f, Double_t *par, Int_t iflag)
 > {
 >    const Int_t nbins = 5;
 >    Int_t i;
 > 
 > //calculate chisquare
 >  
 >   Double_t chisq = 0;
 >   Double_t delta;
 > 
 >    for (i=0;i<nbins; i++) {
 >      delta  = (z[i]-func(x[i],y[i],par))/errorz[i];
 >      chisq += delta*delta;
 >    }
 >    f = chisq;
 > }
 > 
 > Double_t func(float x,float y,Double_t *par)
 > {
 >  Double_t value=( (par[0]*par[0])/(x*x)-1)/ (
 > par[1]+par[2]*y-par[3]*y*y);
 >  return value;
 > }
 > 
 > }
 > 
 > 
 > and here is the error message:
 > 
 > Limitation: Can not define body of function in tempfile 
 > FILE:/usr/users/root/./a1.c LINE:6
 > *** Interpreter error recovered ***
 > 
 > 
 > Thanks again for your help.
 > 
 > Wolfgang



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:26:20 MET