Re: [ROOT] Histogram fit drawing "goption" option

From: Rene Brun (Rene.Brun@cern.ch)
Date: Sat Jul 31 2004 - 13:28:50 MEST


Eric,

When fitting an option, the goption is the draw option for the object.
This looks natural.
Since an an object may have more than one fitted function, it would be
quite ambiguous if the goption applied to the function(s).
If you want to set the drawing option for the functions, proceed as 
shown in the tutorials; drawing the histogram, then the function or
functions with your selected option.

Rene Brun

On 
Sat, 31 Jul 2004 eric.anciant@noos.fr wrote:

> Hello rooters,
> 
> I am having a hard time understanding the use of the "goption" parameter 
> used when fitting histogram by a function ;  Int_t TH1::Fit(TF1 *f1 
> ,Option_t *option ,Option_t *goption, Axis_t xxmin, Axis_t xxmax)
> 
> What I "naively" believed about this option is illustrated in the macro 
> below where I tried several way of fitting 1D and 2D histograms and 
> drawing the resulting function above the histogram : In the canvas with 
> 1D histograms, I would have assumed that either pad 2 or pad 3 would
> Have looked like pad 4, but they both look like pad 1
> In the canvas with 2D histograms the two pads look different, I would 
> have expect them to look the same.
> 
> I could no find in roottalk diggest or manual or HTML doc a detailed 
> explanation of the effects of this option.
> Looking in the source makes me even more puzzled, because it seems That 
> goption is applied to draw the histogram, not the fitting function
> QUOTE :
>        if (!Foption.Nograph && GetDimension() < 3) Draw(goption);
> 
> (yet in the macro exemple below, the option doesn't seems to affect the 
> way the histograms are drawn neither)
> 
> Wouldn't it make more sense if this drawing option was applied to the 
> function instead of the histogram ? Or am I missing something ? This 
> would be particularly helpfull for 2D histrograms, since in that case 
> the "default" scattered points drawing of the 2D function doesn't suit, 
> most of the time, the way the histrogram is drawn.
> 
> I am using ROOT 4.00.08 with GDK on WIN2K (however, I verified that the 
> described behaviours are the same on ROOT 3.10, or on linux box )
> 
> Thanks,
> 
> eric
> 
> 
> 
> **** MACRO *****
> // RMK : I know the duplication of the functions is useless, but at some 
> point I // got nervous about to what object the drawing option were 
> applied ... // it is eventually not the point ...
> 
> {
> 	// 1D thing **********
> 
> 	TCanvas canvas1D("canvasFit1D","canvasFit1D");
> 	canvas1D.Divide(2,2);
> 	gStyle->SetOptFit(1);
> 	TH1D histo1D("fittedHisto1D","fittedHisto1D",11,-5,5);
> 	histo1D.FillRandom("gaus");
> 	TF1 fitgaus1D_1("fitgaus1D_1","gaus");
> 	TF1 fitgaus1D_2("fitgaus1D_2","gaus");
> 	TF1 fitgaus1D_3("fitgaus1D_3","gaus");
> 
> 
> 	fitgaus1D_1.SetNpx(22); // twice more than bins ...
> 	fitgaus1D_2.SetNpx(22); // twice more than bins ...
> 	fitgaus1D_3.SetNpx(22); // twice more than bins ...
> 
> 	canvas1D.cd(1);
> 	histo1D.Draw();
> 	canvas1D.cd(2);
> 	TH1D* histo1D_copy = histo1D.DrawCopy();
> 	canvas1D.cd(3);
> 	TH1D* histo1D_copy2 = histo1D.DrawCopy();
> 	canvas1D.cd(4);
> 	TH1D* histo1D_copy3 = histo1D.DrawCopy();
> 
> 	canvas1D.cd(1);
> 	histo1D.Fit(&fitgaus1D_1);
> 
> 	canvas1D.cd(2);
> 	histo1D_copy->Fit(&fitgaus1D_2,"","Ptext"); // no text, no marker ... 
> "L" Option
> 
> 	canvas1D.cd(3);
> 	histo1D_copy2->Fit(&fitgaus1D_3,"","samePtext"); // no text, no marker 
> .... "L" option
> 
> 	canvas1D.cd(4);
> 	fitgaus1D_1.Draw("samePtext");  // P, text and no "L" option
> 
> 
> 	// 2D thing ***************************
> 
> 	TCanvas canvas2D("canvasFit2D","canvasFit2D");
> 	canvas2D.Divide(1,2);
> 	gStyle->SetOptFit(1);
> 
> 	TH2D histo("fittedHisto","fittedHisto",11,-5,5,11,-5,5);
> 	histo.Fill(0,0,10);
> 	histo.Fill(1,0,1);
> 	histo.Fill(0,1,1);
> 	histo.Fill(-1,0,1);
> 	histo.Fill(0,-1,1);
> 
> 	canvas2D.cd(1);
> 	histo.Draw("lego2");
> 
> 	canvas2D.cd(2);
> 	TH2D* histocopy = histo.DrawCopy("lego2");
> 
> 	TF2 fitgaus_1("fitgaus2D_1","xygaus");
> 	fitgaus_1.SetParameters(10,0,0.1,0,0.1);
> 	TF2 fitgaus_2("fitgaus2D_2","xygaus");
> 	fitgaus_2.SetParameters(10,0,0.1,0,0.1);
> 
> 	canvas2D.cd(1);
> 	histo.Fit(&fitgaus_1,"0"); // fit without drawing
> 	fitgaus_1.Draw("surfsame"); // superimpose fit on histogram
> 
> 	canvas2D.cd(2);
> 	histocopy->Fit(&fitgaus_2,"","surfsame"); // : try to superimpose 
> during fit => scattered points plot
> 
> }
> 
> 



This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:09 MET