Beispiel #1
0
    def test_create_voltage_patterns_MID_GAUSS(self):
        self.createVis(freq=1.4e9)
        cellsize=8*numpy.pi/180.0/280
        model = create_image_from_visibility(self.vis, npixel=512, cellsize=cellsize, override_cellsize=False)
        pointingcentre = SkyCoord(ra=+17.0 * u.deg, dec=-37.0 * u.deg, frame='icrs', equinox='J2000')
        for telescope in ['MID_GAUSS']:
            beam=create_vp(model, telescope=telescope, padding=4, pointingcentre=pointingcentre)
            beam_data = beam.data
            beam.data = numpy.real(beam_data)
            export_image_to_fits(beam, "%s/test_voltage_pattern_real_%s.fits" % (self.dir, telescope))
            beam.data = numpy.imag(beam_data)
            export_image_to_fits(beam, "%s/test_voltage_pattern_imag_%s.fits" % (self.dir, telescope))

            beam=create_vp(model, telescope=telescope, pointingcentre=pointingcentre)
            beam.data = numpy.real(beam.data)
            export_image_to_fits(beam, "%s/test_voltage_pattern_offset_%s.fits" % (self.dir, telescope))
Beispiel #2
0
    def test_create_gaintable_from_pointingtable_dynamic(self):
        comp = create_skycomponent(
            direction=self.phasecentre,
            flux=[[1.0]],
            frequency=self.frequency,
            polarisation_frame=PolarisationFrame('stokesI'))

        pt = create_pointingtable_from_blockvisibility(self.vis)
        pt = simulate_pointingtable(pt,
                                    pointing_error=0.01,
                                    static_pointing_error=None,
                                    global_pointing_error=[0.0, 0.0])
        vp = create_vp(self.model, 'MID')
        gt = simulate_gaintable_from_pointingtable(self.vis, [comp], pt, vp)
        if self.doplot:
            import matplotlib.pyplot as plt
            plt.clf()
            plt.plot(gt[0].time, numpy.real(1.0 / gt[0].gain[:, 0, 0, 0, 0]),
                     '.')
            plt.plot(gt[0].time, numpy.imag(1.0 / gt[0].gain[:, 0, 0, 0, 0]),
                     '.')
            plt.title('test_create_gaintable_from_pointingtable_dynamic')
            plt.show()
        assert gt[0].gain.shape == (self.ntimes, self.nants, 1, 1,
                                    1), gt[0].gain.shape
Beispiel #3
0
 def test_create_voltage_patterns(self):
     self.createVis()
     for telescope in ['VLA', 'ASKAP', 'LOW']:
         model = create_image_from_visibility(self.vis, cellsize=0.001, override_cellsize=False)
         beam=create_vp(model, telescope=telescope)
         assert numpy.max(numpy.abs(beam.data.real)) > 0.0
         assert numpy.max(numpy.abs(beam.data.imag)) < 1e-15, numpy.max(numpy.abs(beam.data.imag))
    def test_simulate_gaintable_from_voltage_patterns(self):
        numpy.random.seed(18051955)
        offset_phasecentre = SkyCoord(ra=+15.0 * u.deg, dec=-44.58 * u.deg, frame='icrs', equinox='J2000')
        component = [Skycomponent(frequency=self.frequency, direction=offset_phasecentre,
                                  polarisation_frame=PolarisationFrame("stokesI"), flux=[[1.0]])]

        key_nolls = [3, 5, 6, 7]
        vp_list = list()
        vp_list.append(create_vp(self.model, 'MID_GAUSS', use_local=True))
        vp_coeffs = numpy.ones([self.nants, len(key_nolls)+1])
        for inoll, noll in enumerate(key_nolls):
            zernike = {'coeff': 1.0, 'noll': noll}
            vp_coeffs[:, inoll+1] = numpy.random.normal(0.0, 0.03, self.nants)
            vp_list.append(create_vp_generic_numeric(self.model, pointingcentre=None, diameter=15.0, blockage=0.0,
                                                      taper='gaussian',
                                                      edge=0.03162278, zernikes=[zernike], padding=2, use_local=True))

        gt = simulate_gaintable_from_voltage_patterns(self.vis, component, vp_list, vp_coeffs)

        import matplotlib.pyplot as plt
        assert gt[0].gain.shape == (self.ntimes, self.nants, 1, 1, 1), gt[0].gain.shape
        
        plt.clf()
        for ant in range(self.nants):
            plt.plot(gt[0].time, 1.0 / numpy.real(gt[0].gain[:, ant, 0, 0, 0]), '.')
        plt.xlabel('Time (s)')
        plt.ylabel('Gain')
        plt.show()
