# Source code for beast.observationmodel.noisemodel.splinter

"""
splinter noise model assumes that every photometric band is independent
from the others and has a fractional flux uncertainty and no bias.
Method
------
Create a noise model that has sigmas that are frac_unc times sed_flux and
zeros for the bias terms.
"""
import numpy as np
import tables
__all__ = ["make_splinter_noise_model"]
[docs]def make_splinter_noise_model(
outname, sedgrid, frac_unc=0.10, absflux_a_matrix=None, **kwargs
):
"""
Splinter noise model assumes that every filter is independent with
any other. And assumes a fractional uncertainty at all fluxes.
No ASTs are used.
Parameters
----------
outname: str
path and filename into which save the noise model
sedgrid: SEDGrid instance
sed model grid for everyone of which we will evaluate the model
frac_unc: float [default = 0.10 (10%)]
fractional flux uncertainy
absflux_a_matrix: ndarray
absolute calibration a matrix giving the fractional uncertainties
including correlated terms (off diagonals)
for the splinter model, only the diagonal terms are used
returns
-------
noisefile: str
noisemodel file name
"""
n_models, n_filters = sedgrid.seds.shape
# fill the bias vector with zeros
bias = np.full((n_models, n_filters), 0.0)
# fill the sigma vector with uncertainties based on the
# input fraction uncertainty
sigma = sedgrid.seds[:] * frac_unc
# fill the completeness vector with ones
compl = np.full((n_models, n_filters), 1.0)
# absolute flux calibration uncertainties
# off-diagnonal terms are ignored for the splinter
if absflux_a_matrix is not None:
if absflux_a_matrix.ndim == 1:
abs_calib_2 = absflux_a_matrix[:] ** 2
else: # assumes a cov matrix
abs_calib_2 = np.diag(absflux_a_matrix)
noise = np.sqrt(abs_calib_2 * sedgrid.seds[:] ** 2 + sigma ** 2)
else:
noise = sigma
# save to disk
print("Writting to disk into {0:s}".format(outname))
with tables.open_file(outname, "w") as outfile:
outfile.create_array(outfile.root, "bias", bias)
outfile.create_array(outfile.root, "error", noise)
outfile.create_array(outfile.root, "completeness", compl)
return outname