[4] | 1 | from __future__ import absolute_import
|
---|
| 2 |
|
---|
| 3 | import collections
|
---|
| 4 | import numpy as np
|
---|
| 5 |
|
---|
| 6 |
|
---|
| 7 | class UVMapGenerator(object):
|
---|
| 8 | """Class to generate the UV map of the simulated observation.
|
---|
| 9 | """
|
---|
| 10 |
|
---|
| 11 | def __init__(self, parameters):
|
---|
| 12 | self.parameters = parameters
|
---|
| 13 | self.result = collections.OrderedDict()
|
---|
| 14 |
|
---|
| 15 | def run(self):
|
---|
| 16 | print 'UVMapGenerator.run'
|
---|
| 17 | interferometer = self.parameters['substages']['Interferometer']
|
---|
| 18 |
|
---|
| 19 | # slightly awkward getting pattern value as it's keyed by its
|
---|
| 20 | # row number in the spreadsheet
|
---|
| 21 | row = interferometer['Pattern'].keys()[0]
|
---|
| 22 | pattern = interferometer['Pattern'][row]
|
---|
| 23 |
|
---|
| 24 | if pattern.lower() == 'spiral':
|
---|
| 25 | bmax = interferometer['bmax [m]'][row]
|
---|
| 26 | bmin = interferometer['bmin [m]'][row]
|
---|
| 27 | n_baselines = int(interferometer['Num Baselines'][row])
|
---|
| 28 | bstep = interferometer['bstep [m]'][row]
|
---|
| 29 |
|
---|
| 30 | # baseline increases by bstep for each circuit of spiral
|
---|
| 31 | n_laps = (bmax - bmin) / bstep
|
---|
| 32 |
|
---|
| 33 | bxby = np.zeros([n_baselines,2])
|
---|
| 34 |
|
---|
| 35 | # n_baselines is total number of points along spiral
|
---|
| 36 | for i in range(n_baselines):
|
---|
| 37 | # phi is angle around spiral, r its radius
|
---|
| 38 | phi = n_laps * 2 * np.pi * (n_baselines-i) / n_baselines
|
---|
| 39 | r = bmin + bstep * phi / (2 * np.pi)
|
---|
| 40 |
|
---|
| 41 | bxby[i,:] = [r * np.cos(phi), r * np.sin(phi)]
|
---|
| 42 |
|
---|
| 43 | print 'spiral pattern computed'
|
---|
| 44 | self.result['bxby'] = bxby
|
---|
| 45 | self.result['bmin'] = bmin
|
---|
| 46 | self.result['bmax'] = bmax
|
---|
| 47 | self.result['n_baselines'] = n_baselines
|
---|
| 48 |
|
---|
| 49 | else:
|
---|
| 50 | raise Exception, 'unknown baseline pattern: %s' % pattern
|
---|
| 51 |
|
---|
| 52 | return self.result
|
---|
| 53 |
|
---|
| 54 | def __repr__(self):
|
---|
| 55 | return 'UVMapGenerator'
|
---|
| 56 |
|
---|