예제 #1
0
 def test_restored_list_facet(self):
     self.actualSetUp(zerow=True)
     
     centre = self.freqwin // 2
     psf_image_list = invert_list_rsexecute_workflow(self.vis_list, self.model_list, context='2d', dopsf=True)
     residual_image_list = residual_list_rsexecute_workflow(self.vis_list, self.model_list, context='2d')
     restored_4facets_image_list = restore_list_rsexecute_workflow(self.model_list, psf_image_list,
                                                                    residual_image_list,
                                                                    restore_facets=4, psfwidth=1.0)
     restored_4facets_image_list = rsexecute.compute(restored_4facets_image_list, sync=True)
     
     restored_1facets_image_list = restore_list_rsexecute_workflow(self.model_list, psf_image_list,
                                                                    residual_image_list,
                                                                    restore_facets=1, psfwidth=1.0)
     restored_1facets_image_list = rsexecute.compute(restored_1facets_image_list, sync=True)
     
     if self.persist: export_image_to_fits(restored_4facets_image_list[0],
                                           '%s/test_imaging_invert_%s_restored_4facets.fits' %
                                           (self.dir, rsexecute.type()))
     
     qa = qa_image(restored_4facets_image_list[centre])
     assert numpy.abs(qa.data['max'] - 99.43438263927833) < 1e-7, str(qa)
     assert numpy.abs(qa.data['min'] + 0.6328915148563354) < 1e-7, str(qa)
     
     restored_4facets_image_list[centre].data -= restored_1facets_image_list[centre].data
     if self.persist: export_image_to_fits(restored_4facets_image_list[centre],
                                           '%s/test_imaging_invert_%s_restored_4facets_error.fits' %
                                           (self.dir, rsexecute.type()))
     qa = qa_image(restored_4facets_image_list[centre])
     assert numpy.abs(qa.data['max']) < 1e-10, str(qa)
예제 #2
0
 def test_deconvolve_and_restore_cube_mmclean_facets(self):
     self.actualSetUp(add_errors=True)
     dirty_imagelist = invert_list_rsexecute_workflow(self.vis_list, self.model_imagelist, context='2d',
                                                       dopsf=False, normalize=True)
     psf_imagelist = invert_list_rsexecute_workflow(self.vis_list, self.model_imagelist, context='2d',
                                                     dopsf=True, normalize=True)
     dirty_imagelist = rsexecute.persist(dirty_imagelist)
     psf_imagelist = rsexecute.persist(psf_imagelist)
     dec_imagelist = deconvolve_list_rsexecute_workflow(dirty_imagelist, psf_imagelist, self.model_imagelist,
                                                         niter=1000,
                                                         fractional_threshold=0.1, scales=[0, 3, 10],
                                                         algorithm='mmclean', nmoment=3, nchan=self.freqwin,
                                                         threshold=0.01, gain=0.7, deconvolve_facets=8,
                                                         deconvolve_overlap=8, deconvolve_taper='tukey')
     dec_imagelist = rsexecute.persist(dec_imagelist)
     residual_imagelist = residual_list_rsexecute_workflow(self.vis_list, model_imagelist=dec_imagelist,
                                                            context='2d')
     residual_imagelist = rsexecute.persist(residual_imagelist)
     restored_list = restore_list_rsexecute_workflow(model_imagelist=dec_imagelist, psf_imagelist=psf_imagelist,
                                                      residual_imagelist=residual_imagelist,
                                                      empty=self.model_imagelist)
     
     restored = rsexecute.compute(restored_list, sync=True)[0]
     
     if self.persist: export_image_to_fits(restored, '%s/test_imaging_%s_overlap_mmclean_restored.fits'
                          % (self.dir, rsexecute.type()))
    def _invert_base(self,
                     context,
                     extra='',
                     fluxthreshold=1.0,
                     positionthreshold=1.0,
                     check_components=True,
                     facets=1,
                     vis_slices=1,
                     gcfcf=None,
                     dopsf=False,
                     **kwargs):

        centre = self.freqwin // 2
        dirty = invert_list_rsexecute_workflow(self.bvis_list,
                                               self.model_list,
                                               context=context,
                                               dopsf=dopsf,
                                               normalize=True,
                                               facets=facets,
                                               vis_slices=vis_slices,
                                               gcfcf=gcfcf,
                                               **kwargs)
        dirty = rsexecute.compute(dirty, sync=True)[centre]

        if self.persist:
            if dopsf == True:
                export_image_to_fits(
                    dirty[0], '%s/test_imaging_invert_%s%s_%s_psf.fits' %
                    (self.dir, context, extra, rsexecute.type()))
            else:
                export_image_to_fits(
                    dirty[0], '%s/test_imaging_invert_%s%s_%s_dirty.fits' %
                    (self.dir, context, extra, rsexecute.type()))

        assert numpy.max(numpy.abs(dirty[0].data)), "Image is empty"

        if check_components:
            self._checkcomponents(dirty[0], fluxthreshold, positionthreshold)
