source: trunk/loadparameters.py

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

bug fixes

File size: 8.7 KB
Line 
1from __future__ import absolute_import
2
3import collections
4import os
5import pprint
6import xlrd
7
8
9class LoadParameters:
10 """Class to compute interferograms.
11 """
12
13 def __init__(self, sky_spreadsheet='Sky.xlsx', sky_sheet='1point',
14 instrument_spreadsheet='FIInS_Instrument_cor3.xlsx'):
15 self.result = collections.OrderedDict()
16 self.result['substages'] = collections.OrderedDict()
17
18 # access the relevant sheet of the spreadsheet
19 book = xlrd.open_workbook(sky_spreadsheet)
20 sheet = book.sheet_by_name(sky_sheet)
21
22 sheet_dict = collections.OrderedDict()
23
24 # Sheet has names in col 0, values in columns 1 to n
25 # Ignore row 0.
26
27 # read column names
28 for row in range(1,sheet.nrows):
29 colname = sheet.cell(row, 0)
30 sheet_dict[colname.value] = {}
31 for col in range(1,sheet.ncols):
32 sheet_dict[colname.value][col] = sheet.cell(row,col).value
33
34 self.result['substages']['Sky'] = sheet_dict
35
36 # the instrument spreadsheet
37 instrument_book = xlrd.open_workbook(instrument_spreadsheet)
38 for sheet in instrument_book.sheets():
39
40 if sheet.name == 'FTSpectrograph':
41 sheet_dict = collections.OrderedDict()
42
43 # ignore first row of sheet
44 # second row of sheet has column names
45 name_row = 1
46 # subsequent rows have entries, only one of which is
47 # 'selected'
48 select_col = None
49
50 # read column names
51 for col in range(sheet.ncols):
52 sheet_dict[sheet.cell(name_row,col).value] = \
53 collections.OrderedDict()
54 if 'Selection' in sheet.cell(name_row,col).value:
55 select_col = col
56
57 # sanity check
58 if select_col is None:
59 raise Exception, \
60 'No Selection column in FTSpectrograph spreadsheet'
61
62 # read entries from first 'selected' row
63 for row in range(name_row+1,sheet.nrows):
64 if int(sheet.cell(row,select_col).value) > 0:
65 for col in range(sheet.ncols):
66 sheet_dict[sheet.cell(name_row,col).value][row] = \
67 sheet.cell(row,col).value
68 break
69
70 # resulting dict should contain the entries from the
71 # selected spreadsheet row
72
73 self.result['substages'][sheet.name] = sheet_dict
74
75 elif sheet.name == 'FTSMechanical':
76 sheet_dict = collections.OrderedDict()
77
78 # Sheet has names in col 0, values in col 1.
79 # Ignore row 0.
80 name_col = 0
81 entry_col = 1
82
83 # read column names
84 for row in range(1,sheet.nrows):
85 sheet_dict[sheet.cell(row,name_col).value] = \
86 collections.OrderedDict()
87 sheet_dict[sheet.cell(row,name_col).value][entry_col] = \
88 sheet.cell(row,entry_col).value
89
90 self.result['substages'][sheet.name] = sheet_dict
91
92 elif sheet.name == 'Telescope':
93 sheet_dict = collections.OrderedDict()
94
95 # Sheet has names in col 0, values in col 1, units in col 3.
96 # Ignore rows 0 and 1.
97 name_col = 0
98 entry_col = 1
99
100 # read column names
101 for row in range(2,sheet.nrows):
102 sheet_dict[sheet.cell(row,name_col).value] = \
103 sheet.cell(row,entry_col).value
104
105 self.result['substages'][sheet.name] = sheet_dict
106
107 elif sheet.name == 'Interferometer':
108 sheet_dict = collections.OrderedDict()
109
110 # ignore first 4 rows of sheet
111 # 5th row of sheet has column names
112 name_row = 4
113 # subsequent rows have entries, only one of which is
114 # 'selected'
115 select_col = None
116
117 # read column names
118 for col in range(sheet.ncols):
119 sheet_dict[sheet.cell(name_row,col).value] = \
120 collections.OrderedDict()
121 if 'Select' in sheet.cell(name_row,col).value:
122 select_col = col
123
124 # sanity check
125 if select_col is None:
126 raise Exception, \
127 'No Selection column in Interferometer spreadsheet'
128
129 # read entries from first 'selected' row
130 for row in range(name_row+1,sheet.nrows):
131 select_cell = str(sheet.cell(row,select_col).value)
132 select_val = 0
133 try:
134 select_val = int(float(select_cell))
135 except:
136 pass
137
138 if select_val == 1:
139 for col in range(sheet.ncols):
140 sheet_dict[sheet.cell(name_row,col).value][row] = \
141 sheet.cell(row,col).value
142 break
143
144 # resulting dict should contain the entries from the
145 # selected spreadsheet row
146
147 self.result['substages'][sheet.name] = sheet_dict
148
149 elif sheet.name == 'ColdOptics':
150 sheet_dict = collections.OrderedDict()
151
152 # Sheet has names in col 0, values in col 1.
153 # Ignore rows 0 and 1 and final row.
154 # Ignore cols 2 and higher - duplicate information.
155 name_col = 0
156 entry_col = 1
157
158 # read column names
159 for row in range(2,sheet.nrows-1):
160 sheet_dict[sheet.cell(row,name_col).value] = \
161 collections.OrderedDict()
162 sheet_dict[sheet.cell(row,name_col).value][entry_col] = \
163 sheet.cell(row,entry_col).value
164
165 self.result['substages'][sheet.name] = sheet_dict
166
167 elif sheet.name == 'Background':
168 sheet_dict = collections.OrderedDict()
169
170 # Sheet has names in col 0, values in col 1.
171 # Ignore rows 0 and 1.
172 name_col = 0
173 entry_col = 1
174
175 for row in range(2,sheet.nrows):
176 sheet_dict[sheet.cell(row,name_col).value] = \
177 collections.OrderedDict()
178 sheet_dict[sheet.cell(row,name_col).value][entry_col] = \
179 sheet.cell(row,entry_col).value
180
181 self.result['substages'][sheet.name] = sheet_dict
182
183 elif sheet.name == 'WarmOptics':
184 sheet_dict = collections.OrderedDict()
185
186 # Sheet has names in col 0, values in col 1.
187 # Ignore rows 0 and 1.
188 name_col = 0
189 entry_col = 1
190
191 for row in range(2,sheet.nrows):
192 sheet_dict[sheet.cell(row,name_col).value] = \
193 collections.OrderedDict()
194 sheet_dict[sheet.cell(row,name_col).value][entry_col] = \
195 sheet.cell(row,entry_col).value
196
197 self.result['substages'][sheet.name] = sheet_dict
198
199 elif sheet.name == 'Detectors':
200 sheet_dict = collections.OrderedDict()
201
202 # Sheet has names in col 0, values in col 1.
203 # Ignore rows 0 and 1.
204 name_col = 0
205 entry_col = 1
206
207 for row in range(2,sheet.nrows):
208 sheet_dict[sheet.cell(row,name_col).value] = \
209 collections.OrderedDict()
210 sheet_dict[sheet.cell(row,name_col).value][entry_col] = \
211 sheet.cell(row,entry_col).value
212
213 self.result['substages'][sheet.name] = sheet_dict
214
215 elif sheet.name == 'SimulatorControl':
216 sheet_dict = collections.OrderedDict()
217
218 # Sheet has names in col 0, values in col 1.
219 # Ignore row 0.
220 name_col = 0
221 entry_col = 1
222
223 for row in range(1,sheet.nrows):
224 sheet_dict[sheet.cell(row,name_col).value] = \
225 collections.OrderedDict()
226 sheet_dict[sheet.cell(row,name_col).value][entry_col] = \
227 sheet.cell(row,entry_col).value
228
229 self.result['substages'][sheet.name] = sheet_dict
230
231 else:
232 print 'loadparameters skipping', sheet.name
233
234 def run(self):
235 return self.result
Note: See TracBrowser for help on using the repository browser.