1 |
|
---|
2 |
""" |
---|
3 |
Module to handle Scintec sodar .mnd files. |
---|
4 |
""" |
---|
5 |
|
---|
6 |
import os |
---|
7 |
|
---|
8 |
class MainData(object): |
---|
9 |
""" |
---|
10 |
Class to parse Scintec sodar .mnd files. |
---|
11 |
|
---|
12 |
Parse a string containing the contents of an mnd file. |
---|
13 |
|
---|
14 |
>>> main_data = MainData(_testSetUp('good','091117.mnd')) |
---|
15 |
>>> main_data.format |
---|
16 |
'FORMAT-1' |
---|
17 |
>>> main_data.date |
---|
18 |
'2009-11-17' |
---|
19 |
>>> main_data.start_time |
---|
20 |
'00:30:00' |
---|
21 |
>>> main_data.file_count |
---|
22 |
0 |
---|
23 |
>>> main_data.instrument_type |
---|
24 |
'SFAS' |
---|
25 |
>>> main_data.comment_count |
---|
26 |
6 |
---|
27 |
>>> main_data.variable_count |
---|
28 |
6 |
---|
29 |
>>> main_data.height_count |
---|
30 |
39 |
---|
31 |
>>> for k in main_data.comments.keys(): |
---|
32 |
... assert k in ['device serial number', |
---|
33 |
... 'station code', |
---|
34 |
... 'software version', |
---|
35 |
... 'antenna azimuth angle [deg]', |
---|
36 |
... 'height above ground [m]', |
---|
37 |
... 'height above sea level [m]'] |
---|
38 |
... |
---|
39 |
>>> main_data.comments['device serial number'] |
---|
40 |
'A-F-0050' |
---|
41 |
>>> main_data.comments['station code'] |
---|
42 |
'billymitchell' |
---|
43 |
>>> main_data.comments['software version'] |
---|
44 |
'APRun 1.31' |
---|
45 |
>>> main_data.comments['antenna azimuth angle [deg]'] |
---|
46 |
0.0 |
---|
47 |
>>> main_data.comments['height above ground [m]'] |
---|
48 |
0.0 |
---|
49 |
>>> main_data.comments['height above sea level [m]'] |
---|
50 |
0.0 |
---|
51 |
>>> main_data.device_serial_number |
---|
52 |
'A-F-0050' |
---|
53 |
>>> main_data.station_code |
---|
54 |
'billymitchell' |
---|
55 |
>>> main_data.software_version |
---|
56 |
'APRun 1.31' |
---|
57 |
>>> main_data.antenna_azimuth_angle.value |
---|
58 |
0.0 |
---|
59 |
>>> main_data.antenna_azimuth_angle.units |
---|
60 |
'deg' |
---|
61 |
>>> main_data.height above ground.value |
---|
62 |
0 |
---|
63 |
>>> main_data.height above ground.units |
---|
64 |
'm' |
---|
65 |
>>> main_data.height_about_sea_level.value |
---|
66 |
0.0 |
---|
67 |
>>> main_data.height_about_sea_level.units |
---|
68 |
'm' |
---|
69 |
>>> [variable.label for variable in main_data.variables] |
---|
70 |
['height', 'wind speed', 'wind direction', |
---|
71 |
'wind W', 'sigma W', 'backscatter'] |
---|
72 |
>>> [variable.symbol for variable in main_data.variables] |
---|
73 |
['z', 'speed', 'dir', 'W', 'sigW', 'bck'] |
---|
74 |
>>> [variable.units for variable in main_data.variables] |
---|
75 |
['m', 'm/s', 'deg', 'm/s', 'm/s', ''] |
---|
76 |
>>> [variable.vartype for variable in main_data.variables] |
---|
77 |
['Z1', 'G1', 'R1', 'S', 'S', 'S'] |
---|
78 |
>>> [variable.mask for variable in main_data.variables] |
---|
79 |
['0', '0', '0', '0', '0', '0'] |
---|
80 |
>>> [variable.gap for variable in main_data.variables] |
---|
81 |
['99999', '99.99', '999.9', '99.99'. '99.99', '9.99E+37'] |
---|
82 |
>>> main_data.error_label |
---|
83 |
'error code' |
---|
84 |
>>> main_data.error_bit_labels |
---|
85 |
'- - - - - - - - groundclutter - - - - - - -' |
---|
86 |
>>> main_data.error_mask |
---|
87 |
'IIIIIIIIWIIIIIII' |
---|
88 |
>>> len(main_data.profiles) |
---|
89 |
48 |
---|
90 |
>>> len(main_data.profiles[0]) |
---|
91 |
39 |
---|
92 |
>>> main_data.profiles[0].date |
---|
93 |
'2009-11-17' |
---|
94 |
>>> main_data.profiles[-1].date |
---|
95 |
'2009-11-18' |
---|
96 |
>>> main_data.profiles[0].end_time |
---|
97 |
'00:30:00' |
---|
98 |
>>> main_data.profiles[-1].end_time |
---|
99 |
'00:00:00' |
---|
100 |
>>> main_data.profiles[0].duration |
---|
101 |
'00:30:00' |
---|
102 |
>>> main_data.profiles[0].variables |
---|
103 |
['z', 'speed', 'dir', 'W', 'sigW', 'bck', 'error'] |
---|
104 |
>>> main_data.profiles[0][0]['z'] |
---|
105 |
10.0 |
---|
106 |
>>> main_data.profiles[1][1]['speed'] |
---|
107 |
2.65 |
---|
108 |
>>> main_data.profiles[2][2]['dir'] |
---|
109 |
40.9 |
---|
110 |
>>> main_data.profiles[3][3]['W'] |
---|
111 |
-0.03 |
---|
112 |
>>> main_data.profiles[4][4]['sigW'] |
---|
113 |
0.34 |
---|
114 |
>>> main_data.profiles[5][5]['bck'] |
---|
115 |
2.25E+04 |
---|
116 |
>>> main_data.profiles[6][6]['error'] |
---|
117 |
0 |
---|
118 |
""" |
---|
119 |
|
---|
120 |
def _testSetUp(mnd_dir,mnd_file): |
---|
121 |
current_dir = os.path.abspath(os.path.dirname(__file__)) |
---|
122 |
package_dir = os.path.split(current_dir)[0] |
---|
123 |
data_dir = os.path.join(package_dir,'tests','data') |
---|
124 |
good_dir = os.path.join(data_dir,mnd_dir) |
---|
125 |
mnd_file = os.path.join(good_dir,mnd_file) |
---|
126 |
mnd = open(mnd_file).read() |
---|
127 |
return mnd |
---|
128 |
|
---|
129 |
def _test(): |
---|
130 |
import doctest |
---|
131 |
doctest.testmod() |
---|
132 |
|
---|
133 |
if __name__ == "__main__": |
---|
134 |
_test() |
---|