Exemple #1
0
 def setUp(self):
     self.tmppath = tempfile.mkdtemp(prefix='miriad-test-', suffix='.tmp')
     self.filename1 = os.path.join(self.tmppath, 'test1.uv')
     uv = m.UV(self.filename1, status='new', corrmode='j')
     uv['history'] = 'Made this file from scratch.\n'
     uv.add_var('nchan', 'i')
     uv.add_var('pol', 'i')
     uv['nchan'] = 4
     uv['pol'] = -5
     uvw = np.array([1,2,3], dtype=np.double)
     preamble = (uvw, 12345.6789, (0,1))
     self.data = np.ma.array([1j,2,3j,4], mask=[0,0,1,0], dtype=np.complex64)
     uv.write(preamble,self.data)
     uv['pol'] = -6
     uv.write(preamble,self.data)
Exemple #2
0
def test_antpos_units():
    """
    Read uvfits, write miriad. Check written antpos are in ns.
    """
    uv = UVData()
    uvfits_file = os.path.join(DATA_PATH,
                               'day2_TDEM0003_10s_norx_1src_1spw.uvfits')
    testfile = os.path.join(DATA_PATH, 'test/uv_antpos_units')
    uvtest.checkWarnings(uv.read_uvfits, [uvfits_file],
                         message='Telescope EVLA is not')
    uv.write_miriad(testfile, clobber=True)
    auv = amiriad.UV(testfile)
    aantpos = auv['antpos'].reshape(3, -1).T * const.c.to('m/ns').value
    aantpos = aantpos[uv.antenna_numbers, :]
    aantpos = (uvutils.ECEF_from_rotECEF(
        aantpos, uv.telescope_location_lat_lon_alt[1]) - uv.telescope_location)
    nt.assert_true(np.allclose(aantpos, uv.antenna_positions))
Exemple #3
0
 def test_data(self):
     """Test writing data from a Miriad UV file"""
     uv = m.UV(self.filename1)
     self.assertEqual(uv['history'], 'Made this file from scratch.\n')
     (uvw, t, bl), d = uv.read()
     self.assertEqual(uv['nchan'], 4)
     self.assertEqual(uv['pol'], -5)
     self.assertEqual(bl, (0, 1))
     self.assertEqual(t, 12345.6789)
     self.assertTrue(np.all(uvw == np.array([1, 2, 3], dtype=np.double)))
     self.assertTrue(np.all(np.abs(d - self.data) < 1e-4))
     (uvw, t, bl), d = uv.read()
     self.assertEqual(uv['nchan'], 4)
     self.assertEqual(uv['pol'], -6)
     self.assertEqual(bl, (0, 1))
     self.assertEqual(t, 12345.6789)
     self.assertTrue(np.all(uvw == np.array([1, 2, 3], dtype=np.double)))
     self.assertTrue(np.all(np.abs(d - self.data) < 1e-4))
