Re: [ROOT] FitSlicesX/Y

From: Rene Brun (Rene.Brun@cern.ch)
Date: Tue May 23 2000 - 08:33:52 MEST


Hi Eddy,
I have modified the algorithm computing the "number of entries"
in the projected histogram (when TH2::FitSlicesY calls TH2::ProjectionY).
The new number of entries is the number of non-empty bins.

In your example, there is another problem. When you fill your TH2F histogram
with weights, you should specify hpxpy->SetSumw2() before filling.
If the correct sum of squares of weights is stored, TH2::ProjectionY and 
TH2::FitSlicesY will compute correct errors.
See mods in the code below.

Rene Brun


Eddy Offermann wrote:
> 
> Hi Rene,
> 
> I did not hear back from you. So let me give you an example (should have
> done that immediately). I modified in the tutorial examples the one
> that fits the slices. Instead of reading in the hpxpy from a file,
> I create it locally. You can see that I either fill it through
> hpxpy->Fill(px,py,1.0) or hpxpy->Fill(px,py,1.0e-5). I have reduced
> "cut" to -100 so it does not kick in.
> In the first case things work fine but in the second one all slices are
> skipped because "Int_t(nrentries) == 0".
> 
> {
> //
> // To see the output of this macro, click begin_html <a
> href="gif/fitslicesy.gif" >here</a> end_html
> //    This macro illustrates how to use the TH1::FitSlicesY function
> //    It uses the TH2F histogram generated in macro hsimple.C
> //    It invokes FitSlicesY and draw the fitted "mean" and "sigma"
> //    in 2 sepate pads.
> //    This macro shows also how to annotate a picture, change
> //    some pad parameters.
> //
>    gROOT->Reset();
> 
> // Change some default parameters in the current style
>    gStyle->SetLabelSize(0.06,"x");
>    gStyle->SetLabelSize(0.06,"y");
>    gStyle->SetFrameFillColor(38);
>    gStyle->SetTitleW(0.6);
>    gStyle->SetTitleH(0.1);
> 
> // Connect the input file and get the 2-d histogram in memory
> //   TFile *hsimple = new TFile("hsimple.root");
> //   TH2F *hpxpy = (TH2F*)hsimple->Get("hpxpy");
>    TH2F *hpxpy  = new TH2F("hpxpy","py vs px",40,-4,4,40,-4,4);
     hpxpy->Sumw2(); //<================== new line
>    gRandom->SetSeed();
>    Float_t px, py, pz;
>    for (Int_t i = 0; i < 25000; i++) {
>       gRandom->Rannor(px,py);
>       pz = px*px + py*py;
>       Float_t random = gRandom->Rndm(1);
>       //hpxpy->Fill(px,py,1.0);
>       hpxpy->Fill(px,py,1.0e-5);
>    }
> 
> // Create a canvas and divide it
>    TCanvas *c1 = new TCanvas("c1","c1",700,500);
>    c1->SetFillColor(42);
>    c1->Divide(2,1);
>    c1->cd(1);
>    TPad *left = (TPad*)gPad;
>    left->Divide(1,2);
> 
> // Draw 2-d original histogram
>    left->cd(1);
>    gPad->SetTopMargin(0.12);
>    gPad->SetFillColor(33);
>    hpxpy->Draw();
>    hpxpy->GetXaxis()->SetLabelSize(0.06);
>    hpxpy->GetYaxis()->SetLabelSize(0.06);
>    hpxpy->SetMarkerColor(kYellow);
> 
> // Fit slices projected along Y fron bins in X [7,32]
> //   hpxpy->FitSlicesY(0,0,0,20);
>    hpxpy->FitSlicesY(0,0,0,-100);
> 
> // Show fitted "mean" for each slice
>    left->cd(2);
>    gPad->SetFillColor(33);
>    hpxpy_0->Draw();
>    c1->cd(2);
>    TPad *right = (TPad*)gPad;
>    right->Divide(1,2);
>    right->cd(1);
>    gPad->SetTopMargin(0.12);
>    gPad->SetLeftMargin(0.15);
>    gPad->SetFillColor(33);
>    hpxpy_1->Draw();
> 
> // Show fitted "sigma" for each slice
>    right->cd(2);
>    gPad->SetTopMargin(0.12);
>    gPad->SetLeftMargin(0.15);
>    gPad->SetFillColor(33);
>    hpxpy_2->SetMinimum(0.8);
>    hpxpy_2->Draw();
> 
> //attributes
>    hpxpy_0->SetLineColor(kYellow);
>    hpxpy_1->SetLineColor(kYellow);
>    hpxpy_2->SetLineColor(kYellow);
>    hpxpy_0->SetMarkerColor(kRed);
>    hpxpy_1->SetMarkerColor(kRed);
>    hpxpy_2->SetMarkerColor(kRed);
>    hpxpy_0->SetMarkerStyle(21);
>    hpxpy_1->SetMarkerStyle(21);
>    hpxpy_2->SetMarkerStyle(21);
>    hpxpy_0->SetMarkerSize(0.6);
>    hpxpy_1->SetMarkerSize(0.6);
>    hpxpy_2->SetMarkerSize(0.6);
> }
> 
> > Date: Thu, 18 May 2000 07:36:44 +0000
> > From: Rene Brun <Rene.Brun@cern.ch>
> > MIME-Version: 1.0
> > To: Eddy Offermann <eddy@rentec.com>
> > CC: roottalk@pcroot.cern.ch
> > Subject: Re: [ROOT] FitSlicesX/Y
> > Content-Transfer-Encoding: 7bit
> >
> > Hi Eddy,
> > Could you clarify your problem ? TH1::FitSlicesX/Y has a parameter "cut"
> > to reject slices with a number of entries (not the sum of weights) less than
> > cut.
> >
> > Rene Brun
> >



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:25 MET