zfit 中直方图的 PDF?
PDF from a histogram in zfit?
我正在查看如何从直方图中获取 PDF 的文档,但找不到任何内容,那么如何从直方图中获取 PDF?例如,在 sum_pdf 中使用它= zfit.pdf.SumPDF([model1, model2], fracs=frac) 为了配合,或者生成一些玩具。
提前致谢。
PS。我正在寻找类似于 Roofit 的 RooHistPdf Class 的东西。
更新答案
zfit 现在允许按照 in the tutorial
中的描述进行合并拟合(当前与 pip install zfit --pre
一起安装)
基本上,从未分箱的数据或模型开始,您可以:
# make binned
binning = zfit.binned.RegularBinning(50, -8, 10, name="x")
obs_bin = zfit.Space("x", binning=binning)
data = data_nobin.to_binned(obs_bin)
model = zfit.pdf.BinnedFromUnbinnedPDF(model_nobin, obs_bin)
旧答案
目前没有 out-of-the-box 解决方案,但是 work-in-progress。
但是,您可以自己简单地构造一些东西,例如:
import zfit
from zfit import z
import numpy as np
import tensorflow as tf
zfit.settings.options['numerical_grad'] = True
class BinnedEfficiencyPDF(zfit.pdf.BasePDF):
def __init__(self, efficiency, eff_bins, obs, name='BinnedEfficiencyPDF'):
self.efficiency = efficiency
self.eff_bins = eff_bins
super().__init__(obs=obs, name=name)
def _binContent(self, x):
eff_bin = np.digitize(x, self.eff_bins)
return self.efficiency[eff_bin]
def _unnormalized_pdf(self, x): # or even try with PDF
x = z.unstack_x(x)
probs = z.py_function(func=self._binContent, inp=[x], Tout=tf.float64)
probs.set_shape(x.shape)
return prob
我正在查看如何从直方图中获取 PDF 的文档,但找不到任何内容,那么如何从直方图中获取 PDF?例如,在 sum_pdf 中使用它= zfit.pdf.SumPDF([model1, model2], fracs=frac) 为了配合,或者生成一些玩具。
提前致谢。
PS。我正在寻找类似于 Roofit 的 RooHistPdf Class 的东西。
更新答案
zfit 现在允许按照 in the tutorial
中的描述进行合并拟合(当前与pip install zfit --pre
一起安装)
基本上,从未分箱的数据或模型开始,您可以:
# make binned
binning = zfit.binned.RegularBinning(50, -8, 10, name="x")
obs_bin = zfit.Space("x", binning=binning)
data = data_nobin.to_binned(obs_bin)
model = zfit.pdf.BinnedFromUnbinnedPDF(model_nobin, obs_bin)
旧答案
目前没有 out-of-the-box 解决方案,但是 work-in-progress。
但是,您可以自己简单地构造一些东西,例如:
import zfit
from zfit import z
import numpy as np
import tensorflow as tf
zfit.settings.options['numerical_grad'] = True
class BinnedEfficiencyPDF(zfit.pdf.BasePDF):
def __init__(self, efficiency, eff_bins, obs, name='BinnedEfficiencyPDF'):
self.efficiency = efficiency
self.eff_bins = eff_bins
super().__init__(obs=obs, name=name)
def _binContent(self, x):
eff_bin = np.digitize(x, self.eff_bins)
return self.efficiency[eff_bin]
def _unnormalized_pdf(self, x): # or even try with PDF
x = z.unstack_x(x)
probs = z.py_function(func=self._binContent, inp=[x], Tout=tf.float64)
probs.set_shape(x.shape)
return prob