Exemple #4
0
def test_readWriteReadMiriad():
    """
    PAPER file Miriad loopback test.

    Read in Miriad PAPER file, write out as new Miriad file, read back in and
    check for object equality.
    """
    uv_in = UVData()
    uv_out = UVData()
    testfile = os.path.join(DATA_PATH, 'zen.2456865.60537.xy.uvcRREAA')
    write_file = os.path.join(DATA_PATH, 'test/outtest_miriad.uv')
    uvtest.checkWarnings(uv_in.read_miriad, [testfile], known_warning='miriad')
    uv_in.write_miriad(write_file, clobber=True)
    uv_out.read_miriad(write_file)

    nt.assert_equal(uv_in, uv_out)

    # check that trying to overwrite without clobber raises an error
    nt.assert_raises(ValueError, uv_in.write_miriad, write_file)

    # check that if x_orientation is set, it's read back out properly
    uv_in.x_orientation = 'east'
    uv_in.write_miriad(write_file, clobber=True)
    uv_out.read_miriad(write_file)
    nt.assert_equal(uv_in, uv_out)

    # check that if antenna_diameters is set, it's read back out properly
    uvtest.checkWarnings(uv_in.read_miriad, [testfile], known_warning='miriad')
    uv_in.antenna_diameters = np.zeros(
        (uv_in.Nants_telescope, ), dtype=np.float) + 14.0
    uv_in.write_miriad(write_file, clobber=True)
    uv_out.read_miriad(write_file)
    nt.assert_equal(uv_in, uv_out)

    # check that antenna diameters get written if not exactly float
    uv_in.antenna_diameters = np.zeros(
        (uv_in.Nants_telescope, ), dtype=np.float32) + 14.0
    uv_in.write_miriad(write_file, clobber=True)
    uv_out.read_miriad(write_file)
    nt.assert_equal(uv_in, uv_out)

    # check that trying to write a file with unknown phasing raises an error
    uv_in.set_unknown_phase_type()
    nt.assert_raises(ValueError, uv_in.write_miriad, write_file, clobber=True)

    # check for backwards compatibility with old keyword 'diameter' for antenna diameters
    testfile_diameters = os.path.join(DATA_PATH,
                                      'zen.2457698.40355.xx.HH.uvcA')
    uv_in.read_miriad(testfile_diameters)
    uv_in.write_miriad(write_file, clobber=True)
    uv_out.read_miriad(write_file)
    nt.assert_equal(uv_in, uv_out)

    # check that variables 'ischan' and 'nschan' were written to new file
    # need to use aipy, since pyuvdata is not currently capturing these variables
    uv_in.read_miriad(write_file)
    uv_aipy = amiriad.UV(
        write_file
    )  # on enterprise, this line makes it so you cant delete the file
    nfreqs = uv_in.Nfreqs
    nschan = uv_aipy['nschan']
    ischan = uv_aipy['ischan']
    nt.assert_equal(nschan, nfreqs)
    nt.assert_equal(ischan, 1)
    del (uv_aipy)  # close the file so it can be used later

    # check partial IO selections
    full = UVData()
    uvtest.checkWarnings(full.read_miriad, [testfile], known_warning='miriad')
    full.write_miriad(write_file, clobber=True)
    uv_in = UVData()

    # test only specified bls were read, and that flipped antpair is loaded too
    uv_in.read_miriad(write_file, ant_pairs_nums=[(0, 0), (0, 1), (4, 2)])
    nt.assert_equal(uv_in.get_antpairs(), [(0, 0), (0, 1), (2, 4)])
    exp_uv = full.select(ant_pairs_nums=[(0, 0), (0, 1), (4, 2)],
                         inplace=False)
    nt.assert_equal(uv_in, exp_uv)

    # test all bls w/ 0 are loaded
    uv_in.read_miriad(write_file, antenna_nums=[0])
    diff = set(full.get_antpairs()) - set(uv_in.get_antpairs())
    nt.assert_true(0 not in np.unique(diff))
    exp_uv = full.select(antenna_nums=[0], inplace=False)
    nt.assert_true(np.max(exp_uv.ant_1_array) == 0)
    nt.assert_true(np.max(exp_uv.ant_2_array) == 0)
    nt.assert_equal(uv_in, exp_uv)

    uv_in.read_miriad(write_file, antenna_nums=[0], ant_pairs_nums=[(2, 4)])
    nt.assert_true(
        np.array([bl in uv_in.get_antpairs()
                  for bl in [(0, 0), (2, 4)]]).all())
    exp_uv = full.select(antenna_nums=[0],
                         ant_pairs_nums=[(2, 4)],
                         inplace=False)
    nt.assert_equal(uv_in, exp_uv)

    # test time loading
    uv_in.read_miriad(write_file, time_range=[2456865.607, 2456865.609])
    full_times = np.unique(full.time_array[(full.time_array > 2456865.607)
                                           & (full.time_array < 2456865.609)])
    nt.assert_true(np.isclose(np.unique(uv_in.time_array), full_times).all())
    exp_uv = full.select(times=full_times, inplace=False)
    nt.assert_equal(uv_in, exp_uv)

    # test polarization loading
    uv_in.read_miriad(write_file, polarizations=['xy'])
    nt.assert_equal(full.polarization_array, uv_in.polarization_array)
    exp_uv = full.select(polarizations=['xy'], inplace=False)
    nt.assert_equal(uv_in, exp_uv)

    uv_in.read_miriad(write_file, polarizations=[-7])
    nt.assert_equal(full.polarization_array, uv_in.polarization_array)
    exp_uv = full.select(polarizations=[-7], inplace=False)
    nt.assert_equal(uv_in, exp_uv)

    # test ant_str
    uv_in.read_miriad(write_file, ant_str='auto')
    nt.assert_true(
        np.array([blp[0] == blp[1] for blp in uv_in.get_antpairs()]).all())
    exp_uv = full.select(ant_str='auto', inplace=False)
    nt.assert_equal(uv_in, exp_uv)

    uv_in.read_miriad(write_file, ant_str='cross')
    nt.assert_true(
        np.array([blp[0] != blp[1] for blp in uv_in.get_antpairs()]).all())
    exp_uv = full.select(ant_str='cross', inplace=False)
    nt.assert_equal(uv_in, exp_uv)

    uv_in.read_miriad(write_file, ant_str='all')
    nt.assert_equal(uv_in, full)
    nt.assert_raises(AssertionError,
                     uv_in.read_miriad,
                     write_file,
                     ant_str='auto',
                     antenna_nums=[0, 1])

    # assert exceptions
    nt.assert_raises(AssertionError,
                     uv_in.read_miriad,
                     write_file,
                     ant_pairs_nums='foo')
    nt.assert_raises(AssertionError,
                     uv_in.read_miriad,
                     write_file,
                     ant_pairs_nums=[[0, 1]])
    nt.assert_raises(AssertionError,
                     uv_in.read_miriad,
                     write_file,
                     ant_pairs_nums=[('foo', )])
    nt.assert_raises(AssertionError,
                     uv_in.read_miriad,
                     write_file,
                     antenna_nums=np.array([(0, 10)]))
    nt.assert_raises(AssertionError,
                     uv_in.read_miriad,
                     write_file,
                     polarizations='xx')
    nt.assert_raises(AssertionError,
                     uv_in.read_miriad,
                     write_file,
                     polarizations=[1.0])
    nt.assert_raises(ValueError,
                     uv_in.read_miriad,
                     write_file,
                     polarizations=['yy'])
    nt.assert_raises(AssertionError,
                     uv_in.read_miriad,
                     write_file,
                     time_range='foo')
    nt.assert_raises(AssertionError,
                     uv_in.read_miriad,
                     write_file,
                     time_range=[1, 2, 3])
    nt.assert_raises(AssertionError,
                     uv_in.read_miriad,
                     write_file,
                     time_range=['foo', 'bar'])
    nt.assert_raises(ValueError,
                     uv_in.read_miriad,
                     write_file,
                     time_range=[10.1, 10.2])
    nt.assert_raises(AssertionError, uv_in.read_miriad, write_file, ant_str=0)

    # assert partial-read and select are same
    uv_in.read_miriad(write_file, polarizations=[-7], ant_pairs_nums=[(4, 4)])
    exp_uv = full.select(polarizations=[-7],
                         ant_pairs_nums=[(4, 4)],
                         inplace=False)
    nt.assert_equal(uv_in, exp_uv)

    # assert partial-read and select are same
    t = np.unique(full.time_array)
    uv_in.read_miriad(write_file,
                      antenna_nums=[0],
                      time_range=[2456865.607, 2456865.609])
    exp_uv = full.select(antenna_nums=[0],
                         times=t[((t > 2456865.607) & (t < 2456865.609))],
                         inplace=False)
    nt.assert_equal(uv_in, exp_uv)

    # assert partial-read and select are same
    t = np.unique(full.time_array)
    uv_in.read_miriad(write_file,
                      polarizations=[-7],
                      time_range=[2456865.607, 2456865.609])
    exp_uv = full.select(polarizations=[-7],
                         times=t[((t > 2456865.607) & (t < 2456865.609))],
                         inplace=False)
    nt.assert_equal(uv_in, exp_uv)

    del (uv_in)
    del (uv_out)
    del (full)
