Statistics 使用“pyhf”浮动信号和背景强度

Statistics 使用“pyhf”浮动信号和背景强度,statistics,pyhf,Statistics,Pyhf,嗨,pyhf用户和开发者 我有一个来自a的问题,因此我将从一个回答中提供的anwser.py代码开始,然后进行一个小的修改 因此,我使用响应中给出的参数运行拟合,但我希望看到拟合的结果,因此我添加了一些代码,以根据拟合结果对原始模板进行加权,并使用覆盖图对其进行重新拟合。全文如下 进口pyhf 进口pyhf.contrib.viz.巴西 将numpy作为np导入 将matplotlib.pylab作为plt导入 #-获得最佳拟合信号强度的不确定性 #-计算信号强度的95%CL上限 tag=“原

嗨,pyhf用户和开发者

我有一个来自a的问题,因此我将从一个回答中提供的
anwser.py
代码开始,然后进行一个小的修改

因此,我使用响应中给出的参数运行拟合,但我希望看到拟合的结果,因此我添加了一些代码,以根据拟合结果对原始模板进行加权,并使用覆盖图对其进行重新拟合。全文如下


进口pyhf
进口pyhf.contrib.viz.巴西
将numpy作为np导入
将matplotlib.pylab作为plt导入
#-获得最佳拟合信号强度的不确定性
#-计算信号强度的95%CL上限
tag=“原件”
def plot_hist(轴、箱、数据、底部=0、颜色=无、标签=无):
料仓宽度=料仓[1]-料仓[0]
bin_leftedges=bin[:-1]
bin_中心=[边+bin_宽度/2.0表示bin_左边中的边]
斧头(
仓位中心,数据,仓位宽度,底部=底部,alpha=0.5,颜色=颜色,标签=标签
)
def plot_数据(ax、bins、data、label=“data”):
料仓宽度=料仓[1]-料仓[0]
bin_leftedges=bin[:-1]
bin_中心=[边+bin_宽度/2.0表示bin_左边中的边]
最大散射(箱位中心、数据、颜色=“黑色”、标签=标签)
def反转时间间隔(测试步骤、准测试、测试大小=0.05):
#这将在v0.5.3中予以考虑
cls_obs=np.array([test[0]用于hypo_测试中的测试]).flatte()
cls_exp=[
np.数组([test[1][idx]用于hypo_测试中的测试]).flatte()用于范围(5)中的idx
]
交叉测试统计={exp:[],“obs”:无}
对于cls\U exp中的cls\U exp\U西格玛:
交叉测试统计数据[“exp”]。追加(
np.interp(
测试大小,列表(反向(cls\U exp\U sigma)),列表(反向(测试mus))
)
)
交叉测试统计数据[“obs”]=np.INTP(
测试大小,列表(反向(cls\U obs)),列表(反向(测试mus))
)
返回交叉测试统计
def main():
np.random.seed(0)
pyhf.set_后端(“numpy”、“minuit”)
可观测范围=[0.0,10.0]
箱柜宽度=0.5
_bins=np.arange(可观测范围[0],可观测范围[1]+bin_宽度,bin_宽度)
n_bkg=2000
n_信号=int(np.sqrt(n_bkg))
#生成模拟
bkg_模拟=10*np.随机.随机(n_bkg)
信号模拟=np.随机.正常(5,1.0,n_信号)
bkg_样本,u=np.直方图(bkg_模拟,箱=_箱)
信号样本,直方图(信号模拟,箱=箱)
#生成观察结果
信号事件=np.随机.正常(5,1.0,int(n信号*0.8))
bkg_事件=10*np.random.random(int(n_bkg+np.sqrt(n_bkg)))
观察到的事件=np.array(signal\u events.tolist()+bkg\u events.tolist())
观察到的样本,直方图(观察到的事件,箱=箱)
#将模拟和观察可视化
图,ax=plt.子批次()
图设置尺寸英寸(7,5)
绘图历史(ax、箱、bkg样本、标签=“背景”)
绘图历史(ax、箱、信号样本、底部=bkg样本、标签=“信号”)
绘图数据(ax、箱、观察样本)
ax.图例(loc=“最佳”)
最大设定值(top=np.max(观察样本)*1.4)
ax.集合标签(“可观察”)
ax.set_ylabel(“计数”)
图.savefig(“组件{0}.png.”格式(标记))
#建立模型
bkg_uncerts=np.sqrt(bkg_样本)
model=pyhf.simplemodels.hepdata_like(
信号\数据=信号\采样.tolist(),
bkg_data=bkg_sample.tolist(),
bkg_uncerts=bkg_uncerts.tolist(),
)
data=pyhf.tensorlib.astensor(观察到的样本.tolist()+model.config.auxdata)
#推理
拟合结果=pyhf.expert.mle.fit(数据、模型、返回不确定性=True)
最佳拟合参数,参数=拟合结果.T
印刷品(
f“最佳拟合参数:\
\n*信号强度:{bestfit_pars[0]}+/-{par_uncerts[0]}\
\n*讨厌的参数:{bestfit_pars[1:}\
\n*有害参数不确定性:{par_uncerts[1::}”
)
#将结果可视化
fit_bkg_样本=[]
对于拉链中的w、b(最佳拟合零件[1:],bkg\U样本):
拟合样本。附加(w*b)
拟合信号样本=最佳拟合零件[0]*np.数组(信号样本)
图,ax=plt.子批次()
图设置尺寸英寸(7,5)
绘图历史(ax、箱、拟合样本、标签=“背景”)
绘图历史(ax、箱、拟合信号样本,底部=拟合样本,标签=“信号”)
绘图数据(ax、箱、观察样本)
ax.图例(loc=“最佳”)
最大设定值(top=np.max(观察样本)*1.4)
ax.集合标签(“可观察”)
ax.set_ylabel(“计数”)
fig.savefig(“组件在_fit{0}.png.之后”。格式(标记))
#进行假设检验扫描
_开始=0.0
_停止=5
_阶跃=0.1
poi_测试=np.arange(_开始,_停止+_步骤,_步骤)
打印(“\n执行假设测试\n”)
hypo_试验=[
pyhf。推断。低测试(
穆乌试验,
数据,
模型
return\u expected\u set=True,
return\u test\u statistics=True,
qtilde=True,
)
用于poi_测试中的mu_测试
]
#信号强度上限
结果=反向间隔(poi_测试、次poi_测试)
打印(f“观察到的µ:{results['obs']:.2f}限制”)
打印(“----”)
对于idx,枚举中的n_σ(np.arange(-2,3)):
印刷品(
“µ:{:.3f}上应为{}限制”。格式(
“”如果n_sigma==0,则为“({}σ)”。格式(n_sigma),
结果[“exp”][idx],
)
)
#想象“巴西乐队”
图,ax=plt.子批次()
图设置尺寸英寸(7,5)
ax.集合标题(“假设检验”)
ax.set_ylabel(r“$\mathrm{CL}{s}$”)
ax.set\u xlabel(r“$\mu$”)
pyhf.contrib.即巴西绘图结果(ax、poi_测试、hypo_测试)
fig.savefig(“巴西{0}.png.”格式(标签))
如果名称=“\uuuuu main\uuuuuuuu”:
main()
当我运行它时,我得到以下曲线图。第一个图是原始观测/模拟图,第二个图是由fit resu缩放的模拟图
spec = {'channels': [{'name': 'singlechannel',
   'samples': [{'name': 'signal',
     'data': [10.0],
     'modifiers': [{'name': 'mu', 'type': 'normfactor', 'data': None}]},
    {'name': 'background',
     'data': [50.0],
     'modifiers': [{'name': 'bkgnorm',
       'type': 'normfactor',
       'data': None}]}]}]}