Source code for pyhf.simplemodels
from warnings import warn
from pyhf import Model
__all__ = ["correlated_background", "uncorrelated_background"]
def __dir__():
return __all__
[docs]
def correlated_background(
signal, bkg, bkg_up, bkg_down, batch_size=None, validate=True, poi_name="mu"
):
r"""
Construct a simple single channel :class:`~pyhf.pdf.Model` with a
:class:`~pyhf.modifiers.histosys` modifier representing a background
with a fully correlated bin-by-bin uncertainty.
Args:
signal (:obj:`list`): The data in the signal sample.
bkg (:obj:`list`): The data in the background sample.
bkg_up (:obj:`list`): The background sample under an upward variation
corresponding to :math:`\alpha=+1`.
bkg_down (:obj:`list`): The background sample under a downward variation
corresponding to :math:`\alpha=-1`.
batch_size (:obj:`None` or :obj:`int`): Number of simultaneous (batched) Models to compute.
validate (:obj:`bool`): If :obj:`True`, validate the model before returning.
Only set this to :obj:`False` if you have an experimental use case and know what you're doing.
poi_name (:obj:`str`): The :class:`~pyhf.pdf.Model` parameter of interest name.
Defaults to ``"mu"``.
Returns:
~pyhf.pdf.Model: The statistical model adhering to the :obj:`model.json` schema.
.. versionchanged:: 0.8.0 Added ``poi_name`` argument.
Example:
>>> import pyhf
>>> pyhf.set_backend("numpy")
>>> model = pyhf.simplemodels.correlated_background(
... signal=[12.0, 11.0],
... bkg=[50.0, 52.0],
... bkg_up=[45.0, 57.0],
... bkg_down=[55.0, 47.0],
... )
>>> model.schema
'model.json'
>>> model.config.channels
['single_channel']
>>> model.config.samples
['background', 'signal']
>>> model.config.parameters
['correlated_bkg_uncertainty', 'mu']
>>> model.expected_data(model.config.suggested_init())
array([62., 63., 0.])
"""
spec = {
"channels": [
{
"name": "single_channel",
"samples": [
{
"name": "signal",
"data": signal,
"modifiers": [
{"name": "mu", "type": "normfactor", "data": None}
],
},
{
"name": "background",
"data": bkg,
"modifiers": [
{
"name": "correlated_bkg_uncertainty",
"type": "histosys",
"data": {"hi_data": bkg_up, "lo_data": bkg_down},
}
],
},
],
}
]
}
return Model(spec, batch_size=batch_size, validate=validate, poi_name=poi_name)
[docs]
def uncorrelated_background(
signal, bkg, bkg_uncertainty, batch_size=None, validate=True, poi_name="mu"
):
"""
Construct a simple single channel :class:`~pyhf.pdf.Model` with a
:class:`~pyhf.modifiers.shapesys` modifier representing an uncorrelated
background uncertainty.
Example:
>>> import pyhf
>>> pyhf.set_backend("numpy")
>>> model = pyhf.simplemodels.uncorrelated_background(
... signal=[12.0, 11.0], bkg=[50.0, 52.0], bkg_uncertainty=[3.0, 7.0]
... )
>>> model.schema
'model.json'
>>> model.config.channels
['singlechannel']
>>> model.config.samples
['background', 'signal']
>>> model.config.parameters
['mu', 'uncorr_bkguncrt']
>>> model.expected_data(model.config.suggested_init())
array([ 62. , 63. , 277.77777778, 55.18367347])
Args:
signal (:obj:`list`): The data in the signal sample
bkg (:obj:`list`): The data in the background sample
bkg_uncertainty (:obj:`list`): The statistical uncertainty on the background sample counts
batch_size (:obj:`None` or :obj:`int`): Number of simultaneous (batched) Models to compute
validate (:obj:`bool`): If :obj:`True`, validate the model before returning.
Only set this to :obj:`False` if you have an experimental use case and know what you're doing.
poi_name (:obj:`str`): The :class:`~pyhf.pdf.Model` parameter of interest name.
Defaults to ``"mu"``.
Returns:
~pyhf.pdf.Model: The statistical model adhering to the :obj:`model.json` schema
.. versionchanged:: 0.8.0 Added ``poi_name`` argument.
"""
spec = {
'channels': [
{
'name': 'singlechannel',
'samples': [
{
'name': 'signal',
'data': signal,
'modifiers': [
{'name': 'mu', 'type': 'normfactor', 'data': None}
],
},
{
'name': 'background',
'data': bkg,
'modifiers': [
{
'name': 'uncorr_bkguncrt',
'type': 'shapesys',
'data': bkg_uncertainty,
}
],
},
],
}
]
}
return Model(spec, batch_size=batch_size, validate=validate, poi_name=poi_name)
# Deprecated APIs
def _deprecated_api_warning(
deprecated_api, new_api, deprecated_release, remove_release
):
warn(
f"{deprecated_api} is deprecated in favor of {new_api} as of pyhf v{deprecated_release} and will be removed in release {remove_release}."
+ f" Please use {new_api}.",
DeprecationWarning,
stacklevel=3, # Raise to user level
)