跳转到主要内容

生成不同格式的简化似然

项目描述

simplify

CI status codecov PyPI version python version Code style: black

一个Python包,可以从完整似然中创建简化似然。该方法在ATLAS PUB note Implementation of simplified likelihoods in HistFactory for searches for supersymmetryEric Schanet的博士论文第10章中进行了记录。目前,只实现了简化似然的一种格式,但目标是支持其他形式的(不那么)简化似然。

目录

  1. 介绍
  2. 安装
  3. 如何运行
  4. 示例似然

介绍

在物理学中,尤其是高能物理学(HEP)领域,对于新物理的搜索通常需要对观察到的碰撞数据进行概率模型的推断。这种方法可以使用一个统计模型 f(x|φ)来形式化,即一个参数化的概率密度函数(PDF)族,它描述了在给定一些模型参数 φ 的情况下观察到数据 x 的概率。然后,似然函数 L(φ) 指的是在 φ 固定的情况下,f 的函数值。

对于分箱数据,构建统计模型和似然函数的 HistFactory 模板在 HEP 中得到了广泛的应用。

尽管许多关于超对称性(SUSY)的搜索对标准模型(SM)之外的各种物理模型敏感,但由于计算成本和复杂性,它们通常只在一组有限的简化模型中进行解释。尽管对单个SUSY产生和衰变拓扑的统计推断和解释既简单又方便,但它们缺乏模型复杂性,导致对更完整SUSY模型相应模型参数的真正约束的近似不佳。为了研究现实中的SUSY情景,需要进行大规模的重解释工作,扫描大量维度,这导致统计推断的计算成本显著增加。

在ATLAS PUB笔记Implementation of simplified likelihoods in HistFactory for searches for supersymmetry中提出的近似方法,并在本存储库中实现,引入了简化似然的概念,这些似然具有低计算成本但高统计精度,因此为在大模型空间中进行大规模重解释工作提供了一种可行的解决方案。

安装

遵循良好实践,首先创建一个虚拟环境,例如使用venv

python3 -m venv simplify

然后激活它

source simplify/bin/activate

默认安装来自PyPI

您可以直接使用PyPI安装simplify

python3 -m pip install simplify[contrib]

注意,simplify支持并针对Python 3.7、Python 3.8和Python 3.9进行了测试。

开发安装

如果您想为simplify做出贡献,请安装该软件包的开发版本。Fork存储库,克隆您的分支,然后使用本地资源进行安装

python3 -m pip install --ignore-installed -U -e .[complete]

请注意,您可能需要将.[complete]用引号括起来,具体取决于您的shell。

接下来,设置Black的git pre-commit钩子

pre-commit install

现在,您应该能够运行所有测试

python3 -m pytest

如何运行

您可以通过命令行使用simplify,或者直接将其集成到脚本中。

CLI

运行,例如

simplify convert < fullLH.json > simplifiedLH.json

或例如

curl http://foo/likelihood.json | simplify convert

其中fullLH.json是您希望将其转换为简化似然的完整似然。Simplify能够从stdin读取或写入到stdout。

运行simplify --help以获取CLI的详细信息。

在Python脚本中

您也可以在Python脚本中使用simplify,例如创建一些验证和交叉检查的图表和表格。

import pyhf
import json

import simplify

# set the computational backend to pyhf and load LH
pyhf.set_backend(pyhf.tensorlib, "minuit")
spec = json.load(open("likelihood.json", "r"))

# ws from full LH
ws = pyhf.Workspace(spec)

# get model and data for each ws we just created
# use polynomial interpolation and exponential extrapolation
# for nuisance params
model = ws.model(
    modifier_settings = {
        "normsys": {"interpcode": "code4"},
        "histosys": {"interpcode": "code4p"},
    }
)
data = ws.data(model)

# run fit
fit_result = simplify.fitter.fit(ws)

# plot the pulls
plt = simplify.plot.pulls(
    fit_result,
    "plots/"
)

# plot correlation matrix
plt = simplify.plot.correlation_matrix(
    fit_result,
    "plots/",
    pruning_threshold=0.1
)

