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