Exemple #5
0
 def test_vartable(self):
     """Test accesing vartable data in a Miriad UV file"""
     uv = m.UV(self.filename1, corrmode='j')
     self.assertEqual(uv.vartable['corr'], 'j')
     self.assertEqual(uv.vartable['nchan'], 'i')
     self.assertEqual(uv.vartable['pol'], 'i')
Exemple #6
0
 def test_immediate_corr(self):
     """Test immediate corr of a Miriad UV file"""
     uv = m.UV(self.filename2, status='new')
     self.assertEqual(uv.vartable['corr'], 'r')
Exemple #7
0
def test_readWriteReadMiriad():
    """
    PAPER file Miriad loopback test.

    Read in Miriad PAPER file, write out as new Miriad file, read back in and
    check for object equality.
    """
    uv_in = UVData()
    uv_out = UVData()
    testfile = os.path.join(DATA_PATH, 'zen.2456865.60537.xy.uvcRREAA')
    write_file = os.path.join(DATA_PATH, 'test/outtest_miriad.uv')
    uvtest.checkWarnings(uv_in.read_miriad, [testfile], known_warning='miriad')
    uv_in.write_miriad(write_file, clobber=True)
    uv_out.read_miriad(write_file)

    nt.assert_equal(uv_in, uv_out)

    # check that trying to overwrite without clobber raises an error
    nt.assert_raises(ValueError, uv_in.write_miriad, write_file)

    # check that if x_orientation is set, it's read back out properly
    uv_in.x_orientation = 'east'
    uv_in.write_miriad(write_file, clobber=True)
    uv_out.read_miriad(write_file)
    nt.assert_equal(uv_in, uv_out)

    # check that if antenna_diameters is set, it's read back out properly
    uvtest.checkWarnings(uv_in.read_miriad, [testfile], known_warning='miriad')
    uv_in.antenna_diameters = np.zeros(
        (uv_in.Nants_telescope, ), dtype=np.float) + 14.0
    uv_in.write_miriad(write_file, clobber=True)
    uv_out.read_miriad(write_file)
    nt.assert_equal(uv_in, uv_out)

    # check that antenna diameters get written if not exactly float
    uv_in.antenna_diameters = np.zeros(
        (uv_in.Nants_telescope, ), dtype=np.float32) + 14.0
    uv_in.write_miriad(write_file, clobber=True)
    uv_out.read_miriad(write_file)
    nt.assert_equal(uv_in, uv_out)

    # check that trying to write a file with unknown phasing raises an error
    uv_in.set_unknown_phase_type()
    nt.assert_raises(ValueError, uv_in.write_miriad, write_file, clobber=True)

    # check for backwards compatibility with old keyword 'diameter' for antenna diameters
    testfile_diameters = os.path.join(DATA_PATH,
                                      'zen.2457698.40355.xx.HH.uvcA')
    uv_in.read_miriad(testfile_diameters)
    uv_in.write_miriad(write_file, clobber=True)
    uv_out.read_miriad(write_file)
    nt.assert_equal(uv_in, uv_out)

    # check that variables 'ischan' and 'nschan' were written to new file
    # need to use aipy, since pyuvdata is not currently capturing these variables
    uv_in.read_miriad(write_file)
    uv_aipy = amiriad.UV(write_file)
    nfreqs = uv_in.Nfreqs
    nschan = uv_aipy['nschan']
    ischan = uv_aipy['ischan']
    nt.assert_equal(nschan, nfreqs)
    nt.assert_equal(ischan, 1)

    del (uv_in)
    del (uv_out)
    del (uv_aipy)
Exemple #8
0
    keys = [k for k in redis.keys() if k.startswith('visdata')]
    for key in keys:
        ant = int(re.findall(r'visdata://(\d+)/', key)[0])
        pol = key[-2:]
        autos[(ant, pol)] = np.fromstring(redis.hgetall(key).get('data'),
                                          dtype=np.float32)
        amps[(ant, pol)] = np.median(autos[(ant, pol)])
        if args.log:
            autos_raw[(ant, pol)] = autos[(ant, pol)]
            autos[(ant, pol)] = 10.0 * np.log10(autos[(ant, pol)])
            amps[(ant, pol)] = 10.0 * np.log10(amps[(ant, pol)])
        times[(ant, pol)] = float(redis.hgetall(key).get('time', 0))
else:
    counts = {}
    for fname in args.files:
        uvd = apm.UV(fname)
        pol = uvutils.polnum2str(uvd['pol']).lower()
        uvd.select('auto', 1, 1)
        for (uvw, this_t, (ant1, ant2)), auto, fname in uvd.all(raw=True):
            try:
                counts[(ant1, pol)] += 1
                autos[(ant1, pol)] += auto
                times[(ant1, pol)] += this_t
            except KeyError:
                counts[(ant1, pol)] = 1
                autos[(ant1, pol)] = auto
                times[(ant1, pol)] = this_t
    for key in autos.keys():
        autos[key] /= counts[key]
        times[key] /= counts[key]
        amps[key] = np.median(autos[key])
Exemple #9
0
    redis = redis_lib.Redis('redishost')
    keys = [k for k in redis.keys() if k.startswith('visdata')]
    for key in keys:
        ant = int(re.findall(r'visdata://(\d+)/', key)[0])
        pol = key[-2:]
        autos[(ant, pol)] = np.fromstring(redis.hgetall(key).get('data'), dtype=np.float32)
        amps[(ant, pol)] = np.median(autos[(ant, pol)])
        if args.log:
            autos_raw[(ant, pol)] = autos[(ant, pol)]
            autos[(ant, pol)] = 10.0 * np.log10(autos[(ant, pol)])
            amps[(ant, pol)] = 10.0 * np.log10(amps[(ant, pol)])
        times[(ant, pol)] = float(redis.hgetall(key).get('time', 0))
else:
    counts = {}
    for f in args.files:
        uvd = apm.UV(f)
        pol = uvutils.polnum2str(uvd['pol']).lower()
        uvd.select('auto', 1, 1)
        for (uvw, t, (i, j)), d, f in uvd.all(raw=True):
            try:
                counts[(i, pol)] += 1
                autos[(i, pol)] += d
                times[(i, pol)] += t
            except KeyError:
                counts[(i, pol)] = 1
                autos[(i, pol)] = d
                times[(i, pol)] = t
    for key in autos.keys():
        autos[key] /= counts[key]
        times[key] /= counts[key]
        amps[key] = np.median(autos[key])