def test_griddata_predict_awterm(self): self.actualSetUp(zerow=False) make_pb = functools.partial(create_pb_generic, diameter=35.0, blockage=0.0, use_local=False) pb = make_pb(self.model) if self.persist: export_image_to_fits(pb, "%s/test_gridding_awterm_pb.fits" % self.dir) gcf, cf = create_awterm_convolutionfunction(self.model, make_pb=make_pb, nw=100, wstep=8.0, oversampling=16, support=32, use_aaf=True) griddata = create_griddata_from_image(self.model, nw=100, wstep=8.0) griddata = fft_image_to_griddata(self.model, griddata, gcf) newvis = degrid_visibility_from_griddata(self.vis, griddata=griddata, cf=cf) qa = qa_visibility(newvis) assert qa.data['rms'] < 120.0, str(qa) self.plot_vis(newvis, 'awterm')
def test_griddata_predict_box(self): self.actualSetUp(zerow=True) gcf, cf = create_box_convolutionfunction(self.model) griddata = create_griddata_from_image(self.model) griddata = fft_image_to_griddata(self.model, griddata, gcf) newvis = degrid_visibility_from_griddata(self.vis, griddata=griddata, cf=cf) newvis.data['vis'][...] -= self.vis.data['vis'][...] qa = qa_visibility(newvis) assert qa.data['rms'] < 46.0, str(qa)
def test_griddata_predict_pswf(self): self.actualSetUp(zerow=True) gcf, cf = create_pswf_convolutionfunction(self.model, support=6, oversampling=256) griddata = create_griddata_from_image(self.model) griddata = fft_image_to_griddata(self.model, griddata, gcf) newvis = degrid_visibility_from_griddata(self.vis, griddata=griddata, cf=cf) newvis.data['vis'][...] -= self.vis.data['vis'][...] qa = qa_visibility(newvis) assert qa.data['rms'] < 0.7, str(qa)
def test_griddata_predict_box(self): self.actualSetUp(zerow=True, image_pol=PolarisationFrame("stokesIQUV")) gcf, cf = create_box_convolutionfunction(self.model) modelIQUV = convert_stokes_to_polimage(self.model, self.vis.polarisation_frame) griddata = create_griddata_from_image(modelIQUV, self.vis) griddata = fft_image_to_griddata(modelIQUV, griddata, gcf) newvis = degrid_visibility_from_griddata(self.vis, griddata=griddata, cf=cf) newvis.data['vis'][...] -= self.vis.data['vis'][...] qa = qa_visibility(newvis) assert qa.data['rms'] < 58.0, str(qa)
def test_griddata_predict_wterm(self): self.actualSetUp(zerow=False) gcf, cf = create_awterm_convolutionfunction(self.model, nw=100, wstep=10.0, oversampling=16, support=32, use_aaf=True) griddata = create_griddata_from_image(self.model, nw=100, wstep=10.0) griddata = fft_image_to_griddata(self.model, griddata, gcf) newvis = degrid_visibility_from_griddata(self.vis, griddata=griddata, cf=cf) newvis.data['vis'][...] -= self.vis.data['vis'][...] qa = qa_visibility(newvis) self.plot_vis(newvis, 'wterm') assert qa.data['rms'] < 11.0, str(qa)
def predict_2d(vis: Union[BlockVisibility, Visibility], model: Image, gcfcf=None, **kwargs) -> Union[BlockVisibility, Visibility]: """ Predict using convolutional degridding. This is at the bottom of the layering i.e. all transforms are eventually expressed in terms of this function. Any shifting needed is performed here. :param vis: Visibility to be predicted :param model: model image :param gcfcf: (Grid correction function i.e. in image space, Convolution function i.e. in uv space) :return: resulting visibility (in place works) """ if model is None: return vis assert isinstance(vis, Visibility) or isinstance(vis, BlockVisibility), vis _, _, ny, nx = model.data.shape if gcfcf is None: gcf, cf = create_pswf_convolutionfunction( model, support=get_parameter(kwargs, "support", 8), oversampling=get_parameter(kwargs, "oversampling", 127)) else: gcf, cf = gcfcf griddata = create_griddata_from_image(model, vis) polmodel = convert_stokes_to_polimage(model, vis.polarisation_frame) griddata = fft_image_to_griddata(polmodel, griddata, gcf) if isinstance(vis, Visibility): vis = degrid_visibility_from_griddata(vis, griddata=griddata, cf=cf) else: vis = degrid_blockvisibility_from_griddata(vis, griddata=griddata, cf=cf) # Now we can shift the visibility from the image frame to the original visibility frame svis = shift_vis_to_image(vis, model, tangent=True, inverse=True) return svis
def test_griddata_predict_aterm(self): self.actualSetUp(zerow=True) make_pb = functools.partial(create_pb_generic, diameter=35.0, blockage=0.0, use_local=False) griddata = create_griddata_from_image(self.model) gcf, cf = create_awterm_convolutionfunction(self.model, make_pb=make_pb, nw=1, oversampling=16, support=32, use_aaf=True) griddata = fft_image_to_griddata(self.model, griddata, gcf) newvis = degrid_visibility_from_griddata(self.vis, griddata=griddata, cf=cf) qa = qa_visibility(newvis) assert qa.data['rms'] < 120.0, str(qa)