source: trunk/uvmapgenerator.py

Last change on this file was 63, checked in by JohnLightfoot, 10 years ago

almost working

File size: 4.7 KB
Line 
1from __future__ import absolute_import
2
3import collections
4import numpy as np
5
6import pointingerrorgenerators
7
8
9class UVMapGenerator(object):
10 """Class to generate the UV map of the simulated observation.
11 """
12
13 def __init__(self, parameters, previous_results):
14 self.parameters = parameters
15 self.previous_results = previous_results
16 self.result = collections.OrderedDict()
17
18 def run(self):
19 print 'UVMapGenerator.run'
20
21 # The FTS mirror positions per scan. This is found from the
22 # FTS results that should have already been calculated.
23 fts = self.previous_results['fts']
24 self.result['ftsnsample'] = ftsnsample = fts['ftsnsample']
25 delta_opd = fts['delta_opd']
26
27 interferometer = self.parameters['substages']['Interferometer']
28
29 # slightly awkward getting pattern value as it's keyed by its
30 # row number in the spreadsheet
31 row = interferometer['Pattern'].keys()[0]
32 pattern = interferometer['Pattern'][row]
33
34 if pattern.lower() == 'spiral':
35 bmax = interferometer['bmax [m]'][row]
36 bmin = interferometer['bmin [m]'][row]
37 n_baselines = int(interferometer['Num Baselines'][row])
38 bstep = interferometer['bstep [m]'][row]
39
40 # baseline increases by bstep for each circuit of spiral
41 n_laps = (bmax - bmin) / bstep
42
43# n_baselines = 50
44 bxby = np.zeros([n_baselines,2])
45# bxby[0,0] = 10.0
46# bxby[0,1] = 0.0
47# bxby[1,0] = 20.0
48# bxby[1,1] = 0.0
49# bxby[2,0] = 30.0
50# bxby[2,1] = 0.0
51# bxby[3,0] = 40.0
52# bxby[3,1] = 0.0
53# bxby[4,0] = 0.0
54# bxby[4,1] = 10.0
55# bxby[5,0] = 0.0
56# bxby[5,1] = 20.0
57# bxby[6,0] = 0.0
58# bxby[6,1] = 30.0
59# bxby[7,0] = 0.0
60# bxby[7,1] = 40.0
61# bxby[8,0] = 40.0
62# bxby[8,1] = 40.0
63# bxby[9,0] = 20.0
64# bxby[9,1] = 20.0
65# bxby[10,0] = 30.0
66# bxby[10,1] = 30.0
67
68
69 # n_baselines is total number of points along spiral
70 for ib in range(n_baselines):
71 # phi is angle around spiral, r its radius
72 phi = n_laps * 2 * np.pi * (n_baselines-ib) / n_baselines
73 r = bmin + bstep * phi / (2 * np.pi)
74
75 bxby[ib,:] = [r * np.cos(phi), r * np.sin(phi)]
76
77 self.result['pattern'] = pattern
78 self.result['bxby'] = bxby
79 self.result['bmin'] = bmin
80 self.result['bmax'] = bmax
81 self.result['n_baselines'] = n_baselines
82
83 # Construct the obs framework that will give one FTS
84 # scan at each baseline.
85
86 # The framework will hold the baseline and FTS mirror position
87 # for each time that the detector is read.
88
89 # The observation consists of a series of FTS scans. The
90 # instrument baseline, pointing etc. can change continuously
91 # as the scan is performed.
92
93 obs_framework = []
94 Config = collections.namedtuple('Config', [
95 'scan_number',
96 'baseline_x', 'baseline_y', 'baseline_z', 'baseline_number',
97 'fts_position', 'fts_nominal_position', 'fts_start',
98 'point1_x_error', 'point1_y_error',
99 'point2_x_error', 'point2_y_error',
100 'data'],
101 verbose=False)
102
103 for ib in range(n_baselines):
104 opd_start = -((ftsnsample + 1) / 2) * delta_opd
105
106 fts_start = True
107 for ifts in np.arange(ftsnsample):
108 opd = opd_start + float(ifts) * delta_opd
109 fts_mirror = opd / 2.0
110 config = Config(ib, bxby[ib][0], bxby[ib][1], 0.0, ib,
111 fts_mirror, fts_mirror, fts_start, 0.0, 0.0, 0.0,
112 0.0, None)
113 obs_framework.append(config)
114 fts_start = False
115
116 png = pointingerrorgenerators.GaussianPointingErrors(mu0=1.0,
117 sigma0=0.0, mu1=0.0, sigma1=0.0)
118 png.fill(obs_framework)
119
120 self.result['obs_framework'] = obs_framework
121
122 else:
123 raise Exception, 'unknown baseline pattern: %s' % pattern
124
125 return self.result
126
127 def __repr__(self):
128 return '''
129UVMapGenerator:
130 uv pattern : {pattern}
131 FTS samples/scan: {ftsnsample}
132 obs.framework length: {len_framework}
133'''.format(
134 pattern=self.result['pattern'],
135 ftsnsample=self.result['ftsnsample'],
136 len_framework=len(self.result['obs_framework']))
137
138
Note: See TracBrowser for help on using the repository browser.