Hi,
All your fit functions have the same name, replacing existing ones. If you use is instead of isize in the call to sprintf it should work.
Cheers, Axel
nguler_at_jlab.org wrote:
>Hello All,
>
>I am using root 5.26-00-64bit. I have a TH2F object:
>
> TH2F *histsim = new TH2F(histsimName,histsimName,256,0,256,256,0,256);
>
>Then I define fit functions:
>
> TF2 *fitsim1_5 =
> new
>TF2("fitsim1_5",Gaus2D,jVec[0]-range,jVec[0]+range,iVec[0]-range,iVec[0]+range,5);
> fitsim1_5->SetParameters(pVec[0]/100,jVec[0],1.,iVec[0],1.);
>
> TF2 *fitsim2_5 =
> new
>TF2("fitsim2_5",Gaus2D,jVec[1]-range,jVec[1]+range,iVec[1]-range,iVec[1]+range,5);
> fitsim2_5->SetParameters(pVec[1]/100,jVec[1],1.,iVec[1],1.);
>
>and fit the histogram:
>
> histsim->Fit("fitsim1_5","RN");
> histsim->Fit("fitsim2_5","RN");
>
>And it works. However, I would like to create the fit functions in a
>loop and
>make the fitting in the same loop for several different regions, such
>as:
>
>const int isize = pVec.size(); //// isize = 2 since there are two peaks
>to
>fit here.
> TF2 *fitarr[isize];
> for (int is=0; is<isize; is++)
> {
> char afitn[20];
> int range = 10;
> sprintf(afitn, "fitsim3_%d", isize);
> double xmin = double(jVec[is] -range);
> double xmax = double(jVec[is] +range);
> double ymin = double(iVec[is] -range);
> double ymax = double(iVec[is] +range);
> double xctr = double(jVec[is]);
> double yctr = double(iVec[is]);
> double peak = double(pVec[is]/100);
>
> fitarr[is] = new TF2(afitn,Gaus2D,xmin,xmax,ymin,ymax,5);
> fitarr[is]->SetParameters(peak,xctr,1.,yctr,1.);
>
> fitarr[is]->SetLineColor(kBlack);
> histsim->Fit(afitn,"RN+");
> fitarr[is]->SetRange(0,0, 256,256);
> fitarr[is]->SetMaximum(histsim->GetMaximum());
> fitarr[is]->Draw("cont1, same");
> gPad->Modified();
> gPad->Update();
> }
>
>When I do this, it only plots the last fit in the loop. The first fit
>is lost
>somewhere and not plotted. If I do the loop only for one fit function
>(by
>changing isize to 1), it plots the first fit. When isize =2, it only
>plots the
>second fit. I don't see any difference between the first method (which
>works)
>and the second method (that fails). Unfortunately I am not able to send
>a
>working code since the input files are rather big. But the main idea is
>to do
>multiple fits on the same histogram (on different ranges of it) by
>using a for
>loop. I appreciate your comments if I am doing something wrong in the
>for
>loop.
>Thanks,
>
>- Nevzat Guler
>(757) 553-8318
Received on Thu Dec 02 2010 - 00:22:27 CET
This archive was generated by hypermail 2.2.0 : Thu Dec 02 2010 - 05:50:02 CET