Beispiel #5
0
    def test_create_gaintable_from_pointingtable_global(self):
        s3_components = [
            create_test_skycomponents_from_s3(
                flux_limit=5.0,
                phasecentre=self.phasecentre,
                frequency=self.frequency,
                polarisation_frame=PolarisationFrame('stokesI'),
                radius=0.2)[0]
        ]

        pt = create_pointingtable_from_blockvisibility(self.vis)
        pt = simulate_pointingtable(pt,
                                    pointing_error=0.0,
                                    static_pointing_error=0.0,
                                    global_pointing_error=[0.0001, 0.0001],
                                    config=self.vis.configuration)
        import matplotlib.pyplot as plt
        plt.clf()
        plt.plot(pt.pointing[..., 0].flat, pt.pointing[..., 1].flat, '.')
        plt.show()
        vp = create_vp(self.model, 'MID')
        gt = create_gaintable_from_pointingtable(self.vis, s3_components, pt,
                                                 vp)
        assert gt[0].gain.shape == (3, 63, 1, 1, 1), gt[0].gain.shape
        import matplotlib.pyplot as plt
        plt.clf()
        plt.plot(numpy.real(gt[0].gain.flat), numpy.imag(gt[0].gain.flat), '.')
        plt.show()
Beispiel #6
0
    def setUp(self):
        from data_models.parameters import arl_path

        self.midcore = create_named_configuration('MID', rmax=300.0)
        self.dir = arl_path('test_results')
        self.times = numpy.linspace(-6, 6, 3) * numpy.pi / (12.0)

        self.frequency = numpy.array([1e9])
        self.channel_bandwidth = numpy.array([1e7])
        self.phasecentre = SkyCoord(ra=+15.0 * u.deg,
                                    dec=-45.0 * u.deg,
                                    frame='icrs',
                                    equinox='J2000')
        self.vis = create_blockvisibility(
            self.midcore,
            self.times,
            self.frequency,
            channel_bandwidth=self.channel_bandwidth,
            phasecentre=self.phasecentre,
            weight=1.0,
            polarisation_frame=PolarisationFrame('stokesI'))
        self.vis.data['vis'] *= 0.0

        # Create model
        self.model = create_image(
            npixel=512,
            cellsize=0.0015,
            polarisation_frame=PolarisationFrame("stokesI"),
            frequency=self.frequency,
            channel_bandwidth=self.channel_bandwidth,
            phasecentre=self.phasecentre)

        self.vp = create_vp(self.model, 'LOW')
    def test_simulate_gaintable_from_time_series(self):
        numpy.random.seed(18051955)
        offset_phasecentre = SkyCoord(ra=+15.0 * u.deg,
                                      dec=-44.58 * u.deg,
                                      frame='icrs',
                                      equinox='J2000')
        component = [
            Skycomponent(frequency=self.frequency,
                         direction=offset_phasecentre,
                         polarisation_frame=PolarisationFrame("stokesI"),
                         flux=[[1.0]])
        ]

        for type in ['wind']:

            pt = create_pointingtable_from_blockvisibility(self.vis)

            import matplotlib.pyplot as plt
            ant = 15
            plt.clf()
            plt.plot(pt.time, pt.nominal[:, ant, 0, 0, 0], '.')
            plt.plot(pt.time, pt.nominal[:, ant, 0, 0, 1], '.')
            plt.xlabel('Time (s)')
            plt.ylabel('Nominal (rad)')
            plt.title("Nominal pointing for %s" % (type))
            plt.show()

            for reference_pointing in [False, True]:
                pt = simulate_pointingtable_from_timeseries(
                    pt, type=type, reference_pointing=reference_pointing)

                import matplotlib.pyplot as plt
                ant = 15
                plt.clf()
                r2a = 180.0 * 3600.0 / numpy.pi
                plt.plot(pt.time, r2a * pt.pointing[:, ant, 0, 0, 0], '.')
                plt.plot(pt.time, r2a * pt.pointing[:, ant, 0, 0, 1], '.')
                plt.xlabel('Time (s)')
                plt.ylabel('Pointing (arcsec)')
                plt.title("Pointing for %s, reference pointing %s" %
                          (type, reference_pointing))
                plt.show()

                vp = create_vp(self.model, 'MID')
                gt = simulate_gaintable_from_pointingtable(
                    self.vis, component, pt, vp)
                assert gt[0].gain.shape == (self.ntimes, self.nants, 1, 1,
                                            1), gt[0].gain.shape

                plt.clf()
                plt.plot(gt[0].time,
                         1.0 / numpy.real(gt[0].gain[:, ant, 0, 0, 0]), '.')
                plt.xlabel('Time (s)')
                plt.ylabel('Gain')
                plt.title("Gain for %s, reference pointing %s" %
                          (type, reference_pointing))
                plt.show()
Beispiel #8
0
    def test_create_pointingtable(self):
        beam = create_test_image(cellsize=0.0015,
                                 phasecentre=self.vis.phasecentre,
                                 frequency=self.frequency)

        for telescope in ['MID', 'LOW', 'ASKAP']:
            vp = create_vp(beam, telescope)
            pt = create_pointingtable_from_blockvisibility(self.vis, vp)
            pt = simulate_pointingtable(pt, 0.1, static_pointing_error=0.01)
            assert pt.pointing.shape == (3, 63, 1, 1, 2), pt.pointing.shape
