`RooPlot::chiSquare` returns `NaN` with `Expected` data errors due to division by zero
Maintainer thường phản hồi trong vòng 1 ngày
@guitargeek đang làm issue này rồi.
Từ ngày 26/3/2026.
- #21710 của @AyachiMishra — đã đóng, không merge
Đánh giá
Issue này chưa được đánh giá.
Mô tả
Check duplicate issues.
- Checked for duplicates
Description
Description
Calculating the chi2 via RooPlot::chiSquare on data plotted with RooFit::DataError(RooAbsData::Expected) returns NaN. Because RooPlot::chiSquare only supports Neyman-style chi2, the behavior for Expected errors is undefined and causes a silent division by zero.
Reproducer
from array import array
import ROOT
bin_edge = [0., 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5,
0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.]
bin_content = [0, 0, 0, 0, 0, 1, 3, 16, 17, 14, 18, 18, 7, 5, 1, 0, 0, 0, 0, 0]
h = ROOT.TH1D("h", "h", len(bin_edge) - 1, array("d", bin_edge))
for i, val in enumerate(bin_content):
h.SetBinContent(i + 1, val)
h.Sumw2(ROOT.kFALSE)
x = ROOT.RooRealVar("X", "x", 0.0, 1.0)
x.setBins(len(bin_edge) - 1)
data = ROOT.RooDataHist("dh", "dh", ROOT.RooArgList(x), h)
mu = ROOT.RooRealVar("mu", "mu", 0.5, 0.0, 1.0)
sig = ROOT.RooRealVar("sigma", "sigma", 0.1, 0.01, 0.5)
pdf = ROOT.RooGaussian("gauss", "gauss", x, mu, sig)
pdf.fitTo(data)
# Test both error types
for err_type, err_name in [(ROOT.RooAbsData.Poisson, "Poisson"), (ROOT.RooAbsData.Expected, "Expected")]:
frame = x.frame()
data.plotOn(frame, ROOT.RooFit.DataError(err_type), ROOT.RooFit.Name("h_data"))
pdf.plotOn(frame, ROOT.RooFit.Name("p_curve"))
chi2 = frame.chiSquare("p_curve", "h_data", 0)
print(f"chi2 with {err_name} data error = {chi2}")
Output:
chi2 with Poisson data error = 0.590340854118924
chi2 with Expected data error = nan
Root Cause
- Zero Bin Errors:
RooPlotdefaults toSumW2forRooHistiferror_type != Poisson(RooHist.cxx#L236), yielding zero errors for unweighted data. - Missing Safety Check:
RooCurve::chiSquaredivides by these errors without checking for zeros (RooCurve.cxx#L563), causing theNaN.
Proposed Solutions
- Option 1: Raise an error if
error_type = Expectedis used duringRooAbsData::plotOn. - Option 2: Fall back to
Poissonerrors and emit aRooFit::Warning.
Reproducer
See above
ROOT version
6.38.00
Installation method
conda
Operating system
Linux
Additional context
No response
- Ngôn ngữ chính
- C++
- Star
- 3.3k
- Fork
- 1.6k
- Merge trung bình
- 2 ngày 17 giờ
- Pull request đã merge (30 ngày)
- 188
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của root-project/root
-
thisroot.sh: wrong ROOTSYS in zsh when the shell's command line has a newlineCó thể đã có người làm @dpiparo đã nhận 4 ngày trước. Đang mởbug in:Build System
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 86/100
root-project/root#23746 · 1 người được giao ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[tmva][sofie] Inputs of unsupported type (e.g. float16) give code that does not compile instead of an errorCó thể đã có người làm @lmoneta đã nhận 14 ngày trước. Đang mởAI-Assisted bug in:SOFIE
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
root-project/root#23655 · 1 người được giao ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[RDataFrame] Code that transforms `#var` alias to `R_rdf_sizeof_var` does not respect string literalsCó thể đã có người làm @vepadulano đã nhận 1 ngày trước. Đang mởbug in:RDataFrame
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 71/100
root-project/root#23790 · 1 người được giao ·
Maintainer thường phản hồi trong vòng 1 ngày
-
TDataMember::GetOffset interfers to TDataMember::GetOffsetCintCó thể đã có người làm @pcanal đã nhận 1 ngày trước. Đang mởbug in:Core Libraries
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
root-project/root#23777 · 1 người được giao ·
Maintainer thường phản hồi trong vòng 1 ngày
-
`TChain::GetEntries` internal caching ineffective?Có thể đã có người làm @pcanal đã nhận 7 ngày trước. Đang mởimprovement in:TTree
root-project/root#23738 · 2 bình luận · 1 người được giao ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của root-project/root
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
foxglove/mcap#1907 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
telegramdesktop/tdesktop#31505 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 1 ngày
-
ll-builder shell completions omit existing lockfile commands and --lockedCó thể đã có người làm @project-nju-learner đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 90/100
OpenAtom-Linyaps/linyaps#2291 ·
Maintainer thường phản hồi trong vòng 1 ngày