Source code for tkp.testutil.mock

"""
Mock / synthetic data objects for use in testing.
"""
import numpy as np
from tkp.accessors.dataaccessor import DataAccessor
from tkp.utility.coordinates import WCS
import datetime

class Mock(object):
    def __init__(self, returnvalue=None):
        self.callcount = 0
        self.callvalues = []
        self.returnvalue = returnvalue

    def __call__(self, *args, **kwargs):
        self.callcount += 1
        self.callvalues.append((args, kwargs))
        return self.returnvalue


[docs]def make_wcs(crval=None, cdelt=None, crpix=None ): """ Make a WCS object for insertion into a synthetic image. Args: crval (tuple): Tuple of (RA, Dec) in decimal degrees at the reference position. crpix (tuple): Tuple of (x,y) co-ordinates describing the reference pixel location corresponding to the crval sky-position. cdelt (tuple): Tuple of (cdelt0, cdelt1) in decimal degrees. This is the pixel width in degrees of arc, but not necessarily aligned to RA, Dec unless `crota` is (0,0). If that *is* the case, then typically cdelt0 is negative since the x-axis is in direction of West (decreasing RA). """ # For any arguments not set we simply assign an arbitrary valid value: if crval is None: crval = 100., 45. if cdelt is None: pixel_width_arcsec = 40 pixel_width_deg = pixel_width_arcsec / 3600. cdelt = (-pixel_width_deg, pixel_width_deg) if crpix is None: crpix = (256.0, 256.0) wcs = WCS() wcs.cdelt = cdelt wcs.crota = (0.0, 0.0) wcs.crpix = crpix wcs.crval = crval wcs.ctype = ('RA---SIN', 'DEC--SIN') wcs.cunit = ('deg', 'deg') return wcs
class SyntheticImage(DataAccessor): def __init__(self, wcs=None, data=None, beam=(1.5,1.5,0), freq_eff=150e6, freq_bw=2e6, tau_time=1800, taustart_ts=datetime.datetime(2015,1,1) ): """ Generate a synthetic image for use in tests Args: wcs (tkp.utility.coordinates.WCS): WCS for the image. data (array_like): Data for the image. Default is a 512x512 array of zeroes. beam (tuple): Beamsemi-major axis (in pixels), semi-minor axis (pixels) and position angle (radians). freq_eff(float): Effective frequency of the image in Hz. That is, the mean frequency of all the visibility data which comprises this image. freq_bw(float): The frequency bandwidth of this image in Hz. tau_time(float): Total time on sky in seconds. taustart_ts(float): Timestamp of the first integration which constitutes part of this image. MJD in seconds. """ self.url = "SyntheticImage" self.wcs = wcs if self.wcs is None: self.wcs = make_wcs() self.data = data if self.data is None: self.data = np.zeros((512,512)) self.beam = beam self.freq_eff = freq_eff self.freq_bw = freq_bw self.tau_time = tau_time self.taustart_ts = taustart_ts self.pixelsize = self.parse_pixelsize() self.centre_ra, self.centre_decl = self.calculate_phase_centre() def calculate_phase_centre(self): x, y = self.data.shape centre_ra, centre_decl = self.wcs.p2s((x / 2, y / 2)) return centre_ra, centre_decl