High-level workflow scripts for common validation and analysis tasks.
Extract annual means from pre-processed NetCDF files for all RECCAP2 regions and generate time series plots.
# Basic usage
python scripts/extract_preprocessed.py xqhuc
# With custom base directory
python scripts/extract_preprocessed.py xqhuc --base-dir ~/annual_mean- Annual mean NetCDF files in
~/annual_mean/{expt}/(or custom base directory){expt}_pa_annual_mean.nc(atmosphere){expt}_pt_annual_mean.nc(TRIFFID){expt}_pf_annual_mean.nc(ocean)
Creates validation_outputs/single_val_{expt}/ containing:
validation_outputs/single_val_{expt}/
├── {expt}_extraction.csv # Time-mean values for all variables and regions
└── plots/
├── allvars_global_{expt}_timeseries.png
├── allvars_Europe_{expt}_timeseries.png
├── allvars_North_America_{expt}_timeseries.png
├── allvars_South_America_{expt}_timeseries.png
├── allvars_Africa_{expt}_timeseries.png
├── allvars_North_Asia_{expt}_timeseries.png
├── allvars_Central_Asia_{expt}_timeseries.png
├── allvars_East_Asia_{expt}_timeseries.png
├── allvars_South_Asia_{expt}_timeseries.png
├── allvars_South_East_Asia_{expt}_timeseries.png
└── allvars_Oceania_{expt}_timeseries.png
- Extracts data for all RECCAP2 regions (global + 10 regions)
- Saves to CSV with time-mean values in same format as observational data
- Generates time series plots for each region showing:
- Carbon fluxes (GPP, NPP, Rh, fgco2)
- Carbon stocks (CVeg, CSoil)
- Climate variables (tas, pr)
- PFT fractions (if available)
- Automatically skips regions with no data
{expt}_extraction.csv: Time-mean values in same format as validate_experiment.py output
,global,North_America,South_America,Europe,Africa,...
CSoil,1234.56,123.45,234.56,45.67,345.67,...
CVeg,567.89,56.78,78.90,12.34,89.01,...
GPP,134.81,18.40,31.65,6.11,30.02,...
NPP,68.29,10.36,14.45,3.42,14.45,...
Rh,65.52,7.99,17.20,2.69,15.57,...
...- Only variables successfully extracted are shown in plots
- If many variables are missing, check:
- Annual mean files exist in base directory
- Files generated using
annual_mean_cdo.sh - STASH codes are correct in files
Comprehensive validation of a single UM experiment against CMIP6 and RECCAP2 observations.
# Basic usage
python scripts/validate_experiment.py xqhuc
# With custom base directory
python scripts/validate_experiment.py --expt xqhuc --base-dir ~/annual_mean- Annual mean NetCDF files in
~/annual_mean/{expt}/ - Observational data (automatically loaded from package data)
Creates validation_outputs/single_val_{expt}/ containing:
validation_outputs/single_val_{expt}/
├── {expt}_metrics.csv # UM results (obs format)
├── {expt}_bias_vs_cmip6.csv # Bias statistics vs CMIP6
├── {expt}_bias_vs_reccap2.csv # Bias statistics vs RECCAP2
├── comparison_summary.txt # Text summary with performance comparison
└── plots/
├── GPP_three_way.png # Three-way comparison plots
├── NPP_three_way.png
├── CVeg_three_way.png
├── CSoil_three_way.png
├── Tau_three_way.png
├── bias_heatmap_vs_cmip6.png # Regional bias heatmaps
├── bias_heatmap_vs_reccap2.png
└── *_timeseries_global.png # Time series plots
- Computes UM metrics for all RECCAP2 regions (global + 11 regions)
- Loads observational data (CMIP6 ensemble and RECCAP2)
- Computes bias statistics (bias, bias %, RMSE, within uncertainty)
- Exports to CSV in standardized format matching obs/ files
- Creates visualizations:
- Three-way comparisons (UM vs CMIP6 vs RECCAP2)
- Regional bias heatmaps
- Time series with observational uncertainty
- Generates text summary comparing UM vs CMIP6 performance
{expt}_metrics.csv: UM results in same format as observational CSV files
,global,North_America,South_America,Europe,Africa,...
GPP,134.81,18.40,31.65,6.11,30.02,...
NPP,68.29,10.36,14.45,3.42,14.45,...
...{expt}bias_vs*.csv: Detailed bias statistics
metric,region,um_mean,obs_mean,bias,bias_percent,rmse,within_uncertainty
GPP,global,134.81,124.04,10.77,8.68,10.94,False
...