# Switching over from RooPoisson to RooGaussian

I’ve got a working model to find a 95% CL result. I decided to then start simulating what my result would be at x10 and x100 in luminosity. At some point my fits stopped converging. I think this is because the RooPoisson PDF is always returning zero probability and I need to switch over to RooGuassian. Is this the case?

Here is a partial workspace printout from a working run:

## [code]p.d.f.s

RooGaussian::constraint_Q[ x=nom_Q mean=alpha_Q sigma=nom_sigma_Q ] = 1
RooGaussian::constraint_S[ x=nom_S mean=alpha_S sigma=nom_sigma_S ] = 1
RooGaussian::constraint_lumi[ x=nom_lumi mean=alpha_lumi sigma=nom_sigma_lumi ] = 1
RooProdPdf::model[ obsA * obsB * obsC * obsD * constraint_lumi * constraint_Q * constraint_S ] = 1.03285e-041
RooPoisson::obsA[ x=NA mean=NexpA ] = 6.81314e-037
RooPoisson::obsB[ x=NB mean=NexpB ] = 0.0325385
RooPoisson::obsC[ x=NC mean=NexpC ] = 0.0223435
RooPoisson::obsD[ x=ND mean=NexpD ] = 0.0208516

## functions

RooProduct::NbQA[ Nq * lumi * alpha_Q ] = 172.059
RooProduct::NbQB[ Nq * lumi * tauB ] = 150
RooProduct::NbQC[ Nq * lumi * tauB * tauD ] = 318.75
RooProduct::NbQD[ Nq * lumi * tauD ] = 365.625
RooAddition::NexpA[ NsA + NbQA ] = 175.055
RooAddition::NexpB[ NsB + NbQB ] = 150.396
RooAddition::NexpC[ NsC + NbQC ] = 318.795
RooAddition::NexpD[ NsD + NbQD ] = 365.939
RooProduct::NsA[ mu * Ns0 * lumi * alpha_lumi * alpha_S ] = 2.99604
RooProduct::NsB[ mu * Ns0 * effB * lumi * alpha_lumi * alpha_S ] = 0.395633
RooProduct::NsC[ mu * Ns0 * effC * lumi * alpha_lumi * alpha_S ] = 0.0454379
RooProduct::NsD[ mu * Ns0 * effD * lumi * alpha_lumi * alpha_S ] = 0.314359
[/code]

The one to pay attention to is obsA. I will fit to the pdf “model”, and while this one work, the below fails because obsA is always zero.

## [code]p.d.f.s

RooGaussian::constraint_Q[ x=nom_Q mean=alpha_Q sigma=nom_sigma_Q ] = 1
RooGaussian::constraint_S[ x=nom_S mean=alpha_S sigma=nom_sigma_S ] = 1
RooGaussian::constraint_lumi[ x=nom_lumi mean=alpha_lumi sigma=nom_sigma_lumi ] = 1
RooProdPdf::model[ obsA * obsB * obsC * obsD * constraint_lumi * constraint_Q * constraint_S ] = 0
RooPoisson::obsA[ x=NA mean=NexpA ] = 0
RooPoisson::obsB[ x=NB mean=NexpB ] = 0.0102995
RooPoisson::obsC[ x=NC mean=NexpC ] = 0.00706622
RooPoisson::obsD[ x=ND mean=NexpD ] = 0.00659748

## functions

RooProduct::NbQA[ Nq * lumi * alpha_Q ] = 1720.59
RooProduct::NbQB[ Nq * lumi * tauB ] = 1500
RooProduct::NbQC[ Nq * lumi * tauB * tauD ] = 3187.5
RooProduct::NbQD[ Nq * lumi * tauD ] = 3656.25
RooAddition::NexpA[ NsA + NbQA ] = 1723.58
RooAddition::NexpB[ NsB + NbQB ] = 1500.4
RooAddition::NexpC[ NsC + NbQC ] = 3187.55
RooAddition::NexpD[ NsD + NbQD ] = 3656.56
RooProduct::NsA[ mu * Ns0 * lumi * alpha_lumi * alpha_S ] = 2.99604
RooProduct::NsB[ mu * Ns0 * effB * lumi * alpha_lumi * alpha_S ] = 0.395633
RooProduct::NsC[ mu * Ns0 * effC * lumi * alpha_lumi * alpha_S ] = 0.0454379
RooProduct::NsD[ mu * Ns0 * effD * lumi * alpha_lumi * alpha_S ] = 0.314359
[/code]

Here we see obsA is now zero.

The thing that is making me unsure is why aren’t obsC and obsD zero as well (or even smaller) during this initial dump?

Many thanks in advance for the help!

Hi Gordon,

It is strange that your RooPoisson always returns zero. Are you sure the observable, x, in this case NA is not negative ?
The fact that the variable can be negative, can explain why it works with the RooGaussian

Best

Lorenzo

Ok - figured it out thanks to your hint, thanks! I was already off the peak of the poisson, and extending it to larger and larger luminosities just put me further and further off till I was really at a very small probability. I’d done a basic division much earlier in the code incorrectly. Thanks for your help!