From 4c0739c62a97707bba6f9f4ec76706332d8267fe Mon Sep 17 00:00:00 2001 From: Hannah Ellis Date: Fri, 22 Aug 2025 13:16:10 +0100 Subject: [PATCH 1/7] Initial files to cmorise EN4 data --- esmvaltool/cmorizers/data/cmor_config/EN4.yml | 26 ++++++++ .../cmorizers/data/formatters/datasets/en4.py | 61 +++++++++++++++++++ esmvaltool/references/good2013jgr.bibtex | 12 ++++ 3 files changed, 99 insertions(+) create mode 100644 esmvaltool/cmorizers/data/cmor_config/EN4.yml create mode 100644 esmvaltool/cmorizers/data/formatters/datasets/en4.py create mode 100644 esmvaltool/references/good2013jgr.bibtex diff --git a/esmvaltool/cmorizers/data/cmor_config/EN4.yml b/esmvaltool/cmorizers/data/cmor_config/EN4.yml new file mode 100644 index 0000000000..773dbd886a --- /dev/null +++ b/esmvaltool/cmorizers/data/cmor_config/EN4.yml @@ -0,0 +1,26 @@ +--- + +# Filename +filename: 'EN.4.2.2.f.analysis.g10.*.nc' + +# Common global attributes for Cmorizer output +attributes: + dataset_id: EN4 + version: '4.2.2' + tier: 3 + modeling_realm: reanaly + project_id: OBS6 + source: 'https://www.metoffice.gov.uk/hadobs/en4/download-en4-2-2.html' + reference: 'good2013jgr' + comment: 'Uses analyses with Gouretski and Reseghetti (2010) XBT corrections and Gouretski and Cheng (2020) MBT corrections applied.' + +# Variables to cmorize +variables: + thetao: + mip: Omon + raw_var: sea_water_potential_temperature + srf_var: tos + so: + mip: Omon + raw_var: sea_water_salinity + srf_var: sos diff --git a/esmvaltool/cmorizers/data/formatters/datasets/en4.py b/esmvaltool/cmorizers/data/formatters/datasets/en4.py new file mode 100644 index 0000000000..8d1337d56a --- /dev/null +++ b/esmvaltool/cmorizers/data/formatters/datasets/en4.py @@ -0,0 +1,61 @@ +import logging +import os +from dask import array as da +import iris + +from esmvaltool.cmorizers.data import utilities as utils + +logger = logging.getLogger(__name__) + +def load_and_prepare_cube(fullpath, raw_var, glob_attrs, cmor_info): + + cubes = iris.load(fullpath, raw_var) + iris.util.equalise_attributes(cubes) + cube = cubes.concatenate_cube() + + if cube.units == 'K': + cube.convert_units('degC') + + cube.coord('depth').units = 'm' # Was metres but gets changed when running recipe + cube = utils.fix_coords(cube) + utils.fix_var_metadata(cube, cmor_info) + utils.set_global_atts(cube, glob_attrs) + + return cube + +def extract_surface_var(cube, srf_var, cmor_info): + logger.info('Extracting surface level') + + depth0 = iris.Constraint(depth=cube.coord('depth').points[0]) + surface_cube = cube.extract(depth0) + + utils.fix_var_metadata(surface_cube, cmor_info) + + return surface_cube + +def cmorization(in_dir, out_dir, cfg, cfg_user, start_date, end_date): + """CMORization main function.""" + + cmor_table = cfg['cmor_table'] + glob_attrs = cfg['attributes'] + filename = cfg['filename'] + fullpath = os.path.join(in_dir, filename) + + for var, var_info in cfg['variables'].items(): + logger.info(f'Loading {fullpath}') + + glob_attrs["mip"] = var_info["mip"] + + raw_var = var_info['raw_var'] + srf_var = var_info['srf_var'] + + cmor_info = cmor_table.get_variable(var_info['mip'], var) + cmor_info_srf = cmor_table.get_variable(var_info['mip'], srf_var) + + cube = load_and_prepare_cube(fullpath, raw_var, glob_attrs, cmor_info) + surface_cube = extract_surface_var(cube, srf_var, cmor_info_srf) + logger.info(f'Saving for {var}') + utils.save_variable(cube, var, out_dir, glob_attrs) + + logger.info(f'Saving for {srf_var}') + utils.save_variable(surface_cube, srf_var, out_dir, glob_attrs) diff --git a/esmvaltool/references/good2013jgr.bibtex b/esmvaltool/references/good2013jgr.bibtex new file mode 100644 index 0000000000..e7e9a1de98 --- /dev/null +++ b/esmvaltool/references/good2013jgr.bibtex @@ -0,0 +1,12 @@ +@article{Good2013EN4:Estimates, + title = {{EN4: Quality controlled ocean temperature and salinity profiles and monthly objective analyses with uncertainty estimates}}, + year = {2013}, + journal = {Journal of Geophysical Research: Oceans}, + author = {Good, Simon A. and Martin, Matthew J. and Rayner, Nick A.}, + number = {12}, + pages = {6704--6716}, + volume = {118}, + publisher = {Blackwell Publishing Ltd}, + doi = {10.1002/2013JC009067}, + issn = {21699291}, + keywords = {objective analysis, ocean observations, quality control, uncertainty estimation} From 80734fbb8bf64416f0f3dcca9027b2908e56b5a7 Mon Sep 17 00:00:00 2001 From: Hannah Ellis Date: Wed, 10 Sep 2025 09:30:45 +0100 Subject: [PATCH 2/7] Tested scripts. Added doc and citation details. --- .zenodo.json | 6 +- CITATION.cff | 5 + doc/sphinx/source/input.rst | 2 + esmvaltool/cmorizers/data/cmor_config/EN4.yml | 2 +- esmvaltool/cmorizers/data/datasets.yml | 14 ++ .../cmorizers/data/formatters/datasets/en4.py | 137 +++++++++++++----- .../recipes/examples/recipe_check_obs.yml | 13 +- 7 files changed, 139 insertions(+), 40 deletions(-) diff --git a/.zenodo.json b/.zenodo.json index 1f82b85b5d..c2b9438fe4 100644 --- a/.zenodo.json +++ b/.zenodo.json @@ -425,6 +425,10 @@ "affiliation": "ACCESS-NRI, Australia", "name": "Chun, Felicity", "orcid": "0009-0007-0845-0953" + }, + { + "affiliation": "Met Office, UK", + "name": "Ellis, Hannah" } ], "description": "ESMValTool: A community diagnostic and performance metrics tool for routine evaluation of Earth system models in CMIP.", @@ -448,7 +452,7 @@ "identifier": "nlesc" } ], -"grants": [ + "grants": [ { "id": "10.13039/501100000780::282672" }, diff --git a/CITATION.cff b/CITATION.cff index 22346621dd..41820f5060 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -431,6 +431,11 @@ authors: family-names: Chun given-names: Felicity orcid: "https://orcid.org/0009-0007-0845-0953" + - + affiliation: "Met Office, UK" + family-names: Ellis + given-names: Hannah + cff-version: 1.2.0 date-released: 2025-03-05 diff --git a/doc/sphinx/source/input.rst b/doc/sphinx/source/input.rst index 6bca0c387d..05fa0adba8 100644 --- a/doc/sphinx/source/input.rst +++ b/doc/sphinx/source/input.rst @@ -296,6 +296,8 @@ A list of the datasets for which a CMORizers is available is provided in the fol +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ | E-OBS | tas, tasmin, tasmax, pr, psl (day, Amon) | 2 | Python | +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ +| EN4 | tos, thetao, sos, so (Omon) | 2 | Python | ++------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ | Eppley-VGPM-MODIS | intpp (Omon) | 2 | Python | +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ | ERA5 [#note1]_ | cl, clt, evspsbl, evspsblpot, mrro, pr, prsn, ps, psl, ptype, rls, rlds, rlns, rlus [#note2]_, rsds, | 3 | n/a | diff --git a/esmvaltool/cmorizers/data/cmor_config/EN4.yml b/esmvaltool/cmorizers/data/cmor_config/EN4.yml index 773dbd886a..7ddd023356 100644 --- a/esmvaltool/cmorizers/data/cmor_config/EN4.yml +++ b/esmvaltool/cmorizers/data/cmor_config/EN4.yml @@ -7,7 +7,7 @@ filename: 'EN.4.2.2.f.analysis.g10.*.nc' attributes: dataset_id: EN4 version: '4.2.2' - tier: 3 + tier: 2 modeling_realm: reanaly project_id: OBS6 source: 'https://www.metoffice.gov.uk/hadobs/en4/download-en4-2-2.html' diff --git a/esmvaltool/cmorizers/data/datasets.yml b/esmvaltool/cmorizers/data/datasets.yml index 2d2fc71908..d4f030f5f5 100644 --- a/esmvaltool/cmorizers/data/datasets.yml +++ b/esmvaltool/cmorizers/data/datasets.yml @@ -325,6 +325,20 @@ datasets: - Complete the CMOR-config specifications (see instructions in the file itself) + EN4: + tier: 2 + source: "https://www.metoffice.gov.uk/hadobs/en4/download-en4-2-2.html" + last_access: 2025-06-13 + info: | + EN4: quality controlled subsurface ocean temperature and salinity objective analyses. + Script tested using analyses with Gouretski and Reseghetti (2010) XBT corrections + and Gouretski and Cheng (2020) MBT corrections applied. + To download data: + - Edit the text file for your chosen years, https://www.metoffice.gov.uk/hadobs/en4/EN.4.2.2.analyses.g10.download-list.txt + - Save .txt file in directory for data to be downloaded to. + - Run 'wget -i EN.4.2.2.profiles.g10.download-list.txt' in same directory. + - Unzip files prior to running the cmorizer script. + E-OBS: tier: 2 source: http://surfobs.climate.copernicus.eu/dataaccess/access_eobs.php#datafiles diff --git a/esmvaltool/cmorizers/data/formatters/datasets/en4.py b/esmvaltool/cmorizers/data/formatters/datasets/en4.py index 8d1337d56a..822def2372 100644 --- a/esmvaltool/cmorizers/data/formatters/datasets/en4.py +++ b/esmvaltool/cmorizers/data/formatters/datasets/en4.py @@ -1,61 +1,124 @@ +""" +CMORizer for EN4 dataset. + +This script processes EN4 ocean temperature and salinity data to CMOR-compliant format for use in ESMValTool. + +Tier + Tier 2: other freely-available dataset. + +Source + https://www.metoffice.gov.uk/hadobs/en4/download-en4-2-2.html + +Last access + 2025-06-13 + +Info + EN4: quality controlled subsurface ocean temperature and salinity objective analyses. + Script tested using analyses with Gouretski and Reseghetti (2010) XBT corrections + and Gouretski and Cheng (2020) MBT corrections applied. + +Download instructions + - Edit the text file for your chosen years, https://www.metoffice.gov.uk/hadobs/en4/EN.4.2.2.analyses.g10.download-list.txt + - Save .txt file in directory for data to be downloaded to. + - Run 'wget -i EN.4.2.2.profiles.g10.download-list.txt' in same directory. + - Unzip files prior to running the cmorizer script. + +""" import logging -import os -from dask import array as da +from pathlib import Path + import iris from esmvaltool.cmorizers.data import utilities as utils logger = logging.getLogger(__name__) -def load_and_prepare_cube(fullpath, raw_var, glob_attrs, cmor_info): - +def load_and_prepare_cube(fullpath, var, var_info, glob_attrs, cmor_table): + """ + Load and prepare a data cube for CMORization. Fix attributes, coordinates, and units. + + Parameters + ---------- + fullpath : str + Path to the input file. + var : str + Name of the variable to save in output cube. + var_info : dict + Variable information dictionary. + glob_attrs : dict + Global attributes to set on the cube. + cmor_table : object + CMOR table. + + Returns + ------- + iris.cube.Cube + The prepared data cube. + """ + + glob_attrs["mip"] = var_info["mip"] + raw_var = var_info["raw_var"] + cmor_info = cmor_table.get_variable(var_info["mip"], var) + cubes = iris.load(fullpath, raw_var) iris.util.equalise_attributes(cubes) cube = cubes.concatenate_cube() - if cube.units == 'K': - cube.convert_units('degC') + if cube.units == "K": + cube.convert_units("degC") - cube.coord('depth').units = 'm' # Was metres but gets changed when running recipe - cube = utils.fix_coords(cube) - utils.fix_var_metadata(cube, cmor_info) + cube.coord("depth").units = "m" + cube = utils.fix_coords(cube) + utils.fix_var_metadata(cube, cmor_info) utils.set_global_atts(cube, glob_attrs) - - return cube -def extract_surface_var(cube, srf_var, cmor_info): - logger.info('Extracting surface level') + return cube - depth0 = iris.Constraint(depth=cube.coord('depth').points[0]) +def extract_surface_var(cube, cmor_info): + """ + Extract the surface level variable from a data cube. + + Parameters + ---------- + cube : iris.cube.Cube + Input data cube. + cmor_info : object + CMOR table object for the surface variable. + + Returns + ------- + iris.cube.Cube + The extracted surface level cube. + """ + logger.info("Extracting surface level") + + depth0 = iris.Constraint(depth=cube.coord("depth").points[0]) surface_cube = cube.extract(depth0) - utils.fix_var_metadata(surface_cube, cmor_info) + utils.fix_var_metadata(surface_cube, cmor_info) return surface_cube def cmorization(in_dir, out_dir, cfg, cfg_user, start_date, end_date): - """CMORization main function.""" - - cmor_table = cfg['cmor_table'] - glob_attrs = cfg['attributes'] - filename = cfg['filename'] - fullpath = os.path.join(in_dir, filename) - - for var, var_info in cfg['variables'].items(): - logger.info(f'Loading {fullpath}') - - glob_attrs["mip"] = var_info["mip"] - - raw_var = var_info['raw_var'] - srf_var = var_info['srf_var'] - - cmor_info = cmor_table.get_variable(var_info['mip'], var) - cmor_info_srf = cmor_table.get_variable(var_info['mip'], srf_var) - - cube = load_and_prepare_cube(fullpath, raw_var, glob_attrs, cmor_info) - surface_cube = extract_surface_var(cube, srf_var, cmor_info_srf) - logger.info(f'Saving for {var}') + """ + CMORization main function call. + """ + cmor_table = cfg["cmor_table"] + glob_attrs = cfg["attributes"] + fullpath = str(Path(in_dir) / cfg["filename"]) + + for var, var_info in cfg["variables"].items(): + logger.info("Loading %s", fullpath) + + srf_var = var_info["srf_var"] + cmor_info_srf = cmor_table.get_variable(var_info["mip"], srf_var) + + cube = load_and_prepare_cube(fullpath, var, var_info, glob_attrs, cmor_table) + surface_cube = extract_surface_var(cube, cmor_info_srf) + logger.info("Saving for %s", var) utils.save_variable(cube, var, out_dir, glob_attrs) - logger.info(f'Saving for {srf_var}') + logger.info("Saving for %s", srf_var) utils.save_variable(surface_cube, srf_var, out_dir, glob_attrs) + + diff --git a/esmvaltool/recipes/examples/recipe_check_obs.yml b/esmvaltool/recipes/examples/recipe_check_obs.yml index bfccb7f00f..960b94b6be 100644 --- a/esmvaltool/recipes/examples/recipe_check_obs.yml +++ b/esmvaltool/recipes/examples/recipe_check_obs.yml @@ -3,7 +3,7 @@ --- documentation: description: | - Test recipe for OBS, no proprocessor or diagnostics are applied, + Test recipe for OBS, no preprocessor or diagnostics are applied, just to check correct reading of the CMORized data. title: Recipe to test run all obs cmorizers. @@ -154,6 +154,17 @@ diagnostics: type: clim, version: v2018, start_year: 2010, end_year: 2010} scripts: null + EN4: + description: EN4 check + variables: + thetao: + tos: + so: + sos: + additional_datasets: + - {dataset: EN4, project: OBS6, mip: Omon, type: reanaly, + version: 4.2.2, tier: 2, start_year: 1900, end_year: 2024} + scripts: null E-OBS: description: E-OBS check From ebde5fbbacee995d9ab9ff8d8502981fee7db39e Mon Sep 17 00:00:00 2001 From: Hannah Ellis Date: Wed, 10 Sep 2025 09:55:55 +0100 Subject: [PATCH 3/7] fixed formatting --- doc/sphinx/source/input.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/sphinx/source/input.rst b/doc/sphinx/source/input.rst index 05fa0adba8..d157777032 100644 --- a/doc/sphinx/source/input.rst +++ b/doc/sphinx/source/input.rst @@ -296,7 +296,7 @@ A list of the datasets for which a CMORizers is available is provided in the fol +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ | E-OBS | tas, tasmin, tasmax, pr, psl (day, Amon) | 2 | Python | +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ -| EN4 | tos, thetao, sos, so (Omon) | 2 | Python | +| EN4 | tos, thetao, sos, so (Omon) | 2 | Python | +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ | Eppley-VGPM-MODIS | intpp (Omon) | 2 | Python | +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ From 850b339380de9b2bfc93a43b32d2edb240da1a2f Mon Sep 17 00:00:00 2001 From: Hannah Ellis Date: Wed, 10 Sep 2025 15:51:19 +0100 Subject: [PATCH 4/7] extra tests/formatting --- CITATION.cff | 4 ++-- esmvaltool/cmorizers/data/datasets.yml | 4 ++-- .../cmorizers/data/formatters/datasets/en4.py | 20 +++++++++++-------- .../recipes/examples/recipe_check_obs.yml | 2 +- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index 1512000280..934effece8 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -448,11 +448,11 @@ authors: family-names: Chun given-names: Felicity orcid: "https://orcid.org/0009-0007-0845-0953" - - + - affiliation: "Met Office, UK" family-names: Ellis given-names: Hannah - + cff-version: 1.2.0 date-released: 2025-03-05 diff --git a/esmvaltool/cmorizers/data/datasets.yml b/esmvaltool/cmorizers/data/datasets.yml index 1b15fdc5d6..388ccacd5e 100644 --- a/esmvaltool/cmorizers/data/datasets.yml +++ b/esmvaltool/cmorizers/data/datasets.yml @@ -337,8 +337,8 @@ datasets: source: "https://www.metoffice.gov.uk/hadobs/en4/download-en4-2-2.html" last_access: 2025-06-13 info: | - EN4: quality controlled subsurface ocean temperature and salinity objective analyses. - Script tested using analyses with Gouretski and Reseghetti (2010) XBT corrections + EN4: quality controlled subsurface ocean temperature and salinity objective analyses. + Script tested using analyses with Gouretski and Reseghetti (2010) XBT corrections and Gouretski and Cheng (2020) MBT corrections applied. To download data: - Edit the text file for your chosen years, https://www.metoffice.gov.uk/hadobs/en4/EN.4.2.2.analyses.g10.download-list.txt diff --git a/esmvaltool/cmorizers/data/formatters/datasets/en4.py b/esmvaltool/cmorizers/data/formatters/datasets/en4.py index 822def2372..234848d451 100644 --- a/esmvaltool/cmorizers/data/formatters/datasets/en4.py +++ b/esmvaltool/cmorizers/data/formatters/datasets/en4.py @@ -8,7 +8,7 @@ Source https://www.metoffice.gov.uk/hadobs/en4/download-en4-2-2.html - + Last access 2025-06-13 @@ -16,14 +16,15 @@ EN4: quality controlled subsurface ocean temperature and salinity objective analyses. Script tested using analyses with Gouretski and Reseghetti (2010) XBT corrections and Gouretski and Cheng (2020) MBT corrections applied. - -Download instructions + +Download instructions - Edit the text file for your chosen years, https://www.metoffice.gov.uk/hadobs/en4/EN.4.2.2.analyses.g10.download-list.txt - Save .txt file in directory for data to be downloaded to. - Run 'wget -i EN.4.2.2.profiles.g10.download-list.txt' in same directory. - Unzip files prior to running the cmorizer script. """ + import logging from pathlib import Path @@ -33,6 +34,7 @@ logger = logging.getLogger(__name__) + def load_and_prepare_cube(fullpath, var, var_info, glob_attrs, cmor_table): """ Load and prepare a data cube for CMORization. Fix attributes, coordinates, and units. @@ -67,13 +69,14 @@ def load_and_prepare_cube(fullpath, var, var_info, glob_attrs, cmor_table): if cube.units == "K": cube.convert_units("degC") - cube.coord("depth").units = "m" + cube.coord("depth").units = "m" cube = utils.fix_coords(cube) utils.fix_var_metadata(cube, cmor_info) utils.set_global_atts(cube, glob_attrs) return cube + def extract_surface_var(cube, cmor_info): """ Extract the surface level variable from a data cube. @@ -99,6 +102,7 @@ def extract_surface_var(cube, cmor_info): return surface_cube + def cmorization(in_dir, out_dir, cfg, cfg_user, start_date, end_date): """ CMORization main function call. @@ -109,16 +113,16 @@ def cmorization(in_dir, out_dir, cfg, cfg_user, start_date, end_date): for var, var_info in cfg["variables"].items(): logger.info("Loading %s", fullpath) - + srf_var = var_info["srf_var"] cmor_info_srf = cmor_table.get_variable(var_info["mip"], srf_var) - cube = load_and_prepare_cube(fullpath, var, var_info, glob_attrs, cmor_table) + cube = load_and_prepare_cube( + fullpath, var, var_info, glob_attrs, cmor_table + ) surface_cube = extract_surface_var(cube, cmor_info_srf) logger.info("Saving for %s", var) utils.save_variable(cube, var, out_dir, glob_attrs) logger.info("Saving for %s", srf_var) utils.save_variable(surface_cube, srf_var, out_dir, glob_attrs) - - diff --git a/esmvaltool/recipes/examples/recipe_check_obs.yml b/esmvaltool/recipes/examples/recipe_check_obs.yml index ade1d6b7c1..e63f96b901 100644 --- a/esmvaltool/recipes/examples/recipe_check_obs.yml +++ b/esmvaltool/recipes/examples/recipe_check_obs.yml @@ -162,7 +162,7 @@ diagnostics: so: sos: additional_datasets: - - {dataset: EN4, project: OBS6, mip: Omon, type: reanaly, + - {dataset: EN4, project: OBS6, mip: Omon, type: reanaly, version: 4.2.2, tier: 2, start_year: 1900, end_year: 2024} scripts: null From 36034d2223fdb9b1e46079bce5b36580a3b512c0 Mon Sep 17 00:00:00 2001 From: Hannah Ellis Date: Mon, 15 Sep 2025 14:23:20 +0100 Subject: [PATCH 5/7] fixed indents for zenodo and yml file --- .zenodo.json | 2 +- esmvaltool/cmorizers/data/datasets.yml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.zenodo.json b/.zenodo.json index e14958fe4e..38218f7ed5 100644 --- a/.zenodo.json +++ b/.zenodo.json @@ -479,7 +479,7 @@ "identifier": "nlesc" } ], - "grants": [ +"grants": [ { "id": "10.13039/501100000780::282672" }, diff --git a/esmvaltool/cmorizers/data/datasets.yml b/esmvaltool/cmorizers/data/datasets.yml index 388ccacd5e..bdabff781d 100644 --- a/esmvaltool/cmorizers/data/datasets.yml +++ b/esmvaltool/cmorizers/data/datasets.yml @@ -341,9 +341,9 @@ datasets: Script tested using analyses with Gouretski and Reseghetti (2010) XBT corrections and Gouretski and Cheng (2020) MBT corrections applied. To download data: - - Edit the text file for your chosen years, https://www.metoffice.gov.uk/hadobs/en4/EN.4.2.2.analyses.g10.download-list.txt - - Save .txt file in directory for data to be downloaded to. - - Run 'wget -i EN.4.2.2.profiles.g10.download-list.txt' in same directory. + - Edit the text file for your chosen years, https://www.metoffice.gov.uk/hadobs/en4/EN.4.2.2.analyses.g10.download-list.txt + - Save .txt file in directory for data to be downloaded to. + - Run 'wget -i EN.4.2.2.profiles.g10.download-list.txt' in same directory. - Unzip files prior to running the cmorizer script. E-OBS: From 5283551a9ade6acf8597aa58580f077cd8310c2b Mon Sep 17 00:00:00 2001 From: Hannah Ellis <104513360+hanellis@users.noreply.github.com> Date: Mon, 15 Sep 2025 14:26:24 +0100 Subject: [PATCH 6/7] Update .zenodo.json Co-authored-by: Valeriu Predoi --- .zenodo.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.zenodo.json b/.zenodo.json index e14958fe4e..38218f7ed5 100644 --- a/.zenodo.json +++ b/.zenodo.json @@ -479,7 +479,7 @@ "identifier": "nlesc" } ], - "grants": [ +"grants": [ { "id": "10.13039/501100000780::282672" }, From 4c2d379b2d8b93400ab2cb8eb887dd7f8922a32c Mon Sep 17 00:00:00 2001 From: Hannah Ellis Date: Fri, 19 Sep 2025 16:51:13 +0100 Subject: [PATCH 7/7] removed tos/sos from input table --- doc/sphinx/source/input.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/sphinx/source/input.rst b/doc/sphinx/source/input.rst index f290e0c29a..11c59f0228 100644 --- a/doc/sphinx/source/input.rst +++ b/doc/sphinx/source/input.rst @@ -296,7 +296,7 @@ A list of the datasets for which a CMORizers is available is provided in the fol +----------------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ | Duveiller2018 | albDiffiTr13 | 2 | Python | +----------------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ -| EN4 | tos, thetao, sos, so (Omon) | 2 | Python | +| EN4 | thetao, so (Omon) | 2 | Python | +----------------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ | E-OBS | tas, tasmin, tasmax, pr, psl (day, Amon) | 2 | Python | +----------------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+