#!/usr/bin/env python """ Module to handle Scintec sodar .mnd files. """ import os class MainData(object): """ Class to parse Scintec sodar .mnd files. Parse a string containing the contents of an mnd file. >>> main_data = MainData(_testSetUp('good','091117.mnd')) >>> main_data.format 'FORMAT-1' >>> main_data.date '2009-11-17' >>> main_data.start_time '00:30:00' >>> main_data.file_count 0 >>> main_data.instrument_type 'SFAS' >>> main_data.comment_count 6 >>> main_data.variable_count 6 >>> main_data.height_count 39 >>> for k in main_data.comments.keys(): ... assert k in ['device serial number', ... 'station code', ... 'software version', ... 'antenna azimuth angle [deg]', ... 'height above ground [m]', ... 'height above sea level [m]'] ... >>> main_data.comments['device serial number'] 'A-F-0050' >>> main_data.comments['station code'] 'billymitchell' >>> main_data.comments['software version'] 'APRun 1.31' >>> main_data.comments['antenna azimuth angle [deg]'] 0.0 >>> main_data.comments['height above ground [m]'] 0.0 >>> main_data.comments['height above sea level [m]'] 0.0 >>> main_data.device_serial_number 'A-F-0050' >>> main_data.station_code 'billymitchell' >>> main_data.software_version 'APRun 1.31' >>> main_data.antenna_azimuth_angle.value 0.0 >>> main_data.antenna_azimuth_angle.units 'deg' >>> main_data.height above ground.value 0 >>> main_data.height above ground.units 'm' >>> main_data.height_about_sea_level.value 0.0 >>> main_data.height_about_sea_level.units 'm' >>> [variable.label for variable in main_data.variables] ['height', 'wind speed', 'wind direction', 'wind W', 'sigma W', 'backscatter'] >>> [variable.symbol for variable in main_data.variables] ['z', 'speed', 'dir', 'W', 'sigW', 'bck'] >>> [variable.units for variable in main_data.variables] ['m', 'm/s', 'deg', 'm/s', 'm/s', ''] >>> [variable.vartype for variable in main_data.variables] ['Z1', 'G1', 'R1', 'S', 'S', 'S'] >>> [variable.mask for variable in main_data.variables] ['0', '0', '0', '0', '0', '0'] >>> [variable.gap for variable in main_data.variables] ['99999', '99.99', '999.9', '99.99'. '99.99', '9.99E+37'] >>> main_data.error_label 'error code' >>> main_data.error_bit_labels '- - - - - - - - groundclutter - - - - - - -' >>> main_data.error_mask 'IIIIIIIIWIIIIIII' >>> len(main_data.profiles) 48 >>> len(main_data.profiles[0]) 39 >>> main_data.profiles[0].date '2009-11-17' >>> main_data.profiles[-1].date '2009-11-18' >>> main_data.profiles[0].end_time '00:30:00' >>> main_data.profiles[-1].end_time '00:00:00' >>> main_data.profiles[0].duration '00:30:00' >>> main_data.profiles[0].variables ['z', 'speed', 'dir', 'W', 'sigW', 'bck', 'error'] >>> main_data.profiles[0][0]['z'] 10.0 >>> main_data.profiles[1][1]['speed'] 2.65 >>> main_data.profiles[2][2]['dir'] 40.9 >>> main_data.profiles[3][3]['W'] -0.03 >>> main_data.profiles[4][4]['sigW'] 0.34 >>> main_data.profiles[5][5]['bck'] 2.25E+04 >>> main_data.profiles[6][6]['error'] 0 """ def _testSetUp(mnd_dir,mnd_file): current_dir = os.path.abspath(os.path.dirname(__file__)) package_dir = os.path.split(current_dir)[0] data_dir = os.path.join(package_dir,'tests','data') good_dir = os.path.join(data_dir,mnd_dir) mnd_file = os.path.join(good_dir,mnd_file) mnd = open(mnd_file).read() return mnd def _test(): import doctest doctest.testmod() if __name__ == "__main__": _test()