首先,感谢您制作了一个非常简洁的 Pythonic 工具,可以用作 RooFit 的替代品。
我已经成功定义了一个自定义 2D PDF,但我不完全确定如何注册我的函数的分析积分:
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上的示例,除了可以通过属性访问的拟合变量之外,我不确定如何访问拟合的 observables 以用于计算(即 xsigflav
和 y,对于我的 2D 案例)。tagflav
params
此外,我不确定应该如何定义我的限制。我知道 x 和 y 都必须在 [-1, 1] 范围内。我认为最好能更清楚地了解zfit.Space.from_axes
应该如何使用该函数,以及它与解析积分的关系。
干杯,科尔姆