source: trunk/uvspectra.py

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

almost working

File size: 3.2 KB
Line 
1from __future__ import absolute_import
2
3import collections
4import math
5import numpy as np
6import pp
7
8import common.commonobjects as co
9
10
11class UVspectra(object):
12 """Class to compute spectra from each interferogram.
13 """
14
15 def __init__(self, previous_results, job_server):
16 self.previous_results = previous_results
17 self.job_server = job_server
18
19 self.uvspectra = []
20 self.result = collections.OrderedDict()
21
22 def run(self):
23 print 'Uvspectra.run'
24
25 # get observation list
26 observe = self.previous_results['observe']
27 obs_framework = observe['observed_framework']
28
29 # and calculate the result for each configuration
30 UVspectrum = collections.namedtuple('uvspectrum', [
31 'scan_number',
32 'baseline_x', 'baseline_y', 'baseline_z', 'baseline_number',
33 'interferogram', 'mirror_position', 'spectrum', 'wavenumber'],
34 verbose=False)
35
36 fts_position = []
37 fts_data = []
38
39 for config in obs_framework:
40 if config.fts_start:
41 if fts_data:
42 # reduce previous scan - assume symmetric -tau to +tau, so first
43 # shift 0 freq from centre of scan
44 temp = np.fft.fftshift(fts_data)
45 # spectrum is complex
46 spectrum = np.fft.fft(temp)
47 wavenumber = np.fft.fftfreq(n=spectrum.size,
48 d=2.0 * abs(fts_position[1] - fts_position[0])) / 100.0
49
50 # save it
51 uvspectrum = UVspectrum(config.scan_number,
52 baseline[0],
53 baseline[1],
54 0.0,
55 config.baseline_number,
56 np.array(fts_data),
57 np.array(fts_position),
58 spectrum,
59 wavenumber)
60
61 self.uvspectra.append(uvspectrum)
62
63 # start new scan
64 fts_position = [config.fts_nominal_position]
65 fts_data = [config.data]
66
67 else:
68
69 # add points to current scan
70 fts_position.append(config.fts_nominal_position)
71 fts_data.append(config.data)
72 baseline = (config.baseline_x, config.baseline_y)
73
74 # deal with last scan
75 if fts_data:
76 temp = np.fft.fftshift(fts_data)
77 spectrum = np.fft.fft(temp)
78 wavenumber = np.fft.fftfreq(n=spectrum.size,
79 d=2.0 * abs(fts_position[1] - fts_position[0])) / 100.0
80
81 uvspectrum = UVspectrum(config.scan_number,
82 baseline[0],
83 baseline[1],
84 0.0,
85 config.baseline_number,
86 np.array(fts_data),
87 np.array(fts_position),
88 spectrum,
89 wavenumber)
90
91 self.uvspectra.append(uvspectrum)
92
93 self.result['uvspectra'] = self.uvspectra
94 return self.result
95
96 def __repr__(self):
97 return '''
98UVspectra:
99 #uvspectra : {num_uvspectra}
100'''.format(
101 num_uvspectra=len(self.uvspectra))
102
Note: See TracBrowser for help on using the repository browser.