Skip to content

Commit a95cd2f

Browse files
committed
like extra_variables, but no time stamp...
1 parent 63ba751 commit a95cd2f

File tree

1 file changed

+22
-13
lines changed

1 file changed

+22
-13
lines changed

xmitgcm/mds_store.py

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@ def open_mdsdataset(data_dir, grid_dir=None,
5959
ignore_unknown_vars=False, default_dtype=None,
6060
nx=None, ny=None, nz=None,
6161
llc_method="smallchunks", extra_metadata=None,
62-
extra_variables=None):
62+
extra_variables=None,
63+
custom_grid_variables={}):
6364
"""Open MITgcm-style mds (.data / .meta) file output as xarray datset.
6465
6566
Parameters
@@ -148,6 +149,8 @@ def open_mdsdataset(data_dir, grid_dir=None,
148149
standard_name='Sensitivity_to_theta',
149150
long_name='Sensitivity of cost function to theta', units='[J]/degC'))
150151
)
152+
custom_grid_variables : dict, optional
153+
Similar to extra_variables, but these files don't have a time stamp.
151154
152155
153156
Returns
@@ -235,7 +238,8 @@ def open_mdsdataset(data_dir, grid_dir=None,
235238
default_dtype=default_dtype,
236239
nx=nx, ny=ny, nz=nz, llc_method=llc_method,
237240
levels=levels, extra_metadata=extra_metadata,
238-
extra_variables=extra_variables)
241+
extra_variables=extra_variables,
242+
custom_grid_variables=custom_grid_variables)
239243
datasets = [open_mdsdataset(
240244
data_dir, iters=iternum, read_grid=False, **kwargs)
241245
for iternum in iters]
@@ -291,7 +295,8 @@ def open_mdsdataset(data_dir, grid_dir=None,
291295
default_dtype=default_dtype,
292296
nx=nx, ny=ny, nz=nz, llc_method=llc_method,
293297
levels=levels, extra_metadata=extra_metadata,
294-
extra_variables=extra_variables)
298+
extra_variables=extra_variables,
299+
custom_grid_variables=custom_grid_variables)
295300

296301
ds = xr.Dataset.load_store(store)
297302
if swap_dims:
@@ -376,7 +381,8 @@ def __init__(self, data_dir, grid_dir=None,
376381
default_dtype=np.dtype('f4'),
377382
nx=None, ny=None, nz=None, llc_method="smallchunks",
378383
levels=None, extra_metadata=None,
379-
extra_variables=None):
384+
extra_variables=None,
385+
custom_grid_variables={}):
380386
"""
381387
This is not a user-facing class. See open_mdsdataset for argument
382388
documentation. The only ones which are distinct are.
@@ -401,6 +407,7 @@ def __init__(self, data_dir, grid_dir=None,
401407
self.data_dir = data_dir
402408
self.grid_dir = grid_dir if (grid_dir is not None) else data_dir
403409
self.extra_variables = extra_variables
410+
self.custom_grid_variables = custom_grid_variables
404411
self._ignore_unknown_vars = ignore_unknown_vars
405412

406413
# The endianness of the files
@@ -573,7 +580,8 @@ def __init__(self, data_dir, grid_dir=None,
573580
# build lookup tables for variable metadata
574581
self._all_grid_variables = _get_all_grid_variables(self.geometry,
575582
self.grid_dir,
576-
self.layers)
583+
self.layers,
584+
self.custom_grid_variables)
577585
self._all_data_variables = _get_all_data_variables(self.data_dir,
578586
self.grid_dir,
579587
self.layers,
@@ -831,7 +839,7 @@ def _guess_layers(data_dir):
831839
return all_layers
832840

833841

834-
def _get_all_grid_variables(geometry, grid_dir=None, layers={}):
842+
def _get_all_grid_variables(geometry, grid_dir=None, layers={}, custom_grid_variables={}):
835843
""""Put all the relevant grid metadata into one big dictionary."""
836844
possible_hcoords = {'cartesian': horizontal_coordinates_cartesian,
837845
'llc': horizontal_coordinates_llc,
@@ -841,7 +849,7 @@ def _get_all_grid_variables(geometry, grid_dir=None, layers={}):
841849
hcoords = possible_hcoords[geometry]
842850

843851
# look for extra variables, if they exist in grid_dir
844-
extravars = _get_extra_grid_variables(grid_dir) if grid_dir is not None else {}
852+
extravars = _get_extra_grid_variables(grid_dir, custom_grid_variables=custom_grid_variables) if grid_dir is not None else {}
845853

846854
allvars = [hcoords, vertical_coordinates, horizontal_grid_variables,
847855
vertical_grid_variables, volume_grid_variables, mask_variables,
@@ -856,21 +864,22 @@ def _get_all_grid_variables(geometry, grid_dir=None, layers={}):
856864
return metadata
857865

858866

859-
def _get_extra_grid_variables(grid_dir):
867+
def _get_extra_grid_variables(grid_dir, custom_grid_variables):
860868
"""Scan a directory and return all file prefixes for extra grid files.
861869
Then return the variable information for each of these"""
862870
extra_grid = {}
863871

864-
fnames = dict([[val['filename'],key] for key,val in extra_grid_variables.items() if 'filename' in val])
872+
all_extras = {**extra_grid_variables, **custom_grid_variables}
873+
fnames = dict([[val['filename'],key] for key,val in all_extras.items() if 'filename' in val])
865874

866875
all_datafiles = listdir_endswith(grid_dir, '.data')
867876
for f in all_datafiles:
868877
prefix = os.path.split(f[:-5])[-1]
869-
# Only consider what we find that matches extra_grid_vars
870-
if prefix in extra_grid_variables:
871-
extra_grid[prefix] = extra_grid_variables[prefix]
878+
# Only consider what we find that matches extra/custom_grid_vars
879+
if prefix in all_extras:
880+
extra_grid[prefix] = all_extras[prefix]
872881
elif prefix in fnames:
873-
extra_grid[fnames[prefix]] = extra_grid_variables[fnames[prefix]]
882+
extra_grid[fnames[prefix]] = all_extras[fnames[prefix]]
874883

875884
return extra_grid
876885

0 commit comments

Comments
 (0)