注册分析积分时访问 PDF 变量



首先,感谢您制作了一个非常整洁的pythonic工具,可以用作RooFit的替代品。

我已经成功定义了自定义 2D PDF,但我不完全确定如何注册函数的解析积分:

来自 WolframAlpha 的分析积分

PDF 的定义如下:

class PdfForDeltaW(zfit.pdf.ZPDF):
"""Pdf to calculate epsilon, w, and delta w, as a function of sig-flav and tag-flav"""
_N_OBS = 2
_PARAMS = "epsilon w delta_w mix_prob".split()
def _unnormalized_pdf(self, x):
"""Calculation of PDF value"""
sigflav, tagflav = zfit.ztf.unstack_x(x)
epsilon = self.params["epsilon"]
w = self.params["w"]
delta_w = self.params["delta_w"]
mix_prob = self.params["mix_prob"]
dilution = 1 - 2 * w
mixing = 1 - 2 * mix_prob
return (
0.5
* epsilon
* (1 - sigflav * tagflav * (sigflav * delta_w + dilution * mixing))
)

通过查看 github 上的示例,我不确定除了可以通过params属性访问的拟合变量之外,我如何访问用于计算的拟合可观察量(即 x、sigflav和 y,tagflav用于我的 2D 情况(。

此外,我不确定应该如何定义我的限制。我知道 x 和 y 都必须在 [-1, 1] 范围内。我认为最好更清楚地说明应该如何使用zfit.Space.from_axes函数,以及这与解析积分的关系。

干杯 科尔姆

谢谢你,让我解释一下不同的事情:

拟合变量

如果要在整个PDF上注册一个积分,则无需访问sigflavtagflav,因为您可以在它们上进行集成。 如果你有一个偏积分,你可以通过x访问它们,它充当_unnormalized_pdf情况下的参数。

轴间距

Space定义坐标和限制/范围。通常,作为 PDF 的用户,这涉及可观察量(如数据帧的列(。但是,如果我们创建一个PDF,那么它将要使用的可观察量当然是未知的,PDF工作"基于位置"或"基于轴"。例如,在您的示例中,sigflav在轴 0 上,无论 PDF 将用于什么可观察量,都将被命名为。 这就是为什么在注册积分时,我们需要使用根据axes定义的Space.

积分极限

对 PDF 的限制可以有不同的控制。如果需要,可以实现更细粒度的控制,但目前可用的是,您可以定义从某个点/或任何地方到某个点/任何地方的积分。

这很有用,因为您可以注册多个积分。也许你知道一般积分,它有一个复杂的形式。但是你也知道,例如,从 -1 到 1 的积分正好是 1。因此,您也可以注册它并赋予它更高的优先级。 这意味着,如果将 -1 积分为 1,则使用更简单的形式,否则使用更通用的形式。

在您的情况下,您想从 ANY 注册到 ANY,或者用作限制ANY_LOWER,ANY_UPPER,如下所示

lower_full = ((zfit.Space.ANY_LOWER, zfit.Space.ANY_LOWER),)
upper_full = ((zfit.Space.ANY_UPPER, zfit.Space.ANY_UPPER),)
integral_full_limits = zfit.Space.from_axes(axes=(0, 1),
limits=(lower_full, upper_full))

最新更新