Пример #1
0
    def test_calibrate_serial_empty(self):
        amp_errors = {'T': 0.0, 'G': 0.0}
        phase_errors = {'T': 1.0, 'G': 0.0}
        self.actualSetUp(amp_errors=amp_errors, phase_errors=phase_errors)

        for v in self.blockvis_list:
            v.data['vis'][...] = 0.0 + 0.0j

        controls = create_calibration_controls()
        controls['T']['first_selfcal'] = 0
        controls['T']['timeslice'] = 'auto'

        calibrate_list = \
            calibrate_list_serial_workflow(self.error_blockvis_list, self.blockvis_list,
                                                calibration_context='T', controls=controls, do_selfcal=True,
                                                global_solution=False)
        assert len(calibrate_list[1][0]) > 0
Пример #2
0
    def test_calibrate_serial(self):
        amp_errors = {'T': 0.0, 'G': 0.0}
        phase_errors = {'T': 1.0, 'G': 0.0}
        self.actualSetUp(amp_errors=amp_errors, phase_errors=phase_errors)

        controls = create_calibration_controls()
        controls['T']['first_selfcal'] = 0
        controls['T']['timeslice'] = 'auto'

        calibrate_list = \
            calibrate_list_serial_workflow(self.error_blockvis_list, self.blockvis_list,
                                           calibration_context='T', controls=controls, do_selfcal=True,
                                           global_solution=False)
        assert len(calibrate_list) == 2
        assert numpy.max(calibrate_list[1][0]['T'].residual) < 7e-6, numpy.max(
            calibrate_list[1][0]['T'].residual)
        err = numpy.max(
            numpy.abs(calibrate_list[0][0].vis - self.blockvis_list[0].vis))
        assert err < 2e-6, err
Пример #3
0
def ical_list_serial_workflow(vis_list,
                              model_imagelist,
                              context,
                              vis_slices=1,
                              facets=1,
                              gcfcf=None,
                              calibration_context='TG',
                              do_selfcal=True,
                              **kwargs):
    """Run ICAL pipeline

    :param vis_list:
    :param model_imagelist:
    :param context: imaging context e.g. '2d'
    :param calibration_context: Sequence of calibration steps e.g. TGB
    :param do_selfcal: Do the selfcalibration?
    :param kwargs: Parameters for functions in components
    :return:
    """
    gt_list = list()

    if gcfcf is None:
        gcfcf = [create_pswf_convolutionfunction(model_imagelist[0])]

    psf_imagelist = invert_list_serial_workflow(vis_list,
                                                model_imagelist,
                                                dopsf=True,
                                                context=context,
                                                vis_slices=vis_slices,
                                                facets=facets,
                                                gcfcf=gcfcf,
                                                **kwargs)

    model_vislist = [copy_visibility(v, zero=True) for v in vis_list]

    if do_selfcal:
        cal_vis_list = [copy_visibility(v) for v in vis_list]
    else:
        cal_vis_list = vis_list

    if do_selfcal:
        # Make the predicted visibilities, selfcalibrate against it correcting the gains, then
        # form the residual visibility, then make the residual image
        model_vislist = predict_list_serial_workflow(model_vislist,
                                                     model_imagelist,
                                                     context=context,
                                                     vis_slices=vis_slices,
                                                     facets=facets,
                                                     gcfcf=gcfcf,
                                                     **kwargs)
        cal_vis_list, gt_list = calibrate_list_serial_workflow(
            cal_vis_list,
            model_vislist,
            calibration_context=calibration_context,
            **kwargs)
        residual_vislist = subtract_list_serial_workflow(
            cal_vis_list, model_vislist)
        residual_imagelist = invert_list_serial_workflow(residual_vislist,
                                                         model_imagelist,
                                                         context=context,
                                                         dopsf=False,
                                                         vis_slices=vis_slices,
                                                         facets=facets,
                                                         gcfcf=gcfcf,
                                                         iteration=0,
                                                         **kwargs)
    else:
        # If we are not selfcalibrating it's much easier and we can avoid an unnecessary round of gather/scatter
        # for visibility partitioning such as timeslices and wstack.
        residual_imagelist = residual_list_serial_workflow(
            cal_vis_list,
            model_imagelist,
            context=context,
            vis_slices=vis_slices,
            facets=facets,
            gcfcf=gcfcf,
            **kwargs)

    deconvolve_model_imagelist = deconvolve_list_serial_workflow(
        residual_imagelist,
        psf_imagelist,
        model_imagelist,
        prefix='cycle 0',
        **kwargs)
    nmajor = get_parameter(kwargs, "nmajor", 5)
    if nmajor > 1:
        for cycle in range(nmajor):
            if do_selfcal:
                model_vislist = predict_list_serial_workflow(
                    model_vislist,
                    deconvolve_model_imagelist,
                    context=context,
                    vis_slices=vis_slices,
                    facets=facets,
                    gcfcf=gcfcf,
                    **kwargs)
                cal_vis_list = [copy_visibility(v) for v in vis_list]
                cal_vis_list, gt_list = calibrate_list_serial_workflow(
                    cal_vis_list,
                    model_vislist,
                    calibration_context=calibration_context,
                    iteration=cycle,
                    **kwargs)
                residual_vislist = subtract_list_serial_workflow(
                    cal_vis_list, model_vislist)
                residual_imagelist = invert_list_serial_workflow(
                    residual_vislist,
                    model_imagelist,
                    context=context,
                    vis_slices=vis_slices,
                    facets=facets,
                    gcfcf=gcfcf,
                    **kwargs)
            else:
                residual_imagelist = residual_list_serial_workflow(
                    cal_vis_list,
                    deconvolve_model_imagelist,
                    context=context,
                    vis_slices=vis_slices,
                    facets=facets,
                    gcfcf=gcfcf,
                    **kwargs)

            prefix = "cycle %d" % (cycle + 1)
            deconvolve_model_imagelist = deconvolve_list_serial_workflow(
                residual_imagelist,
                psf_imagelist,
                deconvolve_model_imagelist,
                prefix=prefix,
                **kwargs)
    residual_imagelist = residual_list_serial_workflow(
        cal_vis_list,
        deconvolve_model_imagelist,
        context=context,
        vis_slices=vis_slices,
        facets=facets,
        gcfcf=gcfcf,
        **kwargs)
    restore_imagelist = restore_list_serial_workflow(
        deconvolve_model_imagelist, psf_imagelist, residual_imagelist)
    return deconvolve_model_imagelist, residual_imagelist, restore_imagelist, gt_list