Source code for mosfit.modules.parameters.redshift

"""Definitions for the `Redshift` class."""
import numpy as np
from astropy import units as un
from astropy.cosmology import Planck15 as cosmo
from astropy.cosmology import z_at_value

from mosfit.modules.parameters.parameter import Parameter


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


[docs]class Redshift(Parameter): """Redshift parameter that depends on luminosity distance.""" def __init__(self, **kwargs): """Initialize module.""" super(Redshift, self).__init__(**kwargs) self._warned_small = False
[docs] def process(self, **kwargs): """Process module.""" # If this parameter is not free and is already set, then skip if self._name in kwargs: return {} if self._value is None: self._lum_dist = kwargs.get(self.key('lumdist'), self._lum_dist) if self._value is None and self._lum_dist is not None: if self._lum_dist < 1.0: if not self._warned_small: self._printer.message( 'small_lumdist', [ str(np.around( self._lum_dist * 1.0e6, decimals=2))], warning=True) self._warned_small = True value = 0.0 else: try: value = z_at_value(cosmo.luminosity_distance, self._lum_dist * un.Mpc).value except: value = z_at_value(cosmo.luminosity_distance, self._lum_dist * un.Mpc) else: value = self.value(kwargs['fraction']) else: value = self._value return {self._name: value}
[docs] def send_request(self, request): """Send requests to other modules.""" if request == 'redshift': return self._value
[docs] def receive_requests(self, **requests): """Receive requests from other ``Module`` objects.""" self._lum_dist = requests.get('lumdist', None)