Skip to content

[RF] Fix counting Asimov generation with multiple floating parameters - #23104

Open
guitargeek wants to merge 1 commit into
root-project:masterfrom
guitargeek:asimov-counting-floating-params
Open

[RF] Fix counting Asimov generation with multiple floating parameters#23104
guitargeek wants to merge 1 commit into
root-project:masterfrom
guitargeek:asimov-counting-floating-params

Conversation

@guitargeek

Copy link
Copy Markdown
Contributor

When generating a counting Asimov dataset, the AsymptoticCalculator identified the expected value of an observable in a Gaussian or Poisson term as "the single non-constant server that is not the observable". This heuristic failed whenever both the mean and the width of a Gaussian were floating, could not see constness through derived quantities like RooFormulaVars, and silently set the observable to the value of the sigma parameter when the mean was constant but sigma floated.

The heuristic is unnecessary: RooGaussian and RooPoisson expose their proxies via getX() and getMean(). Use the exact (x, mean) pair and set whichever of the two is the observable to the value of the other one. The width and the constness of the parameters no longer matter, and the direction where the mean is the observable (constraint terms with global observables) keeps working. The RooMultiVarGaussian path goes through the same helper with xVec()[i] and muVec()[i].

Fixes the four failure cases from ROOT-10096, covered by a new test.

Fixes ROOT-10096

🤖 Done with the help of AI

When generating a counting Asimov dataset, the AsymptoticCalculator
identified the expected value of an observable in a Gaussian or Poisson
term as "the single non-constant server that is not the observable".
This heuristic failed whenever both the mean and the width of a Gaussian
were floating, could not see constness through derived quantities like
RooFormulaVars, and silently set the observable to the value of the
*sigma* parameter when the mean was constant but sigma floated.

The heuristic is unnecessary: RooGaussian and RooPoisson expose their
proxies via getX() and getMean(). Use the exact (x, mean) pair and set
whichever of the two is the observable to the value of the other one.
The width and the constness of the parameters no longer matter, and the
direction where the mean is the observable (constraint terms with global
observables) keeps working. The RooMultiVarGaussian path goes through
the same helper with xVec()[i] and muVec()[i].

Fixes the four failure cases from ROOT-10096, covered by a new test.

Fixes [ROOT-10096](https://its.cern.ch/jira/browse/ROOT-10069)

🤖 Done with the help of AI
@github-actions

Copy link
Copy Markdown

Test Results

    23 files      23 suites   3d 14h 27m 51s ⏱️
 3 856 tests  3 855 ✅ 0 💤 1 ❌
78 579 runs  78 578 ✅ 0 💤 1 ❌

For more details on these failures, see this check.

Results for commit 83fce74.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant