Exemplo n.º 1
0
    def ift_ical_sm(v, sm, g):
        assert isinstance(v, Visibility) or isinstance(v, BlockVisibility), v
        assert isinstance(sm, SkyModel), sm
        if g is not None:
            assert len(g) == 2, g
            assert isinstance(g[0], Image), g[0]
            assert isinstance(g[1], ConvolutionFunction), g[1]

        if docal and isinstance(sm.gaintable, GainTable):
            if isinstance(v, Visibility):
                bv = convert_visibility_to_blockvisibility(v)
                bv = apply_gaintable(bv, sm.gaintable)
                v = convert_blockvisibility_to_visibility(bv)
            else:
                v = apply_gaintable(v, sm.gaintable)

        result = invert_list_serial_workflow([v], [sm.image],
                                             context=context,
                                             vis_slices=vis_slices,
                                             facets=facets,
                                             gcfcf=[g],
                                             **kwargs)[0]
        if isinstance(sm.mask, Image):
            result[0].data *= sm.mask.data

        return result
def apply_calibration_chain(vis,
                            gaintables,
                            calibration_context='T',
                            controls=None,
                            iteration=0,
                            tol=1e-6,
                            **kwargs):
    """ Calibrate using algorithm specified by calibration_context and the calibration controls

    The context string can denote a sequence of calibrations e.g. TGB with different timescales.

    :param vis:
    :param model_vis:
    :param calibration_context: calibration contexts in order of correction e.g. 'TGB'
    :param control: controls dictionary, modified as necessary
    :param iteration: Iteration number to be compared to the 'first_selfcal' field.
    :param kwargs:
    :return: Calibrated data_models, dict(gaintables)
    """

    if controls is None:
        controls = create_calibration_controls()

    # Check to see if changes are required
    changes = False
    for c in calibration_context:
        if (iteration >=
                controls[c]['first_selfcal']) and (c in gaintables.keys()):
            changes = True

    if changes:

        isVis = isinstance(vis, Visibility)
        if isVis:
            avis = convert_visibility_to_blockvisibility(vis)
        else:
            avis = vis

        assert isinstance(avis, BlockVisibility), avis

        for c in calibration_context:
            if iteration >= controls[c]['first_selfcal']:
                avis = apply_gaintable(avis,
                                       gaintables[c],
                                       timeslice=controls[c]['timeslice'])

        if isVis:
            return convert_blockvisibility_to_visibility(avis)
        else:
            return avis
    else:
        return vis
    def corrupt_vis(vis, gt, **kwargs):
        if isinstance(vis, Visibility):
            bv = convert_visibility_to_blockvisibility(vis)
        else:
            bv = vis
        if gt is None:
            gt = create_gaintable_from_blockvisibility(bv, **kwargs)
            gt = simulate_gaintable(gt, **kwargs)
            bv = apply_gaintable(bv, gt)

        if isinstance(vis, Visibility):
            return convert_blockvisibility_to_visibility(bv)
        else:
            return bv
Exemplo n.º 4
0
    def ft_cal_sm(ov, sm, g):
        assert isinstance(ov, Visibility) or isinstance(ov,
                                                        BlockVisibility), ov
        assert isinstance(sm, SkyModel), sm
        if g is not None:
            assert len(g) == 2, g
            assert isinstance(g[0], Image), g[0]
            assert isinstance(g[1], ConvolutionFunction), g[1]

        v = copy_visibility(ov)

        v.data['vis'][...] = 0.0 + 0.0j

        if len(sm.components) > 0:

            if isinstance(sm.mask, Image):
                comps = copy_skycomponent(sm.components)
                comps = apply_beam_to_skycomponent(comps, sm.mask)
                v = predict_skycomponent_visibility(v, comps)
            else:
                v = predict_skycomponent_visibility(v, sm.components)

        if isinstance(sm.image, Image):
            if numpy.max(numpy.abs(sm.image.data)) > 0.0:
                if isinstance(sm.mask, Image):
                    model = copy_image(sm.image)
                    model.data *= sm.mask.data
                else:
                    model = sm.image
                v = predict_list_serial_workflow([v], [model],
                                                 context=context,
                                                 vis_slices=vis_slices,
                                                 facets=facets,
                                                 gcfcf=[g],
                                                 **kwargs)[0]

        if docal and isinstance(sm.gaintable, GainTable):
            if isinstance(ov, Visibility):
                bv = convert_visibility_to_blockvisibility(v)
                bv = apply_gaintable(bv, sm.gaintable, inverse=True)
                v = convert_blockvisibility_to_visibility(bv)
            else:
                v = apply_gaintable(v, sm.gaintable, inverse=True)

        return v
 def selfcal_convert(error_bvis, no_error_bvis):
     if selfcal:
         gt = solve_gaintable(error_bvis,
                              no_error_bvis,
                              gt=None,
                              phase_only=True,
                              niter=30,
                              tol=1e-8,
                              crosspol=False,
                              normalise_gains=True,
                              **kwargs)
         error_bvis = apply_gaintable(error_bvis, gt)
     if residual:
         error_bvis.data[
             'vis'] = error_bvis.data['vis'] - no_error_bvis.data['vis']
     if context != "ng":
         error_vis = convert_blockvisibility_to_visibility(error_bvis)
         return error_vis
     else:
         return error_bvis
