Source code for mosfit.modules.transforms.viscous

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

from mosfit.modules.transforms.transform import Transform

CLASS_NAME = 'Viscous'


[docs] class Viscous(Transform): """Viscous delay transform.""" N_INT_TIMES = 1000 MIN_LOG_SPACING = -3
[docs] def process(self, **kwargs): """Process module.""" Transform.process(self, **kwargs) tvisc = float(kwargs['Tviscous']) times = np.asarray(self._times_to_process, dtype=float) new_lums = np.zeros_like(times) if len(self._dense_times_since_exp) < 2: return {self.dense_key('luminosities'): new_lums} dense_t = np.asarray(self._dense_times_since_exp, dtype=float) dense_l = np.asarray(self._dense_luminosities, dtype=float) min_te = float(np.min(dense_t)) tb = max(0.0, min_te) t_end = float(dense_t[-1]) mask = (times >= tb) & (times <= t_end) uniq_times = np.unique(times[mask]) if uniq_times.size == 0: return {self.dense_key('luminosities'): new_lums} # Imported here so that `numba` is only required by runs that # actually use this model. from mosfit.modules.transforms._viscous_kernels import ( viscous_exp_filter) uniq_lums = viscous_exp_filter( dense_t, dense_l, uniq_times, tvisc, tb, t_end) new_lums = uniq_lums[np.searchsorted(uniq_times, times)] return {self.dense_key('luminosities'): new_lums}