#include "Riostream.h" #include "TMinuit.h" #include "TFile.h" #include "TH1.h" #include "TH2.h" #include "TNtuple.h" // Example of a program to fit non-equidistant data points // The fitting function fcn is a simple chisquare function // The data consists of 5 data points (z,y,x) + the errors in errorsz // More details on the various functions or parameters for these functions // can be obtained in an interactive ROOT session with: // Root > TMinuit *minuit = new TMinuit(10); // Root > minuit->mnhelp("*",0) to see the list of possible keywords // Root > minuit->mnhelp("SET",0) explains most parameters Float_t zc[7000],yc[7000],xc[7000],uz[7000],uy[7000],ux[7000],R[7000]; Float_t z[7000],y[7000],x[7000]; Double_t func(float x,float y,float z,Double_t *par) { // Double_t value=( ( (x-24.3883)*par[0] + (y-50.4952)*par[1] + (z-186.755)*(1.-par[0]*par[0]-par[1]*par[1]) ) ); Double_t value=( ( (x-24.3883)*par[0] + (y-50.4952)*par[1] + (z-186.754)*par[2] )/(sqrt(par[0]*par[0] + par[1]*par[1] + par[2]*par[2])) ); // Double_t value=( ( (x-25.9819)*par[0] + (y-51.4134)*par[1] + (z-186.522)*(1.-par[0]*par[0]-par[1]*par[1]) ) ); // Double_t value=( ( (x-25.4819)*par[0] + (y-51.4134)*par[1] + (z-186.522)*par[2] )/(sqrt(par[0]*par[0] + par[1]*par[1] + par[2]*par[2])) ); return value; } void fcn(Int_t &npar, Double_t *gin, Double_t &f, Double_t *par, Int_t iflag) { const Int_t nbins = 808; Int_t i; //calculate chisquare Double_t chisq = 0; Double_t delta; for (i=0;i> val1 >> val2 >> val3 >> val4 >> val5 >> val6 >> val7; if (!in.good()) break; if (nlinesmnparm(0, "nx", vstart[0], step[0], 0,0,ierflg); gMinuit->mnparm(1, "ny", vstart[1], step[1], 0,0,ierflg); gMinuit->mnparm(2, "nz", vstart[2], step[2], 0,0,ierflg); // gMinuit->mnparm(3, "ny", vstart[3], step[3], 0,0,ierflg); // gMinuit->mnparm(4, "nz", vstart[4], step[4], 0,0,ierflg); // Now ready for minimization step arglist[0] = 612; 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); }