예제 #4
0
 def test_restored_list_noresidual(self):
     self.actualSetUp(zerow=True)
     
     centre = self.freqwin // 2
     psf_image_list = invert_list_rsexecute_workflow(self.vis_list, self.model_list, context='2d', dopsf=True)
     restored_image_list = restore_list_rsexecute_workflow(self.model_list, psf_image_list, psfwidth=1.0)
     restored_image_list = rsexecute.compute(restored_image_list, sync=True)
     if self.persist: export_image_to_fits(restored_image_list[centre],
                                           '%s/test_imaging_invert_%s_restored_noresidual.fits' %
                                           (self.dir, rsexecute.type()))
     
     qa = qa_image(restored_image_list[centre])
     assert numpy.abs(qa.data['max'] - 100.0) < 1e-7, str(qa)
     assert numpy.abs(qa.data['min']) < 1e-7, str(qa)
예제 #5
0
 def test_deconvolve_spectral(self):
     self.actualSetUp(add_errors=True)
     dirty_imagelist = invert_list_rsexecute_workflow(self.vis_list, self.model_imagelist, context='2d',
                                                       dopsf=False, normalize=True)
     psf_imagelist = invert_list_rsexecute_workflow(self.vis_list, self.model_imagelist,
                                                     context='2d',
                                                     dopsf=True, normalize=True)
     dirty_imagelist = rsexecute.persist(dirty_imagelist)
     psf_imagelist = rsexecute.persist(psf_imagelist)
     deconvolved = deconvolve_list_rsexecute_workflow(dirty_imagelist, psf_imagelist, self.model_imagelist,
                                                       niter=1000,
                                                       fractional_threshold=0.1, scales=[0, 3, 10],
                                                       threshold=0.1, gain=0.7)
     deconvolved = rsexecute.persist(deconvolved)
     deconvolved = rsexecute.compute(deconvolved, sync=True)
     
     if self.persist: export_image_to_fits(deconvolved[0], '%s/test_imaging_%s_deconvolve_spectral.fits' %
                          (self.dir, rsexecute.type()))
예제 #6
0
 def _predict_base(self, context='2d', extra='', fluxthreshold=1.0, facets=1, vis_slices=1,
                   gcfcf=None, **kwargs):
     centre = self.freqwin // 2
     
     vis_list = zero_list_rsexecute_workflow(self.vis_list)
     vis_list = predict_list_rsexecute_workflow(vis_list, self.model_list, context=context,
                                                 vis_slices=vis_slices, facets=facets,
                                                 gcfcf=gcfcf, **kwargs)
     vis_list = subtract_list_rsexecute_workflow(self.vis_list, vis_list)
     vis_list = rsexecute.compute(vis_list, sync=True)
     
     dirty = invert_list_rsexecute_workflow(vis_list, self.model_list, context=context, dopsf=False,
                                             gcfcf=gcfcf, normalize=True, vis_slices=vis_slices)
     dirty = rsexecute.compute(dirty, sync=True)[centre]
     
     assert numpy.max(numpy.abs(dirty[0].data)), "Residual image is empty"
     if self.persist: export_image_to_fits(dirty[0], '%s/test_imaging_predict_%s%s_%s_dirty.fits' %
                          (self.dir, context, extra, rsexecute.type()))
     
     maxabs = numpy.max(numpy.abs(dirty[0].data))
     assert maxabs < fluxthreshold, "Error %.3f greater than fluxthreshold %.3f " % (maxabs, fluxthreshold)