Variable range for POI when setting limits

Dear Experts,

I’m trying to set limits on the number of signal events nSig in a single bin. When I define nSig[0,-10,100] I get a “reasonable” answer, and when I define nSig[0,0,100] I get another answer which looks incorrect. The behavior also depends on how HypoTestInverter::UseCLs() is set.

I have a quick stand-alone example of this here: standalone-limit-demo.py (2.9 KB) . I am basically following this twiki
The output is:

nSig[0,-10,100] lim = 7.59859434095
nSig[0,0,100] lim   = 52.0694255892

My impression is that the range of nSig should not matter. If anyone can help to understand why this difference shows up and what causes it, it would be appreciated.

HI @aaronsw,

it’s indeed surprising. Is the fit unstable? Is Minuit complaining somehow?
I invited @moneta to have a look.

Hi @StephanH and @moneta,

Thanks! There are no error messages or complaints from Minuit. One difference I find is in the nSig[0,0,100] case during GetHypoTest there is an additional printout (which I don’t see with nSig[0,-10,100]):

INFO:Eval -- Using one-sided discovery qmu - setting qmu to zero  muHat = 1.25489e-08 muTest = 58.5859

This is odd because in both cases I set ac.SetOneSided(True). Is there some reason that setting nSig[0,-10,100] might force a two sided limit? For the record setting ac.SetOneSided(False) doesn’t fix the problem.

Hi @StephanH and @moneta,

@EtienneDreyer was looking at this and made a plot of the CLs values for the two nSig lower values. Maybe this helps shed some light on what is going on? Thanks for the help!

Hi,

I think you are using for your null model (S+B) model a snapshot value of nSig=0. This might confuse the AsymptoticCalculator.
Use a non-zero initial value for nSig and it should be fine, like nSig[1, -10, 100] or nSig[1,0,100]

Cheers

Lorenzo

Hi @moneta,

Thanks! Changing the initial value resolved the issue. I don’t quite understand the details of why the initial value of nSig matters since I expect the values to be determined by SetFixedScan(), however I am very happy that changing this seems to have resolved the discrepancy. Thanks very much!

Best,
Aaron

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.