%pylab inline
Populating the interactive namespace from numpy and matplotlib
import pyhf
import pyhf.readxml
reload(pyhf.readxml)
spec = pyhf.readxml.parse('../../validation/xmlimport_input/config/example.xml', '../../validation/xmlimport_input/')
pdf = pyhf.Model(spec['channels'])
pdf
<pyhf.Model at 0x131e068d0>
data = [binvalue for k in pdf.config.channel_order for binvalue in spec['data'][k]] + pdf.auxdata
data
[122.0, 112.0, 0, 0, 0]
print(pdf.config.suggested_init())
pdf.expected_actualdata(pdf.config.suggested_init())
[0.0, 1.0, 0.0, 0.0]
[120.0, 110.0]
def assemble(pdf, **kwargs):
pars = pdf.config.suggested_init()
for k, v in kwargs.items():
pars[pdf.config.par_slice(k)] = v
return pars
def disassemble(pdf, pars):
return {
k: pars[pdf.config.par_slice(k)] for k in pdf.config.par_map
}
print pdf.expected_data(assemble(pdf, SigXsecOverSM = [1.0], syst1 = [0.0], syst2 = [0.0], syst3 = [0.0]))
pars = assemble(pdf, SigXsecOverSM = [2.0], syst2 = [0.0], syst3 = [0.0])
disassemble(pdf,pars)
spec['channels']['channel1']['signal']['data']
[120. 110. 0. 0. 0.]
array([20., 10.], dtype=float32)
mutests = np.linspace(0,3)
results = [pyhf.runOnePoint(mu, data, pdf, pdf.config.suggested_init(), pdf.config.suggested_bounds()) for mu in mutests]
obs = [r[-2:][0] for r in results]
exp = [r[-2:][1][i] for r in results] for i in range(5)]
def plot_results(testmus,cls_obs, cls_exp, test_size = 0.05):
plt.plot(testmus,cls_obs, c = 'k')
for i,c in zip(range(5),['grey','grey','grey','grey','grey']):
plt.plot(testmus,cls_exp[i], c = c)
plt.plot(testmus,[test_size]*len(testmus), c = 'r')
plt.ylim(0,1)
plot_results(mutests,obs,exp)