# get a yieldstable in nice LaTeX format
tables = simplify.plot.yieldsTable(
    ws,
    "plots/",
    fit_result,
)

示例似然

让我们通过一个似然函数的例子。我们将使用ATLAS对电弱inos直接产生并最终态包含一个轻子和一个希格斯玻色子的搜索的完整似然(10.1140/epjc/s10052-020-8050-3)。根据ATL-PHYS-PUB-2019-029指定的JSON格式,完整的似然在doi.org/10.17182公开可用,可以下载。它包含了基于LHC运行2的全观测数据集的原始分析的完整统计模型。

您可以从HEPData手动下载似然,或者简单地使用

pyhf contrib download https://doi.org/10.17182/hepdata.90607.v3/r3 1Lbb-likelihoods && cd 1Lbb-likelihoods

从那里,假设您已经先前设置了simplify(这也设置了pyhf),您可以使用以下命令生成此分析的简化似然

simplify convert < BkgOnly.json > simplify_BkgOnly.json

你已经完成了。好吧,至少你得到了一个简化版的似然度,它使用单个背景样本来近似总背景,这个样本设置为从完整似然度中确定的拟合后总背景。不确定性(昂贵的一部分)仅使用分析中每个bin中背景估计的最终不确定性进行近似。

如果你仔细想想,这给你提供了一个相当简单的似然函数。让我们快速比较一下。对于完整似然度,我们可以使用pyhf检查完整似然度(只需查看pyhf输出的前17行摘要)。

pyhf inspect BkgOnly.json | head -n 17

这将给你

       Summary
  ------------------
    channels  8
     samples  9
  parameters  115
   modifiers  115

    channels  nbins
  ----------  -----
 SRHMEM_mct2    3
 SRLMEM_mct2    3
 SRMMEM_mct2    3
 STCREM_cuts    1
 TRHMEM_cuts    1
 TRLMEM_cuts    1
 TRMMEM_cuts    1
   WREM_cuts    1

想想看。你有8个通道,总共有14个bin。每个bin包含关于9个样本的信息,每个样本的事件率受115个额外参数(模型的不确定性)的总影响。这使得似然函数相当复杂。

那么接下来是简化版。

pyhf inspect simplify_BkgOnly.json | head -n 17

给我们

       Summary
  ------------------
    channels  8
     samples  1
  parameters  1
   modifiers  1

    channels  nbins
  ----------  -----
 SRHMEM_mct2    3
 SRLMEM_mct2    3
 SRMMEM_mct2    3
 STCREM_cuts    1
 TRHMEM_cuts    1
 TRLMEM_cuts    1
 TRMMEM_cuts    1
   WREM_cuts    1

也就是说,我们仍然有原始的bin和样本数量(这是驱动我们灵敏度的因素,所以我们不希望在这方面妥协),但我们最终每个bin只有一个样本和一个不确定性。

因此,两者的计算性能相当不同并不令人意外。让我们看看这个特定分析的基准。

Benchmark of ANA-SUSY-2019-08

现在先忽略绿色柱子,专注于橙色和蓝色柱子。橙色(蓝色)柱子显示了完整(简化)似然度的wall time(以秒为单位)。在它们最快的配置中,简化似然度显然比完整似然度快两个数量级。

但如果近似不准确,这就没有意义。让我们看看它的性能。分析中研究的所有原始信号模型都包含在1Lbb-likelihoods作为一个JSON补丁文件。只需将每个补丁应用到完整和简化似然度上,使用pyhf进行统计推断,然后绘制结果。

Performance of ANA-SUSY-2019-08

鉴于我们获得的计算速度提高了一个数量级,这种统计精度的小损失是令人印象深刻的!在1个标准差的不确定性内,两个轮廓基本上没有差异!

附言。我跳过了一些步骤才得到这个图。所有必要的工具和脚本都可用(有时有描述),在我的pyhf_inference_tools中。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定该选择哪个,请了解更多关于安装软件包的信息。

源分发

simplify-0.1.10.tar.gz (128.1 kB 查看哈希值)

上传时间

构建分发

simplify-0.1.10-py3-none-any.whl (24.5 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面