Source code for tkp.sourcefinder.deconv

"""
Gaussian deconvolution.
"""

from math import sin, cos, atan, sqrt, pi

[docs]def deconv(fmaj, fmin, fpa, cmaj, cmin, cpa): """ Deconvolve a Gaussian "beam" from a Gaussian component. When we fit an elliptical Gaussian to a point in our image, we are actually fitting to a convolution of the physical shape of the source with the beam pattern of our instrument. This results in the fmaj/fmin/fpa arguments to this function. Since the shape of the (clean) beam (arguments cmaj/cmin/cpa) is known, we can deconvolve it from the fitted parameters to get the "real" underlying physical source shape, which is what this function returns. Args: fmaj (float): Fitted major axis fmin (float): Fitted minor axis fpa (float): Fitted position angle of major axis cmaj (float): Clean beam major axis cmin (float): Clean beam minor axis cpa (float): Clean beam position angle of major axis Returns: rmaj (float): Real major axis rmin (float): Real minor axis rpa (float): Real position angle of major axis ierr (int): Number of components which failed to deconvolve """ HALF_RAD = 90.0 / pi cmaj2 = cmaj * cmaj cmin2 = cmin * cmin fmaj2 = fmaj * fmaj fmin2 = fmin * fmin theta = (fpa - cpa) / HALF_RAD det = ((fmaj2 + fmin2) - (cmaj2 + cmin2)) / 2.0 rhoc = (fmaj2 - fmin2) * cos(theta) - (cmaj2 - cmin2) sigic2 = 0.0 rhoa = 0.0 ierr = 0 if abs(rhoc) > 0.0: sigic2 = atan((fmaj2 - fmin2) * sin(theta) / rhoc) rhoa = (((cmaj2 - cmin2) - (fmaj2 - fmin2) * cos(theta)) / (2.0 * cos(sigic2))) rpa = sigic2 * HALF_RAD + cpa rmaj = det - rhoa rmin = det + rhoa if rmaj < 0: ierr += 1 rmaj = 0 if rmin < 0: ierr += 1 rmin = 0 rmaj = sqrt(rmaj) rmin = sqrt(rmin) if rmaj < rmin: rmaj, rmin = rmin, rmaj rpa += 90 rpa = (rpa + 900) % 180 if not abs(rmaj): rpa = 0.0 elif not abs(rmin) and (45.0 < abs(rpa-fpa) < 135.0): rpa = (rpa + 450.0) % 180.0 return rmaj, rmin, rpa, ierr