cvm_inspector#
The cvm_inspector
tool is a utility tool for checking the metadata, dimensions, coordinates, and variables of a netCDF file. The tool provides a comprehensive inspection of the file and ensures compliance with the CF convention.
In this tutorial, we will demonstrate how to run netcdf_to_cvm
on the CVM netCDF file we created with the cvm_writer tool tool (Cascadia-ANT+RF-test.nc
) to validate its metadata.
Overview#
The netCDF file inspector is a Python script that examines the following aspects of a netCDF file:
File type and size
Dimensions and their sizes
Coordinate variables (both primary and auxiliary)
Latitude and longitude ranges
Geospatial attributes
Required and optional global attributes
CF (Climate and Forecast) compliance
Variables (model and coordinate) along with their attributes
Step 2: Run the cvm_inspector tool#
The tool will prompt you to input the netCDF file path to check:
../../src/cvm_inspector.py
Please enter the file name:
Enter the file name and the inspector start checking the file’s metadata.
Please enter the file name: Cascadia-ANT+RF-test.nc
Step 2.1 Check the netCDF file’s info#
This section provides basic details about the file, such as:
File Path: The location of the file on your machine.
File Size: The size of the file in megabytes.
File Type: The type of netCDF file, which should be
netCDF-4 Classic Model
Step 2.2 Check the Metadata Inspection Report#
A comprehensive summary of the metadata is provided here, including:
Dimensions and Sizes: A list of dimensions and their sizes.
Coordinate Information: Lists both primary and auxiliary coordinates. It also identifies the third dimension if applicable.
Latitude and Longitude Value Check: Validates the range of latitude and longitude values.
Geospatial Attributes Check: Ensures geospatial attributes such as
geospatial_lat_min
,geospatial_lon_max
, etc., are present and correct.Global Attributes Check: Verifies the presence of required and optional global attributes.
CF Compliance Check: Uses the
cfchecks
tool to assess whether the file complies with CF conventions.Variables Summary: Lists all variables, distinguishing between coordinate variables and model variables. For each variable, the script provides the range of values, units, and dimensions.
Example Output#
Example output for a netCDF-4 file:
=== Dimensions and Sizes ===
- depth: 84 ✔️
- latitude: 46 ✔️
- longitude: 25 ✔️
=== Coordinate Information ===
Primary Coordinates: depth, latitude, longitude ✔️
Third Dimension: depth ✔️
Auxiliary Coordinates: easting, northing ✔️
=== Latitude and Longitude Value Check ===
Longitude Format: -180/180 degrees ✔️
Latitude Range: 40.000 to 49.000 ✔️
Longitude Range: -124.800 to -120.000 ✔️
=== Geospatial Attributes Check ===
geospatial_lat_min: Metadata = 40.0, Computed = 40.000 ✔️
geospatial_lat_max: Metadata = 49.0, Computed = 49.000 ✔️
geospatial_lon_min: Metadata = -124.8, Computed = -124.800 ✔️
geospatial_lon_max: Metadata = -120.0, Computed = -120.000 ✔️
geospatial_vertical_min: Metadata = -3.0, Computed = -3.000 ✔️
geospatial_vertical_max: Metadata = 80.0, Computed = 80.000 ✔️
=== Global Attributes Check ===
All required global attributes are present. ✔️
All optional global attributes are present. ✔️
=== CF Compliance Check ===
CF Compliance: Compliant ✔️
=== Variables Summary ===
Variable 'vs' has correct dimension order: depth, latitude, longitude. ✔️
Coordinate Variables:
- depth: Range = -3.000 to 80.000, Units = km, Dimensions = depth ✔️
- latitude: Range = 40.000 to 49.000, Units = degrees_north, Dimensions = latitude ✔️
- longitude: Range = -124.800 to -120.000, Units = degrees_east, Dimensions = longitude ✔️
- easting: Range = 346348.097 to 756099.648, Units = m, Dimensions = latitude, longitude ✔️
- northing: Range = 4427757.219 to 5431792.865, Units = m, Dimensions = latitude, longitude ✔️
Model Variables:
- vs: Range = 1.017 to 5.861, Units = km.s-1, Dimensions = depth, latitude, longitude ✔️
=== Metadata Inspection Summary ===
File Type: netCDF-4
Dimensions:
- depth: 84
- latitude: 46
- longitude: 25
Primary Coordinates: ['depth', 'latitude', 'longitude']
Auxiliary Coordinates: ['easting', 'northing']
Third Dimension: depth
Longitude Format: -180/180 degrees
Latitude Range: 40.000 to 49.000
Longitude Range: -124.800 to -120.000
CF Compliance: Compliant
Coordinate Variables:
- depth: {'Range': '-3.000 to 80.000', 'Units': 'km', 'Dimensions': 'depth'}
- latitude: {'Range': '40.000 to 49.000', 'Units': 'degrees_north', 'Dimensions': 'latitude'}
- longitude: {'Range': '-124.800 to -120.000', 'Units': 'degrees_east', 'Dimensions': 'longitude'}
- easting: {'Range': '346348.097 to 756099.648', 'Units': 'm', 'Dimensions': 'latitude, longitude'}
- northing: {'Range': '4427757.219 to 5431792.865', 'Units': 'm', 'Dimensions': 'latitude, longitude'}
Model Variables:
- vs: {'Range': '1.017 to 5.861', 'Units': 'km.s-1', 'Dimensions': 'depth, latitude, longitude'}
Error Handling#
If there are any errors during the file inspection process, the script will print the corresponding error message. These errors can be related to:
File access issues
Missing global or geospatial attributes
CF compliance failures
Incorrect dimension orders for variables
Conclusion#
This script is useful for ensuring that netCDF files adhere to required metadata standards and contain well-structured coordinate and variable data. It can also help diagnose issues with file structure, attributes, and compliance with CF conventions.