Home | News | Documentation | Download

HistFactory complains when adding constant parameter

Dear experts,

When I try to add a constant parameter myNorm to the measurement in HistFactory, it complains along the following lines
could not corresponding auxiliary measurement nom_myNorm

I am attaching a slightly modified version of the histfactory tutorial hf001_example.C. I have added the lines

signal.AddNormFactor("myNorm", 1, 0, 2);

Why does HistFactory make this complaint for the constant parameter I add, and not for the constant parameter that is added earlier in the tutorial?

I will note that in the later stages of the output that HistFactory spits out when running this code, I see

[#2] INFO:HistFactory -- setting myNorm constant

so it does set the parameter constant later. So I am even more unsure of what the error is saying.

Further, I wanted to point out that doing

signal.AddNormFactor("myNorm", 1, 0, 2, true);

does not actually make the parameter constant in the fit, clashing with the HistFactory::Sample AddNormFactor() documentation which has the last parameter as a boolean named Const.


PS: I am running ROOT 6.22.06 on lxplus, invoked by source /cvmfs/sft.cern.ch/lcg/app/releases/ROOT/6.22.06/x86_64-centos7-gcc48-opt/bin/thisroot.sh
hf001_example_modified.C (2.5 KB)

Dear experts,

Have one of you had a chance to look at this?

Thanks in advance,

Hi @avenkate ,
sorry for the high latency. I think we need @moneta or @jonas , let’s see if they can help.


Dear experts,

I am back to bother you. Have one of you had a chance to look at this?

Thanks a lot,

Hi @avankate, apologies for the very late answer!

First of all, there is a typo in the error message in ROOT. It should better say:

could not find corresponding auxiliary measurement nom_myNorm

If you add a systematic uncertainty e.g. with Sample::AddOverallSys, an auxiliary measurement observable is automatically created with the prefix nom_. When you set the nuisance parameter constant, the auxiliary measurement will be removed from list of global observables.

If it’s just a normalization factor added with Sample::AddNormFactor() as in your case, there will be no auxiliary observable with the nom_ prefix. However, the code doesn’t treat the normalization factors different from the systematic uncertainties when they are set constant. So it will report as an error that nom_myNorm could not be found even though that’s expected here.

In conclusion, I think you can safely ignore the error message and I should think about how to change the histfactory code such that this error message is avoided in the future.

Concerning your second question about Sample::AddNormFactor() with the flag to set it constant: this is deprecated and doesn’t work anymore. You should have seen a warning message when running the macro. I’ll see if we can just remove this parameter from AddNormFactor, as it has already been deprecated for almost a decade.

I hope my comments help, and sorry again for the late reply!


Hi @jonas,

Thanks for getting back to me and clearing this up. I can see that the experts on the forum are very busy fielding everyones questions, so I very much appreciate you taking the time to help.