Source code for rascil.processing_components.calibration.iterators

""" GainTable iterators for iterating through a GainTable

"""

__all__ = ["gaintable_timeslice_iter"]

import logging

import numpy
from ska_sdp_datamodels.calibration.calibration_model import GainTable

from rascil.processing_components.parameters import get_parameter

log = logging.getLogger("rascil-logger")


[docs] def gaintable_timeslice_iter(gt: GainTable, **kwargs) -> numpy.ndarray: """GainTable iterator :param gt: GainTable :param timeslice: 'auto' or time in seconds :param gaintable_slices: Number of slices (second in precedence to timeslice) :return: Boolean array with selected rows=True """ timemin = numpy.min(gt.time) timemax = numpy.max(gt.time) timeslice = get_parameter(kwargs, "timeslice", "auto") if timeslice == "auto": boxes = numpy.unique(gt.time) timeslice = 0.1 elif timeslice is None: timeslice = timemax - timemin boxes = [0.5 * (timemax + timemin)] elif isinstance(timeslice, float) or isinstance(timeslice, int): boxes = numpy.arange(timemin, timemax, timeslice) else: gt_slices = get_parameter(kwargs, "gaintable_slices", None) assert ( gt_slices is not None ), "Time slicing not specified: set either timeslice or gaintable_slices" boxes = numpy.linspace(timemin, timemax, gt_slices) if gt_slices > 1: timeslice = boxes[1] - boxes[0] else: timeslice = timemax - timemin for box in boxes: rows = numpy.abs(gt.time - box) <= 0.5 * timeslice yield rows