Ejemplo n.º 1
0
    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))
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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))
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
 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)