def invert_timeslice_single(vis: Visibility, im: Image, dopsf, normalize=True, **kwargs) -> (Image, numpy.ndarray):
"""Process single time slice
Extracted for re-use in parallel version
:param vis: Visibility to be inverted
:param im: image template (not changed)
:param dopsf: Make the psf instead of the dirty image
:param normalize: Normalize by the sum of weights (True)
"""
inchan, inpol, ny, nx = im.shape
if not isinstance(vis, Visibility):
avis = coalesce_visibility(vis, **kwargs)
else:
avis = vis
log.debug("invert_timeslice_single: inverting using single time slice")
avis, p, q = fit_uvwplane(avis, remove=False)
workimage, sumwt = invert_2d_base(avis, im, dopsf, normalize=normalize, **kwargs)
finalimage = create_empty_image_like(im)
# Use griddata to do the conversion. This could be improved. Only cubic is possible in griddata.
# The interpolation is ok for invert since the image is smooth.
# Calculate nominal and distorted coordinates. The image is in distorted coordinates so we
# need to convert back to nominal
lnominal, mnominal, ldistorted, mdistorted = lm_distortion(workimage, -p, -q)
for chan in range(inchan):
for pol in range(inpol):
finalimage.data[chan, pol, ...] = \
griddata((mdistorted.flatten(), ldistorted.flatten()),
values=workimage.data[chan, pol, ...].flatten(),
method='cubic',
xi=(mnominal.flatten(), lnominal.flatten()),
fill_value=0.0,
rescale=True).reshape(finalimage.data[chan, pol, ...].shape)
return finalimage, sumwt
timeslice.py 文件源码
python
阅读 22
收藏 0
点赞 0
评论 0
评论列表
文章目录