from __future__ import absolute_import import collections import numpy as np class UVMapGenerator(object): """Class to generate the UV map of the simulated observation. """ def __init__(self, parameters): self.parameters = parameters self.result = collections.OrderedDict() def run(self): print 'UVMapGenerator.run' interferometer = self.parameters['substages']['Interferometer'] # slightly awkward getting pattern value as it's keyed by its # row number in the spreadsheet row = interferometer['Pattern'].keys()[0] pattern = interferometer['Pattern'][row] if pattern.lower() == 'spiral': bmax = interferometer['bmax [m]'][row] bmin = interferometer['bmin [m]'][row] n_baselines = int(interferometer['Num Baselines'][row]) bstep = interferometer['bstep [m]'][row] # baseline increases by bstep for each circuit of spiral n_laps = (bmax - bmin) / bstep bxby = np.zeros([n_baselines,2]) # n_baselines is total number of points along spiral for i in range(n_baselines): # phi is angle around spiral, r its radius phi = n_laps * 2 * np.pi * (n_baselines-i) / n_baselines r = bmin + bstep * phi / (2 * np.pi) bxby[i,:] = [r * np.cos(phi), r * np.sin(phi)] print 'spiral pattern computed' self.result['bxby'] = bxby self.result['bmin'] = bmin self.result['bmax'] = bmax self.result['n_baselines'] = n_baselines else: raise Exception, 'unknown baseline pattern: %s' % pattern return self.result def __repr__(self): return 'UVMapGenerator'