Exemple #1
0
    def test_crosssubtract_datamodel(self):
        self.actualSetUp(zerow=True)

        future_vis = arlexecute.scatter(self.vis_list[0])
        future_skymodel_list = arlexecute.scatter(self.skymodel_list)
        skymodel_vislist = predict_skymodel_list_arlexecute_workflow(
            future_vis, future_skymodel_list, context='2d', docal=True)
        skymodel_vislist = arlexecute.compute(skymodel_vislist, sync=True)
        vobs = sum_predict_results(skymodel_vislist)

        future_vobs = arlexecute.scatter(vobs)
        skymodel_vislist = crosssubtract_datamodels_skymodel_list_arlexecute_workflow(
            future_vobs, skymodel_vislist)

        skymodel_vislist = arlexecute.compute(skymodel_vislist, sync=True)

        result_skymodel = [
            SkyModel(components=None, image=self.skymodel_list[-1].image)
            for v in skymodel_vislist
        ]

        self.vis_list = arlexecute.scatter(self.vis_list)
        result_skymodel = invert_skymodel_list_arlexecute_workflow(
            skymodel_vislist, result_skymodel, context='2d', docal=True)
        results = arlexecute.compute(result_skymodel, sync=True)
        assert numpy.max(numpy.abs(results[0][0].data)) > 0.0
        assert numpy.max(numpy.abs(results[0][1])) > 0.0
        if self.plot:
            import matplotlib.pyplot as plt
            from wrappers.arlexecute.image.operations import show_image
            show_image(results[0][0],
                       title='Dirty image after cross-subtraction',
                       vmax=0.1,
                       vmin=-0.01)
            plt.show()
Exemple #2
0
    def test_predictcal(self):

        self.actualSetUp(zerow=True)

        skymodel_vislist = predict_skymodel_list_serial_workflow(
            self.vis_list[0], self.skymodel_list, context='2d', docal=True)
        vobs = sum_predict_results(skymodel_vislist)

        if self.plot:

            def plotvis(i, v):
                import matplotlib.pyplot as plt
                uvr = numpy.hypot(v.u, v.v)
                amp = numpy.abs(v.vis[:, 0])
                plt.plot(uvr, amp, '.')
                plt.title(str(i))
                plt.show()

            plotvis(0, vobs)
 def test_predictcal(self):
     
     self.actualSetUp(zerow=True)
     
     future_vis = arlexecute.scatter(self.vis_list[0])
     future_skymodel = arlexecute.scatter(self.skymodel_list)
     skymodel_vislist = predict_skymodel_list_arlexecute_workflow(future_vis, future_skymodel,
                                                                  context='2d', docal=True)
     skymodel_vislist = arlexecute.compute(skymodel_vislist, sync=True)
     vobs = sum_predict_results(skymodel_vislist)
     
     if self.plot:
         def plotvis(i, v):
             import matplotlib.pyplot as plt
             uvr = numpy.hypot(v.u, v.v)
             amp = numpy.abs(v.vis[:, 0])
             plt.plot(uvr, amp, '.')
             plt.title(str(i))
             plt.show()
         
         plotvis(0, vobs)
def predict_list_serial_workflow(vis_list, model_imagelist, context, vis_slices=1, facets=1,
                                 gcfcf=None, **kwargs):
    """Predict, iterating over both the scattered vis_list and image

    The visibility and image are scattered, the visibility is predicted on each part, and then the
    parts are assembled.

    :param vis_list:
    :param model_imagelist: Model used to determine image parameters
    :param vis_slices: Number of vis slices (w stack or timeslice)
    :param facets: Number of facets (per axis)
    :param context: Type of processing e.g. 2d, wstack, timeslice or facets
    :param gcfcg: tuple containing grid correction and convolution function
    :param kwargs: Parameters for functions in components
    :return: List of vis_lists
   """
    
    assert len(vis_list) == len(model_imagelist), "Model must be the same length as the vis_list"
    
    # Predict_2d does not clear the vis so we have to do it here.
    vis_list = zero_list_serial_workflow(vis_list)

    c = imaging_context(context)
    vis_iter = c['vis_iterator']
    predict = c['predict']
    
    if facets % 2 == 0 or facets == 1:
        actual_number_facets = facets
    else:
        actual_number_facets = facets - 1
    
    def predict_ignore_none(vis, model, g):
        if vis is not None:
            assert isinstance(vis, Visibility), vis
            assert isinstance(model, Image), model
            return predict(vis, model, context=context, gcfcf=g, **kwargs)
        else:
            return None
    
    if gcfcf is None:
        gcfcf = [create_pswf_convolutionfunction(m) for m in model_imagelist]
    
    # Loop over all frequency windows
    if facets == 1:
        image_results_list = list()
        for ivis, vis_list in enumerate(vis_list):
            if len(gcfcf) > 1:
                g = gcfcf[ivis]
            else:
                g = gcfcf[0]
            # Create the graph to divide an image into facets. This is by reference.
            # Create the graph to divide the visibility into slices. This is by copy.
            sub_vis_lists = visibility_scatter(vis_list, vis_iter, vis_slices)
            
            image_vis_lists = list()
            # Loop over sub visibility
            for sub_vis_list in sub_vis_lists:
                # Predict visibility for this sub-visibility from this image
                image_vis_list = predict_ignore_none(sub_vis_list, model_imagelist[ivis], g)
                # Sum all sub-visibilities
                image_vis_lists.append(image_vis_list)
            image_results_list.append(visibility_gather(image_vis_lists, vis_list, vis_iter))
        
        return image_results_list
    else:
        image_results_list_list = list()
        for ivis, vis_list in enumerate(vis_list):
            # Create the graph to divide an image into facets. This is by reference.
            facet_lists = image_scatter_facets(model_imagelist[ivis], facets=facets)
            facet_vis_lists = list()
            sub_vis_lists = visibility_scatter(vis_list, vis_iter, vis_slices)
            
            # Loop over sub visibility
            for sub_vis_list in sub_vis_lists:
                facet_vis_results = list()
                # Loop over facets
                for facet_list in facet_lists:
                    # Predict visibility for this subvisibility from this facet
                    facet_vis_list = predict_ignore_none(sub_vis_list, facet_list,
                                                         None)
                    facet_vis_results.append(facet_vis_list)
                # Sum the current sub-visibility over all facets
                facet_vis_lists.append(sum_predict_results(facet_vis_results))
            # Sum all sub-visibilties
            image_results_list_list.append(visibility_gather(facet_vis_lists, vis_list, vis_iter))
        return image_results_list_list
Exemple #5
0
def predict_list_serial_workflow(vis_list,
                                 model_imagelist,
                                 vis_slices=1,
                                 facets=1,
                                 context='2d',
                                 **kwargs):
    """Predict, iterating over both the scattered vis_list and image

    The visibility and image are scattered, the visibility is predicted on each part, and then the
    parts are assembled.

    :param vis_list:
    :param model_imagelist: Model used to determine image parameters
    :param vis_slices: Number of vis slices (w stack or timeslice)
    :param facets: Number of facets (per axis)
    :param context:
    :param kwargs: Parameters for functions in components
    :return: List of vis_lists
   """

    assert len(vis_list) == len(
        model_imagelist), "Model must be the same length as the vis_list"

    c = imaging_context(context)
    vis_iter = c['vis_iterator']
    predict = c['predict']

    def predict_ignore_none(vis, model):
        if vis is not None:
            return predict(vis,
                           model,
                           context=context,
                           facets=facets,
                           vis_slices=vis_slices,
                           **kwargs)
        else:
            return None

    image_results_list_list = list()
    # Loop over all frequency windows
    for freqwin, vis_list in enumerate(vis_list):
        # Create the graph to divide an image into facets. This is by reference.
        facet_lists = image_scatter_facets(model_imagelist[freqwin],
                                           facets=facets)
        # Create the graph to divide the visibility into slices. This is by copy.
        sub_vis_lists = visibility_scatter(vis_list, vis_iter, vis_slices)

        facet_vis_lists = list()
        # Loop over sub visibility
        for sub_vis_list in sub_vis_lists:
            facet_vis_results = list()
            # Loop over facets
            for facet_list in facet_lists:
                # Predict visibility for this subvisibility from this facet
                facet_vis_list = predict_ignore_none(sub_vis_list, facet_list)
                facet_vis_results.append(facet_vis_list)
            # Sum the current sub-visibility over all facets
            facet_vis_lists.append(sum_predict_results(facet_vis_results))
        # Sum all sub-visibilties
        image_results_list_list.append(
            visibility_gather(facet_vis_lists, vis_list, vis_iter))

    return image_results_list_list
Exemple #6
0
                                           facets=facets)
        # Create the graph to divide the visibility into slices. This is by copy.
        sub_vis_lists = visibility_scatter(vis_lst, vis_iter, vis_slices)
        facet_vis_lists = list()

        #pdb.set_trace()
        # Loop over sub visibility
        for sub_vis_list in sub_vis_lists:
            facet_vis_results = list()
            # Loop over facets
            for facet_list in facet_lists:
                # Predict visibility for this subvisibility from this facet
                facet_vis_list = predict_ignore_none(sub_vis_list, facet_list)
                facet_vis_results.append(facet_vis_list)
            # Sum the current sub-visibility over all facets
            facet_vis_lists.append(sum_predict_results(facet_vis_results))
        # Sum all sub-visibilties
        image_results_list_list.append(
            visibility_gather(facet_vis_lists, vis_lst, vis_iter))

    predicted_vislist = image_results_list_list

#log.info('About to run corrupt to get corrupted visibility')
#corrupted_vislist = corrupt_list_serial_workflow(predicted_vislist, phase_error=1.0)

# Get the LSM. This is currently blank.

# In[ ]:

model_list = [
    create_image_from_visibility(