[RF] HS3 export: constraints serialized as product_dist factors with global observables as const parameters
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 13/6/2026.
Đánh giá
Issue này chưa được đánh giá.
Mô tả
Context: we are implementing an independent HS3 consumer (pyhs3) and validating it against quickFit NLL values on an ATLAS diHiggs (bbγγ) workspace exported via RooFit's HS3 JSON export. This is feedback on the export pattern for constraint terms — not a blocker (we reproduce RooFit's behavior), but it required reverse-engineering RooFit internals rather than reading the file.
cc @cburgard @Phmonski
What the export produces (per channel, ×14 channels, ×148 constraints)
// distribution block
{ "name": "constr__THEO_BR_Hbb", "type": "gaussian_dist",
"x": "THEO_BR_Hbb", // nuisance parameter
"mean": "RNDM__THEO_BR_Hbb", // global observable
"sigma": 1.0 }
// channel pdf
{ "name": "_model_Run2HM_1", "type": "product_dist",
"factors": ["_modelSB_Run2HM_1", "constr__THEO_BR_Hbb", "..."] }
// parameter_points
{ "name": "RNDM__THEO_BR_Hbb", "value": 0.0, "const": true }
Consequences for a non-RooFit consumer
-
Constraint-ness is not marked. Nothing in the file distinguishes a constraint factor from a shape factor except naming conventions (
constr__,RNDM__) and graph structure (the factor does not depend on the dataset's variables). We infer it structurally, but the likelihood counting semantics this forces are currently unspecified in HS3 — a factor independent of the data must enter the likelihood once per likelihood, not once per event nor once per channel (RooProdPdf's behavior). We have filed a matching HS3-spec issue: hep-statistics-serialization-standard/hep-statistics-serialization-standard#90. Flagging here because the export pattern is what triggers the ambiguity. -
Global observables become parameters.
RNDM__*are observations of auxiliary measurements; serializing them asconst: trueparameter points erases the distinction RooFit's ModelConfig maintains (GlobalObservables). A consumer cannot reconstruct which constants are global observables (e.g. to randomize them for toys) except by theRNDM__prefix convention. Themisc.ROOT_internal.ModelConfigsblock only records pdf/mc names, not the global-observable set. -
HS3 already has a cleaner encoding. Section 2.4 of the spec allows a constraint to be its own (distribution, datum) likelihood entry with the auxiliary measurement as inline numeric data:
"likelihoods": [{ "distributions": ["...", "constr__THEO_BR_Hbb"], "data": ["...", 0.0] }]That representation is unambiguous (counting is automatic), keeps data as data, and removes the need for
RNDM__*const parameters. Could the export move constraints there — or at least record the global-observables list in a standard location?
Minor observation, likely from the original workspace construction rather than the export: the constraint Gaussians have the NP as x and the global observable as mean (pdf over the NP), whereas the auxiliary-measurement reading is a pdf over the global observable with the NP as mean. Numerically identical for a symmetric Gaussian, but the declared random variable matters for normalization/toy semantics in a strict reading.
- 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 5 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 2 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 · 6 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 78/100
-
macOS: a double-click on a notarized altairsim is refused, and the docs give only the offline caseCó thể đã có người làm @anhaoXie đã nhận hôm nay. Đang mởdocumentation
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
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 68/100
mutationpp/Mutationpp#337 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
bulletphysics/bullet3#4819 ·
-
[YSQL] Local-node initdb reads postgres.bki, but YB clusters bootstrap only from yb_postgres.bkiĐang mởarea/ysql kind/enhancement priority/low status/awaiting-triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
yugabyte/yugabyte-db#35763 ·
Maintainer thường phản hồi trong vòng 1 ngày