Skip to content

Commit 251b917

Browse files
authored
Allowe to use a mini params file during initialization (OGGM#1776)
1 parent e3a0db0 commit 251b917

File tree

4 files changed

+45
-15
lines changed

4 files changed

+45
-15
lines changed

docs/whats-new.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@ Enhancements
3737
- Refactored mass balance functions ``get_specific_mb`` and``get_ela``. These
3838
are no longer recursive and have been optimised for performance.
3939
By `Nicolas Gampierakis <https://github.com/gampnico>`_.
40+
- Added the ability to use an incomplete version of the full params.cfg file
41+
to override some default parameter values. This can be done by providing the
42+
file during initialization with ``cfg.initialize(file=mini_params_filepath)``
43+
(:pull:`1776`).
44+
By `Patrick Schmitt <https://github.com/pat-schmitt>`_
4045
- Added a `compile_fl_diagnostics` (:pull:`1753`).
4146
By `Fabien Maussion <https://github.com/fmaussion>`_
4247

oggm/cfg.py

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -378,29 +378,45 @@ def initialize_minimal(file=None, logging_level='INFO', params=None):
378378
Parameters
379379
----------
380380
file : str
381-
path to the configuration file (default: OGGM params.cfg)
381+
path to a user configuration file. The parameters provided in this file
382+
will override the default settings in `OGGM params.cfg`. The file does
383+
not need to include all parameters.
382384
logging_level : str
383385
set a logging level. See :func:`set_logging_config` for options.
384386
params : dict
385-
overrides for specific parameters from the config file
387+
overrides for specific parameters from the config file. Overrules a
388+
potential provided file.
386389
"""
387390
global IS_INITIALIZED
388391
global PARAMS
389392
global PATHS
390393

391394
set_logging_config(logging_level=logging_level)
392395

393-
is_default = False
394-
if file is None:
395-
file = os.path.join(os.path.abspath(os.path.dirname(__file__)),
396-
'params.cfg')
397-
is_default = True
396+
# Open default params file
397+
is_default = True
398+
file_default = os.path.join(os.path.abspath(os.path.dirname(__file__)),
399+
'params.cfg')
398400
try:
399-
cp = ConfigObj(file, file_error=True)
401+
cp = ConfigObj(file_default, file_error=True)
400402
except (ConfigObjError, IOError) as e:
401-
log.critical('Config file could not be parsed (%s): %s', file, e)
403+
log.critical('Config file could not be parsed (%s): %s',
404+
file_default, e)
402405
sys.exit()
403406

407+
# If provided open user params file and overwrite defaults
408+
if file:
409+
is_default = False
410+
try:
411+
cp_user = ConfigObj(file, file_error=True)
412+
except (ConfigObjError, IOError) as e:
413+
log.critical('Config file could not be parsed (%s): %s',
414+
file, e)
415+
sys.exit()
416+
417+
for k, v in cp_user.items():
418+
cp[k] = v
419+
404420
if is_default:
405421
log.workflow('Reading default parameters from the OGGM `params.cfg` '
406422
'configuration file.')
@@ -411,7 +427,7 @@ def initialize_minimal(file=None, logging_level='INFO', params=None):
411427
# Static Paths
412428
oggm_static_paths()
413429

414-
# Apply code-side manual params overrides
430+
# Apply code-side manual params overrides, overrules provided params file
415431
if params:
416432
for k, v in params.items():
417433
cp[k] = v
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Default number of files to be cached in the temporary directory
2+
lru_maxsize = 123

oggm/tests/test_workflow.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def clean_dir(testdir):
3535
os.makedirs(testdir)
3636

3737

38-
def up_to_climate(reset=False, use_mp=None):
38+
def up_to_climate(reset=False, use_mp=None, params_file=None):
3939
"""Run the tasks you want."""
4040

4141
# test directory
@@ -49,7 +49,7 @@ def up_to_climate(reset=False, use_mp=None):
4949
pickle.dump('none', f)
5050

5151
# Init
52-
cfg.initialize()
52+
cfg.initialize(file=params_file)
5353

5454
# Use multiprocessing
5555
use_mp = False
@@ -119,10 +119,10 @@ def up_to_climate(reset=False, use_mp=None):
119119
return gdirs
120120

121121

122-
def up_to_inversion(reset=False):
122+
def up_to_inversion(reset=False, params_file=None):
123123
"""Run the tasks you want."""
124124

125-
gdirs = up_to_climate(reset=reset)
125+
gdirs = up_to_climate(reset=reset, params_file=params_file)
126126

127127
with open(CLI_LOGF, 'rb') as f:
128128
clilog = pickle.load(f)
@@ -196,7 +196,14 @@ def test_some_characs(self):
196196
@pytest.mark.slow
197197
def test_calibrate_inversion_from_consensus(self):
198198

199-
gdirs = up_to_inversion()
199+
# test mini params file, define path relative to file location
200+
fp_mini_params = os.path.join(os.path.dirname(__file__),
201+
'mini_params_for_test.cfg')
202+
gdirs = up_to_inversion(params_file=fp_mini_params)
203+
204+
# check if mini params file is used as expected
205+
assert cfg.PARAMS['lru_maxsize'] == 123
206+
200207
df = workflow.calibrate_inversion_from_consensus(gdirs,
201208
ignore_missing=True)
202209
df = df.dropna()

0 commit comments

Comments
 (0)