"""Priors
======
The methods in this module are designed for the :class:`~orbdot.nested_sampling.NestedSampling`
class, or similar algorithms for which sampling from a unit hypercube is required to explore the
parameter space.
"""
from scipy.special import ndtri
[docs]
def gaussian_prior(hypval, prior):
"""Unit hypercube transformation for a free parameter with a Gaussian (Normal) prior.
Parameters
----------
hypval : float
Value in the unit hypercube (from 0 to 1).
prior : tuple
Tuple containing the mean and standard deviation of the Gaussian prior distribution,
ie. ``["gaussian", mean, std]``.
Returns
-------
float
"""
return prior[0] + prior[1] * ndtri(hypval)
[docs]
def log_prior(hypval, prior):
"""Unit hypercube transformation for a free parameter with a Log-Uniform prior.
Parameters
----------
hypval : float
Value in the unit hypercube (from 0 to 1).
prior : tuple
Tuple containing the minimum and maximum values of the log-uniform prior distribution,
ie. ``["log", log10(min), log10(max)]``.
Returns
-------
float
"""
return 10.0 ** (hypval * (prior[1] - prior[0]) + prior[0])
[docs]
def get_prior(hypval, prior):
"""Retrieves the value of a parameter from the unit hypercube given a prior distribution.
Parameters
----------
hypval : float
Value in the unit hypercube (from 0 to 1).
prior : list or tuple
Tuple that defines the prior distribution for the parameter. The first element specifies
the type of prior (``"uniform"``, ``"gaussian"``, or ``"log"``), and the subsequent elements define the
bounds of the distribution. The options are:
1. Gaussian Prior: ``["gaussian", mean, std]``
2. Uniform Prior: ``["uniform", min, max]``
3. Log-Uniform Prior: ``["log", log10(min), log10(max)]``
Returns
-------
float
"""
prior_type = prior[0]
prior_params = prior[1:3]
if prior_type == "uniform":
return uniform_prior(hypval, prior_params)
if prior_type == "gaussian" or type == "normal":
return gaussian_prior(hypval, prior_params)
if prior_type == "log":
return log_prior(hypval, prior_params)
raise ValueError(
f"Prior type '{prior_type}' not recognized.\n Accepted priors are:"
"'uniform', 'gaussian', and 'log'"
)