From 74caa8900d244a15aaae914ce2b5910b9cd5959c Mon Sep 17 00:00:00 2001 From: kgao <kenny.gao@ssec.wisc.edu> Date: Mon, 22 Aug 2016 22:15:39 +0000 Subject: [PATCH] wind_direction wasn't being calculated correctly --- aosstower/level_b1/daily/nc.py | 49 +++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/aosstower/level_b1/daily/nc.py b/aosstower/level_b1/daily/nc.py index d965cd0..ebaa265 100644 --- a/aosstower/level_b1/daily/nc.py +++ b/aosstower/level_b1/daily/nc.py @@ -9,6 +9,7 @@ import numpy as np import platform from aosstower import station from datetime import timedelta as delta +import calc LOG = logging.getLogger(__name__) @@ -111,6 +112,9 @@ def createVariables(ncFile, firstStamp, chunksizes, zlib): if key == 'base_time': variable.string = bts + if 'time' in key: + variable.calendar = 'gregorian' + for entry in parser.database: if(entry == 'stamp'): continue @@ -196,11 +200,30 @@ def getRolling(series, minutes): return returnSeries +def getNewWindDirection(wind_dir, wind_speed, stamps): + newWindDir = {} + + for stamp in stamps: + before = stamp - delta(minutes=1) + + if before not in wind_speed.index: + newWindDir[stamp] = None + + else: + speed = wind_speed[before: stamp].tolist() + dire = wind_dir[before: stamp].tolist() + + wind_dire = calc.mean_wind_vector(speed, dire)[0] + + newWindDir[stamp] = wind_dire + + return pd.Series(newWindDir) + def minuteAverages(frame): frame['minute'] = [(ts + delta(minutes=1)).replace(second=0) for ts in frame.index] newFrame = frame.groupby('minute').mean() newFrame.index.names = [''] - + columns = list(newFrame.columns.values) if 'wind_speed' in columns: del newFrame['wind_speed'] @@ -223,14 +246,20 @@ def minuteAverages(frame): newFrame['gust'] = gust - if 'wind_direction' in columns: - del newFrame['wind_direction'] + if 'wind_dir' in columns: + del newFrame['wind_dir'] + + dupFrame = frame.set_index('minute') + + stamps = newFrame.index - windDirSeries = frame['wind_direction'] + windDirSeries = dupFrame['wind_dir'] - windDirSeries = getRolling(windDirSeries, list(newFrame.index)) + windSeries = dupFrame['wind_speed'] - newFrame['wind_direction'] = windDirSeries + windDirSeries = getNewWindDirection(windDirSeries, windSeries, stamps) + + newFrame['wind_dir'] = windDirSeries del frame['minute'] @@ -348,15 +377,15 @@ def createGiantNetCDF(start, end, inputFiles, outputName, zlib, chunkSize): frame = getData(inputFiles) - frame = minuteAverages(frame) - if(frame.empty): return False - + else: + + frame = minuteAverages(frame) + if(start and end): frame = frame[start.strftime('%Y-%m-%d %H:%M:%S'): end.strftime('%Y-%m-%d %H:%M:%S')] - print(frame) if(default): chunksizes = [len(list(frame.index))] -- GitLab