Hi,
The problem of low statistics bins with TProfiles has been a moving field.
I suggest to move to Root version 3.04/02.
Rene Brun
On Wed, 8 Jan 2003, Kazutaka Nakahara wrote:
>
> Hi,
>
> I'm somewhat new to root, so please bear with me.
>
> I'm using root 3.03/06, and trying to fit (with pol1) a profile plot. The
> fit comes out to be completely bogus in that it puts alot of weight on
> bins with low statistics. This seems to be caused by the fact that the
> errors are assigned incorrectly to these bins.
>
> I've used SetErrorOption(" ") and SetErrorOption("s") to compare the
> errors I get. Here is what I see:
>
> ---- Part of my code that produces the output ---
> profx5->SetErrorOption(" ");
> cout << "error option = " << profx5->GetErrorOption() << endl;
> for(j=1;j<200;j++){
> content[0] = profx5->GetBinContent(j);
> entries[0] = profx5->GetBinEntries(j);
> errors[0] = profx5->GetBinError(j);
> cout << "bin# " << j << " bin content = " << content[0] << "
> BinEntries = " << entries[0] << " error = " << errors[0] << endl;
> }
> --------------------------------
> Below is part of my output (note the error in bin#170):
> numentries = 98782
> error option =
> .
> .
> .
> bin# 167 bin content = -0.000507246 BinEntries = 138 error = 0.00068033
> bin# 168 bin content = -0.0015 BinEntries = 40 error = 0.0010338
> bin# 169 bin content = 0.00166667 BinEntries = 3 error = 0.00272166
> bin# 170 bin content = -0.005 BinEntries = 1 error = 5.04355e-05 <--!!!
> bin# 171 bin content = 0 BinEntries = 0 error = 0
> bin# 172 bin content = 0 BinEntries = 0 error = 0
>
>
> Now let me repeat the above with error option = "s"
> ------- Part of my code ---
> profx5->SetErrorOption("s");
> cout << "error option = " << profx5->GetErrorOption() << endl;
> for(j=1;j<200;j++){
> content[0] = profx5->GetBinContent(j);
> entries[0] = profx5->GetBinEntries(j);
> errors[0] = profx5->GetBinError(j);
> cout << "bin# " << j << " bin content = " << content[0] << "
> BinEntries = " << entries[0] << " err
> -----------------------
> Output (again, note the error in bin#170):
> numentries = 98782
> error option = s
> .
> .
> .
> bin# 167 bin content = -0.000507246 BinEntries = 138 error = 0.00799207
> bin# 168 bin content = -0.0015 BinEntries = 40 error = 0.00653835
> bin# 169 bin content = 0.00166667 BinEntries = 3 error = 0.00471405
> bin# 170 bin content = -0.005 BinEntries = 1 error = 0.0158473 <--!!!
> bin# 171 bin content = 0 BinEntries = 0 error = 0
> bin# 172 bin content = 0 BinEntries = 0 error = 0
>
> ---------------------
>
>
> I find bin#170 to be rather troubling. The bin has 1 entry, but for the
> default option = " ", the error comes out to be VERY small.
> As I understand it, below is how the error is calculated for the two
> options I specified (copied directly out of the root website):
> option:
> ' ' (Default) Errors are Spread/SQRT(N) for Spread.ne.0. ,
> " " SQRT(Y)/SQRT(N) for Spread.eq.0,N.gt.0 ,
> " " 0. for N.eq.0
> 's' Errors are Spread for Spread.ne.0. ,
> " " SQRT(Y) for Spread.eq.0,N.gt.0 ,
> " " 0. for N.eq.0
>
>
> Where N = N_bin
> For N_bin=1, it seems to me that I should get the same error for both
> options, since N_bin = 1 (which is equivalent to Spread = 0).
> Now the output above tells me that the
> rootfile I analyised has N_TOTAL = 98782.
> So with option = 's',
> bin#170 --- error = .0158473 <--- This is sqrt(Y)
>
> With option = ' ',
> bin#170 --- error = 5.04355e-05 <--- This is sqrt(Y)/sqrt(N_TOTAL) !!!!
>
> Shouldn't the latter be sqrt(Y)/sqrt(N_bin) instead of
> sqrt(Y)/sqrt(N_TOTAL) ??
>
> My suspicion is this is the reason why fits don't work for profile plots
> with low statistic bins. It's because the error seems to be calculated
> wrong for N_bin = 1, thus creating a small error for that bin, which leads
> to that bin being weighted heavily in the fit.
>
> Did I miss something obvious??
>
>
> Regards,
> Kaz
>
>
>
>
>
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:08 MET