Source code for mosfit.modules.parameters.powerlaw

"""Definitions for the `PowerLaw` class."""
import numpy as np

from mosfit.modules.parameters.parameter import Parameter


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


[docs]class PowerLaw(Parameter): """Standard power law, alpha must be > 1.""" def __init__(self, **kwargs): """Initialize module.""" super(PowerLaw, self).__init__(**kwargs) self._alpha = kwargs.get(self.key('alpha'), None) if self._log: self._miv = np.exp(self._min_value) self._mav = np.exp(self._max_value) else: self._miv = self._min_value self._mav = self._max_value self._mivap1 = self._miv ** (self._alpha + 1.0) self._mavap1 = self._mav ** (self._alpha + 1.0) self._miavap1 = self._mavap1 - self._mivap1 self._cdf_exp = 1.0 / (self._alpha + 1.0)
[docs] def lnprior_pdf(self, x): """Evaluate natural log of probability density function.""" value = self.value(x) return np.log(((value - self._miv) / (self._mav - self._miv)) ** self._alpha)
[docs] def prior_icdf(self, u): """Evaluate inverse cumulative density function.""" value = ((self._mivap1 + u * self._miavap1) ** self._cdf_exp) if self._log: value = np.log(value) value = (value - self._min_value) / (self._max_value - self._min_value) return value