"""
Unit tests for the sensitivity_calculator.mid_utilities module.
"""
import pytest
import numpy as np
import astropy.units as u
from astropy.coordinates import SkyCoord
from sensitivity_calculator.utilities import Celestial, DishType, TelParams, Utilities
import sensitivity_calculator.mid_utilities as mid_utils
[docs]def test_eta_bandpass():
"""Verify mid_utilities.eta_bandpass
"""
assert mid_utils.eta_bandpass() == 1.0
[docs]def test_eta_coherence():
"""Verify mid_utilities.eta_coherence
"""
# print("eta_coherence", mid_utils.eta_coherence(None, 8.0 * u.GHz))
assert mid_utils.eta_coherence(8.0 * u.GHz) == pytest.approx(0.9945629318496559)
[docs]def test_eta_correlation():
"""Verify mid_utilities.eta_correlation
"""
assert mid_utils.eta_correlation() == pytest.approx(0.98)
[docs]def test_eta_digitisation():
"""
Verify mid_utilities.BaseCalculator.eta_digitise
"""
assert mid_utils.eta_digitisation("Band 1") == 0.999
assert mid_utils.eta_digitisation("Band 2") == 0.999
assert mid_utils.eta_digitisation("Band 3") == 0.998
assert mid_utils.eta_digitisation("Band 5a") == 0.955
assert mid_utils.eta_digitisation("Band 5b") == 0.955
with pytest.raises(RuntimeError) as err:
assert mid_utils.eta_digitisation("other")
assert str(err.value) == "bad obs_band: other"
[docs]def test_eta_dish():
"""Validate mid_utilities.eta_dish
"""
assert mid_utils.eta_dish(
0.5 * u.GHz, DishType.SKA1
) == TelParams.calculate_dish_efficiency(0.5 * u.GHz, DishType.SKA1)
with pytest.raises(RuntimeError) as err:
assert mid_utils.eta_dish(0.5 * u.GHz, "other")
assert str(err.value) == "bad dish_type: other"
[docs]def test_eta_point():
"""
Verify mid_utilities.BaseCalculator.eta_point
"""
# print("eta_point 1", mid_utils.eta_point(2.0 * u.GHz, DishType.SKA1))
# print("eta_point 2", mid_utils.eta_point(1.5 * u.GHz, DishType.MeerKAT))
assert mid_utils.eta_point(2.0 * u.GHz, DishType.SKA1) == pytest.approx(
0.9999016485055535
)
assert mid_utils.eta_point(1.5 * u.GHz, DishType.MeerKAT) == pytest.approx(
0.9999520116676085
)
with pytest.raises(RuntimeError) as err:
assert mid_utils.eta_point(0.5 * u.GHz, "other")
assert str(err.value) == "bad dish_type: other"
[docs]def test_eta_rfi():
"""Validate mid_utilities.eta_rfi
"""
assert mid_utils.eta_rfi() == 1.00
[docs]def test_eta_system():
"""Validate mid_utilities.eta_system
"""
assert mid_utils.eta_system(0.5, 0.5, 0.5, 0.5, 0.5) == 0.5 ** 5
[docs]def test_Tgal():
"""Validate mid_utilities.Tgal
"""
south_pole = SkyCoord(0.0, -90.0, unit="deg")
assert mid_utils.Tgal(
south_pole, np.array([0.5]) * u.GHz, DishType.SKA1, 2.75
) == Celestial().calculate_Tgal(
south_pole, np.array([0.5]) * u.GHz, DishType.SKA1, 2.75
)
[docs]def test_Trcv():
"""Validate mid_utilities.Trcv
"""
assert mid_utils.Trcv(
0.5 * u.GHz, "Band 1", DishType.SKA1
) == TelParams.calculate_Trcv(0.5 * u.GHz, "Band 1", DishType.SKA1)
[docs]def test_Tsky():
"""Validate mid_utilities.Tsky
"""
location = TelParams.mid_core_location()
south_pole = SkyCoord(0.0, -90.0, unit="deg")
elevation = 90.0 * u.deg - (location.to_geodetic().lat - south_pole.icrs.dec)
# print("Tsky 1", elevation, mid_utils.Tsky(5.0 * u.K, 0.5 * u.GHz, elevation, 10))
assert mid_utils.Tsky(5.0 * u.K, 0.5 * u.GHz, elevation, 10).to_value(
u.K
) == pytest.approx(18.9435658)
[docs]def test_Tspl():
"""Validate mid_utilities.Tspl
"""
assert mid_utils.Tspl(DishType.SKA1) == TelParams.calculate_Tspl(DishType.SKA1)
[docs]def test_Tsys_dish():
"""Validate mid_utilities.Tsys_dish
"""
assert mid_utils.Tsys_dish(
10.0 * u.K, 10.0 * u.K, 10.0 * u.K, 0.5 * u.GHz
) == Utilities.Tx(0.5 * u.GHz, 30.0 * u.K)