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