Exemplo n.º 6
0
 def to_vis(v):
     if isinstance(v, BlockVisibility):
         av = convert_blockvisibility_to_visibility(v)
         return av
     else:
         return v
def calibrate_chain(vis,
                    model_vis,
                    gaintables=None,
                    calibration_context='T',
                    controls=None,
                    iteration=0,
                    tol=1e-8,
                    **kwargs):
    """ Calibrate using algorithm specified by calibration_context

    The context string can denote a sequence of calibrations e.g. TGB with different timescales.

    :param vis:
    :param model_vis:
    :param calibration_context: calibration contexts in order of correction e.g. 'TGB'
    :param controls: controls dictionary, modified as necessary
    :param iteration: Iteration number to be compared to the 'first_selfcal' field.
    :param kwargs:
    :return: Calibrated data_models, dict(gaintables)
    """
    if controls is None:
        controls = create_calibration_controls()

    # Check to see if changes are required
    changes = False
    for c in calibration_context:
        if iteration >= controls[c]['first_selfcal']:
            changes = True

    if changes:

        isVis = isinstance(vis, Visibility)
        if isVis:
            avis = convert_visibility_to_blockvisibility(vis)
        else:
            avis = vis

        isMVis = isinstance(model_vis, Visibility)
        if isMVis:
            amvis = convert_visibility_to_blockvisibility(model_vis)
        else:
            amvis = model_vis

        assert isinstance(avis, BlockVisibility), avis

        if gaintables is None:
            gaintables = dict()

        for c in calibration_context:
            if iteration >= controls[c]['first_selfcal']:
                if c not in gaintables.keys():
                    log.info("Creating new {} gaintable".format(c))
                    gaintables[c] = \
                        create_gaintable_from_blockvisibility(avis,
                                                              timeslice=controls[c]['timeslice'])
                gaintables[c] = solve_gaintable(
                    avis,
                    amvis,
                    gt=gaintables[c],
                    timeslice=controls[c]['timeslice'],
                    phase_only=controls[c]['phase_only'],
                    crosspol=controls[c]['shape'] == 'matrix',
                    tol=tol)
                log.debug('calibrate_chain: Jones matrix %s, iteration %d' %
                          (c, iteration))
                log.debug(
                    qa_gaintable(gaintables[c],
                                 context='Jones matrix %s, iteration %d' %
                                 (c, iteration)))
                avis = apply_gaintable(avis,
                                       gaintables[c],
                                       inverse=True,
                                       timeslice=controls[c]['timeslice'])
            else:
                log.debug(
                    'calibrate_chain: Jones matrix %s not solved, iteration %d'
                    % (c, iteration))

        if isVis:
            return convert_blockvisibility_to_visibility(avis), gaintables
        else:
            return avis, gaintables
    else:
        return vis, gaintables
Exemplo n.º 8
0
 def subtract_vis_convert(error_bvis, no_error_bvis):
     error_bvis.data[
         'vis'] = error_bvis.data['vis'] - no_error_bvis.data['vis']
     error_vis = convert_blockvisibility_to_visibility(error_bvis)
     return error_vis