Source code for tests.sensitivity_calculator.test_end_to_end

"""
Unit tests for the sensitivity_calculator.frontend_adapter module
"""

import numpy as np
import astropy.units as u
from astropy.coordinates import SkyCoord

from sensitivity_calculator.frontend_adapter import (
    calculate_continuum_int_time,
    calculate_continuum_sensitivity,
    calculate_line_int_time,
    calculate_line_sensitivity,
)

from sensitivity_calculator.mid import MidCalculator

target_gc = SkyCoord(l=0.0 * u.deg, b=0.0 * u.deg, frame="galactic")
target_cena = SkyCoord(frame="icrs", ra="13h25m27.6s", dec="−43d01m09s")


[docs]def test_default_continuum_sensitivity(): """This is an end to end testing of the SC ContinuumSensitivity component. A range of possible inputs are tried and the results compared with expected. 'Expert' values are not set, so the SC will calculate the standard defaults where necessary. """ # simulate some variation in input parameters across bands obsfreq = 0.7e9 bandwidth = 0.7e9 chunk_centres = [0.7e9] chunk_width = 0.7e9 continuum_resolution = 0.21e3 array_config = "full" weathers = ["Good"] elevation = 90.0 band = "Band 1" int_time = 10.0 # get result via frontend. Setting 'expert' parameters to None will make the SC # generate default values result = calculate_continuum_sensitivity( target_lon=target_gc.icrs.ra.hourangle, target_lat=target_gc.icrs.dec.degree, target_frame="icrs", obs_band=band, continuum_obs_freq_scaled=obsfreq, continuum_bandwidth_scaled=bandwidth, weathers=weathers, elevation=elevation, array_config=array_config, continuum_int_time_scaled=int_time, eta_system=None, eta_point=None, eta_coherence=None, eta_digitisation=None, eta_correlation=None, eta_bandpass=None, n_ska=None, eta_dish_ska=None, Tsys_ska=None, Tspl_ska=None, Trcv_ska=None, n_meer=None, eta_dish_meer=None, Tsys_meer=None, Tspl_meer=None, Trcv_meer=None, Tsky=None, Tgal=None, alpha=None, chunk_centres=chunk_centres, chunk_width=chunk_width, continuum_resolution=continuum_resolution, ) # print("result 1", result) old = { "Good": { "calculator_state": { "pwv": "5", "etaPointing": "1", "etaCoherence": "1", "etaDigitisation": "0.999", "etaCorrelation": "0.98", "etaBandpass": "1", "nSKA": "133", "etaSKA": "0.826", "nMeer": "64", "etaMeer": "0.708", "alpha": "2.75", "Tsys_SKA": "221", "Tspl_SKA": "3", "Trcv_SKA": "15.1", "Tsys_Meer": "208", "Tspl_Meer": "4", "Trcv_Meer": "10.5", "Tsky": "198", "Tgal": "195", "elevation": "88.2", }, "cont_sens": "0.00019802 Jy", "chunk_centres": ["0.7 GHz"], "chunk_width": "0.7 GHz", "chunk_sensitivities": ["0.00019802 Jy"], "cont_line_sens": "0.36153 Jy", } } assert result == old # now try with 'commissioning' Tsys set Tsys = 25.0 result = calculate_continuum_sensitivity( target_lon=target_gc.icrs.ra.hourangle, target_lat=target_gc.icrs.dec.degree, target_frame="icrs", obs_band=band, continuum_obs_freq_scaled=obsfreq, continuum_bandwidth_scaled=bandwidth, weathers=weathers, elevation=elevation, array_config=array_config, continuum_int_time_scaled=int_time, eta_system=None, eta_point=None, eta_coherence=None, eta_digitisation=None, eta_correlation=None, eta_bandpass=None, n_ska=None, eta_dish_ska=None, Tsys_ska=Tsys, Tspl_ska=None, Trcv_ska=None, n_meer=None, eta_dish_meer=None, Tsys_meer=Tsys, Tspl_meer=None, Trcv_meer=None, Tsky=None, Tgal=None, alpha=None, chunk_centres=chunk_centres, chunk_width=chunk_width, continuum_resolution=continuum_resolution, ) # print("result 2", result) old = { "Good": { "calculator_state": { "pwv": "5", "etaPointing": "1", "etaCoherence": "1", "etaDigitisation": "0.999", "etaCorrelation": "0.98", "etaBandpass": "1", "nSKA": "133", "etaSKA": "0.826", "nMeer": "64", "etaMeer": "0.708", "alpha": "2.75", "Tsys_SKA": "25", "Tspl_SKA": "3", "Trcv_SKA": "15.1", "Tsys_Meer": "25", "Tspl_Meer": "4", "Trcv_Meer": "10.5", "Tsky": "198", "Tgal": "195", "elevation": "88.2", }, "cont_sens": "2.2787e-05 Jy", "chunk_centres": ["0.7 GHz"], "chunk_width": "0.7 GHz", "chunk_sensitivities": ["2.2787e-05 Jy"], "cont_line_sens": "0.041604 Jy", } } assert result == old # now try with some other expert values set Trcv = 10.0 Tspl = 20.0 Tsky = 15.0 Tgal = 50.0 alpha = 2.75 eta_dish_ska = 0.9 eta_dish_meer = 0.7 n_ska = 50 n_meer = 20 result = calculate_continuum_sensitivity( target_lon=target_gc.icrs.ra.hourangle, target_lat=target_gc.icrs.dec.degree, target_frame="icrs", obs_band=band, continuum_obs_freq_scaled=obsfreq, continuum_bandwidth_scaled=bandwidth, weathers=weathers, elevation=elevation, array_config=array_config, continuum_int_time_scaled=int_time, eta_system=None, eta_point=None, eta_coherence=None, eta_digitisation=None, eta_correlation=None, eta_bandpass=None, n_ska=n_ska, eta_dish_ska=eta_dish_ska, Tsys_ska=None, Tspl_ska=Tspl, Trcv_ska=Trcv, n_meer=n_meer, eta_dish_meer=eta_dish_meer, Tsys_meer=None, Tspl_meer=Tspl, Trcv_meer=Trcv, Tsky=Tsky, Tgal=Tgal, alpha=alpha, chunk_centres=chunk_centres, chunk_width=chunk_width, continuum_resolution=continuum_resolution, ) # print("result 3", result) old = { "Good": { "calculator_state": { "pwv": "5", "etaPointing": "1", "etaCoherence": "1", "etaDigitisation": "0.999", "etaCorrelation": "0.98", "etaBandpass": "1", "nSKA": "50", "etaSKA": "0.9", "nMeer": "20", "etaMeer": "0.7", "alpha": "2.75", "Tsys_SKA": "45", "Tspl_SKA": "20", "Trcv_SKA": "10", "Tsys_Meer": "45", "Tspl_Meer": "20", "Trcv_Meer": "10", "Tsky": "15", "Tgal": "50", "elevation": "88.2", }, "cont_sens": "0.00010752 Jy", "chunk_centres": ["0.7 GHz"], "chunk_width": "0.7 GHz", "chunk_sensitivities": ["0.00010752 Jy"], "cont_line_sens": "0.1963 Jy", } } assert result == old
[docs]def test_default_continuum_int_time(): """This is an end to end testing of the SC ContinuumIntTime component. A range of possible inputs are tried and the results compared with expected. 'Expert' values are not set, so the SC will calculate the standard defaults where necessary. """ # simulate some variation in input parameters across bands obsfreq = 1.35e9 bandwidth = 0.4e9 chunk_centres = [1.2167e9, 1.35e9, 1.4833e9] chunk_width = 0.133333e9 continuum_resolution = 0.21e3 array_config = "full" weathers = ["Average"] elevation = 90.0 band = "Band 2" sensitivity = 5.0e-3 result = calculate_continuum_int_time( target_lon=target_cena.ra.hourangle, target_lat=target_cena.dec.degree, target_frame="icrs", obs_band=band, continuum_obs_freq_scaled=obsfreq, continuum_bandwidth_scaled=bandwidth, weathers=weathers, elevation=elevation, array_config=array_config, continuum_sensitivity_scaled=sensitivity, eta_system=None, eta_point=None, eta_coherence=None, eta_digitisation=None, eta_correlation=None, eta_bandpass=None, n_ska=None, eta_dish_ska=None, Tsys_ska=None, Tspl_ska=None, Trcv_ska=None, n_meer=None, eta_dish_meer=None, Tsys_meer=None, Tspl_meer=None, Trcv_meer=None, Tsky=None, Tgal=None, alpha=None, chunk_centres=chunk_centres, chunk_width=chunk_width, continuum_resolution=continuum_resolution, ) # print("result 4", result) old = { "Average": { "calculator_state": { "pwv": "10", "etaPointing": "1", "etaCoherence": "1", "etaDigitisation": "0.999", "etaCorrelation": "0.98", "etaBandpass": "1", "nSKA": "133", "etaSKA": "0.882", "nMeer": "64", "etaMeer": "0.762", "alpha": "2.75", "Tsys_SKA": "27.2", "Tspl_SKA": "3", "Trcv_SKA": "7.5", "Tsys_Meer": "28.7", "Tspl_Meer": "4", "Trcv_Meer": "8.62", "Tsky": "16.4", "Tgal": "11.9", "elevation": "77.7", }, "cont_int_time": "0.00038813 s", "chunk_centres": ["1.2167 GHz", "1.35 GHz", "1.4833 GHz"], "chunk_width": "0.13333 GHz", "chunk_int_times": ["0.0014456 s", "0.0011644 s", "0.00096991 s"], "cont_line_int_time": "739.29 s", } } assert result == old
[docs]def test_default_line_sensitivity(): """This is an end to end testing of the SC LineSensitivity component. A range of possible inputs are tried and the results compared with expected. 'Expert' values are not set, so the SC will calculate the standard defaults where necessary. """ array_configs = ["full"] #  simulate some variation in input parameters across bands zoomfreqs = [6.5e9, 7.2e9, 6.1e9] zoomres = [0.21e3, 3.36e3, 13.44e3] array_config = "full" weathers = ["Bad"] elevation = 90.0 band = "Band 5a" int_time = 10.0 result = calculate_line_sensitivity( target_lon=target_cena.ra.hourangle, target_lat=target_cena.dec.degree, target_frame="icrs", obs_band=band, zoom_freqs_scaled=zoomfreqs, zoom_resolutions=zoomres, weathers=weathers, elevation=elevation, array_config=array_config, line_int_time_scaled=int_time, eta_system=None, eta_point=None, eta_coherence=None, eta_digitisation=None, eta_correlation=None, eta_bandpass=None, n_ska=None, eta_dish_ska=None, Tsys_ska=None, Tspl_ska=None, Trcv_ska=None, n_meer=None, eta_dish_meer=None, Tsys_meer=None, Tspl_meer=None, Trcv_meer=None, Tsky=None, Tgal=None, alpha=None, ) # print("result 5", result) old = { "Bad": { "calculator_state": { "pwv": "20", "etaPointing": "0.999", "etaCoherence": "0.997", "etaDigitisation": "0.955", "etaCorrelation": "0.98", "etaBandpass": "1", "nSKA": "133", "etaSKA": "0.88", "nMeer": "64", "etaMeer": "0.752", "alpha": "2.75", "Tsys_SKA": "16.6", "Tspl_SKA": "3", "Trcv_SKA": "8.61", "Tsys_Meer": "16.5", "Tspl_Meer": "4", "Trcv_Meer": "7.5", "Tsky": "5.11", "Tgal": "0.313", "elevation": "77.7", }, "zoom_sensitivities": ["0.027642 Jy", "0.007095 Jy", "0.0034065 Jy"], } } assert result == old
[docs]def test_default_line_int_time(): """This is an end to end testing of the SC LineIntTime component. A range of possible inputs are tried and the results compared with expected. 'Expert' values are not set, so the SC will calculate the standard defaults where necessary. """ zoomfreqs = [11.9e9] zoomres = [0.21e3, 3.36e3, 13.44e3] array_config = "full" weathers = ["Good"] elevation = 90.0 band = "Band 5b" sensitivity = 5.0e-3 result = calculate_line_int_time( target_lon=target_cena.ra.hourangle, target_lat=target_cena.dec.degree, target_frame="icrs", obs_band=band, zoom_freqs_scaled=zoomfreqs, zoom_resolutions=zoomres, weathers=weathers, elevation=elevation, array_config=array_config, line_sensitivity_scaled=sensitivity, eta_system=None, eta_point=None, eta_coherence=None, eta_digitisation=None, eta_correlation=None, eta_bandpass=None, n_ska=None, eta_dish_ska=None, Tsys_ska=None, Tspl_ska=None, Trcv_ska=None, n_meer=None, eta_dish_meer=None, Tsys_meer=None, Tspl_meer=None, Trcv_meer=None, Tsky=None, Tgal=None, alpha=None, ) # print("result 6", result) old = { "Good": { "calculator_state": { "pwv": "5", "etaPointing": "0.997", "etaCoherence": "0.988", "etaDigitisation": "0.955", "etaCorrelation": "0.98", "etaBandpass": "1", "nSKA": "133", "etaSKA": "0.856", "nMeer": "64", "etaMeer": "0.706", "alpha": "2.75", "Tsys_SKA": "20.5", "Tspl_SKA": "3", "Trcv_SKA": "12.6", "Tsys_Meer": "16.4", "Tspl_Meer": "4", "Trcv_Meer": "7.5", "Tsky": "5.14", "Tgal": "0.0515", "elevation": "77.7", }, "zoom_int_times": ["442.78 s"], } } assert result == old