Source code for rubin_sim.satellite_constellations.basis_function

__all__ = ("SatelliteAvoidBasisFunction",)

import healpy as hp
import numpy as np
import rubin_scheduler.scheduler.basis_functions as bf


[docs] class SatelliteAvoidBasisFunction(bf.BaseBasisFunction): """Uses satellite position information from the Conditions object and then avoids streaks. Parameters ---------- forecast_time : `float` The time ahead to forecast satellite streaks (minutes). smooth_fwhm : `float` The smoothing full width half max to use (degrees) """ def __init__(self, nside=32, forecast_time=90.0, smooth_fwhm=3.5): super().__init__(nside=nside) self.forecast_time = forecast_time / 60.0 / 24 # To days self.smooth_fwhm = np.radians(smooth_fwhm) def _calc_value(self, conditions, indx=None): result = 0 # find the indices that are relevant indx_min = np.min(np.searchsorted(conditions.satellite_mjds, conditions.mjd)) indx_max = np.max(np.searchsorted(conditions.satellite_mjds, conditions.mjd + self.forecast_time)) if indx_max > indx_min: result = np.sum(conditions.satellite_maps[indx_min:indx_max], axis=0) result = hp.smoothing(result, fwhm=self.smooth_fwhm) result = hp.ud_grade(result, self.nside) result[np.where(result < 0)] = 0 # Make it negative, so positive weights will result # in avoiding satellites result *= -1 return result