Source code for mosfit.modules.parameters.gaussian

"""Definitions for the `Gaussian` class."""
import numpy as np
from scipy.special import erfinv

from mosfit.modules.parameters.parameter import Parameter


# Important: Only define one ``Module`` class per file.


[docs]class Gaussian(Parameter): """Parameter with Gaussian prior. If the parameter must be positive, set the `pos` keyword to True. """ def __init__(self, **kwargs): """Initialize module.""" super(Gaussian, self).__init__(**kwargs) self._mu = kwargs.get(self.key('mu'), None) self._sigma = kwargs.get(self.key('sigma'), None) if self._log: self._mu = np.log(self._mu) self._sigma = np.log(10.0 ** self._sigma) if not self._mu: raise ValueError('Need to set a value for mu!') if not self._sigma: raise ValueError('Need to set a value for sigma!')
[docs] def lnprior_pdf(self, x): """Evaluate natural log of probability density function.""" value = self.value(x) if self._log: value = np.log(value) return -(value - self._mu) ** 2 / (2. * self._sigma ** 2)
[docs] def prior_icdf(self, u): """Evaluate inverse cumulative density function.""" value = (erfinv(2.0 * u - 1.0) * np.sqrt(2.)) * self._sigma + self._mu value = (value - self._min_value) / (self._max_value - self._min_value) return np.clip(value, 0.0, 1.0)