FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

GitHub Viewer

#!/usr/bin/env python3 import matplotlib as mpl mpl.use('Agg') import matplotlib.pyplot as plt import numpy as np import re import argparse import datetime as dt # ---------------------------------------------------------------------- # Function to parse input arguments # ---------------------------------------------------------------------- def get_args_timeline(): parser = argparse.ArgumentParser(description = 'Post process and move model results') parser.add_argument('-plotfile', help = 'output file for plot', default = 'timeline.png') parser.add_argument('-vars', help = 'var(s) to plot (e.g. -vars 0 or -vars 0 1 2', default = [0], nargs = '+', type = int) parser.add_argument('filelist', nargs='+', \ help = 'list files to use for generating plots') args = parser.parse_args() return args # ---------------------------------------------------------------------- # Read space seperated file with header containing variable names # ---------------------------------------------------------------------- def read_ssv_file(file): data = {"times" : [], 'vars': [], 'alt' : 0.0, "integral" : 'values', "file": file} fpin = open(file, 'r') lines = fpin.readlines() fpin.close() vars = lines[0].split(' ') if (vars[6] == 'milli'): iOff = 7 else: iOff = 6 data['vars'] = vars[iOff:] nVars = len(data['vars']) iStart = 1 iEnd = len(lines) iLine = iStart allValues = np.zeros((nVars, iEnd - iStart)) while (iLine < iEnd): aline = lines[iLine].split(' ') if ((len(aline) - iOff) == nVars): year = int(aline[0]) month = int(aline[1]) day = int(aline[2]) hour = int(aline[3]) minute = int(aline[4]) second = int(aline[5]) if (iOff == 6): milli = 0 else: milli = int(aline[6]) t = dt.datetime(year, month, day, hour, minute, second, milli) data["times"].append(t) for iVar in range(nVars): allValues[iVar, iLine - iStart] = float(aline[iOff + iVar]) iLine += 1 data['values'] = allValues return data # ---------------------------------------------------------------------- # Read file # ---------------------------------------------------------------------- def read_timeline_file(file): data = {"times" : [], 'vars': [], 'alt' : 0.0, "integral" : 'values', "file": file} fpin = open(file, 'r') lines = fpin.readlines() iStart = 0 iEnd = len(lines) iLine = iStart while (iLine < iEnd): line = lines[iLine] m = re.match(r'#VAR',line) if m: # skip year, month, day, hour, minute, second: if (lines[iLine+1].strip().lower() == 'year'): iLine += 7 else: iLine += 1 while (len(lines[iLine].strip()) > 1): data["vars"].append(lines[iLine].strip()) iLine += 1 data['var'] = data["vars"][0] m = re.match(r'#INTEGRAL',line) if m: iLine += 1 data["integral"] = lines[iLine].strip() m = re.match(r'#ALTITUDE',line) if m: iLine += 1 data["alt"] = float(lines[iLine].strip()) m = re.match(r'#DIRECTORY',line) if m: iLine += 1 data["dir"] = lines[iLine].strip() m = re.match(r'#START',line) if m: iStart = iLine + 1 break iLine += 1 nVars = len(data['vars']) nTimes = iEnd - iStart allValues = np.zeros([nVars, nTimes]) for i in range(iStart, iEnd): aline = lines[i].split() year = int(aline[0]) month = int(aline[1]) day = int(aline[2]) hour = int(aline[3]) minute = int(aline[4]) second = int(aline[5]) t = dt.datetime(year, month, day, hour, minute, second) data["times"].append(t) for iVar in range(nVars): allValues[iVar, i - iStart] = float(aline[6 + iVar]) data['values'] = allValues return data # ---------------------------------------------------------------------- # match filename with colors and linestyles # ---------------------------------------------------------------------- def assign_var_to_color(var): color = 'black' line = 'solid' label = file m = re.match('.*GOCE.*', var) if m: color = 'black' line = 'solid' label = 'GOCE' m = re.match('.*GITM.*', var) if m: color = 'blue' line = 'solid' label = 'GITM' m = re.match('.*Smooth.*', var) if m: line = 'dashed' label = label + ' (smoothed)' return color, line, label # ---------------------------------------------------------------------- # match filename with colors and linestyles # ---------------------------------------------------------------------- def assign_file_to_color(file): color = 'black' line = 'solid' label = file m = re.match('gdcA.*', file) if m: color = 'black' m = re.match('gdcB.*', file) if m: color = 'blue' m = re.match('gdcC.*', file) if m: color = 'cyan' m = re.match('gdcD.*', file) if m: color = 'purple' m = re.match('gdcE.*', file) if m: color = 'orange' m = re.match('gdcF.*', file) if m: color = 'red' m = re.match(r'base', file) if m: color = 'black' line = 'solid' label = 'Idealized Model' m = re.match(r'fre', file) if m: color = 'grey' line = 'solid' label = 'FRE Model' m = re.match(r'ovation', file) if m: color = 'blue' line = 'dashed' label = 'Ovation' m = re.match(r'avee_050', file) if m: color = 'darkblue' line = 'dashed' m = re.match(r'avee_075', file) if m: color = 'blue' line = 'dashed' m = re.match(r'avee_150', file) if m: color = 'firebrick' line = 'dashdot' m = re.match(r'avee_200', file) if m: color = 'red' line = 'dashdot' m = re.match(r'fta', file) if m: color = 'forestgreen' line = 'dashed' label = 'FTA Model' m = re.match(r'ae', file) if m: color = 'plum' line = 'dashed' label = 'FRE, AE Power' m = re.match(r'ions', file) if m: color = 'plum' line = 'dashdot' label = 'Ions' m = re.match(r'.*no', file) if m: color = 'cyan' label = 'NO Cooling' m = re.match(r'.*ch', file) if m: color = 'red' label = 'Chemical Heating' m = re.match(r'.*ht', file) if m: color = 'blue' label = 'Heat Transfer' m = re.match(r'.*jh', file) if m: label = 'Joule Heating' return color, line, label # Needed to run main script as the default executable from the command line if __name__ == '__main__': args = get_args_timeline() iVar = args.vars[0] nFiles = len(args.filelist) nVars = len(args.vars) fig = plt.figure(figsize = (10,10)) ax = fig.add_subplot(111) for file in args.filelist: print("Reading file : ",file) #data = read_timeline_file(file) data = read_ssv_file(file) nT = len(data["times"])-1 for iVar in args.vars: label = data["vars"][iVar] color = 'black' line = '--' if (nFiles > 1): color,line,label = assign_file_to_color(file) if (nVars > 1): color,line,label = assign_var_to_color(data['vars'][iVar]) ax.plot(data["times"][:nT], data["values"][iVar,:nT], label = label, color = color, linestyle = line, linewidth = 2.0) iVar = args.vars[0] ytitle = data["integral"] + " of " + data["vars"][iVar] if (data["alt"] > 0): ytitle += " at %5.1f" % data["alt"] + " km Alt" ax.set_ylabel(ytitle) ax.legend() plotfile = args.plotfile print('writing : ',plotfile) fig.savefig(plotfile) plt.close()

Back | FazBrowse Home | New Git URL