Source code for xradar.io.export.cfradial2

#!/usr/bin/env python
# Copyright (c) 2022-2024, openradar developers.
# Distributed under the MIT License. See LICENSE for more info.

"""

CfRadial2 output
================

This sub-module contains the writer for export of CfRadial2-based radar
data.

Code ported from wradlib.

Example::

    import xradar as xd
    dtree = xd.io.to_cfradial2(dtree, filename)

.. autosummary::
   :nosignatures:
   :toctree: generated/

   {}

"""

__all__ = [
    "to_cfradial2",
]

__doc__ = __doc__.format("\n   ".join(__all__))

from importlib.metadata import version

import xarray as xr

from ...model import conform_cfradial2_sweep_group
from ...util import has_import


[docs] def to_cfradial2(dtree, filename, engine=None, timestep=None): """Save DataTree to CfRadial2 compliant file. Parameters ---------- dtree : xarray.DataTree DataTree with CfRadial2 groups. filename : str output filename Keyword Arguments ---------------- timestep : int timestep of wanted volume, currently not used engine : str Either `netcdf4` or `h5netcdf`. """ if engine is None: if has_import("netCDF4"): engine == "netcdf4" elif has_import("h5netcdf"): engine == "h5netcdf" else: raise ImportError( "xradar: ``netCDF4`` or ``h5netcdf`` needed to perform this operation." ) # iterate over DataTree and make subgroups cfradial2 compliant for grp in dtree.groups: if "sweep" in grp: dtree[grp] = xr.DataTree( conform_cfradial2_sweep_group( dtree[grp].to_dataset(), optional=False, ) ) root = dtree["/"].to_dataset() # fix Conventions root.attrs["Conventions"] = "Cf/Radial" root.attrs["version"] = "2.0" # add xradar version to history xradar_version = version("xradar") root.attrs["history"] += f": xradar v{xradar_version} CfRadial2 export" # write DataTree dtree.to_netcdf(filename, engine=engine)