def test_tiny_gamma(self): r''' Test such a small gamma that we can inspect every element and check that the matrix is what we expect it to be. ''' tiny_subsphere = HealpixSubSphere.from_resolution( resolution=60 * 60.0, theta=np.radians(0.0), phi=0.0, radius=np.radians(80)) self.assertEqual(tiny_subsphere.npix, 4) frequencies = [1.5e9] wavelength = 2.99793e8 / frequencies[0] n_vis = 3 u = np.random.uniform(0, 1, n_vis) v = np.random.uniform(0, 1, n_vis) w = np.random.uniform(0, 1, n_vis) tiny_disko = DiSkO(u, v, w, frequencies[0]) tiny_gamma = tiny_disko.make_gamma(tiny_subsphere) logger.info("Gamma={}".format(tiny_gamma)) data = np.zeros((tiny_disko.n_v, 1, 1), dtype=np.complex128) data[:, 0, 0] = np.random.normal( 0, 1, tiny_disko.n_v) + 1.0j * np.random.normal(0, 1, tiny_disko.n_v) p2j = 2 * np.pi * 1.0j / wavelength Op = disko.DiSkOOperator(tiny_disko.u_arr, tiny_disko.v_arr, tiny_disko.w_arr, data, frequencies, tiny_subsphere) logger.info("Op Matrix") for i in range(Op.M): col = [Op.A(j, i, p2j) for j in range(Op.N)] logger.info(col) sky = np.random.normal(0, 1, tiny_subsphere.npix) logger.info("sky={}".format(sky)) vis1 = tiny_gamma @ sky vis2 = Op.matvec(sky) logger.info(vis1) logger.info(vis2) self.assertEqual(vis1.shape, vis2.shape) self.assertTrue(np.allclose(vis1, vis2))
def setUpClass(cls): # Load data from a JSON file np.seterr(all='raise') fname = 'test_data/test_data.json' logger.info("Getting Data from file: {}".format(fname)) with open(fname, 'r') as json_file: calib_info = json.load(json_file) info = calib_info['info'] ant_pos = calib_info['ant_pos'] config = settings.from_api_json(info['info'], ant_pos) flag_list = [] gains_json = calib_info['gains'] gains = np.asarray(gains_json['gain']) phase_offsets = np.asarray(gains_json['phase_offset']) config = settings.from_api_json(info['info'], ant_pos) measurements = [] for d in calib_info['data']: vis_json, source_json = d cv, timestamp = api_imaging.vis_calibrated(vis_json, config, gains, phase_offsets, flag_list) src_list = elaz.from_json(source_json, 0.0) cls.disko = DiSkO.from_cal_vis(cv) cls.nside = 16 cls.sphere = HealpixSphere(cls.nside) cls.to = TelescopeOperator(cls.disko, cls.sphere)
def test_from_pos(self): ''' Check that the DiSkO calculated from ant_pos only agrees with that from the calibrated vis ''' dut = DiSkO.from_ant_pos(self.ant_pos, frequency=constants.L1_FREQ) self.assertTrue(dut.n_v == self.disko.n_v) self.assertTrue(np.allclose(dut.u_arr, self.disko.u_arr)) harmonics = self.disko.get_harmonics(self.sphere) harmonics1 = dut.get_harmonics(self.sphere) for a, b in zip(harmonics, harmonics1): self.assertTrue(np.allclose(a, b))
def setUpClass(cls): # Load data from a MS file fname = 'test_data/test.ms' logger.info("Getting Data from MS file: {}".format(fname)) cls.disko = DiSkO.from_ms(fname, res_arcmin=180, num_vis=500) cls.nside = 16 cls.sphere = HealpixSphere(cls.nside) res_deg = 4.0 cls.subsphere = HealpixSubSphere.from_resolution(resolution=res_deg * 60.0, theta=np.radians(0.0), phi=0.0, radius=np.radians(89)) cls.gamma = cls.disko.make_gamma(cls.sphere)
def setUpClass(cls): # Load data from a JSON file fname = 'test_data/test_data.json' logger.info("Getting Data from file: {}".format(fname)) with open(fname, 'r') as json_file: calib_info = json.load(json_file) info = calib_info['info'] cls.ant_pos = np.array(calib_info['ant_pos']) config = settings.from_api_json(info['info'], cls.ant_pos) flag_list = [] gains_json = calib_info['gains'] gains = np.asarray(gains_json['gain']) phase_offsets = np.asarray(gains_json['phase_offset']) #config = settings.from_api_json(info['info'], cls.ant_pos) measurements = [] for d in calib_info['data']: vis_json, source_json = d cv, _timestamp = api_imaging.vis_calibrated( vis_json, config, gains, phase_offsets, flag_list) cls.disko = DiSkO.from_cal_vis(cv) cls.nside = 16 cls.sphere = HealpixSphere(cls.nside) res_deg = 4.0 cls.subsphere = HealpixSubSphere.from_resolution(resolution=res_deg * 60.0, theta=np.radians(0.0), phi=0.0, radius=np.radians(89)) cls.adaptive_sphere = AdaptiveMeshSphere.from_resolution( res_arcmin=20, res_arcmax=res_deg * 60, theta=np.radians(0.0), phi=0.0, radius=np.radians(10)) cls.gamma = cls.disko.make_gamma(cls.sphere) cls.subgamma = cls.disko.make_gamma(cls.subsphere)
def test_gamma_size(self): dut = DiSkO.from_ant_pos(self.ant_pos, frequency=constants.L1_FREQ) gamma = dut.make_gamma(self.sphere) gamma_sub = dut.make_gamma(self.subsphere) self.assertEqual(gamma.shape[1], self.sphere.npix) self.assertEqual(gamma_sub.shape[1], self.subsphere.npix)