import mwalib
import numpy as np
import pytest
MWAX_VCS_METAFITS = "test_files/1101503312_mwax_vcs/1101503312.metafits"
MWAX_VCS_VOLTAGE_FILES = [
"test_files/1101503312_mwax_vcs/1101503312_1101503312_123.sub",
"test_files/1101503312_mwax_vcs/1101503312_1101503312_124.sub",
"test_files/1101503312_mwax_vcs/1101503312_1101503320_123.sub",
"test_files/1101503312_mwax_vcs/1101503312_1101503320_124.sub",
]
LEGACY_VCS_METAFITS = "test_files/1101503312_vcs/1101503312.metafits"
LEGACY_VCS_VOLTAGE_FILES = [
"test_files/1101503312_vcs/1101503312_1101503312_ch123.dat",
"test_files/1101503312_vcs/1101503312_1101503312_ch124.dat",
"test_files/1101503312_vcs/1101503312_1101503313_ch123.dat",
"test_files/1101503312_vcs/1101503312_1101503313_ch124.dat",
]
@pytest.fixture
def mwax_vc() -> mwalib.VoltageContext:
return mwalib.VoltageContext(MWAX_VCS_METAFITS, MWAX_VCS_VOLTAGE_FILES)
@pytest.fixture
def legacy_vc() -> mwalib.VoltageContext:
return mwalib.VoltageContext(LEGACY_VCS_METAFITS, LEGACY_VCS_VOLTAGE_FILES)
def test_mwax_voltage_context(mwax_vc: mwalib.VoltageContext):
assert mwax_vc.mwa_version == mwalib.MWAVersion.VCSMWAXv2
assert mwax_vc.sample_size_bytes == 2
assert mwax_vc.num_voltage_blocks_per_timestep == 160
assert mwax_vc.num_voltage_blocks_per_second == 20
assert mwax_vc.num_samples_per_voltage_block == 64_000
assert mwax_vc.voltage_block_size_bytes == 256_000
assert mwax_vc.delay_block_size_bytes == mwax_vc.voltage_block_size_bytes
assert mwax_vc.data_file_header_size_bytes == 4096
assert mwax_vc.expected_voltage_data_file_size_bytes == 41_220_096
assert len(mwax_vc.voltage_batches) == 2
def test_legacy_voltage_context(legacy_vc: mwalib.VoltageContext):
assert legacy_vc.mwa_version == mwalib.MWAVersion.VCSLegacyRecombined
assert legacy_vc.sample_size_bytes == 1
assert legacy_vc.num_voltage_blocks_per_timestep == 1
assert legacy_vc.num_voltage_blocks_per_second == 1
assert legacy_vc.num_samples_per_voltage_block == 10000
assert legacy_vc.voltage_block_size_bytes == 2560000
assert legacy_vc.delay_block_size_bytes == 0
assert legacy_vc.data_file_header_size_bytes == 0
assert legacy_vc.expected_voltage_data_file_size_bytes == 2_560_000
assert len(legacy_vc.voltage_batches) == 2
def test_mwax_vcs_context_read_data(mwax_vc: mwalib.VoltageContext):
timestep = 0
coarse_chan = 14
data_by_file = mwax_vc.read_file(timestep, coarse_chan)
assert data_by_file.shape == (
8,
mwax_vc.num_voltage_blocks_per_second,
mwax_vc.metafits_context.num_ants,
mwax_vc.metafits_context.num_ant_pols,
mwax_vc.num_samples_per_voltage_block,
mwax_vc.sample_size_bytes,
)
gps_start = 1101503312
gps_seconds = 8
data_by_gpsecond = mwax_vc.read_second(gps_start, gps_seconds, coarse_chan)
assert data_by_gpsecond.shape == (
gps_seconds,
mwax_vc.num_voltage_blocks_per_second,
mwax_vc.metafits_context.num_ants,
mwax_vc.metafits_context.num_ant_pols,
mwax_vc.num_samples_per_voltage_block,
mwax_vc.sample_size_bytes,
)
assert np.sum(data_by_file, dtype=np.float64) == np.sum(
data_by_gpsecond, dtype=np.float64
)
assert data_by_gpsecond[0, 0, 0, 0, 0, 0] == 0
assert data_by_gpsecond[0, 0, 0, 0, 1, 1] == -3
assert data_by_gpsecond[0, 0, 0, 0, 255, 0] == -2
assert data_by_gpsecond[0, 0, 0, 0, 256, 1] == -1
assert data_by_gpsecond[0, 1, 0, 0, 2, 0] == 9
assert data_by_gpsecond[7, 19, 0, 1, 63999, 1] == -30
assert data_by_gpsecond[6, 0, 0, 0, 0, 0] == 88
def test_legacy_vcs_context_read_data(legacy_vc: mwalib.VoltageContext):
timestep = 0
coarse_chan = 14
data_by_file = legacy_vc.read_file(timestep, coarse_chan)
assert data_by_file.shape == (
1,
legacy_vc.num_samples_per_voltage_block,
legacy_vc.num_fine_chans_per_coarse,
legacy_vc.metafits_context.num_ants,
legacy_vc.metafits_context.num_ant_pols,
legacy_vc.sample_size_bytes,
)
gps_start = 1101503312
gps_seconds = 1
data_by_gpsecond = legacy_vc.read_second(gps_start, gps_seconds, coarse_chan)
assert data_by_gpsecond.shape == (
gps_seconds,
legacy_vc.num_samples_per_voltage_block,
legacy_vc.num_fine_chans_per_coarse,
legacy_vc.metafits_context.num_ants,
legacy_vc.metafits_context.num_ant_pols,
legacy_vc.sample_size_bytes,
)
assert np.sum(data_by_file, dtype=np.float64) == np.sum(
data_by_gpsecond, dtype=np.float64
)
assert data_by_gpsecond[0, 0, 0, 0, 0, 0] == 0
assert data_by_gpsecond[0, 0, 0, 0, 1, 0] == 2
assert data_by_gpsecond[0, 0, 1, 0, 1, 0] == 5
assert data_by_gpsecond[0, 0, 127, 0, 0, 0] == 125
assert data_by_gpsecond[0, 10, 32, 0, 1, 0] == -118
assert data_by_gpsecond[0, 9999, 127, 0, 1, 0] == -69