Index: sodar/trunk/sodar/arrayData.py =================================================================== --- sodar/trunk/sodar/arrayData.py (revision 79) +++ sodar/trunk/sodar/arrayData.py (revision 80) @@ -26,13 +26,24 @@ self.minAltitude = data.minAltitude self.maxAltitude = data.maxAltitude - self._azimuth(data) + self._thetas(data) + self._uComponents(data) + self._vComponents(data) + self._wComponents(data) - def _azimuth(self, data): + def _thetas(self, data): """Convert direction to polar azimuth in radians CW from North""" - self.azimuth = n.array([[altitude['DIR'] - for altitude - in sample['body']] - for sample in data]) - self.azimuth = n.pi * (self.azimuth / 180) + self.thetas = n.pi * (n.array(data.thetas()) / 180) + + def _uComponents(self,data): + """Compute u component array""" + self.uComponents = n.array(data.radials()) * n.cos(self.thetas) + + def _vComponents(self,data): + """Compute v component array""" + self.vComponents = n.array(data.radials()) * n.sin(self.thetas) + + def _wComponents(self,data): + """Create w component array""" + self.wComponents = n.array(data.wComponents()) @@ -50,5 +61,8 @@ formattedDataObject = formattedData.FormattedData(rawDataObject) arrayDataObject = ArrayData(formattedDataObject) - print arrayDataObject.azimuth + print arrayDataObject.thetas + print arrayDataObject.uComponents + print arrayDataObject.vComponents + print arrayDataObject.wComponents if __name__ == "__main__": Index: sodar/trunk/sodar/formattedData.py =================================================================== --- sodar/trunk/sodar/formattedData.py (revision 78) +++ sodar/trunk/sodar/formattedData.py (revision 80) @@ -34,8 +34,4 @@ super(FormattedData, self).__init__() self.extend([sample.data() for sample in data]) - self._format() - - def _format(self): - """Format raw sodar daily data.""" self._convert() self._stamp() @@ -45,12 +41,4 @@ self._numAltitudes() self._altInterval() - # correct for missing times - # correct for missing altitudes - # mark maximum altitude with good values for each sample - # mark minimum altitude with invalid values for each sample - # convert direction to radians - # compute u,v,c components - # compute colorspecs - # compute plotting parameters def _convert(self): @@ -111,4 +99,25 @@ self.altInterval = (self.maxAltitude - self.minAltitude) / \ (self.numAltitudes - 1) + + def thetas(self): + """Create a list of lists of horizontal directional data.""" + return [[altitude['DIR'] + for altitude + in sample['body']] + for sample in self] + + def radials(self): + """Create a list of lists of horizontal radial velocity data.""" + return [[altitude['SPEED'] + for altitude + in sample['body']] + for sample in self] + + def wComponents(self): + """Create a list of lists of vertical velocity data.""" + return [[altitude['W'] + for altitude + in sample['body']] + for sample in self] Index: sodar/trunk/sodar/rawData.py =================================================================== --- sodar/trunk/sodar/rawData.py (revision 78) +++ sodar/trunk/sodar/rawData.py (revision 80) @@ -173,5 +173,5 @@ def data(self): - """Create a shallow copy of the data as a dictionary.""" + """Create a deep/shallow copy of the data as a dictionary.""" return self.copy()