def create_modelpartition(vis: BlockVisibility, skymodels, **kwargs): """Create a set of associations between skymodel and gaintable :param vis: BlockVisibility to process :param skymodels: List of skyModels :param kwargs: :return: """ gt = create_gaintable_from_blockvisibility(vis, **kwargs) return [(copy_skymodel(sm), copy_gaintable(gt)) for sm in skymodels]
def test_copy(self): fluxes = numpy.linspace(0, 1.0, 11) sc = [create_skycomponent(direction=self.phasecentre, flux=numpy.array([[f]]), frequency=self.frequency, polarisation_frame=PolarisationFrame('stokesI')) for f in fluxes] sm = SkyModel(image=self.model, components=sc, mask=self.mask) sm_copy = copy_skymodel(sm) assert len(sm.components) == len(sm_copy.components) sm_fluxes = numpy.array([c.flux[0,0] for c in sm.components]) sm_copy_fluxes = numpy.array([c.flux[0,0] for c in sm_copy.components]) assert numpy.max(numpy.abs(sm_fluxes - sm_copy_fluxes)) < 1e-7 assert numpy.abs(numpy.max(sm.mask.data - 1.0)) < 1e-7 assert numpy.abs(numpy.min(sm.mask.data - 0.0)) < 1e-7
def solve_modelpartition(vis, skymodels, niter=10, tol=1e-8, gain=0.25, **kwargs): """ Solve for model partitions Solve by iterating, performing E step and M step. :param vis: Initial visibility :param components: Initial components to be used :param gaintables: Initial gain tables to be used :param kwargs: :return: The individual data models and the residual visibility """ model_partition = create_modelpartition(vis, skymodels=skymodels, **kwargs) for iter in range(niter): new_modelpartitions = list() evis_all = modelpartition_expectation_all(vis, model_partition) log.debug("solve_modelpartition: Iteration %d" % (iter)) for window_index, csm in enumerate(model_partition): evis = modelpartition_expectation_step(vis, evis_all, csm, gain=gain, **kwargs) new_csm = modelpartition_maximisation_step(evis, csm, **kwargs) new_modelpartitions.append((new_csm[0], new_csm[1])) flux = new_csm[0].components[0].flux[0, 0] qa = qa_gaintable(new_csm[1]) residual = qa.data['residual'] rms_phase = qa.data['rms-phase'] log.debug( "solve_modelpartition:\t Window %d, flux %s, residual %.3f, rms phase %.3f" % (window_index, str(flux), residual, rms_phase)) model_partition = [(copy_skymodel(csm[0]), copy_gaintable(csm[1])) for csm in new_modelpartitions] residual_vis = copy_visibility(vis) final_vis = modelpartition_expectation_all(vis, model_partition) residual_vis.data['vis'][ ...] = vis.data['vis'][...] - final_vis.data['vis'][...] return model_partition, residual_vis
def create_calskymodel(vis, skymodel): gt = create_gaintable_from_blockvisibility(vis, **kwargs) return (copy_skymodel(skymodel), copy_gaintable(gt))