Skip to content

Commit 397cd3b

Browse files
committed
Refractors run_analysis to support generalization
1 parent 7ba58c6 commit 397cd3b

File tree

1 file changed

+122
-102
lines changed

1 file changed

+122
-102
lines changed

run_analysis.py

Lines changed: 122 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -1,109 +1,129 @@
1+
#!/usr/bin/env python
2+
3+
"""
4+
Runs MPAS-Analysis via configuration file `config.analysis` specifying analysis
5+
options.
6+
7+
Author: Xylar Asay-Davis, Phillip J. Wolfram
8+
Last Modified: 9/15/2016
9+
"""
10+
111
import os
212
import sys
313
import matplotlib as mpl
414

515
from mpas_analysis.configuration.MpasAnalysisConfigParser import MpasAnalysisConfigParser
616

7-
if len(sys.argv) <= 1:
8-
print "usage: %s <in_config_file> [<in_config_file2>]"%sys.argv[0]
9-
exit(1)
10-
11-
configFileNames = sys.argv[1:]
12-
13-
config = MpasAnalysisConfigParser()
14-
15-
config.read(configFileNames)
16-
17-
# Checks on directory/files existence:
18-
indir = config.get('paths','archive_dir_ocn')
19-
if not os.path.isdir(indir):
20-
raise SystemExit("Model directory %s not found. Exiting..." % indir)
21-
22-
ref_casename_v0 = config.get('case','ref_casename_v0')
23-
if ref_casename_v0 != "None":
24-
# we will need model data. Make sure it's there
25-
indir_v0data = config.get('paths','ref_archive_v0_ocndir')
26-
if not os.path.isdir(indir_v0data):
27-
raise SystemExit("ref_archive_v0_ocndir directory %s not found. Exiting..." % indir_v0data)
28-
indir_v0data = config.get('paths','ref_archive_v0_seaicedir')
29-
if not os.path.isdir(indir_v0data):
30-
raise SystemExit("ref_archive_v0_seaicedir directory %s not found. Exiting..." % indir_v0data)
31-
32-
if ((config.getboolean('seaice_timeseries', 'generate')
33-
and config.getboolean('seaice_timeseries', 'compare_with_obs'))
34-
or config.getboolean('seaice_modelvsobs', 'generate')):
35-
# we will need sea-ice observations. Make sure they're there
36-
for obsFile in ['obs_iceareaNH', 'obs_iceareaSH', 'obs_icevolNH', 'obs_icevolSH']:
37-
obs_filename = config.get('seaIceData',obsFile)
38-
if (obs_filename != 'none') and not os.path.isfile(obs_filename):
39-
raise SystemExit("Obs file %s not found. Exiting..." % obs_filename)
40-
41-
# choose the right rendering backend, depending on whether we're displaying
42-
# to the screen
43-
if not config.getboolean('plot','displayToScreen'):
44-
mpl.use('Agg')
45-
import matplotlib.pyplot as plt
46-
47-
# these only get imported after we have the right MPL renderer selected
48-
from mpas_analysis.ocean.ohc_timeseries import ohc_timeseries
49-
from mpas_analysis.ocean.sst_timeseries import sst_timeseries
50-
#from mpas_analysis.ocean.nino34_timeseries import nino34_timeseries
51-
#from mpas_analysis.ocean.mht_timeseries import mht_timeseries
52-
#from mpas_analysis.ocean.moc_timeseries import moc_timeseries
53-
from mpas_analysis.ocean.sst_modelvsobs import sst_modelvsobs
54-
55-
from mpas_analysis.sea_ice.timeseries import seaice_timeseries
56-
from mpas_analysis.sea_ice.modelvsobs import seaice_modelvsobs
57-
58-
59-
#GENERATE OCEAN DIAGNOSTICS
60-
if config.getboolean('ohc_timeseries','generate'):
61-
print ""
62-
print "Plotting OHC time series..."
63-
ohc_timeseries(config)
64-
65-
if config.getboolean('sst_timeseries','generate'):
66-
print ""
67-
print "Plotting SST time series..."
68-
sst_timeseries(config)
69-
70-
if config.getboolean('nino34_timeseries','generate'):
71-
print ""
72-
print "Plotting Nino3.4 time series..."
73-
#nino34_timeseries(config)
74-
75-
if config.getboolean('mht_timeseries','generate'):
76-
print ""
77-
print "Plotting Meridional Heat Transport (MHT)..."
78-
#mht_timeseries(config)
79-
80-
81-
if config.getboolean('moc_timeseries','generate'):
82-
print ""
83-
print "Plotting Meridional Overturning Circulation (MOC)..."
84-
#moc_timeseries(config)
85-
86-
if config.getboolean('sst_modelvsobs','generate'):
87-
print ""
88-
print "Plotting 2-d maps of SST climatologies..."
89-
sst_modelvsobs(config)
90-
91-
92-
#GENERATE SEA-ICE DIAGNOSTICS
93-
if config.getboolean('seaice_timeseries','generate'):
94-
print ""
95-
print "Plotting sea-ice area and volume time series..."
96-
seaice_timeseries(config)
97-
98-
if config.getboolean('seaice_modelvsobs','generate'):
99-
print ""
100-
print "Plotting 2-d maps of sea-ice concentration and thickness climatologies..."
101-
seaice_modelvsobs(config)
102-
103-
104-
#GENERATE LAND-ICE DIAGNOSTICS
105-
106-
107-
if config.getboolean('plot','displayToScreen'):
108-
plt.show()
17+
def path_existence(config, section, option, ignorestr=None): #{{{
18+
inpath = config.get(section, option)
19+
if not (os.path.isdir(inpath) or os.path.isfile(inpath)):
20+
# assumes that path locations of ignorestr won't return an error, e.g.,
21+
# ignorestr="none" is a key word to indicate the path or file is
22+
# optional and is not needed
23+
if inpath == ignorestr:
24+
return False
25+
errmsg = "Path %s not found. Exiting..." % inpath
26+
raise SystemExit(errmsg)
27+
return inpath #}}}
28+
29+
def analysis(config): #{{{
30+
31+
# Checks on directory/files existence:
32+
indir = path_existence(config, 'paths', 'archive_dir_ocn')
33+
34+
if config.get('case', 'ref_casename_v0') is not 'None':
35+
path_existence(config, 'paths','ref_archive_v0_ocndir')
36+
path_existence(config, 'paths','ref_archive_v0_seaicedir')
37+
38+
use_seaice = config.getboolean('seaice_timeseries', 'generate')
39+
seaice_compare_obs = config.getboolean('seaice_timeseries', 'compare_with_obs')
40+
seaice_modelvsobs = config.getboolean('seaice_modelvsobs', 'generate')
41+
if (use_seaice and seaice_compare_obs) or seaice_modelvsobs:
42+
# we will need sea-ice observations. Make sure they're there
43+
for obsfile in ['obs_iceareaNH', 'obs_iceareaSH', 'obs_icevolNH', 'obs_icevolSH']:
44+
path_existence('seaIceData', obsfile, ignorestr='none')
45+
46+
# choose the right rendering backend, depending on whether we're displaying
47+
# to the screen
48+
if not config.getboolean('plot', 'displayToScreen'):
49+
mpl.use('Agg')
50+
import matplotlib.pyplot as plt
51+
52+
# analysis can only be imported after the right MPL renderer is selected
53+
54+
#GENERATE OCEAN DIAGNOSTICS
55+
if config.getboolean('ohc_timeseries','generate'):
56+
print ""
57+
print "Plotting OHC time series..."
58+
from mpas_analysis.ocean.ohc_timeseries import ohc_timeseries
59+
ohc_timeseries(config)
60+
61+
if config.getboolean('sst_timeseries','generate'):
62+
print ""
63+
print "Plotting SST time series..."
64+
from mpas_analysis.ocean.sst_timeseries import sst_timeseries
65+
sst_timeseries(config)
66+
67+
if config.getboolean('nino34_timeseries','generate'):
68+
print ""
69+
print "Plotting Nino3.4 time series..."
70+
#from mpas_analysis.ocean.nino34_timeseries import nino34_timeseries
71+
#nino34_timeseries(config)
72+
73+
if config.getboolean('mht_timeseries','generate'):
74+
print ""
75+
print "Plotting Meridional Heat Transport (MHT)..."
76+
#from mpas_analysis.ocean.mht_timeseries import mht_timeseries
77+
#mht_timeseries(config)
78+
79+
80+
if config.getboolean('moc_timeseries','generate'):
81+
print ""
82+
print "Plotting Meridional Overturning Circulation (MOC)..."
83+
#from mpas_analysis.ocean.moc_timeseries import moc_timeseries
84+
#moc_timeseries(config)
85+
86+
if config.getboolean('sst_modelvsobs','generate'):
87+
print ""
88+
print "Plotting 2-d maps of SST climatologies..."
89+
from mpas_analysis.ocean.sst_modelvsobs import sst_modelvsobs
90+
sst_modelvsobs(config)
91+
92+
93+
#GENERATE SEA-ICE DIAGNOSTICS
94+
if config.getboolean('seaice_timeseries','generate'):
95+
print ""
96+
print "Plotting sea-ice area and volume time series..."
97+
from mpas_analysis.sea_ice.timeseries import seaice_timeseries
98+
seaice_timeseries(config)
99+
100+
if config.getboolean('seaice_modelvsobs','generate'):
101+
print ""
102+
print "Plotting 2-d maps of sea-ice concentration and thickness climatologies..."
103+
from mpas_analysis.sea_ice.modelvsobs import seaice_modelvsobs
104+
seaice_modelvsobs(config)
105+
106+
107+
#GENERATE LAND-ICE DIAGNOSTICS
108+
109+
110+
if config.getboolean('plot','displayToScreen'):
111+
plt.show()
112+
113+
114+
return #}}}
115+
116+
if __name__ == "__main__":
117+
118+
# process command line arguments and run analysis from configuration
119+
if len(sys.argv) <= 1:
120+
print "usage: %s <in_config_file> [<in_config_file2>]" % sys.argv[0]
121+
exit(1)
122+
123+
configFileNames = sys.argv[1:]
124+
config = MpasAnalysisConfigParser()
125+
config.read(configFileNames)
126+
127+
analysis(config)
109128

129+
# vim: foldmethod=marker ai ts=4 sts=4 et sw=4 ft=python

0 commit comments

Comments
 (0)