Source code for tkp.accessors.common

"""
Parsing functions used by multiple DataAccessor sub-classes
"""

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


[docs]def parse_pixelsize(wcs): """ Arguments: - wcs: A tkp.coordinates.wcs.WCS object Returns: - deltax: pixel size along the x axis in degrees - deltay: pixel size along the x axis in degrees """ #Would have to be pretty strange data for this not to be the case assert wcs.cunit[0] == wcs.cunit[1] if wcs.cunit[0] == "deg": deltax = wcs.cdelt[0] deltay = wcs.cdelt[1] elif wcs.cunit[0] == "rad": deltax = degrees(wcs.cdelt[0]) deltay = degrees(wcs.cdelt[1]) else: raise ValueError("Unrecognised WCS co-ordinate system") #NB. What's a reasonable epsilon here? eps = 1e-7 if abs(abs(deltax) - abs(deltay)) > eps: raise ValueError("Image WCS header suggests non-square pixels." "This is an untested use case, and may break things -" "specifically the skyregion tracking but possibly other stuff too.") return deltax, deltay
[docs]def degrees2pixels(bmaj, bmin, bpa, deltax, deltay): """ Convert beam in degrees to beam in pixels and radians. For example Fits beam parameters are in degrees. Arguments: - bmaj: Beam semi-major axis in degrees - bmin: Beam semi-minor axis in degrees - bpa: Beam position angle in degrees - deltax: Pixel size along the x axis in degrees - deltay: Pixel size along the y axis in degrees Returns: - semimaj: Beam semi-major axis in pixels - semimin: Beam semi-minor axis in pixels - theta: Beam position angle in radians """ semimaj = (bmaj / 2.) * (sqrt( (sin(pi * bpa / 180.)**2) / (deltax**2) + (cos(pi * bpa / 180.)**2) / (deltay**2)) ) semimin = (bmin / 2.) * (sqrt( (cos(pi * bpa / 180.)**2) / (deltax**2) + (sin(pi * bpa / 180.)**2) / (deltay**2)) ) theta = pi * bpa / 180 return (semimaj, semimin, theta)
[docs]def arcsec2degrees(bmaj, bmin, bpa): """ Converts beam parameters from arcsec to degrees. For example CASAtable beam parameters are in arcsec. Arguments: - bmaj: Beam semi-major axis in arcsec - bmin: Beam semi-minor axis in arcsec - bpa: Beam position angle in arbitrary units Returns: - tuple of (semi-major in degrees, semi-minor in degrees, bpa as above) """ return (bmaj / 3600, bmin / 3600, bpa)
[docs]def unique_column_values(table, column_name): """ Find all the unique values in a particular column of a CASA table. Arguments: - table: ``pyrap.tables.table`` - column_name: ``str`` Returns: - ``numpy.ndarray`` containing unique values in column. """ return table.query( columns=column_name, sortlist="unique %s" % (column_name) ).getcol(column_name)