def test_errors(): 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') beam_in.beam_type = 'foo' write_file = os.path.join(DATA_PATH, 'test/outtest_beam.fits') nt.assert_raises(ValueError, beam_in.write_beamfits, write_file, clobber=True) nt.assert_raises(ValueError, beam_in.write_beamfits, write_file, clobber=True, run_check=False) beam_in.beam_type = 'efield' beam_in.antenna_type = 'phased_array' write_file = os.path.join(DATA_PATH, 'test/outtest_beam.fits') nt.assert_raises(ValueError, beam_in.write_beamfits, write_file, clobber=True) # now change values for various items in primary hdu to test errors beam_in.antenna_type = 'simple' header_vals_to_change = [{'BTYPE': 'foo'}, {'COORDSYS': 'orthoslant_zenith'}, {'NAXIS': ''}, {'CUNIT1': 'foo'}, {'CUNIT2': 'foo'}, {'CUNIT3': 'foo'}] 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']] 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, 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 header_vals_to_change = [{'COORDSYS': 'foo'}, {'CTYPE1': 'foo'}, {'CTYPE2': 'foo'}, {'CDELT1': np.diff(beam_in.axis1_array)[0] * 2}, {'CDELT2': np.diff(beam_in.axis2_array)[0] * 2}, {'NAXIS4': ''}, {'CUNIT1': 'foo'}, {'CUNIT2': 'foo'}] 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 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, 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)
beam_theta, beam_phi = hp.pix2ang(64, np.arange(64**2 * 12)) R = hp.Rotator(rot=[0, 0, -np.pi / 2], deg=False) beam_theta2, beam_phi2 = R(beam_theta, beam_phi) beam_rot = np.array( map(lambda x: hp.get_interp_val(x, beam_theta2, beam_phi2), beams.T)) beam_data = np.array([beams.T, beam_rot]) beam_data.resize(1, 1, 2, 201, 49152) # normalize each frequency to max of 1 for i in range(beam_data.shape[-2]): beam_data[:, :, :, i, :] /= beam_data[:, :, :, i, :].max() # make uvbeam object uvb = UVBeam() uvb.set_simple() uvb.antenna_type = 'simple' uvb.telescope_name = 'hera' uvb.feed_name = 'dipole' uvb.feed_version = '0.0' uvb.model_name = 'beam_sims' uvb.model_version = '0.1' uvb.history = '' uvb.pixel_coordinate_system = 'healpix' uvb.nside = 64 uvb.ordering = 'ring' uvb.pixel_array = np.arange(64**2 * 12) uvb.Npixels = len(uvb.pixel_array) uvb.freq_array = freqs * 1e6 uvb.spw_array = np.array([0]) uvb.Nspws = 1 uvb.data_normalization = 'peak'