[RF] HS3 export: constraints serialized as product_dist factors with global observables as const parameters
Los mantenedores suelen responder en 1 día
@guitargeek ya está trabajando en esto.
Desde el 13/6/2026.
Evaluación
Este issue todavía no se ha evaluado.
Descripción
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.
- Lenguaje dominante
- C++
- Estrellas
- 3.3k
- Forks
- 1.6k
- Merge medio
- 2 d 17 h
- PR fusionados (30 d)
- 188
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de root-project/root
-
thisroot.sh: wrong ROOTSYS in zsh when the shell's command line has a newlinePosiblemente ocupada @dpiparo la tomó hace 4 días. Abiertobug in:Build System
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
root-project/root#23746 · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
[tmva][sofie] Inputs of unsupported type (e.g. float16) give code that does not compile instead of an errorPosiblemente ocupada @lmoneta la tomó hace 13 días. AbiertoAI-Assisted bug in:SOFIE
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
root-project/root#23655 · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
[RDataFrame] Code that transforms `#var` alias to `R_rdf_sizeof_var` does not respect string literalsPosiblemente ocupada @vepadulano la tomó hace 1 día. Abiertobug in:RDataFrame
Dificultad 3/5 1-2 días Aptitud para principiantes 71/100
root-project/root#23790 · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
TDataMember::GetOffset interfers to TDataMember::GetOffsetCintPosiblemente ocupada @pcanal la tomó hace 1 día. Abiertobug in:Core Libraries
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
root-project/root#23777 · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
`TChain::GetEntries` internal caching ineffective?Posiblemente ocupada @pcanal la tomó hace 6 días. Abiertoimprovement in:TTree
root-project/root#23738 · 2 comentarios · 1 asignado ·
Los mantenedores suelen responder en 1 día
Todos los issues de root-project/root
Issues similares
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
telegramdesktop/tdesktop#31505 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
ll-builder shell completions omit existing lockfile commands and --lockedPosiblemente ocupada @project-nju-learner la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 90/100
OpenAtom-Linyaps/linyaps#2291 ·
Los mantenedores suelen responder en 1 día
-
area: ui bug P3: low value: low
Dificultad 1/5 1-3 horas Aptitud para principiantes 85/100
patrick-hudson/put.gd-desktop#494 ·
Los mantenedores suelen responder en 1 día
-
Plugin storage: send reason codes, not English sentences, so the overview can translate themAbiertoenhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
prestonbrown/helixscreen#1867 ·
Los mantenedores suelen responder en 2 días