model.plot(pars0, data_lin, residuals=True) plt.xlim(150,300) fig4 = plt.figure(4) fig4.canvas.set_window_title('Profiled pars, data from linear model') model.plot(min_pars, data_lin, residuals=True) plt.xlim(150,300) t1 = np.einsum('i,ij,i->j',model.bkg,model.c, 1 - data_lin.n/(model.n_exp(pars0))*(1 - model.bkg/model.n_exp(pars0)*model.c.dot(pars.gammas)) ) t2 = np.einsum('i,ij,i,i,i->j',model.bkg,model.c, -data_lin.n/model.n_exp(pars0), model.bkg/model.n_exp(pars0)*model.c.dot(pars.gammas), model.bkg/model.n_exp(pars0)*model.c.dot(pars.gammas) ) t3 = np.einsum('i,ij,i,i,i,i->j',model.bkg,model.c, data_lin.n/model.n_exp(pars0), model.bkg/model.n_exp(pars0)*model.c.dot(pars.gammas), model.bkg/model.n_exp(pars0)*model.c.dot(pars.gammas), model.bkg/model.n_exp(pars0)*model.c.dot(pars.gammas)) t4 = np.einsum('i,ij,i,i,i,i,i->j',model.bkg,model.c, -data_lin.n/model.n_exp(pars0), model.bkg/model.n_exp(pars0)*model.c.dot(pars.gammas), model.bkg/model.n_exp(pars0)*model.c.dot(pars.gammas), model.bkg/model.n_exp(pars0)*model.c.dot(pars.gammas), model.bkg/model.n_exp(pars0)*model.c.dot(pars.gammas)) model2 = Model().load('fastprof/models/HighMass_NW-700-log500-gammas-only.json') model2.sig = model.s_exp(min_pars) model2.bkg = model.b_exp(min_pars) model.init_vars() model2.linear_nps = True pars02 = model.expected_pars(5) pars02.gammas -= min_pars.gammas pars2 = model.expected_pars(5) pars2.gammas = pars.gammas - min_pars.gammas data2_lin = Data(model2).set_expected(pars2) fig5 = plt.figure(5) fig5.canvas.set_window_title('Nominal pars @ model2, data from linear model') model2.plot(pars02, data2_lin, residuals=True) plt.xlim(150,300) fig6 = plt.figure(6) fig6.canvas.set_window_title('Iter 1 pars @ model2, data from linear model')
test_mus = np.linspace(0,5,6) n_np = 2 bkg = np.array([1.0, 10.0]) # specific to this case! sig = np.array([1.0, 0]) # specific to this case! a = np.array([[0.2], [0.2]]) # specific to this case! b = np.array([[0.2], [0.2]]) # specific to this case! #pyhf_data = np.array([ 6.00000000e+00, 9.00000000e+00, 1.29864346e-01, -5.74496450e-01 ]) pyhf_data = np.array([ 2, 10, 0, 0 ]) spec = json.load(open('fastprof/models/test1.json', 'r')) ws = pyhf.Workspace(spec) pyhf_model = ws.model() for mu in test_mus : print('-------------------------------------') print('Testing the following hypothesis: ', mu) model = Model(sig, bkg, alphas = ['acc_sys'], betas = ['bkg_sys'], a=a, b=b) data = Data(model).set_from_pyhf_data(pyhf_data, pyhf_model) #print(model) npm = NPMinimizer(mu, data) nll = npm.profile_nll() pars, val = pyhf.infer.mle.fixed_poi_fit(mu, pyhf_data, pyhf_model, return_fitted_val=True) print('fast pars |', npm.min_pars.array()) print('fast nexp |', model.s_exp(npm.min_pars), model.b_exp(npm.min_pars), model.n_exp(npm.min_pars)) print(nll) pyhf_pars = Parameters(pars[0], pars[1], pars[2]) print('pyhf data |', pyhf_data) print('pyhf pars |', pyhf_pars.array()) print('pyhf nexp |', model.s_exp(pyhf_pars), model.b_exp(pyhf_pars), model.n_exp(pyhf_pars)) print(model.nll(pyhf_pars, data))