# Licensed under a 3-clause BSD style license - see LICENSE.rst
"""On-off bin stats computations."""
__all__ = ["Stats"]
[docs]class Stats:
"""Container for an on-off observation.
Parameters
----------
n_on : array_like
Observed number of counts in the on region
n_off : array_like
Observed number of counts in the off region
a_on : array_like
Relative background exposure of the on region
a_off : array_like
Relative background exposure in the off region
"""
# TODO: use numpy arrays and properties
# TODO: add gamma exposure
def __init__(self, n_on, n_off, a_on, a_off):
self.n_on = n_on
self.n_off = n_off
self.a_on = a_on
self.a_off = a_off
@property
def alpha(self):
r"""Background exposure ratio (float).
.. math:: \alpha = a_\mathrm{on} / a_\mathrm{off}
"""
return self.a_on / self.a_off
@property
def background(self):
r"""Background estimate (float).
.. math:: \mu_\mathrm{bg} = \alpha\ n_\mathrm{off}
"""
return self.alpha * self.n_off
@property
def excess(self):
r"""Excess (float).
.. math:: n_\mathrm{ex} = n_\mathrm{on} - \mu_\mathrm{bg}
"""
return self.n_on - self.background
def __str__(self):
return (
f"n_on = {self.n_on}\n"
f"n_off = {self.n_off}\n"
f"a_on = {self.a_on}\n"
f"a_off = {self.a_off}\n"
f"alpha = {self.alpha}\n"
f"background = {self.background}\n"
f"excess = {self.excess}\n"
)