def test_hera_yaml(): pytest.importorskip("yaml") beam1 = UVBeam() beam2 = UVBeam() beam1.read_cst_beam(cst_yaml_vivaldi, beam_type="efield", frequency_select=[150e6]) assert beam1.reference_impedance == 100 extra_keywords = { "software": "CST 2016", "sim_type": "E-farfield", "layout": "1 antenna", "port_num": 1, } assert beam1.extra_keywords == extra_keywords beam2.read_cst_beam(cst_yaml_vivaldi, beam_type="power", frequency_select=[150e6]) beam1.efield_to_power(calc_cross_pols=False) # The values in the beam file only have 4 sig figs, so they don't match precisely diff = np.abs(beam1.data_array - beam2.data_array) assert np.max(diff) < 2 reldiff = diff / beam2.data_array assert np.max(reldiff) < 0.002 # set data_array tolerances higher to test the rest of the object # tols are (relative, absolute) tols = [0.002, 0] beam1._data_array.tols = tols assert beam1.history != beam2.history beam1.history = beam2.history assert beam1 == beam2
def test_readCST_writereadFITS(): beam_in = UVBeam() beam_out = UVBeam() beam_in.read_cst_beam(cst_files[0], beam_type='efield', frequency=150e6, telescope_name='TEST', feed_name='bob', feed_version='0.1', feed_pol=['x'], model_name='E-field pattern - Rigging height 4.9m', model_version='1.0') # add optional parameters for testing purposes beam_in.extra_keywords = {'KEY1': 'test_keyword'} beam_in.reference_input_impedance = 340. beam_in.reference_output_impedance = 50. beam_in.receiver_temperature_array = np.random.normal(50.0, 5, size=(beam_in.Nspws, beam_in.Nfreqs)) beam_in.loss_array = np.random.normal(50.0, 5, size=(beam_in.Nspws, beam_in.Nfreqs)) beam_in.mismatch_array = np.random.normal(0.0, 1.0, size=(beam_in.Nspws, beam_in.Nfreqs)) beam_in.s_parameters = np.random.normal(0.0, 0.3, size=(4, beam_in.Nspws, beam_in.Nfreqs)) write_file = os.path.join(DATA_PATH, 'test/outtest_beam.fits') beam_in.write_beamfits(write_file, clobber=True) beam_out.read_beamfits(write_file) nt.assert_equal(beam_in, beam_out) # redo for power beam del(beam_in) beam_in = UVBeam() # read in efield and convert to power to test cross-pols beam_in.read_cst_beam(cst_files[0], beam_type='efield', frequency=150e6, telescope_name='TEST', feed_name='bob', feed_version='0.1', feed_pol=['x'], model_name='E-field pattern - Rigging height 4.9m', model_version='1.0') beam_in.efield_to_power() # add optional parameters for testing purposes beam_in.extra_keywords = {'KEY1': 'test_keyword'} beam_in.reference_input_impedance = 340. beam_in.reference_output_impedance = 50. beam_in.receiver_temperature_array = np.random.normal(50.0, 5, size=(beam_in.Nspws, beam_in.Nfreqs)) beam_in.loss_array = np.random.normal(50.0, 5, size=(beam_in.Nspws, beam_in.Nfreqs)) beam_in.mismatch_array = np.random.normal(0.0, 1.0, size=(beam_in.Nspws, beam_in.Nfreqs)) beam_in.s_parameters = np.random.normal(0.0, 0.3, size=(4, beam_in.Nspws, beam_in.Nfreqs)) beam_in.write_beamfits(write_file, clobber=True) beam_out.read_beamfits(write_file) nt.assert_equal(beam_in, beam_out) # now replace 'power' with 'intensity' for btype F = fits.open(write_file) data = F[0].data primary_hdr = F[0].header primary_hdr['BTYPE'] = 'Intensity' hdunames = uvutils.fits_indexhdus(F) bandpass_hdu = F[hdunames['BANDPARM']] prihdu = fits.PrimaryHDU(data=data, header=primary_hdr) hdulist = fits.HDUList([prihdu, bandpass_hdu]) if float(astropy.__version__[0:3]) < 1.3: hdulist.writeto(write_file, clobber=True) else: hdulist.writeto(write_file, overwrite=True) beam_out.read_beamfits(write_file) nt.assert_equal(beam_in, beam_out) # now remove coordsys but leave ctypes 1 & 2 F = fits.open(write_file) data = F[0].data primary_hdr = F[0].header primary_hdr.pop('COORDSYS') hdunames = uvutils.fits_indexhdus(F) bandpass_hdu = F[hdunames['BANDPARM']] prihdu = fits.PrimaryHDU(data=data, header=primary_hdr) hdulist = fits.HDUList([prihdu, bandpass_hdu]) if float(astropy.__version__[0:3]) < 1.3: hdulist.writeto(write_file, clobber=True) else: hdulist.writeto(write_file, overwrite=True) beam_out.read_beamfits(write_file) nt.assert_equal(beam_in, beam_out) # now change frequency units F = fits.open(write_file) data = F[0].data primary_hdr = F[0].header primary_hdr['CUNIT3'] = 'MHz' primary_hdr['CRVAL3'] = primary_hdr['CRVAL3'] / 1e6 primary_hdr['CDELT3'] = primary_hdr['CRVAL3'] / 1e6 hdunames = uvutils.fits_indexhdus(F) bandpass_hdu = F[hdunames['BANDPARM']] prihdu = fits.PrimaryHDU(data=data, header=primary_hdr) hdulist = fits.HDUList([prihdu, bandpass_hdu]) if float(astropy.__version__[0:3]) < 1.3: hdulist.writeto(write_file, clobber=True) else: hdulist.writeto(write_file, overwrite=True) beam_out.read_beamfits(write_file) nt.assert_equal(beam_in, beam_out)
def test_writeread_healpix(): beam_in = UVBeam() beam_out = UVBeam() # fill UVBeam object with dummy data for now for testing purposes beam_in.read_cst_beam(cst_files[0], beam_type='efield', frequency=150e6, telescope_name='TEST', feed_name='bob', feed_version='0.1', feed_pol=['x'], model_name='E-field pattern - Rigging height 4.9m', model_version='1.0') beam_in.az_za_to_healpix() write_file = os.path.join(DATA_PATH, 'test/outtest_beam_hpx.fits') beam_in.write_beamfits(write_file, clobber=True) beam_out.read_beamfits(write_file) nt.assert_equal(beam_in, beam_out) # redo for power beam del(beam_in) beam_in = UVBeam() # read in efield and convert to power to test cross-pols beam_in.read_cst_beam(cst_files[0], beam_type='efield', frequency=150e6, telescope_name='TEST', feed_name='bob', feed_version='0.1', feed_pol=['x'], model_name='E-field pattern - Rigging height 4.9m', model_version='1.0') beam_in.efield_to_power() # add optional parameters for testing purposes beam_in.extra_keywords = {'KEY1': 'test_keyword'} beam_in.reference_input_impedance = 340. beam_in.reference_output_impedance = 50. beam_in.receiver_temperature_array = np.random.normal(50.0, 5, size=(beam_in.Nspws, beam_in.Nfreqs)) beam_in.loss_array = np.random.normal(50.0, 5, size=(beam_in.Nspws, beam_in.Nfreqs)) beam_in.mismatch_array = np.random.normal(0.0, 1.0, size=(beam_in.Nspws, beam_in.Nfreqs)) beam_in.s_parameters = np.random.normal(0.0, 0.3, size=(4, beam_in.Nspws, beam_in.Nfreqs)) # check that data_array is complex nt.assert_true(np.iscomplexobj(np.real_if_close(beam_in.data_array, tol=10))) beam_in.az_za_to_healpix() # check that data_array is complex after interpolation nt.assert_true(np.iscomplexobj(np.real_if_close(beam_in.data_array, tol=10))) beam_in.write_beamfits(write_file, clobber=True) beam_out.read_beamfits(write_file) nt.assert_equal(beam_in, beam_out) # now remove coordsys but leave ctype 1 F = fits.open(write_file) data = F[0].data primary_hdr = F[0].header primary_hdr.pop('COORDSYS') hdunames = uvutils.fits_indexhdus(F) hpx_hdu = F[hdunames['HPX_INDS']] bandpass_hdu = F[hdunames['BANDPARM']] prihdu = fits.PrimaryHDU(data=data, header=primary_hdr) hdulist = fits.HDUList([prihdu, hpx_hdu, bandpass_hdu]) if float(astropy.__version__[0:3]) < 1.3: hdulist.writeto(write_file, clobber=True) else: hdulist.writeto(write_file, overwrite=True) beam_out.read_beamfits(write_file) nt.assert_equal(beam_in, beam_out)