From 6aa632deff42826b38cf0163ca1a464ab534a1a9 Mon Sep 17 00:00:00 2001 From: lee1043 Date: Mon, 16 Mar 2026 16:13:46 -0700 Subject: [PATCH 1/5] apply updated QAQC TOML --- QAQC/coordinate_variables.toml | 1197 +++++++++++++++++++++++++ QAQC/drs.toml | 19 + QAQC/file.toml | 15 + QAQC/geophysical_variable.toml | 120 +++ QAQC/global_attributes.toml | 347 +++++++ QAQC/project.toml | 7 + ref_cmip7.toml => QAQC/ref_cmip7.toml | 0 7 files changed, 1705 insertions(+) create mode 100644 QAQC/coordinate_variables.toml create mode 100644 QAQC/drs.toml create mode 100644 QAQC/file.toml create mode 100644 QAQC/geophysical_variable.toml create mode 100644 QAQC/global_attributes.toml create mode 100644 QAQC/project.toml rename ref_cmip7.toml => QAQC/ref_cmip7.toml (100%) diff --git a/QAQC/coordinate_variables.toml b/QAQC/coordinate_variables.toml new file mode 100644 index 000000000..a8a4a0e76 --- /dev/null +++ b/QAQC/coordinate_variables.toml @@ -0,0 +1,1197 @@ +# ============================================================================== +# == Metadata checks applied to all coordinate variables +# ============================================================================== + +[coordinates.bounds] +# Checks VAR004 +severity = "H" + +[coordinates.dimensions] +# Checks VAR002 DIM001 DIM002 DIM003 +severity = "H" + +# ============================================================================== +# == Metadata checks applied to latitude coordinate +# ============================================================================== + +[coordinates.latitude.name] +# Checks VAR001 +severity = "H" +variable_name = "lat" + +[coordinates.latitude.type] +# Checks VAR001 +severity = "H" +data_type = "double" + +[coordinates.latitude.monotonicity] +# Checks VAR005 +severity = "H" +direction = "increasing" + +[coordinates.latitude.attributes.axis] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "Y" + +[coordinates.latitude.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "latitude" + +[coordinates.latitude.attributes.units] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "degrees_north" + +[coordinates.latitude.attributes.bounds] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +as_variable = true + +# ============================================================================== +# == Metadata checks applied to longitude coordinate +# ============================================================================== + +[coordinates.longitude.name] +# Checks VAR001 +severity = "H" +variable_name = "lon" + +[coordinates.longitude.type] +# Checks VAR005 +severity = "H" +data_type = "double" + +[coordinates.longitude.monotonicity] +# Checks VAR005 +severity = "H" +direction = "increasing" + +[coordinates.longitude.attributes.axis] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "X" + +[coordinates.longitude.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "longitude" + +[coordinates.longitude.attributes.units] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "degrees_east" + +[coordinates.longitude.attributes.bounds] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +as_variable = true + +# ============================================================================== +# == Metadata checks applied to air pressure coordinate +# ============================================================================== + +[coordinates.air_pressure.name] +# Checks VAR001 +severity = "H" +variable_name = "plev" + +[coordinates.air_pressure.type] +# Checks VAR001 +severity = "H" +data_type = "double" + +[coordinates.air_pressure.monotonicity] +# Checks VAR005 +severity = "H" +direction = "decreasing" + +[coordinates.air_pressure.attributes.axis] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "Z" + +[coordinates.air_pressure.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "air_pressure" + +[coordinates.air_pressure.attributes.units] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "Pa" + +[coordinates.air_pressure.attributes.bounds] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = false +as_variable = true + +[coordinates.air_pressure.attributes.positive] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "down" + +# ============================================================================== +# == Metadata checks applied to height coordinate +# ============================================================================== + +[coordinates.height.name] +# Checks VAR001 +severity = "H" +variable_name = "height" + +[coordinates.height.type] +# Checks VAR001 +severity = "H" +data_type = "double" + +[coordinates.height.monotonicity] +# Checks VAR005 +severity = "H" +direction = "increasing" + +[coordinates.height.attributes.axis] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "Z" + +[coordinates.height.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "height" + +[coordinates.height.attributes.units] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "m" + +[coordinates.height.attributes.positive] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "up" + +# ============================================================================== +# == Metadata checks applied to depth coordinate +# ============================================================================== + +[coordinates.depth.name] +# Checks VAR001 +severity = "H" +variable_name = "depth" + +[coordinates.depth.type] +# Checks VAR001 +severity = "H" +data_type = "double" + +[coordinates.depth.monotonicity] +# Checks VAR005 +severity = "H" +direction = "increasing" + +[coordinates.depth.attributes.axis] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "Z" + +[coordinates.depth.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "depth" + +[coordinates.depth.attributes.units] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +enum = ["m", "cm"] + +[coordinates.depth.attributes.bounds] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = false +as_variable = true + +[coordinates.depth.attributes.positive] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "down" + +# ============================================================================== +# == Metadata checks applied to wavelength coordinate +# ============================================================================== + +[coordinates.wavelength.name] +# Checks VAR001 +severity = "H" +variable_name = "wavelength" + +[coordinates.wavelength.type] +# Checks VAR001 +severity = "H" +data_type = "double" + +[coordinates.wavelength.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "radiation_wavelength" + +[coordinates.wavelength.attributes.units] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "nm" + +# ============================================================================== +# == Metadata checks applied to scattering angle coordinate +# ============================================================================== + +[coordinates.scatangle.name] +# Checks VAR001 +severity = "H" +variable_name = "scatangle" + +[coordinates.scatangle.type] +# Checks VAR001 +severity = "H" +data_type = "double" + +[coordinates.scatangle.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "scattering_angle" + +[coordinates.scatangle.attributes.units] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "degree" + +# ============================================================================== +# == Metadata checks applied to type coordinate +# ============================================================================== + +[coordinates.type.name] +# Checks VAR001 +severity = "H" +variable_name = "type" + +[coordinates.type.type] +# Checks VAR001 +severity = "H" +data_type = "str" + +[coordinates.type.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "area_type" + +# ============================================================================== +# == Metadata checks applied to basin coordinate +# ============================================================================== + +[coordinates.basin.name] +# Checks VAR001 +severity = "H" +variable_name = "basin" + +[coordinates.basin.type] +# Checks VAR001 +severity = "H" +data_type = "str" + +[coordinates.basin.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "region" + +# ============================================================================== +# == Metadata checks applied to reflectivity coordinate +# ============================================================================== + +[coordinates.reflectivity.name] +# Checks VAR001 +severity = "H" +variable_name = "dbze" + +[coordinates.reflectivity.type] +# Checks VAR001 +severity = "H" +data_type = "double" + +[coordinates.reflectivity.monotonicity] +# Checks VAR005 +severity = "H" +direction = "increasing" + +[coordinates.reflectivity.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "equivalent_reflectivity_factor" + +[coordinates.reflectivity.attributes.units] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "dBZ" + +[coordinates.reflectivity.attributes.bounds] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +as_variable = true + +# ============================================================================== +# == Metadata checks applied to line coordinate +# ============================================================================== + +[coordinates.line.name] +# Checks VAR001 +severity = "H" +variable_name = "line" + +[coordinates.line.type] +# Checks VAR001 +severity = "H" +data_type = "str" + +[coordinates.line.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "region" + +# ============================================================================== +# == Metadata checks applied to backscattering ratio coordinate +# ============================================================================== + +[coordinates.scatratio.name] +# Checks VAR001 +severity = "H" +variable_name = "scatratio" + +[coordinates.scatratio.type] +# Checks VAR001 +severity = "H" +data_type = "double" + +[coordinates.scatratio.monotonicity] +# Checks VAR005 +severity = "H" +direction = "increasing" + +[coordinates.scatratio.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "backscattering_ratio" + +[coordinates.scatratio.attributes.units] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "1" + +[coordinates.scatratio.attributes.bounds] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +as_variable = true + +# ============================================================================== +# == Metadata checks applied to optical thickness coordinate +# ============================================================================== + +[coordinates.tau.name] +# Checks VAR001 +severity = "H" +variable_name = "tau" + +[coordinates.tau.type] +# Checks VAR001 +severity = "H" +data_type = "double" + +[coordinates.tau.monotonicity] +# Checks VAR005 +severity = "H" +direction = "increasing" + +[coordinates.tau.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "atmosphere_optical_thickness_due_to_cloud" + +[coordinates.tau.attributes.units] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "1" + +[coordinates.tau.attributes.bounds] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +as_variable = true + +# ============================================================================== +# == Metadata checks applied to Antarctic X-coordinate +# ============================================================================== + +[coordinates.xant.name] +# Checks VAR001 +severity = "H" +variable_name = "xant" + +[coordinates.xant.type] +# Checks VAR001 +severity = "H" +data_type = "double" + +[coordinates.xant.attributes.axis] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "X" + +[coordinates.xant.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "projection_x_coordinate" + +[coordinates.xant.attributes.units] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "km" + +# ============================================================================== +# == Metadata checks applied to Greenland X-coordinate +# ============================================================================== + +[coordinates.xgre.name] +# Checks VAR001 +severity = "H" +variable_name = "xgre" + +[coordinates.xgre.type] +# Checks VAR001 +severity = "H" +data_type = "double" + +[coordinates.xgre.attributes.axis] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "X" + +[coordinates.xgre.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "projection_x_coordinate" + +[coordinates.xgre.attributes.units] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "km" + +# ============================================================================== +# == Metadata checks applied to Antarctic Y-coordinate +# ============================================================================== + +[coordinates.yant.name] +# Checks VAR001 +severity = "H" +variable_name = "yant" + +[coordinates.yant.type] +# Checks VAR001 +severity = "H" +data_type = "double" + +[coordinates.yant.attributes.axis] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "Y" + +[coordinates.yant.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "projection_y_coordinate" + +[coordinates.yant.attributes.units] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "km" + +# ============================================================================== +# == Metadata checks applied to Greenland Y-coordinate +# ============================================================================== + +[coordinates.ygre.name] +# Checks VAR001 +severity = "H" +variable_name = "ygre" + +[coordinates.ygre.type] +# Checks VAR001 +severity = "H" +data_type = "double" + +[coordinates.ygre.attributes.axis] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "Y" + +[coordinates.ygre.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "projection_y_coordinate" + +[coordinates.ygre.attributes.units] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "km" + +# ============================================================================== +# == Metadata checks applied to grid latitude coordinate +# ============================================================================== + +[coordinates.rlat.name] +# Checks VAR001 +severity = "H" +variable_name = "rlat" + +[coordinates.rlat.type] +# Checks VAR001 +severity = "H" +data_type = "double" + +[coordinates.rlat.monotonicity] +# Checks VAR005 +severity = "H" +direction = "increasing" + +[coordinates.rlat.attributes.axis] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "Y" + +[coordinates.rlat.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "grid_latitude" + +[coordinates.rlat.attributes.units] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "degrees" + +[coordinates.rlat.attributes.bounds] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +as_variable = true + +# ============================================================================== +# == Metadata checks applied to grid longitude coordinate +# ============================================================================== + +[coordinates.rlon.name] +# Checks VAR001 +severity = "H" +variable_name = "rlon" + +[coordinates.rlon.type] +# Checks VAR001 +severity = "H" +data_type = "double" + +[coordinates.rlon.monotonicity] +# Checks VAR005 +severity = "H" +direction = "increasing" + +[coordinates.rlon.attributes.axis] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "X" + +[coordinates.rlon.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "grid_longitude" + +[coordinates.rlon.attributes.units] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "degrees" + +[coordinates.rlon.attributes.bounds] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +as_variable = true + +# ============================================================================== +# == Metadata checks applied to potential density coordinate +# ============================================================================== + +[coordinates.rho.name] +# Checks VAR001 +severity = "H" +variable_name = "rho" + +[coordinates.rho.type] +# Checks VAR001 +severity = "H" +data_type = "double" + +[coordinates.rho.monotonicity] +# Checks VAR005 +severity = "H" +direction = "increasing" + +[coordinates.rho.attributes.axis] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "Z" + +[coordinates.rho.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "sea_water_potential_density" + +[coordinates.rho.attributes.units] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "kg m-3" + +[coordinates.rho.attributes.bounds] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +as_variable = true + +[coordinates.rho.attributes.positive] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "down" + +# ============================================================================== +# == Metadata checks applied to spectral frequency coordinate +# ============================================================================== + +[coordinates.spectband.name] +# Checks VAR001 +severity = "H" +variable_name = "spectband" + +[coordinates.spectband.type] +# Checks VAR001 +severity = "H" +data_type = "double" + +[coordinates.spectband.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "sensor_band_central_radiation_wavenumber" + +[coordinates.spectband.attributes.units] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "m-1" + +[coordinates.spectband.attributes.bounds] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +as_variable = true + +# ============================================================================== +# == Metadata checks applied to time coordinate +# ============================================================================== + +[coordinates.time.name] +# Checks VAR001 +severity = "H" +variable_name = "time" + +[coordinates.time.type] +# Checks VAR001 +severity = "H" +data_type = "double" + +[coordinates.time.monotonicity] +# Checks VAR005 +severity = "H" +direction = "increasing" + +[coordinates.time.attributes.axis] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "T" + +[coordinates.time.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "time" + +[coordinates.time.attributes.calendar] +# Checks TIME003 ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +enum = [ + "gregorian", + "proleptic_gregorian", + "noleap", + "365_day", + "all_leap", + "366_day", + "360_day", + "utc", + "tai", +] + +[coordinates.time.attributes.units] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +pattern = "^days since [0-9]{4}-[0-9]{1,2}-[0-9]{1,2}" + +[coordinates.time.attributes.bounds] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = false +as_variable = true + +[coordinates.time.squareness] +# Check TIME001 +severity = "H" +ref_calendar = "" +ref_time_units = "" +ref_increment = "" + +[coordinates.time.coverage] +# Checks TIME002 +severity = "H" + +# ============================================================================== +# == Metadata checks applied to model coordinate +# ============================================================================== + +[coordinates.lev.name] +# Checks VAR001 +severity = "H" +variable_name = "lev" + +[coordinates.lev.type] +# Checks VAR001 +severity = "H" +data_type = "double" + +[coordinates.lev.monotonicity] +# Checks VAR005 +severity = "H" +direction = "increasing" + +[coordinates.lev.attributes.axis] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "Z" + +[coordinates.lev.attributes.bounds] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = false +as_variable = true + +[coordinates.lev.attributes.positive] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +enum = ["up", "down"] + +# ============================================================================== +# == Metadata checks applied to ice depth coordinate +# ============================================================================== + +[coordinates.iceband.name] +# Checks VAR001 +severity = "H" +variable_name = "iceband" + +[coordinates.iceband.type] +# Checks VAR001 +severity = "H" +data_type = "double" + +[coordinates.iceband.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "sea_ice_thickness" + +[coordinates.iceband.attributes.units] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "m" + +[coordinates.iceband.attributes.bounds] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +as_variable = true + +# ============================================================================== +# == Metadata checks applied to land use coordinate +# ============================================================================== + +[coordinates.landuse.name] +# Checks VAR001 +severity = "H" +variable_name = "landuse" + +[coordinates.landuse.type] +# Checks VAR001 +severity = "H" +data_type = "str" + +[coordinates.landuse.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "area_type" + +# ============================================================================== +# == Metadata checks applied to zenith angle coordinate +# ============================================================================== + +[coordinates.sza.name] +# Checks VAR001 +severity = "H" +variable_name = "sza" + +[coordinates.sza.type] +# Checks VAR001 +severity = "H" +data_type = "double" + +[coordinates.sza.monotonicity] +# Checks VAR005 +severity = "H" +direction = "increasing" + +[coordinates.sza.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "solar_zenith_angle" + +[coordinates.sza.attributes.units] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "degree" + +# ============================================================================== +# == Metadata checks applied to altitude coordinate +# ============================================================================== + +[coordinates.alt.name] +# Checks VAR001 +severity = "H" +variable_name = "alt" + +[coordinates.alt.type] +# Checks VAR001 +severity = "H" +data_type = "double" + +[coordinates.alt.monotonicity] +# Checks VAR005 +severity = "H" +direction = "increasing" + +[coordinates.alt.attributes.axis] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "Z" + +[coordinates.alt.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "altitude" + +[coordinates.alt.attributes.units] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "m" + +[coordinates.alt.attributes.bounds] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +as_variable = true + +[coordinates.alt.attributes.positive] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "up" + +# ============================================================================== +# == Metadata checks applied to hydrostatic pressure coordinate +# ============================================================================== + +[coordinates.pdepth.name] +# Checks VAR001 +severity = "H" +variable_name = "pdepth" + +[coordinates.pdepth.type] +# Checks VAR001 +severity = "H" +data_type = "double" + +[coordinates.pdepth.monotonicity] +# Checks VAR005 +severity = "H" +direction = "increasing" + +[coordinates.pdepth.attributes.axis] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "Z" + +[coordinates.pdepth.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "sea_water_pressure_due_to_sea_water" + +[coordinates.pdepth.attributes.units] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "bar" + +[coordinates.pdepth.attributes.bounds] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = false +as_variable = true + +[coordinates.pdepth.attributes.positive] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "down" + +# ============================================================================== +# == Metadata checks applied to relative humidity coordinate +# ============================================================================== + +[coordinates.hur.name] +# Checks VAR001 +severity = "H" +variable_name = "hur" + +[coordinates.hur.type] +# Checks VAR001 +severity = "H" +data_type = "double" + +[coordinates.hur.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "relative_humidity" + +[coordinates.hur.attributes.units] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "%" + +# ============================================================================== +# == Metadata checks applied to soil temperature coordinate +# ============================================================================== + +[coordinates.tsl0degC.name] +# Checks VAR001 +severity = "H" +variable_name = "tsl0degC" + +[coordinates.tsl0degC.type] +# Checks VAR001 +severity = "H" +data_type = "double" + +[coordinates.tsl0degC.attributes.axis] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "Z" + +[coordinates.tsl0degC.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "soil_temperature" + +[coordinates.tsl0degC.attributes.units] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +constant = "degC" diff --git a/QAQC/drs.toml b/QAQC/drs.toml new file mode 100644 index 000000000..5833f6f48 --- /dev/null +++ b/QAQC/drs.toml @@ -0,0 +1,19 @@ +# ============================================================================== +# == Data Reference Syntax checks +# ============================================================================== + +[drs.filename] +# Check FILE001 +severity = "H" + +[drs.directory] +# Check PATH003 +severity = "H" + +[drs.attributes_vs_directory] +# Checks PATH001 +severity = "H" + +[drs.filename_vs_directory] +# Check PATH002 +severity = "H" \ No newline at end of file diff --git a/QAQC/file.toml b/QAQC/file.toml new file mode 100644 index 000000000..75b677751 --- /dev/null +++ b/QAQC/file.toml @@ -0,0 +1,15 @@ +# ============================================================================== +# == File checks +# ============================================================================== + +[file.format] +# Check FILE002 +severity = "H" +expected_format = "HDF5" +expected_data_model = "NETCDF4_CLASSIC" + +[file.compression] +# Check FILE003 +severity = "H" +expected_complevel = 1 +expected_shuffle = true \ No newline at end of file diff --git a/QAQC/geophysical_variable.toml b/QAQC/geophysical_variable.toml new file mode 100644 index 000000000..96917ae8e --- /dev/null +++ b/QAQC/geophysical_variable.toml @@ -0,0 +1,120 @@ +# ============================================================================== +# == Geophysical variable metadata checks +# ============================================================================== + +[variable.existence] +# Checks VAR001 +severity = "H" + +[variable.type] +# Checks VAR005 +severity = "H" +data_type = "float" + +[variable.dimensions] +# Checks VAR006 VAR002 DIM001 DIM002 DIM003 +severity = "H" + +# ============================================================================== +# == Geophysical variable attributes checks +# ============================================================================== + +[variable.attributes.long_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "M" +value_type = "str" +is_required = true +cv_source_term_key = "long_name" + +[variable.attributes.standard_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +cv_source_term_key = "cf_standard_name" + +[variable.attributes.units] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +cv_source_term_key = "units" + +[variable.attributes.cell_methods] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "M" +value_type = "str" +is_required = true +cv_source_term_key = "cell_methods" + +[variable.attributes.cell_measures] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "M" +value_type = "str" +is_required = true +cv_source_term_key = "cell_measures" + +[variable.attributes.history] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "L" +value_type = "str" +is_required = false +pattern = ".*" + +[variable.attributes.comment] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "L" +value_type = "str" +is_required = false +pattern = ".*" + +[variable.attributes.description] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "L" +value_type = "str" +is_required = false +pattern = ".*" + +[variable.attributes.fill_value] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "float" +is_required = true +constant = 1.0e20 + +[variable.attributes.missing_value] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "float" +is_required = true +constant = 1.0e20 +# A valider ? +#threshold = "1.0e20" +#is_above_threshold = true + +[variable.attributes.scale_factor] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "float" +is_required = true + +[variable.attributes.add_offset] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "float" +is_required = true + +[variable.attributes.deflated_level] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +attribute_name = "_DeflateLevel" +severity = "H" +value_type = "int" +is_required = false +is_postive = true + +[variable.attributes.coordinates] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = false +as_variable = true \ No newline at end of file diff --git a/QAQC/global_attributes.toml b/QAQC/global_attributes.toml new file mode 100644 index 000000000..b68d0a255 --- /dev/null +++ b/QAQC/global_attributes.toml @@ -0,0 +1,347 @@ +# ============================================================================== +# == Global attributes checks +# ============================================================================== + +[global.attributes.activity_id] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +cv_source_collection = "activity" + +[global.attributes.area_label] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +cv_source_collection = "area_label" + +[global.attributes.branded_variable] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +cv_source_collection = "branded_variable" + +[global.attributes.branding_suffix] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +cv_source_collection = "branding_suffix" + +[global.attributes.branch_time_in_child] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "double" +is_required = false + +[global.attributes.branch_time_in_parent] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "double" +is_required = false + +[global.attributes.cmip6_compound_name] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "L" +value_type = "str" +is_required = false +pattern = ".*" + +[global.attributes.conventions] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +attribute_name = "Conventions" +severity = "H" +value_type = "str" +is_required = true +cv_source_collection = "conventions" + +[global.attributes.creation_date] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "L" +value_type = "str" +is_required = true +cv_source_collection = "creation_date" + +[global.attributes.data_specs_version] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +cv_source_collection = "data_specs_version" + +[global.attributes.drs_specs] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +cv_source_collection = "drs_specs" + +[global.attributes.experiment] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "M" +value_type = "str" +is_required = false +cv_source_collection = "experiment" +cv_source_collection_key = "description" + +[global.attributes.experiment_id] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +cv_source_collection = "experiment" + +[global.attributes.external_variables] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = false +cv_source_collection = "archive" + +[global.attributes.forcing_index] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true + +[global.attributes.frequency] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +cv_source_collection = "frequency" + +[global.attributes.grid_label] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +cv_source_collection = "grid_label" + +[global.attributes.horizontal_label] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +cv_source_collection = "horizontal_label" + +[global.attributes.initialization_index] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true + +[global.attributes.institution] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "M" +value_type = "str" +is_required = false +cv_source_collection = "institution" +cv_source_collection_key = "description" + +[global.attributes.institution_id] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +cv_source_collection = "institution" + +[global.attributes.license] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "L" +value_type = "str" +is_required = false +pattern = ".*" + +[global.attributes.license_id] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +cv_source_collection = "license" + +[global.attributes.mip_era] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +cv_source_collection = "mip_era" + +[global.attributes.nominal_resolution] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +cv_source_collection = "nominal_resolution" + +[global.attributes.parent_activity_id] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = false +cv_source_collection = "activity" + +[global.attributes.parent_experiment_id] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = false +cv_source_collection = "experiment" + +[global.attributes.parent_mip_era] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = false +cv_source_collection = "mip_era" + +[global.attributes.parent_source_id] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = false +cv_source_collection = "source" + +[global.attributes.parent_time_units] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +pattern = '^days since [0-9]{4}-[0-9]{1,2}-[0-9]{1,2} \((gregorian|standard|proleptic_gregorian|julian|noleap|365_day|all_leap|366_day|360_day|utc|tai)\)$' +severity = "H" +value_type = "str" +is_required = false + +[global.attributes.parent_variant_label] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = false +cv_source_collection = "variant_label" + +[global.attributes.physics_index] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true + +[global.attributes.product] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +cv_source_collection = "product" + +[global.attributes.realization_index] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "int" +is_required = true + +[global.attributes.realm] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +cv_source_collection = "realm" + +[global.attributes.references] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "L" +value_type = "str" +is_required = false +pattern = ".*" + +[global.attributes.region] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +cv_source_collection = "region" + +[global.attributes.source] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "L" +value_type = "str" +is_required = false +cv_source_collection = "source" +cv_source_collection_key = "description" + +[global.attributes.source_id] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +cv_source_collection = "source" + +[global.attributes.temporal_label] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +cv_source_collection = "temporal_label" + +[global.attributes.title] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "L" +value_type = "str" +is_required = false +pattern = ".*" + +[global.attributes.tracking_id] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +cv_source_collection = "tracking_id" + +[global.attributes.variable_id] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +cv_source_collection = "variable" + +[global.attributes.variant_info] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "L" +value_type = "str" +is_required = false +pattern = ".*" + +[global.attributes.variant_label] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +cv_source_collection = "variant_label" + +[global.attributes.vertical_label] +# Checks ATTR001 ATTR002 ATTR003 ATTR004 +severity = "H" +value_type = "str" +is_required = true +cv_source_collection = "vertical_label" + +# ============================================================================== +# == Global attributes consistency Checks +# ============================================================================== + +[global.consistency.filename_vs_attributes] +# Check ATTR005 +severity = "H" + +[global.consistency.experiment_properties] +# Check ATTR007 +severity = "H" + +[global.consistency.institution_properties] +# Check ATTR009 +severity = "H" + +[global.consistency.source_properties] +# Check ATTR010 +severity = "H" + +[global.consistency.variant_properties] +# Check ATTR006 +severity = "H" diff --git a/QAQC/project.toml b/QAQC/project.toml new file mode 100644 index 000000000..d32f8ee4f --- /dev/null +++ b/QAQC/project.toml @@ -0,0 +1,7 @@ +# ============================================================================== +# CMIP7 configuration files +# ============================================================================== +# To be Consistent with https://zenodo.org/records/17250297 +# Documentation & check inventory at https://esgf.github.io/cc-plugin-wcrp/checks/ +project_name = "cmip7" +project_version = "1.0" \ No newline at end of file diff --git a/ref_cmip7.toml b/QAQC/ref_cmip7.toml similarity index 100% rename from ref_cmip7.toml rename to QAQC/ref_cmip7.toml From 788e9d06c5d6598cc0ba1380427110db23428736 Mon Sep 17 00:00:00 2001 From: lee1043 Date: Mon, 16 Mar 2026 16:18:44 -0700 Subject: [PATCH 2/5] clean up --- QAQC/ref_cmip7.toml | 413 -------------------------------------------- 1 file changed, 413 deletions(-) delete mode 100644 QAQC/ref_cmip7.toml diff --git a/QAQC/ref_cmip7.toml b/QAQC/ref_cmip7.toml deleted file mode 100644 index 0618fb41d..000000000 --- a/QAQC/ref_cmip7.toml +++ /dev/null @@ -1,413 +0,0 @@ -# Original CMIP7 QAQC is available at -# https://github.com/ESGF/cc-plugin-wcrp/blob/master/plugins/cmip7/resources/wcrp_config.toml -# A few severity level adjusted for request from REF - -# ============================================================================== -# CMIP7 Configuration FILE -# ============================================================================== -project_name = "cmip7" -project_version = "1.0" - -#------------------------------------------------------------------------------ -# == Data Reference Syntax checks -# ------------------------------------------------------------------------------ - -[drs.filename] -severity = "H" - -[drs.directory] -severity = "H" - -[drs.attributes_vs_directory] -# Check PATH001 -severity = "H" - -[drs.filename_vs_directory] -# Check PATH002 -severity = "H" - -[file.format] -severity = "H" -expected_format = "HDF5" -expected_data_model = "NETCDF4_CLASSIC" - -[file.compression] -severity = "H" -expected_complevel = 1 -expected_shuffle = true - - -#------------------------------------------------------------------------------ -# Global Attributes checks -# ------------------------------------------------------------------------------ - -[global_attributes.activity_id] -severity = "H" -value_type = "str" -is_required = true -cv_source_collection = "activity" - -[global_attributes.area_label] -severity = "H" -value_type = "str" -is_required = true -cv_source_collection = "area_label" - -[global_attributes.branded_variable] -severity = "H" -value_type = "str" -is_required = true -cv_source_collection = "branded_variable" - -[global_attributes.branding_suffix] -severity = "H" -value_type = "str" -is_required = true -cv_source_collection = "branding_suffix" - -[global_attributes.branch_time_in_child] -severity = "H" -value_type = "float" -is_required = false - -[global_attributes.branch_time_in_parent] -severity = "H" -value_type = "float" -is_required = false - -[global_attributes.cmip6_compound_name] -severity = "L" -value_type = "str" -is_required = false -constraint = ".*" - -[global_attributes.conventions] -attribute_name = "Conventions" -severity = "H" -value_type = "str" -is_required = true -cv_source_collection = "conventions" - -[global_attributes.creation_date] -severity = "L" -value_type = "str" -is_required = true -cv_source_collection = "creation_date" - -[global_attributes.data_specs_version] -severity = "H" -value_type = "str" -is_required = true -cv_source_collection = "data_specs_version" - -[global_attributes.drs_specs] -severity = "H" -value_type = "str" -is_required = true -cv_source_collection = "drs_specs" - -[global_attributes.experiment] -severity = "M" -value_type = "str" -is_required = false -cv_source_collection = "experiment" -cv_source_collection_key = "description" - -[global_attributes.experiment_id] -severity = "H" -value_type = "str" -is_required = true -cv_source_collection = "experiment" - -[global_attributes.external_variables] -severity = "H" -value_type = "str" -is_required = false -cv_source_collection = "archive" - -# Index en INT pour éviter le crash ESGVOC -[global_attributes.forcing_index] -severity = "H" -value_type = "int" -is_required = true - -[global_attributes.frequency] -severity = "H" -value_type = "str" -is_required = true -cv_source_collection = "frequency" - -[global_attributes.grid_label] -severity = "H" -value_type = "str" -is_required = true -cv_source_collection = "grid_label" - -[global_attributes.horizontal_label] -severity = "H" -value_type = "str" -is_required = true -cv_source_collection = "horizontal_label" - -[global_attributes.initialization_index] -severity = "H" -value_type = "int" -is_required = true - -[global_attributes.institution] -severity = "M" -value_type = "str" -is_required = false -cv_source_collection = "institution" -cv_source_collection_key = "description" - -[global_attributes.institution_id] -severity = "H" -value_type = "str" -is_required = true -cv_source_collection = "institution" - -[global_attributes.license] -severity = "L" -value_type = "str" -is_required = false -constraint = ".*" - -[global_attributes.license_id] -severity = "H" -value_type = "str" -is_required = true -cv_source_collection = "license" - -[global_attributes.mip_era] -severity = "H" -value_type = "str" -is_required = true -cv_source_collection = "mip_era" - -[global_attributes.nominal_resolution] -severity = "H" -value_type = "str" -is_required = true -cv_source_collection = "nominal_resolution" - -[global_attributes.parent_activity_id] -severity = "H" -value_type = "str" -is_required = false -cv_source_collection = "activity" - -[global_attributes.parent_experiment_id] -severity = "H" -value_type = "str" -is_required = false -cv_source_collection = "experiment" - -[global_attributes.parent_mip_era] -severity = "H" -value_type = "str" -is_required = false -cv_source_collection = "mip_era" - -[global_attributes.parent_source_id] -severity = "H" -value_type = "str" -is_required = false -cv_source_collection = "source" - -[global_attributes.parent_time_units] -severity = "H" -value_type = "str" -is_required = false -constraint = "^days since [0-9]{4}-[0-9]{2}-[0-9]{2}$" - -[global_attributes.parent_variant_label] -severity = "H" -value_type = "str" -is_required = false -cv_source_collection = "variant_label" - -[global_attributes.physics_index] -severity = "H" -value_type = "int" -is_required = true - -[global_attributes.product] -severity = "H" -value_type = "str" -is_required = true -cv_source_collection = "product" - -[global_attributes.realization_index] -severity = "H" -value_type = "int" -is_required = true - -[global_attributes.realm] -severity = "H" -value_type = "str" -is_required = true -cv_source_collection = "realm" - -[global_attributes.references] -severity = "L" -value_type = "str" -is_required = false -constraint = ".*" - -[global_attributes.region] -severity = "H" -value_type = "str" -is_required = true -cv_source_collection = "region" - -[global_attributes.source] -severity = "L" -value_type = "str" -is_required = false -cv_source_collection = "source" -cv_source_collection_key = "description" - -[global_attributes.source_id] -severity = "H" -value_type = "str" -is_required = true -cv_source_collection = "source" - -[global_attributes.temporal_label] -severity = "H" -value_type = "str" -is_required = true -cv_source_collection = "temporal_label" - -[global_attributes.title] -severity = "L" -value_type = "str" -is_required = false -constraint = ".*" - -[global_attributes.tracking_id] -severity = "H" -value_type = "str" -is_required = true -cv_source_collection = "tracking_id" - -[global_attributes.variable_id] -severity = "H" -value_type = "str" -is_required = true -cv_source_collection = "variable" - -[global_attributes.variant_info] -severity = "L" -value_type = "str" -is_required = false -constraint = ".*" - -[global_attributes.variant_label] -severity = "H" -value_type = "str" -is_required = true -cv_source_collection = "variant_label" - -[global_attributes.vertical_label] -severity = "H" -value_type = "str" -is_required = true -cv_source_collection = "vertical_label" - - -# ============================================================================== -# == Geophysical variable metadata checks -# ============================================================================== - -[variable.existence] -severity = "H" - -[variable.type] -severity = "H" - -[variable.dimensions] -severity = "H" - -[variable.bnds_vertices] -severity = "H" - -[variable.shape_bounds] -# uniquement bounds value consistency -severity = "H" - -[variable.time_checks] -# time_range_vs_filename + time_bounds -severity = "H" - - -# ============================================================================== -# == Variable attributes checks -# ============================================================================== - -[variable.attributes.units] -severity = "H" - -[variable.attributes.long_name] -severity = "M" - -[variable.attributes.standard_name] -severity = "H" - -[variable.attributes.cell_methods] -severity = "M" - -[variable.attributes.cell_measures] -severity = "M" - -[variable.attributes.description] -severity = "L" - -# ============================================================================== -# == Coordinates checks -# ============================================================================ -[coordinates.auxiliary] -severity = "H" - -[coordinates.bounds] -severity = "H" - -[coordinates.properties] -severity = "H" - -[coordinates.time.squareness] -# Check TIME001 -severity = "H" -calendar = "" -ref_time_units = "" -frequency = { subhr = "30m" } - - -# ============================================================================== -# == CMIP7 Output Requirements Checks -# ============================================================================== -[cmip7_output_requirements.calendar] -enabled = true -severity = "H" # This is higher severity level than CMIP7 - -# ============================================================================== -# == Metadata Consistency Checks -# ============================================================================== - - -[consistency_checks.filename_vs_attributes] -# Check ATTR005 -severity = "H" - -[consistency_checks.experiment_details] -# Check ATTR007 -severity = "H" - -[consistency_checks.institution_details] -# Check ATTR009 -severity = "H" - -[consistency_checks.source_details] -# Check ATTR010 -severity = "H" From 6afb83b07e6b735017dcd2ae32ede29ef3bbf43d Mon Sep 17 00:00:00 2001 From: lee1043 Date: Mon, 16 Mar 2026 16:20:03 -0700 Subject: [PATCH 3/5] change log added --- changelog/598.fix.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog/598.fix.md diff --git a/changelog/598.fix.md b/changelog/598.fix.md new file mode 100644 index 000000000..b1b52b052 --- /dev/null +++ b/changelog/598.fix.md @@ -0,0 +1 @@ +QAQC toml files are updated following the latest version of https://github.com/ESGF/cc-plugin-wcrp \ No newline at end of file From 1b881c1f83ca81cde7620d1217a28ed4126729b2 Mon Sep 17 00:00:00 2001 From: lee1043 Date: Mon, 16 Mar 2026 16:22:14 -0700 Subject: [PATCH 4/5] clean up --- QAQC/drs.toml | 4 ++-- QAQC/file.toml | 2 +- QAQC/geophysical_variable.toml | 2 +- QAQC/global_attributes.toml | 8 ++++---- QAQC/project.toml | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/QAQC/drs.toml b/QAQC/drs.toml index 5833f6f48..97be3da74 100644 --- a/QAQC/drs.toml +++ b/QAQC/drs.toml @@ -15,5 +15,5 @@ severity = "H" severity = "H" [drs.filename_vs_directory] -# Check PATH002 -severity = "H" \ No newline at end of file +# Check PATH002 +severity = "H" diff --git a/QAQC/file.toml b/QAQC/file.toml index 75b677751..c66c6ac52 100644 --- a/QAQC/file.toml +++ b/QAQC/file.toml @@ -12,4 +12,4 @@ expected_data_model = "NETCDF4_CLASSIC" # Check FILE003 severity = "H" expected_complevel = 1 -expected_shuffle = true \ No newline at end of file +expected_shuffle = true diff --git a/QAQC/geophysical_variable.toml b/QAQC/geophysical_variable.toml index 96917ae8e..27ae41556 100644 --- a/QAQC/geophysical_variable.toml +++ b/QAQC/geophysical_variable.toml @@ -117,4 +117,4 @@ is_postive = true severity = "H" value_type = "str" is_required = false -as_variable = true \ No newline at end of file +as_variable = true diff --git a/QAQC/global_attributes.toml b/QAQC/global_attributes.toml index b68d0a255..00ba50832 100644 --- a/QAQC/global_attributes.toml +++ b/QAQC/global_attributes.toml @@ -327,19 +327,19 @@ cv_source_collection = "vertical_label" # ============================================================================== [global.consistency.filename_vs_attributes] -# Check ATTR005 +# Check ATTR005 severity = "H" [global.consistency.experiment_properties] -# Check ATTR007 +# Check ATTR007 severity = "H" [global.consistency.institution_properties] -# Check ATTR009 +# Check ATTR009 severity = "H" [global.consistency.source_properties] -# Check ATTR010 +# Check ATTR010 severity = "H" [global.consistency.variant_properties] diff --git a/QAQC/project.toml b/QAQC/project.toml index d32f8ee4f..74b0482f6 100644 --- a/QAQC/project.toml +++ b/QAQC/project.toml @@ -1,7 +1,7 @@ # ============================================================================== -# CMIP7 configuration files +# CMIP7 configuration files # ============================================================================== # To be Consistent with https://zenodo.org/records/17250297 # Documentation & check inventory at https://esgf.github.io/cc-plugin-wcrp/checks/ project_name = "cmip7" -project_version = "1.0" \ No newline at end of file +project_version = "1.0" From a365c1c7c44ff578c8dd197d57e4f94ba129bf9f Mon Sep 17 00:00:00 2001 From: lee1043 Date: Mon, 16 Mar 2026 16:24:34 -0700 Subject: [PATCH 5/5] clean up --- changelog/598.fix.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog/598.fix.md b/changelog/598.fix.md index b1b52b052..e6d116e5f 100644 --- a/changelog/598.fix.md +++ b/changelog/598.fix.md @@ -1 +1 @@ -QAQC toml files are updated following the latest version of https://github.com/ESGF/cc-plugin-wcrp \ No newline at end of file +QAQC toml files are updated following the latest version of https://github.com/ESGF/cc-plugin-wcrp