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 CalculatorInput, 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
[docs] @dataclasses.dataclass class CalculatorInputPSS(CalculatorInput): """ This dataclass represents the internal model of the Calculator for the PSS mode. The following units are implicitly assumed (first three parameters are inherited from CalculatorInput): - freq_centre, bandwidth: [MHz] - duration: [h] - chan_width: [Hz] - dm: [pc/cm^3] - pulse_period, intrinsic_pulse_width: [ms] """ _: dataclasses.KW_ONLY chan_width: float dm: float pulse_period: float intrinsic_pulse_width: float