From 3803e556def82e3af11194743f7e62aabd5c521a Mon Sep 17 00:00:00 2001 From: Felicity Chun Date: Wed, 27 May 2026 11:57:59 +1000 Subject: [PATCH] update for reading CMIP7 data --- .../enso_metrics/climatology_diagnostic1.py | 4 +- .../climatology_diagnosticlevel2.py | 2 +- .../climatology_diagnosticlevel3.py | 2 +- .../enso_metrics/enso_diag1metrics.py | 10 ++++ .../enso_divedowns/ampseasskew_1113.py | 10 ++++ .../enso_divedowns/durdiver_1415.py | 10 ++++ .../enso_divedowns/lifecycle_10.py | 10 ++++ .../enso_metrics/enso_divedowns/pattern_9.py | 10 ++++ .../enso_metrics/feedback/feedback_metrics.py | 10 ++++ .../feedback/feedback_metrics_lvl4.py | 10 ++++ .../feedback/feedback_nhf_lvl3_4.py | 2 + .../feedback/feedback_nhf_metric.py | 2 + .../enso_metrics/teleconnections_metrics.py | 10 ++++ ...=> recipe_enso_basicclimatology_CMIP7.yml} | 59 +++++++++++++------ ... => recipe_enso_characteristics_CMIP7.yml} | 19 +++--- 15 files changed, 140 insertions(+), 30 deletions(-) rename esmvaltool/recipes/ref/{recipe_enso_basicclimatology.yml => recipe_enso_basicclimatology_CMIP7.yml} (72%) rename esmvaltool/recipes/ref/{recipe_enso_characteristics.yml => recipe_enso_characteristics_CMIP7.yml} (88%) diff --git a/esmvaltool/diag_scripts/enso_metrics/climatology_diagnostic1.py b/esmvaltool/diag_scripts/enso_metrics/climatology_diagnostic1.py index 440a8d9d1e..d88fc5bbf3 100755 --- a/esmvaltool/diag_scripts/enso_metrics/climatology_diagnostic1.py +++ b/esmvaltool/diag_scripts/enso_metrics/climatology_diagnostic1.py @@ -206,10 +206,10 @@ def main(cfg): prov = provenance_record(grp, list(cfg["input_data"].keys())) for metadata in var_attr: logger.info("iterate though datasets\n %s", pformat(metadata)) - if metadata["project"] == "CMIP6": + if metadata["project"].startswith("CMIP"): pairs.append(metadata) fig, filename, rmse = plot_level1(pairs, cfg, prov) - + logger.info("metric %s", rmse) save_figure( "_".join(filename), prov, diff --git a/esmvaltool/diag_scripts/enso_metrics/climatology_diagnosticlevel2.py b/esmvaltool/diag_scripts/enso_metrics/climatology_diagnosticlevel2.py index 083379ab0b..864b528370 100755 --- a/esmvaltool/diag_scripts/enso_metrics/climatology_diagnosticlevel2.py +++ b/esmvaltool/diag_scripts/enso_metrics/climatology_diagnosticlevel2.py @@ -153,7 +153,7 @@ def main(cfg): # create pairs, add obs first to list pairs = [var_attr[-1]] logger.info("iterate though datasets\n %s", pformat(metadata)) - if metadata["project"] == "CMIP6": + if metadata["project"].startswith("CMIP"): pairs.append(metadata) fig = plotmaps_level2(pairs, grp) filename = "_".join( diff --git a/esmvaltool/diag_scripts/enso_metrics/climatology_diagnosticlevel3.py b/esmvaltool/diag_scripts/enso_metrics/climatology_diagnosticlevel3.py index 8e359b1e2a..f510f27955 100755 --- a/esmvaltool/diag_scripts/enso_metrics/climatology_diagnosticlevel3.py +++ b/esmvaltool/diag_scripts/enso_metrics/climatology_diagnosticlevel3.py @@ -199,7 +199,7 @@ def main(cfg): # create pairs, add obs first to list pairs = [var_attr[-1]] logger.info("iterate though datasets\n %s", pformat(metadata)) - if metadata["project"] == "CMIP6": + if metadata["project"].startswith("CMIP"): pairs.append(metadata) fig = plotmaps_level3(pairs, itcz=False) # save_plotdata(data_cubes, grp, pairs, cfg) diff --git a/esmvaltool/diag_scripts/enso_metrics/enso_diag1metrics.py b/esmvaltool/diag_scripts/enso_metrics/enso_diag1metrics.py index 5b639461af..415a7c822c 100755 --- a/esmvaltool/diag_scripts/enso_metrics/enso_diag1metrics.py +++ b/esmvaltool/diag_scripts/enso_metrics/enso_diag1metrics.py @@ -549,11 +549,21 @@ def main(cfg): variable_group=var_prep, project="OBS6", ) + obs += select_metadata( + input_data, + variable_group=var_prep, + project="obs4MIPs", + ) models += select_metadata( input_data, variable_group=var_prep, project="CMIP6", ) + models += select_metadata( + input_data, + variable_group=var_prep, + project="CMIP7", + ) group_obs_models(obs, models, metric, var_preproc, cfg) diff --git a/esmvaltool/diag_scripts/enso_metrics/enso_divedowns/ampseasskew_1113.py b/esmvaltool/diag_scripts/enso_metrics/enso_divedowns/ampseasskew_1113.py index b177d7ce01..eda16c6558 100755 --- a/esmvaltool/diag_scripts/enso_metrics/enso_divedowns/ampseasskew_1113.py +++ b/esmvaltool/diag_scripts/enso_metrics/enso_divedowns/ampseasskew_1113.py @@ -398,11 +398,21 @@ def main(cfg): variable_group=var_prep, project="OBS6", ) + obs += select_metadata( + input_data, + variable_group=var_prep, + project="obs4MIPs", + ) models += select_metadata( input_data, variable_group=var_prep, project="CMIP6", ) + models += select_metadata( + input_data, + variable_group=var_prep, + project="CMIP7", + ) # log msg = f"{metric} : observation datasets {len(obs)}, models {pformat(models)}" diff --git a/esmvaltool/diag_scripts/enso_metrics/enso_divedowns/durdiver_1415.py b/esmvaltool/diag_scripts/enso_metrics/enso_divedowns/durdiver_1415.py index 0715f8c9f1..7aa57c98f5 100755 --- a/esmvaltool/diag_scripts/enso_metrics/enso_divedowns/durdiver_1415.py +++ b/esmvaltool/diag_scripts/enso_metrics/enso_divedowns/durdiver_1415.py @@ -292,11 +292,21 @@ def main(cfg): variable_group=var_prep, project="OBS6", ) + obs += select_metadata( + input_data, + variable_group=var_prep, + project="obs4MIPs", + ) models += select_metadata( input_data, variable_group=var_prep, project="CMIP6", ) + models += select_metadata( + input_data, + variable_group=var_prep, + project="CMIP7", + ) msg = ( f"{metric} : observation datasets {len(obs)}, models {len(models)}" diff --git a/esmvaltool/diag_scripts/enso_metrics/enso_divedowns/lifecycle_10.py b/esmvaltool/diag_scripts/enso_metrics/enso_divedowns/lifecycle_10.py index 59581049de..8eb99287af 100755 --- a/esmvaltool/diag_scripts/enso_metrics/enso_divedowns/lifecycle_10.py +++ b/esmvaltool/diag_scripts/enso_metrics/enso_divedowns/lifecycle_10.py @@ -392,11 +392,21 @@ def main(cfg): variable_group=var_prep, project="OBS6", ) + obs += select_metadata( + input_data, + variable_group=var_prep, + project="obs4MIPs", + ) models += select_metadata( input_data, variable_group=var_prep, project="CMIP6", ) + models += select_metadata( + input_data, + variable_group=var_prep, + project="CMIP7", + ) # log msg = ( diff --git a/esmvaltool/diag_scripts/enso_metrics/enso_divedowns/pattern_9.py b/esmvaltool/diag_scripts/enso_metrics/enso_divedowns/pattern_9.py index 4d6b4d1173..a9bb73fe56 100755 --- a/esmvaltool/diag_scripts/enso_metrics/enso_divedowns/pattern_9.py +++ b/esmvaltool/diag_scripts/enso_metrics/enso_divedowns/pattern_9.py @@ -334,11 +334,21 @@ def main(cfg): variable_group=var_prep, project="OBS6", ) + obs += select_metadata( + input_data, + variable_group=var_prep, + project="obs4MIPs", + ) models += select_metadata( input_data, variable_group=var_prep, project="CMIP6", ) + models += select_metadata( + input_data, + variable_group=var_prep, + project="CMIP7", + ) msg = f"{metric} : observation datasets {len(obs)}, models {pformat(models)}" logger.info(msg) diff --git a/esmvaltool/diag_scripts/enso_metrics/feedback/feedback_metrics.py b/esmvaltool/diag_scripts/enso_metrics/feedback/feedback_metrics.py index fd65f1b892..8b29b4b077 100755 --- a/esmvaltool/diag_scripts/enso_metrics/feedback/feedback_metrics.py +++ b/esmvaltool/diag_scripts/enso_metrics/feedback/feedback_metrics.py @@ -416,11 +416,21 @@ def main(cfg): variable_group=var_prep, project="OBS6", ) + obs += select_metadata( + input_data, + variable_group=var_prep, + project="obs4MIPs", + ) models += select_metadata( input_data, variable_group=var_prep, project="CMIP6", ) + models += select_metadata( + input_data, + variable_group=var_prep, + project="CMIP7", + ) # log msg = ( diff --git a/esmvaltool/diag_scripts/enso_metrics/feedback/feedback_metrics_lvl4.py b/esmvaltool/diag_scripts/enso_metrics/feedback/feedback_metrics_lvl4.py index 2d6b1509d9..5346975ed6 100755 --- a/esmvaltool/diag_scripts/enso_metrics/feedback/feedback_metrics_lvl4.py +++ b/esmvaltool/diag_scripts/enso_metrics/feedback/feedback_metrics_lvl4.py @@ -320,11 +320,21 @@ def main(cfg): variable_group=var_prep, project="OBS6", ) + obs += select_metadata( + input_data, + variable_group=var_prep, + project="obs4MIPs", + ) models += select_metadata( input_data, variable_group=var_prep, project="CMIP6", ) + models += select_metadata( + input_data, + variable_group=var_prep, + project="CMIP7", + ) # log msg = ( diff --git a/esmvaltool/diag_scripts/enso_metrics/feedback/feedback_nhf_lvl3_4.py b/esmvaltool/diag_scripts/enso_metrics/feedback/feedback_nhf_lvl3_4.py index 4a6601d2ab..e48be90c39 100755 --- a/esmvaltool/diag_scripts/enso_metrics/feedback/feedback_nhf_lvl3_4.py +++ b/esmvaltool/diag_scripts/enso_metrics/feedback/feedback_nhf_lvl3_4.py @@ -332,7 +332,9 @@ def main(cfg): obs += select_metadata(input_data, project="OBS") obs += select_metadata(input_data, project="OBS6") + obs += select_metadata(input_data, project="obs4MIPs") models += select_metadata(input_data, project="CMIP6") + models += select_metadata(input_data, project="CMIP7") # log msg = f"{metric} : observation datasets {len(obs)}, models {len(models)}" diff --git a/esmvaltool/diag_scripts/enso_metrics/feedback/feedback_nhf_metric.py b/esmvaltool/diag_scripts/enso_metrics/feedback/feedback_nhf_metric.py index 402b4518e8..0f87b96b12 100755 --- a/esmvaltool/diag_scripts/enso_metrics/feedback/feedback_nhf_metric.py +++ b/esmvaltool/diag_scripts/enso_metrics/feedback/feedback_nhf_metric.py @@ -275,7 +275,9 @@ def main(cfg): obs += select_metadata(input_data, project="OBS") obs += select_metadata(input_data, project="OBS6") + obs += select_metadata(input_data, project="obs4MIPs") models += select_metadata(input_data, project="CMIP6") + models += select_metadata(input_data, project="CMIP7") # log msg = f"{metric} : observation datasets {len(obs)}, models {len(models)}" diff --git a/esmvaltool/diag_scripts/enso_metrics/teleconnections_metrics.py b/esmvaltool/diag_scripts/enso_metrics/teleconnections_metrics.py index 6413391c2a..618ed6d452 100755 --- a/esmvaltool/diag_scripts/enso_metrics/teleconnections_metrics.py +++ b/esmvaltool/diag_scripts/enso_metrics/teleconnections_metrics.py @@ -335,11 +335,21 @@ def main(cfg): variable_group=var_prep, project="OBS6", ) + obs += select_metadata( + input_data, + variable_group=var_prep, + project="obs4MIPs", + ) models += select_metadata( input_data, variable_group=var_prep, project="CMIP6", ) + models += select_metadata( + input_data, + variable_group=var_prep, + project="CMIP7", + ) # log msg = ( diff --git a/esmvaltool/recipes/ref/recipe_enso_basicclimatology.yml b/esmvaltool/recipes/ref/recipe_enso_basicclimatology_CMIP7.yml similarity index 72% rename from esmvaltool/recipes/ref/recipe_enso_basicclimatology.yml rename to esmvaltool/recipes/ref/recipe_enso_basicclimatology_CMIP7.yml index 1a523b051a..65c7f37e51 100644 --- a/esmvaltool/recipes/ref/recipe_enso_basicclimatology.yml +++ b/esmvaltool/recipes/ref/recipe_enso_basicclimatology_CMIP7.yml @@ -13,7 +13,16 @@ documentation: datasets: ## one CMIP6 model for REF ## - - {dataset: ACCESS-CM2, project: CMIP6, exp: historical, ensemble: r1i1p1f1, grid: gn, start_year: 1850, end_year: 2014} + # - {dataset: ACCESS-CM2, project: CMIP6, exp: historical, ensemble: r1i1p1f1, grid: gn, start_year: 1850, end_year: 2014} + - dataset: DUMMY-MODEL + project: CMIP7 + exp: historical + ensemble: r1i1p1f3 + grid: g999 + activity: CMIP + institute: CCCma + frequency: mon + region: glb @@ -97,49 +106,57 @@ diagnostics: pr_double: short_name: pr preprocessor: ITCZ_bias - mip: Amon + mip: atmos + branding_suffix: tavg-u-hxy-u additional_datasets: - - {dataset: "GPCP-V2.3", project: obs4MIPs, tier: 1, start_year: 1979, end_year: 2017} + - {dataset: "GPCP-V3.3", project: obs4MIPs, tier: 1, start_year: 1983, end_year: 2021} eq_pr_bias: short_name: pr preprocessor: eq_bias - mip: Amon + mip: atmos + branding_suffix: tavg-u-hxy-u additional_datasets: - - {dataset: "GPCP-V2.3", project: obs4MIPs, tier: 1, start_year: 1979, end_year: 2017} + - {dataset: "GPCP-V3.3", project: obs4MIPs, tier: 1, start_year: 1983, end_year: 2021} eq_sst_bias: short_name: tos preprocessor: eq_bias - mip: Omon + mip: ocean + branding_suffix: tavg-u-hxy-sea additional_datasets: - {dataset: TROPFLUX, version: v1, project: OBS6, type: reanaly, tier: 2, start_year: 1979, end_year: 2018} eq_tauu_bias: short_name: tauu preprocessor: eq_bias - mip: Amon + mip: atmos + branding_suffix: tavg-u-hxy-u additional_datasets: - {dataset: TROPFLUX, version: v1, project: OBS6, type: reanaly, tier: 2, mip: Amon, start_year: 1979, end_year: 2018} pr_double_seacycle: short_name: pr preprocessor: ITCZ_sea_cycle - mip: Amon + mip: atmos + branding_suffix: tavg-u-hxy-u additional_datasets: - - {dataset: "GPCP-V2.3", project: obs4MIPs, tier: 1, start_year: 1979, end_year: 2017} + - {dataset: "GPCP-V3.3", project: obs4MIPs, tier: 1, start_year: 1983, end_year: 2021} eq_pr_seacycle: short_name: pr preprocessor: eq_sea_cycle - mip: Amon + mip: atmos + branding_suffix: tavg-u-hxy-u additional_datasets: - - {dataset: "GPCP-V2.3", project: obs4MIPs, tier: 1, start_year: 1979, end_year: 2017} + - {dataset: "GPCP-V3.3", project: obs4MIPs, tier: 1, start_year: 1983, end_year: 2021} eq_sst_seacycle: short_name: tos preprocessor: eq_sea_cycle - mip: Omon + mip: ocean + branding_suffix: tavg-u-hxy-sea additional_datasets: - {dataset: TROPFLUX, version: v1, project: OBS6, type: reanaly, tier: 2, mip: Omon} eq_tauu_seacycle: short_name: tauu preprocessor: eq_sea_cycle - mip: Amon + mip: atmos + branding_suffix: tavg-u-hxy-u additional_datasets: - {dataset: TROPFLUX, version: v1, project: OBS6, type: reanaly, tier: 2, mip: Amon, start_year: 1979, end_year: 2018} scripts: @@ -152,25 +169,29 @@ diagnostics: pr_bias: short_name: pr preprocessor: map_bias_level2 - mip: Amon + mip: atmos + branding_suffix: tavg-u-hxy-u additional_datasets: - - {dataset: "GPCP-V2.3", project: obs4MIPs, tier: 1, start_year: 1979, end_year: 2017} + - - {dataset: "GPCP-V3.3", project: obs4MIPs, tier: 1, start_year: 1983, end_year: 2021} pr_seacycle: short_name: pr preprocessor: map_sea_cyclel2 - mip: Amon + mip: atmos + branding_suffix: tavg-u-hxy-u additional_datasets: - - {dataset: "GPCP-V2.3", project: obs4MIPs, tier: 1, start_year: 1979, end_year: 2017} + - - {dataset: "GPCP-V3.3", project: obs4MIPs, tier: 1, start_year: 1983, end_year: 2021} sst_bias: short_name: tos preprocessor: map_bias_level2 - mip: Omon + mip: ocean + branding_suffix: tavg-u-hxy-sea additional_datasets: - {dataset: TROPFLUX, version: v1, project: OBS6, type: reanaly, tier: 2, mip: Omon} tauu_bias: short_name: tauu preprocessor: map_bias_level2 - mip: Amon + mip: atmos + branding_suffix: tavg-u-hxy-u additional_datasets: - {dataset: TROPFLUX, version: v1, project: OBS6, type: reanaly, tier: 2, mip: Amon, start_year: 1979, end_year: 2018} diff --git a/esmvaltool/recipes/ref/recipe_enso_characteristics.yml b/esmvaltool/recipes/ref/recipe_enso_characteristics_CMIP7.yml similarity index 88% rename from esmvaltool/recipes/ref/recipe_enso_characteristics.yml rename to esmvaltool/recipes/ref/recipe_enso_characteristics_CMIP7.yml index 46ce5deac9..ddcb61755b 100644 --- a/esmvaltool/recipes/ref/recipe_enso_characteristics.yml +++ b/esmvaltool/recipes/ref/recipe_enso_characteristics_CMIP7.yml @@ -14,7 +14,18 @@ documentation: datasets: ## one CMIP6 model for REF ## - - {dataset: ACCESS-CM2, project: CMIP6, exp: historical, ensemble: r1i1p1f1, grid: gn, start_year: 1850, end_year: 2014} + # - {dataset: ACCESS-CM2, project: CMIP6, exp: historical, ensemble: r1i1p1f1, grid: gn, start_year: 1850, end_year: 2014} + - dataset: DUMMY-MODEL #mock CMIP7 data + project: CMIP7 + exp: historical + ensemble: r1i1p1f3 + grid: g999 + activity: CMIP + institute: CCCma + mip: ocean + branding_suffix: tavg-u-hxy-sea + frequency: mon + region: glb # observations - use one # - {dataset: NOAA-ERSSTv5, version: v5, project: OBS6, type: reanaly, tier: 2, mip: Omon} @@ -97,29 +108,23 @@ diagnostics: variables: tos_seas_asym: # seasonality and asymmetry short_name: tos - mip: Omon preprocessor: enso_seas_asym tos_amp: # amplitude short_name: tos - mip: Omon preprocessor: enso_amplitude tos_patdiv1: # pattern diversity pt1 short_name: tos - mip: Omon preprocessor: ssta_dec_area tos_lifdur1: # lifecycle duration pt1 short_name: tos - mip: Omon preprocessor: ssta_ninoarea tos_lifdurdiv2: # pt2 diversity lifecycle duration short_name: tos - mip: Omon preprocessor: ssta_meridional tos_pat2: # pt2 pattern short_name: tos - mip: Omon preprocessor: ssta_pattern2 scripts: