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)
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))
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))
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)
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')
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')
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)
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])
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])