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 |
|
---|