Source code for ska_ost_senscalc.common.model

import dataclasses
from enum import Enum
from typing import Union

import astropy.units as u
from astropy.coordinates import Latitude

from ska_ost_senscalc.low.model import LowSpectralMode
from ska_ost_senscalc.mid.model import MidSpectralMode
from ska_ost_senscalc.subarray import LOWArrayConfiguration, MIDArrayConfiguration
from ska_ost_senscalc.utilities import Telescope


[docs]class Weighting(Enum): """ Enumeration for different weighting """ NATURAL = "natural" ROBUST = "robust" UNIFORM = "uniform"
[docs]class Limit(Enum): """ Enumeration for different types of limit """ UPPER = "upper limit" LOWER = "lower limit" VALUE = "value"
[docs]@dataclasses.dataclass class BeamSize: beam_maj: u.Quantity beam_min: u.Quantity beam_pa: u.Quantity
[docs]@dataclasses.dataclass class ConfusionNoise: value: u.Quantity | list[u.Quantity] limit: Limit | list[Limit]
[docs]@dataclasses.dataclass class WeightingInput: _: dataclasses.KW_ONLY dec: Latitude weighting_mode: Weighting freq_centre: list[u.Quantity] subarray_configuration: Union[MIDArrayConfiguration, LOWArrayConfiguration] telescope: Telescope calc_mode: Union[LowSpectralMode, MidSpectralMode] robustness: int = None taper: u.Quantity = 0.0 * u.arcsec
[docs]@dataclasses.dataclass class WeightingResult: weighting_factor: float surface_brightness_conversion_factor: list[u.Quantity] beam_size: list[BeamSize] confusion_noise: ConfusionNoise = None