-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathevalMod.py
More file actions
125 lines (107 loc) · 4.54 KB
/
evalMod.py
File metadata and controls
125 lines (107 loc) · 4.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# Parent program file to run various analysis/plotting options
# on WRF-Hydro output using R and rwrfhydro toolsets. Prior
# use of the other Python functions to setup and manage
# a menu of model options is required before running this
# program.
# Logan Karsten
# National Center for Amtmospheric Research
# Research Applications Laboratory
import sys
sys.path.insert(0, './python')
import subprocess
import argparse
import os
import pyHydroEvalUtils
import datetime
import compileNamelist
def main(argv):
# Parse arguments passed in.
parser = argparse.ArgumentParser(description='Main program to run analysis on WRF-Hydro')
parser.add_argument('modelProjects', metavar='alias', type=str, nargs='+',
help='A list of model projects to run analysis on')
parser.add_argument('--begADate',nargs='?', help='Beginning Date for Analysis/Read in YYYYMMDDHH Format')
parser.add_argument('--endADate',nargs='?', help='Ending Date for Analysis/Read in YYYYMMDDHH Format')
parser.add_argument('--lsmRead',nargs='?', help='LDASOUT Read Flag (1-20)')
parser.add_argument('--rtRead',nargs='?', help='RTOUT Read Flag (1-1)')
parser.add_argument('--gwRead',nargs='?', help='GWOUT Read Flag (1-1)')
parser.add_argument('--fxRead',nargs='?', help='frxst Read Flag (1-1)')
parser.add_argument('--chRead',nargs='?', help='CHRTOUT Read Flag (1-2)')
parser.add_argument('--forRead',nargs='?', help='Forcing Read Flag (1-4')
parser.add_argument('--snRead',nargs='?', help='SNODAS Read Flag (1-4)')
parser.add_argument('--stat',nargs='?', help='Statistics Performance Flag (1-5)')
parser.add_argument('--plot',nargs='?', help='Plot Flag (1-21)')
parser.add_argument('--begPDate',nargs='?', help='Beginning Date for Plotting in YYYYMMDDHH Format')
parser.add_argument('--endPDate',nargs='?', help='Ending Date for Plotting in YYYYMMDDHH Format')
parser.add_argument('--subset',nargs='?', help='Flag to turn on subsetting within reading or plotting')
parser.add_argument('--pad',nargs='?', help='Padding value to padd beginning of plots with observations')
args = parser.parse_args()
# Check to make sure arguments make sense
try:
pyHydroEvalUtils.checkArgs(args)
except:
print "ERROR: Improper arguments passed."
sys.exit(1)
# Convert date arguments to datetime objects. Also check to ensure dates make sense.
if args.begADate or args.endADate:
begADateObj = pyHydroEvalUtils.returnDate(args.begADate)
endADateObj = pyHydroEvalUtils.returnDate(args.endADate)
if begADateObj >= endADateObj:
print "ERROR: Beginning analysis date must be less than ending date."
sys.exit(1)
if args.begPDate or args.endPDate:
begPDateObj = pyHydroEvalUtils.returnDate(args.begPDate)
endPDateObj = pyHydroEvalUtils.returnDate(args.endPDate)
if begPDateObj >= endPDateObj:
print "ERROR: Beginning Plotting date must be less than ending date."
sys.exit(1)
# Check to ensure proper files exist to run analysis
dbPath = "./parm/modelMeta_db.pkl"
namelistTemplate = "./parm/namelist_template.R"
if not os.path.isfile(dbPath):
print "ERROR: Database: " + dbPath + " not found."
sys.exit(1)
if not os.path.isfile(namelistTemplate):
print "ERROR: Template R namelist file: " + namelistTemplate + " not found."
sys.exit(1)
# Read in model project database
try:
db = pyHydroEvalUtils.readDb(dbPath)
except:
print "ERROR: Model project database failed to read in."
sys.exit(1)
# Check that alias names passed in are present in model project database
try:
pyHydroEvalUtils.checkDb(args,db)
except:
print "ERROR: checkDb failed."
sys.exit(1)
# Copy template namelist file to namelist directory in model project directory.
# If multiple model projects have been chosen for cross-model validation,
# original namelist will be placed in first model project listed, with symbolic
# links in remaining model projects.
try:
namePath, nameLink = pyHydroEvalUtils.initNamelist(args,db)
except:
print "ERROR: Failure to initialize R namelist file."
sys.exit(1)
# Begin editing R namelist file
try:
compileNamelist.editNamelist(namePath,args,db)
except:
print "ERROR: Failure to compile R namelist file."
os.unlink(nameLink)
sys.exit(1)
cmd = "Rscript " + nameLink
subprocess.call(cmd,shell=True)
# Remove namelist link specific to processor ID
try:
os.unlink(nameLink)
except:
print "ERROR: Failure to remove link: " + nameLink
sys.exit(1)
# If Rplots.pdf file exists, remove it.
if os.path.isfile('./Rplots.pdf'):
cmd = 'rm -rf Rplots.pdf'
subprocess.call(cmd,shell=True)
if __name__ == "__main__":
main(sys.argv[1:])