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