You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When passing a normalization set to RooAbsPdf::getVal(), the auto-normalization over the parameters that the pdf doesn't directly depend on is skipped:
manual normalization : 0.05
auto normalization : 1
This is not mentioned anywhere in the docs.
People expect that normalization is done over every parameter in the normSet, and if there is no mathematical dependency, it will divided by the uniform integral, just like createIntegral() does it.
This is regularly tripping up our users, like in this forum post where the person tried to normalize manually instead. Also from private chat with @will-cern, I know he had the same confusion before. A common workaround is the "dummy-dependency", as shown in the reproducer code.
I understand why it was implemented like that: it makes bookkeeping of observables in simultaneous pdfs easier, because then the caller doesn't need to worry about restricting the observables to the ones relevant for the current category. The caller is here usually some other implementation detail of RooFit, like the test statistics or plotting.
So I think it's not too late to make the normalization behavior more intuitive by not dropping non-dependent parameters and adapting the RooFit internals accordingly.
The text was updated successfully, but these errors were encountered:
guitargeek
changed the title
[RF] Inconsistency when normalizing pdf over non-dependent
[RF] Inconsistency when normalizing pdf over non-dependent parameter
Jan 8, 2025
When passing a normalization set to
RooAbsPdf::getVal()
, the auto-normalization over the parameters that the pdf doesn't directly depend on is skipped:Demonstrator:
The output is:
This is not mentioned anywhere in the docs.
People expect that normalization is done over every parameter in the
normSet
, and if there is no mathematical dependency, it will divided by the uniform integral, just likecreateIntegral()
does it.This is regularly tripping up our users, like in this forum post where the person tried to normalize manually instead. Also from private chat with @will-cern, I know he had the same confusion before. A common workaround is the "dummy-dependency", as shown in the reproducer code.
I understand why it was implemented like that: it makes bookkeeping of observables in simultaneous pdfs easier, because then the caller doesn't need to worry about restricting the observables to the ones relevant for the current category. The caller is here usually some other implementation detail of RooFit, like the test statistics or plotting.
So I think it's not too late to make the normalization behavior more intuitive by not dropping non-dependent parameters and adapting the RooFit internals accordingly.
The text was updated successfully, but these errors were encountered: