def calc_fwhm(distribution, is_log=True):
"""
Assess the width of the probability distribution. This returns
full-width-half-max
"""
if isinstance(distribution, interp1d):
if is_log:
ymin = distribution.y.min()
prob = np.exp(-(distribution.y-ymin))
else:
prob = distribution.y
xvals = distribution.x
elif isinstance(distribution, Distribution):
# Distribution always stores log-prob
xvals = distribution._func.x
prob = distribution.prob_relative(xvals)
else:
raise TypeError("Error in computing the FWHM for the distribution. "
" The input should be either Distribution or interpolation object");
x_idxs = binary_dilation(prob >= 0.4*(prob.max() - prob.min())+prob.min(), iterations=1)
xs = xvals[x_idxs]
if xs.shape[0] < 2:
print ("Not enough points to compute FWHM: returning zero")
return min(TINY_NUMBER, distribution.xmax - distribution.xmin)
else:
return xs.max() - xs.min()
评论列表
文章目录