#!/usr/bin/python """ Module to handle sodar data samples as arrays. """ __author__ = 'Chris Calloway' __email__ = 'cbc@unc.edu' __copyright__ = 'Copyright 2007 UNC-CH Department of Marine Science' __license__ = 'GPL2' import rawData import formattedData import numpy as n import datetime class ArrayData(object): """Class to handle Daily sodar file data as arrays.""" def __init__(self, data): """Create arrays from formatted data.""" super(ArrayData, self).__init__() self.beginStamp = data.beginStamp self.endStamp = data.endStamp self.numIntervals = data.numIntervals self.timeInterval = data.timeInterval self.altInterval = data.altInterval self.numAltitudes = data.numAltitudes self.minAltitude = data.minAltitude self.maxAltitude = data.maxAltitude self._thetas(data) self._uComponents(data) self._vComponents(data) self._wComponents(data) self._echoStrengths(data) def _thetas(self, data): """Convert direction to polar azimuth in radians CW from North""" self.thetas = n.pi * (n.array(data.thetas()) / 180.0) def _uComponents(self,data): """Compute u component array""" self.uComponents = n.array(data.radials()) * n.sin(self.thetas) def _vComponents(self,data): """Compute v component array""" self.vComponents = n.array(data.radials()) * n.cos(self.thetas) def _wComponents(self,data): """Create w component array""" self.wComponents = n.array(data.wComponents()) def _echoStrengths(self,data): """Create an echo strength array""" self.echoStrengths = n.array(data.echoStrengths()) def _main(): """Process as script from command line.""" import urllib2 try: rawDataHandle = urllib2.urlopen('http://nemo.isis.unc.edu/'\ 'data/nccoos/level0/ims/sodar/'\ '2008_01/20080101.dat') rawDataString = rawDataHandle.read() rawDataHandle.close() except: raise IOError("Failure to read raw test data") rawDataObject = rawData.RawData(rawDataString) formattedDataObject = formattedData.FormattedData(rawDataObject) arrayDataObject = ArrayData(formattedDataObject) import pylab as p home = '/var/www/html/sodar/plots/' fig = p.figure() p.pcolor(arrayDataObject.uComponents.T) p.colorbar() fig.savefig(home + 'uComponents.png') fig = p.figure() p.pcolor(arrayDataObject.vComponents.T) p.colorbar() fig.savefig(home + 'vComponents.png') fig = p.figure() p.pcolor(arrayDataObject.wComponents.T) p.colorbar() fig.savefig(home + 'wComponents.png') fig = p.figure() p.pcolor(arrayDataObject.echoStrengths.T) p.colorbar() fig.savefig(home + 'echoStrengths.png') fig = p.figure() p.quiver(arrayDataObject.uComponents, arrayDataObject.vComponents, arrayDataObject.wComponents) p.colorbar() xmin,xmax,ymin,ymax = p.axis() dx,dy = xmax-xmin, ymax-ymin p.axis([xmin-0.1*dx, xmax+0.1*dx, ymin-0.1*dy, ymax+0.1*dy]) p.title('Horizontal wind vectors: time vs. altitude') fig.savefig(home + 'quiver.png') if __name__ == "__main__": _main()