CMIP7 QC Validation
This page describes how to run ACCESS-MOPPy output quality-control checks on CMORised files.
Scope
QC is run on the CMORised output file, not the raw model input.
For
source_id=ACCESS-ESM1-6, QC covers all variables present inACCESS-ESM1-6_mappings.jsonwith generic checks (non-missing values, finite values, and units checks where defined).Physical ranges for all 293 ACCESS-ESM1-6 mapped variables are defined explicitly in the QC configuration with defaults and experiment-specific overrides (historical, piControl, ssp*).
Each variable’s physical range is derived from its definition (mapping units) and stored as a per-variable rule entry.
Rules are loaded from:
access_moppy/resources/qc/cmip7_ranges.yml.
Running QC in Notebooks
Use the Python API to validate a CMORised file after cmoriser.write().
from access_moppy.qc import validate_cmip7_output
# Write CMORised output first
cmoriser.run()
cmoriser.write()
# Validate the written file
output_file = "/path/to/CMIP7/output.nc"
validate_cmip7_output(output_file)
If a check fails, validate_cmip7_output raises ValueError with details
about the variable, experiment, observed range, and allowed range.
Running QC from the CLI
ACCESS-MOPPy provides a CLI command:
moppy-qc /path/to/file1.nc /path/to/file2.nc
Exit status:
0: all files passed1: one or more files failed
Example output:
PASS /path/to/file1.nc
FAIL /path/to/file2.nc: CMIP7 QC failed for tas in experiment piControl using rule piControl: observed range 182.000..329.400 K is outside allowed range 180.000..325.000 K.
Automatic QC during CMORisation
For CMIP7 runs, ACCESS-MOPPy automatically validates output in the write path
after writing and repacking the file. In other words, when you call
cmoriser.write() for CMIP7 output, QC is already executed.
Batch Report QC Summary
When running a batch CMORisation, the batch report (moppy_batch_report_<UTC>.json)
automatically includes a QC section summarizing validation results for all
CMORised output files:
{
"qc": {
"passed": 42,
"failed": 2,
"total": 44,
"failures": [
{
"file": "/output/path/tas.nc",
"variable_id": "tas",
"experiment_id": "piControl",
"error": "Observed range 182.000..329.400 K is outside allowed 180.000..325.000 K.",
"observed_range": [182.0, 329.4],
"allowed_range": [180.0, 325.0],
"units": "K"
}
]
}
}
To disable QC collection during batch report generation, use one of:
# Environment variable
export MOPPY_SKIP_QC=1
moppy-batch-report --db cmor_tasks.db
# CLI flag
moppy-batch-report --db cmor_tasks.db --skip-qc
Or programmatically:
from access_moppy.batch_report import write_batch_report
write_batch_report(db_path, skip_qc=True)
Extending rules
To add experiment-specific thresholds for a variable, or to override ranges for newly added variables, edit:
src/access_moppy/resources/qc/cmip7_ranges.yml
Under the variables section, each variable has a default entry and an
optional experiments map for experiment-specific min/max values. For example:
variables:
tas:
units: K
default:
min: 180.0
max: 330.0
experiments:
historical:
min: 180.0
max: 330.0
piControl:
min: 180.0
max: 325.0
Rule structure example:
variables:
tas:
units: K
default:
min: 180.0
max: 330.0
experiments:
historical:
min: 180.0
max: 330.0
piControl:
min: 180.0
max: 325.0
ssp*:
min: 180.0
max: 335.0