Beispiel #9
0
 def test_create_voltage_patterns_MID(self):
     self.createVis(freq=1.4e9)
     cellsize=8*numpy.pi/180.0/280
     model = create_image_from_visibility(self.vis, npixel=512, cellsize=cellsize, override_cellsize=False)
     for telescope in ['MID']:
         beam=create_vp(model, telescope=telescope, padding=4)
         beam_data = beam.data
         beam.data = numpy.real(beam_data)
         beam.wcs.wcs.crval[0]=0.0
         beam.wcs.wcs.crval[1]=90.0
         export_image_to_fits(beam, "%s/test_voltage_pattern_real_zenith_%s.fits" % (self.dir, telescope))
Beispiel #10
0
 def test_create_voltage_patterns_MID(self):
     self.createVis(freq=1.4e9)
     model = create_image_from_visibility(self.vis,
                                          npixel=self.npixel,
                                          cellsize=self.cellsize,
                                          override_cellsize=False)
     for telescope in ['MID', 'MID_FEKO_B1', 'MID_FEKO_B2', 'MID_FEKO_Ku']:
         beam = create_vp(model, telescope=telescope, padding=4)
         beam_data = beam.data
         beam.data = numpy.real(beam_data)
         beam.wcs.wcs.crval[0] = 0.0
         beam.wcs.wcs.crval[1] = 90.0
         if self.persist:
             export_image_to_fits(
                 beam, "%s/test_voltage_pattern_real_zenith_%s.fits" %
                 (self.dir, telescope))
Beispiel #11
0
    def test_create_gaintable_from_pointingtable(self):
        s3_components = create_test_skycomponents_from_s3(
            flux_limit=5.0,
            phasecentre=self.phasecentre,
            frequency=self.frequency,
            polarisation_frame=PolarisationFrame('stokesI'),
            radius=0.2)

        pt = create_pointingtable_from_blockvisibility(self.vis)
        pt = simulate_pointingtable(pt,
                                    pointing_error=0.01,
                                    static_pointing_error=[0.001, 0.0001])
        vp = create_vp(self.model, 'MID')
        gt = simulate_gaintable_from_pointingtable(self.vis, s3_components, pt,
                                                   vp)
        assert gt[0].gain.shape == (self.ntimes, self.nants, 1, 1,
                                    1), gt[0].gain.shape
Beispiel #12
0
 def test_create_voltage_patterns_MID_GAUSS(self):
     self.createVis()
     model = create_image_from_visibility(self.vis,
                                          npixel=self.npixel,
                                          cellsize=self.cellsize,
                                          override_cellsize=False)
     for telescope in ['MID_GAUSS']:
         beam = create_vp(model, telescope=telescope, padding=4)
         beam_data = beam.data
         beam.data = numpy.real(beam_data)
         export_image_to_fits(
             beam,
             "%s/test_voltage_pattern_real_%s.fits" % (self.dir, telescope))
         beam.data = numpy.imag(beam_data)
         export_image_to_fits(
             beam,
             "%s/test_voltage_pattern_imag_%s.fits" % (self.dir, telescope))
    def test_create_gaintable_from_pointingtable_circlecut(self):
        self.sidelobe = SkyCoord(ra=+15.0 * u.deg,
                                 dec=-49.4 * u.deg,
                                 frame='icrs',
                                 equinox='J2000')
        comp = create_skycomponent(
            direction=self.sidelobe,
            flux=[[1.0]],
            frequency=self.frequency,
            polarisation_frame=PolarisationFrame('stokesI'))

        telescopes = ['MID', 'MID_GAUSS', 'MID_GRASP']
        for telescope in telescopes:
            pt = create_pointingtable_from_blockvisibility(self.vis)
            pt = simulate_pointingtable(pt,
                                        pointing_error=0.0,
                                        global_pointing_error=[0.0, 0.0])
            vp = create_vp(self.model, telescope)
            gt = simulate_gaintable_from_pointingtable(self.vis, [comp], pt,
                                                       vp)
            if self.doplot:
                import matplotlib.pyplot as plt
                plt.clf()
                plt.plot(gt[0].time,
                         numpy.real(1.0 / gt[0].gain[:, 0, 0, 0, 0]),
                         '.',
                         label='Real')
                plt.plot(gt[0].time,
                         numpy.imag(1.0 / gt[0].gain[:, 0, 0, 0, 0]),
                         '.',
                         label='Imaginary')
                plt.legend()
                plt.xlabel('Time (s)')
                plt.ylabel('Gain')
                plt.title('test_create_gaintable_from_pointingtable_%s' %
                          telescope)
                plt.show()
            assert gt[0].gain.shape == (self.ntimes, self.nants, 1, 1,
                                        1), gt[0].gain.shape