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 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 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
def test_calibrate_G_function(self): self.actualSetup('stokesIQUV', 'linear', f=[100.0, 0.0, 0.0, 50.0]) # Prepare the corrupted visibility data_models gt = create_gaintable_from_blockvisibility(self.vis) log.info("Created gain table: %s" % (gaintable_summary(gt))) gt = simulate_gaintable(gt, phase_error=0.0, amplitude_error=0.1) original = copy_visibility(self.vis) self.vis = apply_gaintable(self.vis, gt) # Now get the control dictionary and calibrate controls = create_calibration_controls() controls['G']['first_selfcal'] = 0 calibrated_vis, gaintables = calibrate_chain(self.vis, original, calibration_context='G', controls=controls) residual = numpy.max(gaintables['G'].residual) assert residual < 1e-8, "Max T residual = %s" % residual
def ft_cal_sm(obv, sm): assert isinstance(obv, BlockVisibility), obv bv = copy_visibility(obv) bv.data['vis'][...] = 0.0 + 0.0j assert len(sm.components) > 0 if isinstance(sm.mask, Image): comps = copy_skycomponent(sm.components) comps = apply_beam_to_skycomponent(comps, sm.mask) bv = predict_skycomponent_visibility(bv, comps) else: bv = predict_skycomponent_visibility(bv, sm.components) if docal and isinstance(sm.gaintable, GainTable): bv = apply_gaintable(bv, sm.gaintable, inverse=True) return bv
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