def test_healpix_errors(): beam_in = UVBeam() beam_out = UVBeam() write_file = os.path.join(DATA_PATH, 'test/outtest_beam_hpx.fits') # now change values for various items in primary hdu to test errors 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() header_vals_to_change = [{'CTYPE1': 'foo'}, {'NAXIS1': ''}] for i, hdr_dict in enumerate(header_vals_to_change): beam_in.write_beamfits(write_file, clobber=True) keyword = hdr_dict.keys()[0] new_val = hdr_dict[keyword] F = fits.open(write_file) data = F[0].data primary_hdr = F[0].header hdunames = uvutils.fits_indexhdus(F) basisvec_hdu = F[hdunames['BASISVEC']] hpx_hdu = F[hdunames['HPX_INDS']] bandpass_hdu = F[hdunames['BANDPARM']] if 'NAXIS' in keyword: ax_num = keyword.split('NAXIS')[1] if ax_num != '': ax_num = int(ax_num) ax_use = len(data.shape) - ax_num new_arrays = np.split(data, primary_hdr[keyword], axis=ax_use) data = new_arrays[0] else: data = np.squeeze(np.split(data, primary_hdr['NAXIS1'], axis=len(data.shape) - 1)[0]) else: primary_hdr[keyword] = new_val prihdu = fits.PrimaryHDU(data=data, header=primary_hdr) hdulist = fits.HDUList([prihdu, basisvec_hdu, 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) nt.assert_raises(ValueError, beam_out.read_beamfits, write_file) # now change values for various items in basisvec hdu to not match primary hdu 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() header_vals_to_change = [{'CTYPE1': 'foo'}, {'NAXIS1': ''}] for i, hdr_dict in enumerate(header_vals_to_change): beam_in.write_beamfits(write_file, clobber=True) keyword = hdr_dict.keys()[0] new_val = hdr_dict[keyword] F = fits.open(write_file) data = F[0].data primary_hdr = F[0].header hdunames = uvutils.fits_indexhdus(F) basisvec_hdu = F[hdunames['BASISVEC']] basisvec_hdr = basisvec_hdu.header basisvec_data = basisvec_hdu.data hpx_hdu = F[hdunames['HPX_INDS']] bandpass_hdu = F[hdunames['BANDPARM']] if 'NAXIS' in keyword: ax_num = keyword.split('NAXIS')[1] if ax_num != '': ax_num = int(ax_num) ax_use = len(basisvec_data.shape) - ax_num new_arrays = np.split(basisvec_data, basisvec_hdr[keyword], axis=ax_use) basisvec_data = new_arrays[0] else: basisvec_data = np.split(basisvec_data, basisvec_hdr['NAXIS1'], axis=len(basisvec_data.shape) - 1)[0] else: basisvec_hdr[keyword] = new_val prihdu = fits.PrimaryHDU(data=data, header=primary_hdr) basisvec_hdu = fits.ImageHDU(data=basisvec_data, header=basisvec_hdr) hdulist = fits.HDUList([prihdu, basisvec_hdu, 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) nt.assert_raises(ValueError, beam_out.read_beamfits, write_file)
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)