Raw File
#!/usr/bin/env python2.7
# -*- mode: python; coding: utf-8 -*
# Copyright (c) 2018 Radio Astronomy Software Group
# Licensed under the 2-clause BSD License

from __future__ import absolute_import, division, print_function

from memory_profiler import profile
import numpy as np
from astropy import constants as const
from astropy.io import fits
from pyuvdata import UVData


@profile
def read_uvfits():
    filename = '/Volumes/Data1/mwa_uvfits/1066571272.uvfits'

    # first test uvdata.read_uvfits. First read metadata then full data
    uv_obj = UVData()
    uv_obj.read_uvfits(filename, read_data=False, read_metadata=False)
    uv_obj.read_uvfits_metadata(filename)
    uv_obj.read_uvfits_data(filename)
    del(uv_obj)

    # now test uvdata.read_uvfits with select on read.
    uv_obj = UVData()
    uv_obj.read_uvfits(filename, read_data=False, read_metadata=False)
    uv_obj.read_uvfits_metadata(filename)
    uv_obj.read_uvfits_data(filename, freq_chans=np.arange(196))
    del(uv_obj)

    # now test details with astropy
    hdu_list = fits.open(filename, memmap=True)
    vis_hdu = hdu_list[0]

    # only read in times, then uvws, then visibilities
    time0_array = vis_hdu.data.par('date')
    uvw_array = (np.array(np.stack((vis_hdu.data.par('UU'),
                                    vis_hdu.data.par('VV'),
                                    vis_hdu.data.par('WW')))) * const.c.to('m/s').value).T

    if vis_hdu.header['NAXIS'] == 7:

        data_array = (vis_hdu.data.data[:, 0, 0, :, :, :, 0]
                      + 1j * vis_hdu.data.data[:, 0, 0, :, :, :, 1])
    else:
        data_array = (vis_hdu.data.data[:, 0, 0, :, :, 0]
                      + 1j * vis_hdu.data.data[:, 0, 0, :, :, 1])
        data_array = data_array[:, np.newaxis, :, :]

    # test for releasing resources
    del(time0_array)
    del(uvw_array)
    del(data_array)

    # release file handles
    del(vis_hdu)
    del(hdu_list)

    # now test reading a slice of the data
    hdu_list = fits.open(filename, memmap=True)
    vis_hdu = hdu_list[0]
    Nfreqs = vis_hdu.header['NAXIS4']
    freq_index = int(Nfreqs // 2)

    if vis_hdu.header['NAXIS'] == 7:

        data_slice = (vis_hdu.data.data[:, 0, 0, :, 0:freq_index, :, 0]
                      + 1j * vis_hdu.data.data[:, 0, 0, :, 0:freq_index, :, 1])
    else:
        data_slice = (vis_hdu.data.data[:, 0, 0, 0:freq_index, :, 0]
                      + 1j * vis_hdu.data.data[:, 0, 0, 0:freq_index, :, 1])
        data_slice = data_slice[:, np.newaxis, :, :]

    del(data_slice)

    del(vis_hdu)
    del(hdu_list)
    del(filename)

    return


if __name__ == '__main__':
    read_uvfits()
back to top