diff --git a/aosstower/level_b1/daily/nc.py b/aosstower/level_b1/daily/nc.py index d965cd085a930baf9dc0b567eaff7c190159f68d..ebaa26536595e6b2b600c51fda96456bd1de1144 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))]