// // The fitting function fcn calculates the chisquare value based on all parameters // // 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("*") to see the list of possible keywords // Root > minuit->mnhelp("SET") explains most parameters // #include "TMinuit.h" TH1F *testHist; CgamFit *SeGAfits = new CgamFit(8, 80); //______________________________________________________________________________ void fcn(Int_t &npar, Double_t *gin, Double_t &f, Double_t *par, Int_t iflag) { Double_t delta, chisq = 0; delta = 1+par[0]+3*par[0]*par[0]; chisq+=delta*delta; delta = 5+7*par[1]+11*par[1]*par[1]*par[1]; chisq+=delta*delta; delta = 5+7*par[2]+21*par[2]*par[2]; chisq+=delta*delta; // testHist->Fit("linFit","+","",0,5); cout << "************" << SeGAfits->FitLine(testHist,1490) << endl;; f = chisq; } void exFitInFit() { char file_name[80]; /* Double_t y[5] = {1.1,2.08,2.97,4.06,5.19}; testHist = new TH1F("test","test",5,0,5); for(Int_t i = 0; i < 5; i ++) { testHist->SetBinContent(i+1,y[i]); } TF1 *linFit = new TF1("linFit","[0]+[1]*x"); testHist->Draw(); testHist->Fit("linFit","+","",0,5); */ sprintf(file_name,"test.root"); TFile f = file_name; testHist = (TH1F*)gDirectory->Get("sega_e_calDop22_1"); testHist->Draw(); cout << "************" << SeGAfits->FitLine(testHist,1490) << endl;; TMinuit *gMinuit = new TMinuit(3); gMinuit->SetFCN(fcn); Double_t arglist[10]; Int_t ierflg = 0; arglist[0] = 1; gMinuit->mnexcm("SET ERR", arglist ,1,ierflg); gMinuit->mnexcm("SET ERR", arglist ,1,ierflg); //___________________________________________________________________________ // Set starting values and step sizes for parameters gMinuit->mnparm(0, "par01", 1.5, 0.01, -50, 50,ierflg); gMinuit->mnparm(1, "par02", 5, 0.01, -50, 50,ierflg); gMinuit->mnparm(2, "par03", 12, 0.01, -50, 50,ierflg); //___________________________________________________________________________ // Now ready for minimization step arglist[0] = 3000; 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); }