diff --git a/src/openmethane_prior/outputs.py b/src/openmethane_prior/outputs.py index e01ddb9..68aac7f 100644 --- a/src/openmethane_prior/outputs.py +++ b/src/openmethane_prior/outputs.py @@ -27,7 +27,10 @@ from openmethane_prior.layers import layer_names from openmethane_prior.utils import SECS_PER_YEAR -coordNames = ["TSTEP", "LAY", "ROW", "COL"] +COORD_NAMES = ["TSTEP", "LAY", "ROW", "COL"] +REQUIRED_ATTRIBUTES = {"units": "kg/m^2/s"} +TOTAL_LAYER_NAME = "OCH4_TOTAL" +TOTAL_LAYER_LONG_NAME = "total methane flux" def convert_to_timescale(emission, cell_area): @@ -75,7 +78,11 @@ def write_layer( # coerce to four dimensions if it's not for i in range(layer_data.ndim, 4): copy = np.expand_dims(copy, 0) # should now have four dimensions - ds[layer_name] = (coordNames[:], copy) + ds[layer_name] = (COORD_NAMES[:], copy) + + for k, v in REQUIRED_ATTRIBUTES.items(): + ds[layer_name].attrs[k] = v + ds[layer_name].attrs["long_name"] = layer_name output_path.parent.mkdir(parents=True, exist_ok=True) ds.to_netcdf(output_path) @@ -112,5 +119,8 @@ def sum_layers(output_path: pathlib.Path): summed += ds[layerName].values # it will broadcast time dimensions of 1 correctly if summed is not None: - ds["OCH4_TOTAL"] = (["date", "LAY", *coordNames[-2:]], summed) + ds[TOTAL_LAYER_NAME] = (["date", "LAY", *COORD_NAMES[-2:]], summed) + for k, v in REQUIRED_ATTRIBUTES.items(): + ds[TOTAL_LAYER_NAME].attrs[k] = v + ds[TOTAL_LAYER_NAME].attrs["long_name"] = TOTAL_LAYER_LONG_NAME ds.to_netcdf(output_path) diff --git a/src/openmethane_prior/raster.py b/src/openmethane_prior/raster.py index 8c13cda..ba1b98e 100644 --- a/src/openmethane_prior/raster.py +++ b/src/openmethane_prior/raster.py @@ -1,9 +1,10 @@ import os import rasterio as rio -from openmethane_prior.config import PriorConfig from rasterio.warp import Resampling, calculate_default_transform, reproject +from openmethane_prior.config import PriorConfig + def reproject_tiff(image, output, dst_crs="EPSG:4326", resampling="nearest", **kwargs): """Reprojects an image. diff --git a/tests/test_om_prior.py b/tests/test_om_prior.py index 7d324f5..3e8c29c 100644 --- a/tests/test_om_prior.py +++ b/tests/test_om_prior.py @@ -6,7 +6,6 @@ import pandas as pd import requests import xarray as xr - from openmethane_prior.layers.omGFASEmis import download_GFAS from openmethane_prior.utils import SECS_PER_YEAR @@ -104,3 +103,14 @@ def test_compare_out_domain_with_cro_dot_files(output_domain, cro_xr, dot_xr): assert cro_xr.NCOLS == output_domain.COL.size assert cro_xr.NROWS == output_domain.ROW.size + + +def test_required_attributes(output_domain): + assert output_domain.variables["OCH4_TOTAL"].attrs == { + "units": "kg/m^2/s", + "long_name": "total methane flux", + } + assert output_domain.variables["OCH4_WETLANDS"].attrs == { + "units": "kg/m^2/s", + "long_name": "OCH4_WETLANDS", + }