Skip to content

Commit

Permalink
Simplify variables for time series ocean regions
Browse files Browse the repository at this point in the history
Rather than defining the full list of dictionaries for each
region, define one list of dict of available variables and then
just a list of variables for each region.
  • Loading branch information
xylar committed Nov 3, 2024
1 parent 20a458b commit c5d65da
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 51 deletions.
69 changes: 29 additions & 40 deletions mpas_analysis/default.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -1684,6 +1684,30 @@ movingAveragePoints = 1
# the names of region groups to plot, each with its own section below
regionGroups = ['Arctic Ocean Regions', 'Antarctic Regions']

# a list of variables to plot
availableVariables = [
{'name': 'temperature',
'title': 'Temperature',
'units': r'$$^\circ$$C',
'mpas': ['timeMonthly_avg_activeTracers_temperature']},
{'name': 'salinity',
'title': 'Salinity',
'units': 'PSU',
'mpas': ['timeMonthly_avg_activeTracers_salinity']},
{'name': 'potentialDensity',
'title': 'Potential Density',
'units': 'kg m$$^{-3}$$',
'mpas': ['timeMonthly_avg_potentialDensity']},
{'name': 'thermalForcing',
'title': 'Thermal Forcing',
'units': r'$$^\circ$$C',
'mpas': ['timeMonthly_avg_activeTracers_temperature',
'timeMonthly_avg_activeTracers_salinity',
'timeMonthly_avg_density']},
{'name': 'mixedLayerDepth',
'title': 'Mixed Layer Depth',
'units': 'm',
'mpas': ['timeMonthly_avg_dThreshMLD']}]

[timeSeriesArcticOceanRegions]
## options related to plotting time series of Arctic Ocean regions
Expand All @@ -1693,23 +1717,8 @@ regionGroups = ['Arctic Ocean Regions', 'Antarctic Regions']
# regionMaskSubdirectory for details.
regionNames = []

# a list of variables to plot
variables = [{'name': 'temperature',
'title': 'Temperature',
'units': r'$$^\circ$$C',
'mpas': 'timeMonthly_avg_activeTracers_temperature'},
{'name': 'salinity',
'title': 'Salinity',
'units': 'PSU',
'mpas': 'timeMonthly_avg_activeTracers_salinity'},
{'name': 'potentialDensity',
'title': 'Potential Density',
'units': 'kg m$$^{-3}$$',
'mpas': 'timeMonthly_avg_potentialDensity'},
{'name': 'mixedLayerDepth',
'title': 'Mixed Layer Depth',
'units': 'm',
'mpas': 'timeMonthly_avg_dThreshMLD'}]
# a list of variables to plot from availableVariables in timeSeriesOceanRegions
variables = ['temperature', 'salinity', 'potentialDensity', 'mixedLayerDepth']

# The minimum and maximum depth over which fields are averaged.
zmin = -1000
Expand All @@ -1727,29 +1736,9 @@ obs = ['WOA18']
# regionMaskSubdirectory for details.
regionNames = []

# a list of variables to plot
variables = [{'name': 'temperature',
'title': 'Temperature',
'units': r'$$^\circ$$C',
'mpas': 'timeMonthly_avg_activeTracers_temperature'},
{'name': 'salinity',
'title': 'Salinity',
'units': 'PSU',
'mpas': 'timeMonthly_avg_activeTracers_salinity'},
{'name': 'potentialDensity',
'title': 'Potential Density',
'units': 'kg m$$^{-3}$$',
'mpas': 'timeMonthly_avg_potentialDensity'},
{'name': 'thermalForcing',
'title': 'Thermal Forcing',
'units': r'$$^\circ$$C',
'mpas': ['timeMonthly_avg_activeTracers_temperature',
'timeMonthly_avg_activeTracers_salinity',
'timeMonthly_avg_density']},
{'name': 'mixedLayerDepth',
'title': 'Mixed Layer Depth',
'units': 'm',
'mpas': 'timeMonthly_avg_dThreshMLD'}]
# a list of variables to plot from availableVariables in timeSeriesOceanRegions
variables = ['temperature', 'salinity', 'potentialDensity', 'thermalForcing',
'mixedLayerDepth']

# The minimum and maximum depth over which fields are averaged, default is
# to take these values from the geojson feature's zmin and zmax properties.
Expand Down
45 changes: 34 additions & 11 deletions mpas_analysis/ocean/time_series_ocean_regions.py
Original file line number Diff line number Diff line change
Expand Up @@ -511,19 +511,14 @@ def run_task(self):
self.historyStreams,
'timeSeriesStatsMonthlyOutput')

variables = config.getexpression(sectionName, 'variables')
variables = _get_variables_list(config, sectionName)

variableList = {'timeMonthly_avg_layerThickness'}

for var in variables:
mpas_var = var['mpas']
if mpas_var == 'none':
continue
if isinstance(mpas_var, (list, tuple)):
for v in mpas_var:
variableList.add(v)
else:
variableList.add(mpas_var)
for v in mpas_var:
variableList.add(v)

outputExists = os.path.exists(outFileName)
outputValid = outputExists
Expand Down Expand Up @@ -600,7 +595,10 @@ def run_task(self):
description = 'potential temperature minus the ' \
'potential freezing temperature'
else:
mpasVarName = var['mpas']
mpasVarNames = var['mpas']
assert len(mpasVarNames) == 1
mpasVarName = mpasVarNames[0]

timeSeries = \
dsIn[mpasVarName].where(cellMask, drop=True)
units = timeSeries.units
Expand Down Expand Up @@ -1106,8 +1104,7 @@ def setup_and_check(self):
# self.calendar
super(PlotRegionTimeSeriesSubtask, self).setup_and_check()

self.variables = self.config.getexpression(self.sectionName,
'variables')
self.variables = _get_variables_list(self.config, self.sectionName)

self.xmlFileNames = []
for var in self.variables:
Expand Down Expand Up @@ -1282,3 +1279,29 @@ def run_task(self):
thumbnailDescription=self.regionName,
imageDescription=caption,
imageCaption=caption)


def _get_variables_list(config, sectionName):
"""
Get a list of dict of variables for the given region
"""
availableVariables = config.getexpression('timeSeriesOceanRegions',
'availableVariables')

variableList = config.getexpression(sectionName, 'variables')

variables = []

for varName in variableList:
found = False
for var in availableVariables:
if varName == var['name']:
found = True
break
if not found:
raise ValueError(f'Did not find {varName} in config option '
f'availableVariables in '
f'[timeSeriesOceanRegions]')
variables.append(var)

return variables

0 comments on commit c5d65da

Please sign in to comment.