NCCOOS Trac Projects: Top | Web | Platforms | Processing | Viz | Sprints | Sandbox | (Wind)

root/sodar/branches/scintec-branch/sodar/scintec/maindata.py

Revision 240 (checked in by cbc, 14 years ago)

Add doctests for maindata.py.

Line 
1 #!/usr/bin/env python
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()
Note: See TracBrowser for help on using the browser.