Source code for rubin_scheduler.scheduler.detailers.event_detailers

import warnings

import numpy as np

from rubin_scheduler.scheduler.detailers import BaseDetailer


[docs] class BandPickToODetailer(BaseDetailer): """Select which filters are used based on information in a ToO event. Parameters ---------- band_start : `str` Which band to consider changing band_end : `str` What band to change to. distance_limit : `float` For distances less than distance_limit, the bands are swapped. (kpc) check_mounted : `bool` Check that the desired band is mounted before changing values. require_dark : `bool` If in dark conditions, the bands are swapped. """ def __init__( self, band_start="i", band_end="z", distance_limit=10, check_mounted=True, require_dark=False ): self.band_start = band_start self.band_end = band_end self.distance_limit = distance_limit self.check_mounted = check_mounted self.require_dark = require_dark def __call__(self, observations, conditions, target_o_o=None): if hasattr(target_o_o, "posterior_distance"): if target_o_o.posterior_distance is not None: if self.require_dark and conditions.moon_phase > 50: warnings.warn("Requires dark time, moon phase is greater than 50%.") elif target_o_o.posterior_distance < self.distance_limit: if self.check_mounted: mounted = self.band_end in conditions.mounted_bands else: mounted = True if mounted: band_start_indx = np.where(observations["band"] == self.band_start)[0] observations["band"][band_start_indx] = self.band_end else: warnings.warn("No distance present, not swapping bands.") else: warnings.warn("No distance present, not swapping bands.") return observations