Source code for mosfit.modules.arrays.densetimes

"""Definitions for the `DenseTimes` class."""
from collections import OrderedDict

import numpy as np
from mosfit.modules.arrays.array import Array

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


[docs]class DenseTimes(Array): """Generate an evenly-spaced array of times for use in calculations. This class ensures an even time-sampling between the time of explosion and the last datapoint, as many transients may lack regular cadence data. """ N_TIMES = 100 L_T_MIN = -6 # in days def __init__(self, **kwargs): """Initialize module.""" super(DenseTimes, self).__init__(**kwargs) self._n_times = kwargs[ 'n_times'] if 'n_times' in kwargs else self.N_TIMES
[docs] def process(self, **kwargs): """Process module.""" self._rest_times = kwargs['rest_times'] self._rest_t_explosion = kwargs[self.key('resttexplosion')] outputs = OrderedDict() max_times = max(self._rest_times) if max_times > self._rest_t_explosion: outputs['dense_times'] = np.unique( np.concatenate(([0.0], [ x + self._rest_t_explosion for x in np.logspace( self.L_T_MIN, np.log10(max_times - self._rest_t_explosion), num=self._n_times) ], self._rest_times))) else: outputs['dense_times'] = np.array(self._rest_times) outputs['dense_indices'] = np.searchsorted(outputs['dense_times'], self._rest_times) return outputs