Re: [ROOT] binomial errors

From: Rene Brun (Rene.Brun@cern.ch)
Date: Wed May 01 2002 - 01:06:28 MEST


Hi Rustam,

I have modified the formula computing the Binomial errors
when dividing two histograms with coefficients not equal to 1.
With this mod, your script produces the following result:
x=9.95 y=0.5
er=0.0238095 relative error 0.047619
x=9.95 y=0.5
er=0.0238095 relative error 0.047619

The fix is now in CVS. I would appreciate if my fix
could be checked by an expert. see
http://root.cern.ch/root/htmldoc/src/TH1.cxx.html#TH1:Divide

Let me know

Rene Brun

On Tue, 30 Apr 2002, Rustam Niyazov wrote:

> Dear Rooters,
> 
> I've tried to investigate binomial error calculations
> described in the message
> http://root.cern.ch/root/roottalk/roottalk00/2894.html
> So, I modified code a little bit checking the relative errors
> after I divided out correlated histograms with TH1::Divide(const TH1
> *h1, const TH1 *h2, Double_t c1, Double_t c2, Option_t *option) )
> I was expecting that if I increase factors c1 and c2 by the same value,
> the
> relative errors are going to be the same. But I see that they are
> decreasing.
> Did I do anything wrong?
> 
> Thanks,
> 
> Rustam
> 
> Here is my code
> 
> {
> gROOT->Reset();
> c1 = new TCanvas("c1","The FillRandom example",200,10,700,900);
> c1->Divide(1,2);
> gaus1 = new TFormula("gaus1","gaus");
> gaus1->SetParameters(1000,10,1);
> h1f = new TH1F("h1f","h1f",200,0,20);
> h1f->FillRandom("gaus1",10000);
> h1f->Sumw2();
> 
> TH1F *bindistr = new TH1F("binomial","Test binomial",200,0,20);
> TH1F *bindistr1 = new TH1F("binomial1","Test binomial1",200,0,20);
> bindistr->Divide(h1f,h1f,1.0,2.0,"B");
> bindistr1->Divide(h1f,h1f,10.0,20.0,"B");
> 
> Int_t nbinsx = h1f->GetNbinsX();
> Double_t value,error;
> Double_t value1,error1;
> for (Int_t binx=0; binx<=nbinsx+1; binx++){
>   value=bindistr->GetBinContent(binx);
>   error=bindistr->GetBinError(binx);
>   value1=bindistr1->GetBinContent(binx);
>   error1=bindistr1->GetBinError(binx);
>   if(binx==100){
>     cout<<"x="<<bindistr->GetBinCenter(binx)<<" y="<<value<<"
> er="<<error<<" relative error "<<error/value<<endl;
>     cout<<"x="<<bindistr1->GetBinCenter(binx)<<" y="<<value1<<"
> er="<<error1<<" relative error "<<error1/value1<<endl;
>   }
> }
> 
> gStyle->SetOptStat(0);
> c1->cd(1);bindistr->Draw("E");
> c1->cd(2);bindistr1->Draw("E");
> c1->Update();
> }
> 



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:51 MET