IMD - Reader#

The India Meteorological Department (IMD) publishes radar data as NetCDF4 files with an IRIS-inspired variable layout. Each file holds one sweep; a complete volume is assembled from multiple files: typically 2-3 files for long-range PPI and 9-10 files for short-range, high-resolution PPI.

import xarray as xr
from open_radar_data import DATASETS

import xradar as xd

Download#

Fetching IMD radar data files from open-radar-data repository.

filename_sweep_0 = DATASETS.fetch("IMD/JPR220822135253-IMD-B.nc")
filename_sweep_1 = DATASETS.fetch("IMD/JPR220822135253-IMD-B.nc.1")
volume_files = [
    DATASETS.fetch(f"IMD/JPR220822135253-IMD-B.nc{s}")
    for s in ["", ".1", ".2", ".3", ".4", ".5", ".6", ".7", ".8", ".9"]
]
Downloading file 'IMD/JPR220822135253-IMD-B.nc' from 'https://github.com/openradar/open-radar-data/raw/main/data/IMD/JPR220822135253-IMD-B.nc' to '/home/docs/.cache/open-radar-data'.
Downloading file 'IMD/JPR220822135253-IMD-B.nc.1' from 'https://github.com/openradar/open-radar-data/raw/main/data/IMD/JPR220822135253-IMD-B.nc.1' to '/home/docs/.cache/open-radar-data'.
Downloading file 'IMD/JPR220822135253-IMD-B.nc.2' from 'https://github.com/openradar/open-radar-data/raw/main/data/IMD/JPR220822135253-IMD-B.nc.2' to '/home/docs/.cache/open-radar-data'.
Downloading file 'IMD/JPR220822135253-IMD-B.nc.3' from 'https://github.com/openradar/open-radar-data/raw/main/data/IMD/JPR220822135253-IMD-B.nc.3' to '/home/docs/.cache/open-radar-data'.
Downloading file 'IMD/JPR220822135253-IMD-B.nc.4' from 'https://github.com/openradar/open-radar-data/raw/main/data/IMD/JPR220822135253-IMD-B.nc.4' to '/home/docs/.cache/open-radar-data'.
Downloading file 'IMD/JPR220822135253-IMD-B.nc.5' from 'https://github.com/openradar/open-radar-data/raw/main/data/IMD/JPR220822135253-IMD-B.nc.5' to '/home/docs/.cache/open-radar-data'.
Downloading file 'IMD/JPR220822135253-IMD-B.nc.6' from 'https://github.com/openradar/open-radar-data/raw/main/data/IMD/JPR220822135253-IMD-B.nc.6' to '/home/docs/.cache/open-radar-data'.
Downloading file 'IMD/JPR220822135253-IMD-B.nc.7' from 'https://github.com/openradar/open-radar-data/raw/main/data/IMD/JPR220822135253-IMD-B.nc.7' to '/home/docs/.cache/open-radar-data'.
Downloading file 'IMD/JPR220822135253-IMD-B.nc.8' from 'https://github.com/openradar/open-radar-data/raw/main/data/IMD/JPR220822135253-IMD-B.nc.8' to '/home/docs/.cache/open-radar-data'.
Downloading file 'IMD/JPR220822135253-IMD-B.nc.9' from 'https://github.com/openradar/open-radar-data/raw/main/data/IMD/JPR220822135253-IMD-B.nc.9' to '/home/docs/.cache/open-radar-data'.

xr.open_dataset — a single sweep#

The xarray imd backend reads a single IMD NetCDF file and returns a CfRadial2-compatible sweep Dataset. Moments are renamed (TDBTH, ZDBZH, VVRADH, WWRADH; dual-pol sites additionally carry ZDR and HCLASS) and canonical CfRadial2 moment attributes (standard_name, long_name, units) are applied.

ds = xr.open_dataset(filename_sweep_0, engine="imd")
display(ds)
<xarray.Dataset> Size: 9MB
Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
Coordinates:
  * azimuth                   (azimuth) float32 1kB 0.1703 1.005 ... 358.2 359.0
    elevation                 (azimuth) float32 1kB ...
    time                      (azimuth) datetime64[ns] 3kB ...
  * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
  * frequency                 (frequency) float32 4B 5.625e+09
    latitude                  float32 4B ...
    longitude                 float32 4B ...
    altitude                  float32 4B ...
Data variables: (12/47)
    nyquist_velocity          float32 4B ...
    unambiguous_range         float32 4B ...
    calibConst                float32 4B ...
    radarConst                float32 4B ...
    radar_beam_width_h        float32 4B ...
    radar_receiver_bandwidth  float32 4B ...
    ...                        ...
    scan_rate                 (azimuth) float32 1kB ...
    n_samples                 (azimuth) int32 1kB ...
    pulse_width               (azimuth) float32 1kB ...
    sweep_fixed_angle         float64 8B ...
    sweep_number              int64 8B ...
    rays_angle_resolution     float64 8B ...
Attributes:
    Content:              This file contains one scan of remotely sensed data
    history:              Encoded into netcdf from IRIS data
    title:                IRIS data
    Conventions:          FSL netCDF
    time_coverage_start:  2022-08-22T13:52:53Z
    time_coverage_end:    2022-08-22T13:53:28Z

Plot Range vs. Azimuth#

ds.DBZH.plot(y="azimuth")
<matplotlib.collections.QuadMesh at 0x76a282f4f230>
../_images/bcd14181bc6ec98eb10baaaa78a52c983a4c44c0514d1a75b1f875911283cf7a.png

backend_kwargs#

help(xd.io.IMDBackendEntrypoint)
Help on class IMDBackendEntrypoint in module xradar.io.backends.imd:

class IMDBackendEntrypoint(xarray.backends.common.BackendEntrypoint)
 |  Xarray BackendEntrypoint for India Meteorological Department (IMD) radar files.
 |
 |  IMD provides one NetCDF file per sweep. Open a single file with
 |  ``xr.open_dataset(file, engine="imd")`` to get a CfRadial2-compatible sweep
 |  :py:class:`xarray.Dataset`. To assemble a multi-sweep volume, use
 |  :func:`open_imd_datatree` with a list of files.
 |
 |  Keyword Arguments
 |  -----------------
 |  first_dim : str
 |      Can be ``time`` or ``auto`` (default). ``auto`` selects ``azimuth``
 |      (PPI) or ``elevation`` (RHI) as the first dimension.
 |  reindex_angle : bool or dict
 |      If a dict, kwargs are passed to :func:`xradar.util.reindex_angle`.
 |      Defaults to ``False``.
 |  site_as_coords : bool
 |      If True (default), promote ``latitude``/``longitude``/``altitude`` to
 |      Dataset coordinates.
 |
 |  Method resolution order:
 |      IMDBackendEntrypoint
 |      xarray.backends.common.BackendEntrypoint
 |      builtins.object
 |
 |  Methods defined here:
 |
 |  open_dataset(
 |      self,
 |      filename_or_obj,
 |      *,
 |      mask_and_scale=True,
 |      decode_times=True,
 |      concat_characters=True,
 |      decode_coords=True,
 |      drop_variables=None,
 |      use_cftime=None,
 |      decode_timedelta=None,
 |      format=None,
 |      group=None,
 |      first_dim='auto',
 |      reindex_angle=False,
 |      site_as_coords=True
 |  )
 |      Backend open_dataset method used by Xarray in :py:func:`~xarray.open_dataset`.
 |
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |
 |  __annotations__ = {}
 |
 |  description = 'Open India Meteorological Department (IMD) radar NetCDF...
 |
 |  open_dataset_parameters = ('filename_or_obj', 'mask_and_scale', 'decod...
 |
 |  url = 'https://xradar.rtfd.io/en/latest/io.html#imd'
 |
 |  ----------------------------------------------------------------------
 |  Methods inherited from xarray.backends.common.BackendEntrypoint:
 |
 |  __repr__(self) -> 'str'
 |      Return repr(self).
 |
 |  guess_can_open(self, filename_or_obj: 'T_PathFileOrDataStore') -> 'bool'
 |      Backend open_dataset method used by Xarray in :py:func:`~xarray.open_dataset`.
 |
 |  open_datatree(
 |      self,
 |      filename_or_obj: 'T_PathFileOrDataStore',
 |      *,
 |      drop_variables: 'str | Iterable[str] | None' = None
 |  ) -> 'DataTree'
 |      Backend open_datatree method used by Xarray in :py:func:`~xarray.open_datatree`.
 |
 |      If implemented, set the class variable supports_groups to True.
 |
 |  open_groups_as_dict(
 |      self,
 |      filename_or_obj: 'T_PathFileOrDataStore',
 |      *,
 |      drop_variables: 'str | Iterable[str] | None' = None
 |  ) -> 'dict[str, Dataset]'
 |      Opens a dictionary mapping from group names to Datasets.
 |
 |      Called by :py:func:`~xarray.open_groups`.
 |      This function exists to provide a universal way to open all groups in a file,
 |      before applying any additional consistency checks or requirements necessary
 |      to create a `DataTree` object (typically done using :py:meth:`~xarray.DataTree.from_dict`).
 |
 |      If implemented, set the class variable supports_groups to True.
 |
 |  ----------------------------------------------------------------------
 |  Data descriptors inherited from xarray.backends.common.BackendEntrypoint:
 |
 |  __dict__
 |      dictionary for instance variables
 |
 |  __weakref__
 |      list of weak references to the object
 |
 |  ----------------------------------------------------------------------
 |  Data and other attributes inherited from xarray.backends.common.BackendEntrypoint:
 |
 |  supports_groups = False
ds = xr.open_dataset(filename_sweep_0, engine="imd", first_dim="time")
display(ds)
<xarray.Dataset> Size: 9MB
Dimensions:                   (time: 360, range: 999, frequency: 1)
Coordinates:
  * time                      (time) datetime64[ns] 3kB 2022-08-22T13:52:53 ....
    azimuth                   (time) float32 1kB ...
    elevation                 (time) float32 1kB ...
  * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
  * frequency                 (frequency) float32 4B 5.625e+09
    latitude                  float32 4B ...
    longitude                 float32 4B ...
    altitude                  float32 4B ...
Data variables: (12/47)
    nyquist_velocity          float32 4B ...
    unambiguous_range         float32 4B ...
    calibConst                float32 4B ...
    radarConst                float32 4B ...
    radar_beam_width_h        float32 4B ...
    radar_receiver_bandwidth  float32 4B ...
    ...                        ...
    scan_rate                 (time) float32 1kB ...
    n_samples                 (time) int32 1kB ...
    pulse_width               (time) float32 1kB ...
    sweep_fixed_angle         float64 8B ...
    sweep_number              int64 8B ...
    rays_angle_resolution     float64 8B ...
Attributes:
    Content:              This file contains one scan of remotely sensed data
    history:              Encoded into netcdf from IRIS data
    title:                IRIS data
    Conventions:          FSL netCDF
    time_coverage_start:  2022-08-22T13:52:53Z
    time_coverage_end:    2022-08-22T13:53:28Z

open_imd_datatree — one volume#

open_imd_datatree accepts either a single file path (→ single-sweep DataTree) or a list of file paths (→ one volume). Multi-file stacking is delegated to xradar.util.create_volume, which sorts sweeps by time and supports min_angle / max_angle / time_coverage_start / time_coverage_end / volume_number filtering.

help(xd.io.open_imd_datatree)
Help on function open_imd_datatree in module xradar.io.backends.imd:

open_imd_datatree(filename_or_obj, **kwargs)
    Open IMD radar file(s) as a :py:class:`xarray.DataTree`.

    IMD stores one sweep per NetCDF file. A volume is assembled from
    multiple files (typically 2-3 for long-range PPI or 9-10 for
    short-range, high-resolution PPI).

    - Single file path -> single-sweep DataTree.
    - List of file paths -> single volume DataTree. Multi-file stacking
      is delegated to :func:`xradar.util.create_volume`, which sorts
      sweeps by time and supports ``time_coverage_start``,
      ``time_coverage_end``, ``min_angle``, ``max_angle`` filtering.

    To split a directory of mixed-volume files into per-volume groups,
    use :func:`group_imd_files` first::

        for group in xd.io.group_imd_files("/data/imd"):
            dtree = xd.io.open_imd_datatree(group)

    Parameters
    ----------
    filename_or_obj : str, Path, or list/tuple of those
        Single IMD file path, or a list of paths making up one volume.

    Keyword Arguments
    -----------------
    first_dim : str
        ``"auto"`` (default) or ``"time"``.
    reindex_angle : bool or dict
        If a dict, kwargs are passed to :func:`xradar.util.reindex_angle`.
    site_as_coords : bool
        Attach station variables as coordinates on sweep Datasets.
    optional_groups : bool
        Include ``/radar_parameters``, ``/georeferencing_correction`` and
        ``/radar_calibration`` subgroups. Defaults to ``False``.
    time_coverage_start, time_coverage_end, min_angle, max_angle, volume_number
        Forwarded to :func:`xradar.util.create_volume` when multi-file
        input is provided.

    Returns
    -------
    dtree : xarray.DataTree
        CfRadial2-style DataTree with ``/`` root and ``sweep_N`` children.

Single sweep#

dtree = xd.io.open_imd_datatree(filename_sweep_0)
display(dtree)
<xarray.DataTree>
Group: /
│   Dimensions:              (sweep: 1)
│   Coordinates:
│       altitude             float32 4B ...
│       latitude             float32 4B ...
│       longitude            float32 4B ...
│   Dimensions without coordinates: sweep
│   Data variables:
│       volume_number        int64 8B 0
│       platform_type        <U5 20B 'fixed'
│       instrument_type      <U5 20B 'radar'
│       time_coverage_start  <U20 80B '2022-08-22T13:52:53Z'
│       time_coverage_end    <U20 80B '2022-08-22T13:53:28Z'
│       sweep_fixed_angle    (sweep) float64 8B 0.4999
│       sweep_group_name     (sweep) <U7 28B 'sweep_0'
│   Attributes:
│       Conventions:         CF-1.8, WMO CF-1.0, ACDD-1.3
│       wmo__cf_profile:     FM 301-XX
│       version:             2.0
│       title:               IMD radar data
│       institution:         India Meteorological Department
│       references:          
│       source:              IMD NetCDF
│       history:             
│       comment:             
│       instrument_name:     
│       platform_is_mobile:  false
└── Group: /sweep_0
        Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
        Coordinates:
          * azimuth                   (azimuth) float32 1kB 0.1703 1.005 ... 358.2 359.0
            elevation                 (azimuth) float32 1kB ...
            time                      (azimuth) datetime64[ns] 3kB 2022-08-22T13:53:0...
          * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
          * frequency                 (frequency) float32 4B 5.625e+09
        Data variables: (12/47)
            nyquist_velocity          float32 4B ...
            unambiguous_range         float32 4B ...
            calibConst                float32 4B ...
            radarConst                float32 4B ...
            radar_beam_width_h        float32 4B ...
            radar_receiver_bandwidth  float32 4B ...
            ...                        ...
            scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
            n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
            pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
            sweep_fixed_angle         float64 8B 0.4999
            sweep_number              int64 8B 0
            rays_angle_resolution     float64 8B 1.0

Volume from multiple files#

dtree = xd.io.open_imd_datatree(volume_files)
display(dtree)
<xarray.DataTree 'root'>
Group: /
│   Dimensions:              (sweep: 10)
│   Coordinates:
│       altitude             float32 4B ...
│       latitude             float32 4B ...
│       longitude            float32 4B ...
│   Dimensions without coordinates: sweep
│   Data variables:
│       volume_number        int64 8B 0
│       platform_type        <U5 20B 'fixed'
│       instrument_type      <U5 20B 'radar'
│       time_coverage_start  <U20 80B '2022-08-22T13:52:53Z'
│       time_coverage_end    <U20 80B '2022-08-22T13:58:55Z'
│       sweep_group_name     (sweep) <U7 280B 'sweep_0' 'sweep_1' ... 'sweep_9'
│       sweep_fixed_angle    (sweep) float64 80B 0.4999 0.9998 2.0 ... 16.0 21.0
│   Attributes:
│       Conventions:         CF-1.8, WMO CF-1.0, ACDD-1.3
│       wmo__cf_profile:     FM 301-XX
│       version:             2.0
│       title:               IMD radar data
│       institution:         India Meteorological Department
│       references:          
│       source:              IMD NetCDF
│       history:             
│       comment:             
│       instrument_name:     
│       platform_is_mobile:  false
│       volume_number:       0
├── Group: /sweep_0
│       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
│       Coordinates:
│         * azimuth                   (azimuth) float32 1kB 0.1703 1.005 ... 358.2 359.0
│           elevation                 (azimuth) float32 1kB ...
│           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T13:53:0...
│         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
│         * frequency                 (frequency) float32 4B 5.625e+09
│       Data variables: (12/47)
│           nyquist_velocity          float32 4B ...
│           unambiguous_range         float32 4B ...
│           calibConst                float32 4B ...
│           radarConst                float32 4B ...
│           radar_beam_width_h        float32 4B ...
│           radar_receiver_bandwidth  float32 4B ...
│           ...                        ...
│           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
│           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
│           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
│           sweep_fixed_angle         float64 8B 0.4999
│           sweep_number              int64 8B 0
│           rays_angle_resolution     float64 8B 1.0
├── Group: /sweep_1
│       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
│       Coordinates:
│         * azimuth                   (azimuth) float32 1kB 0.1703 1.027 ... 358.2 359.0
│           elevation                 (azimuth) float32 1kB ...
│           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T13:53:3...
│         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
│         * frequency                 (frequency) float32 4B 5.625e+09
│       Data variables: (12/47)
│           nyquist_velocity          float32 4B ...
│           unambiguous_range         float32 4B ...
│           calibConst                float32 4B ...
│           radarConst                float32 4B ...
│           radar_beam_width_h        float32 4B ...
│           radar_receiver_bandwidth  float32 4B ...
│           ...                        ...
│           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
│           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
│           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
│           sweep_fixed_angle         float64 8B 0.9998
│           sweep_number              int64 8B 1
│           rays_angle_resolution     float64 8B 1.0
├── Group: /sweep_2
│       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
│       Coordinates:
│         * azimuth                   (azimuth) float32 1kB 0.1428 1.027 ... 358.2 359.0
│           elevation                 (azimuth) float32 1kB ...
│           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T13:54:1...
│         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
│         * frequency                 (frequency) float32 4B 5.625e+09
│       Data variables: (12/47)
│           nyquist_velocity          float32 4B ...
│           unambiguous_range         float32 4B ...
│           calibConst                float32 4B ...
│           radarConst                float32 4B ...
│           radar_beam_width_h        float32 4B ...
│           radar_receiver_bandwidth  float32 4B ...
│           ...                        ...
│           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
│           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
│           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
│           sweep_fixed_angle         float64 8B 2.0
│           sweep_number              int64 8B 2
│           rays_angle_resolution     float64 8B 1.0
├── Group: /sweep_3
│       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
│       Coordinates:
│         * azimuth                   (azimuth) float32 1kB 0.1483 1.005 ... 358.2 359.0
│           elevation                 (azimuth) float32 1kB ...
│           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T13:54:4...
│         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
│         * frequency                 (frequency) float32 4B 5.625e+09
│       Data variables: (12/47)
│           nyquist_velocity          float32 4B ...
│           unambiguous_range         float32 4B ...
│           calibConst                float32 4B ...
│           radarConst                float32 4B ...
│           radar_beam_width_h        float32 4B ...
│           radar_receiver_bandwidth  float32 4B ...
│           ...                        ...
│           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
│           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
│           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
│           sweep_fixed_angle         float64 8B 2.999
│           sweep_number              int64 8B 3
│           rays_angle_resolution     float64 8B 1.0
├── Group: /sweep_4
│       Dimensions:                   (azimuth: 356, range: 999, frequency: 1)
│       Coordinates:
│         * azimuth                   (azimuth) float32 1kB 0.1593 1.016 ... 358.2 359.0
│           elevation                 (azimuth) float32 1kB ...
│           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T13:55:2...
│         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
│         * frequency                 (frequency) float32 4B 5.625e+09
│       Data variables: (12/47)
│           nyquist_velocity          float32 4B ...
│           unambiguous_range         float32 4B ...
│           calibConst                float32 4B ...
│           radarConst                float32 4B ...
│           radar_beam_width_h        float32 4B ...
│           radar_receiver_bandwidth  float32 4B ...
│           ...                        ...
│           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
│           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
│           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
│           sweep_fixed_angle         float64 8B 4.499
│           sweep_number              int64 8B 4
│           rays_angle_resolution     float64 8B 1.0
├── Group: /sweep_5
│       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
│       Coordinates:
│         * azimuth                   (azimuth) float32 1kB 0.1648 1.016 ... 358.2 359.0
│           elevation                 (azimuth) float32 1kB ...
│           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T13:55:5...
│         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
│         * frequency                 (frequency) float32 4B 5.625e+09
│       Data variables: (12/47)
│           nyquist_velocity          float32 4B ...
│           unambiguous_range         float32 4B ...
│           calibConst                float32 4B ...
│           radarConst                float32 4B ...
│           radar_beam_width_h        float32 4B ...
│           radar_receiver_bandwidth  float32 4B ...
│           ...                        ...
│           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
│           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
│           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
│           sweep_fixed_angle         float64 8B 5.999
│           sweep_number              int64 8B 5
│           rays_angle_resolution     float64 8B 1.0
├── Group: /sweep_6
│       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
│       Coordinates:
│         * azimuth                   (azimuth) float32 1kB 0.1483 1.033 ... 358.1 359.0
│           elevation                 (azimuth) float32 1kB ...
│           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T13:56:3...
│         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
│         * frequency                 (frequency) float32 4B 5.625e+09
│       Data variables: (12/47)
│           nyquist_velocity          float32 4B ...
│           unambiguous_range         float32 4B ...
│           calibConst                float32 4B ...
│           radarConst                float32 4B ...
│           radar_beam_width_h        float32 4B ...
│           radar_receiver_bandwidth  float32 4B ...
│           ...                        ...
│           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
│           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
│           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
│           sweep_fixed_angle         float64 8B 8.998
│           sweep_number              int64 8B 6
│           rays_angle_resolution     float64 8B 1.0
├── Group: /sweep_7
│       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
│       Coordinates:
│         * azimuth                   (azimuth) float32 1kB 0.1648 1.016 ... 358.2 359.0
│           elevation                 (azimuth) float32 1kB ...
│           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T13:57:0...
│         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
│         * frequency                 (frequency) float32 4B 5.625e+09
│       Data variables: (12/47)
│           nyquist_velocity          float32 4B ...
│           unambiguous_range         float32 4B ...
│           calibConst                float32 4B ...
│           radarConst                float32 4B ...
│           radar_beam_width_h        float32 4B ...
│           radar_receiver_bandwidth  float32 4B ...
│           ...                        ...
│           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
│           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
│           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
│           sweep_fixed_angle         float64 8B 12.0
│           sweep_number              int64 8B 7
│           rays_angle_resolution     float64 8B 1.0
├── Group: /sweep_8
│       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
│       Coordinates:
│         * azimuth                   (azimuth) float32 1kB 0.1703 1.027 ... 358.2 359.0
│           elevation                 (azimuth) float32 1kB ...
│           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T13:57:4...
│         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
│         * frequency                 (frequency) float32 4B 5.625e+09
│       Data variables: (12/47)
│           nyquist_velocity          float32 4B ...
│           unambiguous_range         float32 4B ...
│           calibConst                float32 4B ...
│           radarConst                float32 4B ...
│           radar_beam_width_h        float32 4B ...
│           radar_receiver_bandwidth  float32 4B ...
│           ...                        ...
│           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
│           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
│           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
│           sweep_fixed_angle         float64 8B 16.0
│           sweep_number              int64 8B 8
│           rays_angle_resolution     float64 8B 1.0
└── Group: /sweep_9
        Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
        Coordinates:
          * azimuth                   (azimuth) float32 1kB 0.1373 1.022 ... 358.1 359.0
            elevation                 (azimuth) float32 1kB ...
            time                      (azimuth) datetime64[ns] 3kB 2022-08-22T13:58:5...
          * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
          * frequency                 (frequency) float32 4B 5.625e+09
        Data variables: (12/47)
            nyquist_velocity          float32 4B ...
            unambiguous_range         float32 4B ...
            calibConst                float32 4B ...
            radarConst                float32 4B ...
            radar_beam_width_h        float32 4B ...
            radar_receiver_bandwidth  float32 4B ...
            ...                        ...
            scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
            n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
            pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
            sweep_fixed_angle         float64 8B 21.0
            sweep_number              int64 8B 9
            rays_angle_resolution     float64 8B 1.0

Plot a georeferenced PPI#

import matplotlib.pyplot as plt

sweep = dtree["sweep_0"].to_dataset(inherit="all_coords")
sweep = sweep.sel(range=slice(0, 150000))
sweep = xd.georeference.get_x_y_z(sweep)
sweep.DBZH.plot(x="x", y="y")
plt.title("IMD Jaipur S-band DBZH")
plt.gca().set_aspect("equal")
../_images/fa2dab4f9f02ce61394bc5358caf120e4e38d37758f616ac9e9a59e5e8654681.png

Filter by elevation angle#

dtree = xd.io.open_imd_datatree(volume_files, max_angle=5.0)
display(dtree)
<xarray.DataTree 'root'>
Group: /
│   Dimensions:              (sweep: 5)
│   Coordinates:
│       altitude             float32 4B ...
│       latitude             float32 4B ...
│       longitude            float32 4B ...
│   Dimensions without coordinates: sweep
│   Data variables:
│       volume_number        int64 8B 0
│       platform_type        <U5 20B 'fixed'
│       instrument_type      <U5 20B 'radar'
│       time_coverage_start  <U20 80B '2022-08-22T13:52:53Z'
│       time_coverage_end    <U20 80B '2022-08-22T13:55:53Z'
│       sweep_group_name     (sweep) <U7 140B 'sweep_0' 'sweep_1' ... 'sweep_4'
│       sweep_fixed_angle    (sweep) float64 40B 0.4999 0.9998 2.0 2.999 4.499
│   Attributes:
│       Conventions:         CF-1.8, WMO CF-1.0, ACDD-1.3
│       wmo__cf_profile:     FM 301-XX
│       version:             2.0
│       title:               IMD radar data
│       institution:         India Meteorological Department
│       references:          
│       source:              IMD NetCDF
│       history:             
│       comment:             
│       instrument_name:     
│       platform_is_mobile:  false
│       volume_number:       0
├── Group: /sweep_0
│       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
│       Coordinates:
│         * azimuth                   (azimuth) float32 1kB 0.1703 1.005 ... 358.2 359.0
│           elevation                 (azimuth) float32 1kB ...
│           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T13:53:0...
│         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
│         * frequency                 (frequency) float32 4B 5.625e+09
│       Data variables: (12/47)
│           nyquist_velocity          float32 4B ...
│           unambiguous_range         float32 4B ...
│           calibConst                float32 4B ...
│           radarConst                float32 4B ...
│           radar_beam_width_h        float32 4B ...
│           radar_receiver_bandwidth  float32 4B ...
│           ...                        ...
│           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
│           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
│           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
│           sweep_fixed_angle         float64 8B 0.4999
│           sweep_number              int64 8B 0
│           rays_angle_resolution     float64 8B 1.0
├── Group: /sweep_1
│       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
│       Coordinates:
│         * azimuth                   (azimuth) float32 1kB 0.1703 1.027 ... 358.2 359.0
│           elevation                 (azimuth) float32 1kB ...
│           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T13:53:3...
│         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
│         * frequency                 (frequency) float32 4B 5.625e+09
│       Data variables: (12/47)
│           nyquist_velocity          float32 4B ...
│           unambiguous_range         float32 4B ...
│           calibConst                float32 4B ...
│           radarConst                float32 4B ...
│           radar_beam_width_h        float32 4B ...
│           radar_receiver_bandwidth  float32 4B ...
│           ...                        ...
│           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
│           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
│           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
│           sweep_fixed_angle         float64 8B 0.9998
│           sweep_number              int64 8B 1
│           rays_angle_resolution     float64 8B 1.0
├── Group: /sweep_2
│       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
│       Coordinates:
│         * azimuth                   (azimuth) float32 1kB 0.1428 1.027 ... 358.2 359.0
│           elevation                 (azimuth) float32 1kB ...
│           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T13:54:1...
│         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
│         * frequency                 (frequency) float32 4B 5.625e+09
│       Data variables: (12/47)
│           nyquist_velocity          float32 4B ...
│           unambiguous_range         float32 4B ...
│           calibConst                float32 4B ...
│           radarConst                float32 4B ...
│           radar_beam_width_h        float32 4B ...
│           radar_receiver_bandwidth  float32 4B ...
│           ...                        ...
│           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
│           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
│           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
│           sweep_fixed_angle         float64 8B 2.0
│           sweep_number              int64 8B 2
│           rays_angle_resolution     float64 8B 1.0
├── Group: /sweep_3
│       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
│       Coordinates:
│         * azimuth                   (azimuth) float32 1kB 0.1483 1.005 ... 358.2 359.0
│           elevation                 (azimuth) float32 1kB ...
│           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T13:54:4...
│         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
│         * frequency                 (frequency) float32 4B 5.625e+09
│       Data variables: (12/47)
│           nyquist_velocity          float32 4B ...
│           unambiguous_range         float32 4B ...
│           calibConst                float32 4B ...
│           radarConst                float32 4B ...
│           radar_beam_width_h        float32 4B ...
│           radar_receiver_bandwidth  float32 4B ...
│           ...                        ...
│           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
│           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
│           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
│           sweep_fixed_angle         float64 8B 2.999
│           sweep_number              int64 8B 3
│           rays_angle_resolution     float64 8B 1.0
└── Group: /sweep_4
        Dimensions:                   (azimuth: 356, range: 999, frequency: 1)
        Coordinates:
          * azimuth                   (azimuth) float32 1kB 0.1593 1.016 ... 358.2 359.0
            elevation                 (azimuth) float32 1kB ...
            time                      (azimuth) datetime64[ns] 3kB 2022-08-22T13:55:2...
          * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
          * frequency                 (frequency) float32 4B 5.625e+09
        Data variables: (12/47)
            nyquist_velocity          float32 4B ...
            unambiguous_range         float32 4B ...
            calibConst                float32 4B ...
            radarConst                float32 4B ...
            radar_beam_width_h        float32 4B ...
            radar_receiver_bandwidth  float32 4B ...
            ...                        ...
            scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
            n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
            pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
            sweep_fixed_angle         float64 8B 4.499
            sweep_number              int64 8B 4
            rays_angle_resolution     float64 8B 1.0

group_imd_files — split a mixed directory#

A single directory usually holds many volumes back-to-back. Use group_imd_files to split a directory (or glob, or list) into per-volume file lists by filename stem:

help(xd.io.group_imd_files)
Help on function group_imd_files in module xradar.io.backends.imd:

group_imd_files(paths)
    Group IMD sweep files into volumes by filename stem.

    IMD distributes one sweep per file. Files of a single volume share a
    common stem ending in ``.nc``; additional sweeps in the same volume
    get numeric suffixes::

        GOA210515003646-IMD-C.nc        <- sweep 0
        GOA210515003646-IMD-C.nc.1      <- sweep 1
        ...
        GOA210515003646-IMD-C.nc.9      <- sweep 9

    A new volume changes the timestamp component of the stem.

    Parameters
    ----------
    paths : str, Path, or iterable of those
        * A directory path -- all IMD files inside are grouped.
        * A glob pattern string -- files matching the glob are grouped.
        * An iterable of file paths -- grouped as-is.

    Returns
    -------
    list[list[str]]
        One list of absolute paths per detected volume, inner lists in
        sweep order (``.nc``, ``.nc.1``, ...).

    Examples
    --------
    >>> import xradar as xd
    >>> for group in xd.io.group_imd_files("/data/goa"):       # doctest: +SKIP
    ...     dtree = xd.io.open_imd_datatree(group)
xd.io.group_imd_files(volume_files)
[['/home/docs/.cache/open-radar-data/IMD/JPR220822135253-IMD-B.nc',
  '/home/docs/.cache/open-radar-data/IMD/JPR220822135253-IMD-B.nc.1',
  '/home/docs/.cache/open-radar-data/IMD/JPR220822135253-IMD-B.nc.2',
  '/home/docs/.cache/open-radar-data/IMD/JPR220822135253-IMD-B.nc.3',
  '/home/docs/.cache/open-radar-data/IMD/JPR220822135253-IMD-B.nc.4',
  '/home/docs/.cache/open-radar-data/IMD/JPR220822135253-IMD-B.nc.5',
  '/home/docs/.cache/open-radar-data/IMD/JPR220822135253-IMD-B.nc.6',
  '/home/docs/.cache/open-radar-data/IMD/JPR220822135253-IMD-B.nc.7',
  '/home/docs/.cache/open-radar-data/IMD/JPR220822135253-IMD-B.nc.8',
  '/home/docs/.cache/open-radar-data/IMD/JPR220822135253-IMD-B.nc.9']]

Typical loop pattern over a directory of many volumes:

for files in xd.io.group_imd_files("/data/imd"):
    dtree = xd.io.open_imd_datatree(files)
    # ... process this volume ...

open_imd_volumes — all volumes in one DataTree#

open_imd_volumes opens every volume in a directory at once and nests them under zero-padded vcp_NN child nodes (VCP = volume coverage pattern). The padding width is chosen so the child names sort lexically:

/
├── vcp_00/
│   ├── (root: sweep_group_name, sweep_fixed_angle, ...)
│   ├── sweep_0
│   ├── sweep_1
│   └── ...
├── vcp_01/
└── ...

All open_imd_datatree kwargs (first_dim, reindex_angle, optional_groups, min_angle/max_angle, …) are forwarded and applied per volume.

help(xd.io.open_imd_volumes)
Help on function open_imd_volumes in module xradar.io.backends.imd:

open_imd_volumes(paths, **kwargs)
    Open a directory of IMD files as a multi-volume :py:class:`xarray.DataTree`.

    Groups files by filename stem via :func:`group_imd_files`, opens each
    group as a CfRadial2 volume via :func:`open_imd_datatree`, and nests
    them under zero-padded ``vcp_NN`` child nodes of a parent root.
    ``vcp`` stands for *volume coverage pattern*. Padding width is chosen
    so the child names sort lexically (e.g. 121 volumes -> ``vcp_000`` ..
    ``vcp_120``).

    Parameters
    ----------
    paths : str, Path, or iterable of those
        Same as :func:`group_imd_files`: directory, glob, or list.

    Keyword Arguments
    -----------------
    All kwargs are forwarded to :func:`open_imd_datatree` (applied per
    volume). Typical: ``first_dim``, ``reindex_angle``, ``site_as_coords``,
    ``optional_groups``, ``min_angle``, ``max_angle``.

    Returns
    -------
    dtree : xarray.DataTree
        Root with ``vcp_NN`` children, each a full CfRadial2 volume tree::

            /
            ├── vcp_00/
            │   ├── (root: sweep_group_name, sweep_fixed_angle, ...)
            │   ├── sweep_0
            │   ├── sweep_1
            │   └── ...
            ├── vcp_01/
            └── ...

    Examples
    --------
    >>> import xradar as xd
    >>> tree = xd.io.open_imd_volumes("/data/JPR220822IMD-B")   # doctest: +SKIP
    >>> tree["vcp_00/sweep_0"].ds["DBZH"]                       # doctest: +SKIP
volume_files_2 = [
    DATASETS.fetch(f"IMD/JPR220822140253-IMD-B.nc{s}")
    for s in ["", ".1", ".2", ".3", ".4", ".5", ".6", ".7", ".8", ".9"]
]
tree = xd.io.open_imd_volumes(volume_files + volume_files_2)
display(tree)
Downloading file 'IMD/JPR220822140253-IMD-B.nc' from 'https://github.com/openradar/open-radar-data/raw/main/data/IMD/JPR220822140253-IMD-B.nc' to '/home/docs/.cache/open-radar-data'.
Downloading file 'IMD/JPR220822140253-IMD-B.nc.1' from 'https://github.com/openradar/open-radar-data/raw/main/data/IMD/JPR220822140253-IMD-B.nc.1' to '/home/docs/.cache/open-radar-data'.
Downloading file 'IMD/JPR220822140253-IMD-B.nc.2' from 'https://github.com/openradar/open-radar-data/raw/main/data/IMD/JPR220822140253-IMD-B.nc.2' to '/home/docs/.cache/open-radar-data'.
Downloading file 'IMD/JPR220822140253-IMD-B.nc.3' from 'https://github.com/openradar/open-radar-data/raw/main/data/IMD/JPR220822140253-IMD-B.nc.3' to '/home/docs/.cache/open-radar-data'.
Downloading file 'IMD/JPR220822140253-IMD-B.nc.4' from 'https://github.com/openradar/open-radar-data/raw/main/data/IMD/JPR220822140253-IMD-B.nc.4' to '/home/docs/.cache/open-radar-data'.
Downloading file 'IMD/JPR220822140253-IMD-B.nc.5' from 'https://github.com/openradar/open-radar-data/raw/main/data/IMD/JPR220822140253-IMD-B.nc.5' to '/home/docs/.cache/open-radar-data'.
Downloading file 'IMD/JPR220822140253-IMD-B.nc.6' from 'https://github.com/openradar/open-radar-data/raw/main/data/IMD/JPR220822140253-IMD-B.nc.6' to '/home/docs/.cache/open-radar-data'.
Downloading file 'IMD/JPR220822140253-IMD-B.nc.7' from 'https://github.com/openradar/open-radar-data/raw/main/data/IMD/JPR220822140253-IMD-B.nc.7' to '/home/docs/.cache/open-radar-data'.
Downloading file 'IMD/JPR220822140253-IMD-B.nc.8' from 'https://github.com/openradar/open-radar-data/raw/main/data/IMD/JPR220822140253-IMD-B.nc.8' to '/home/docs/.cache/open-radar-data'.
Downloading file 'IMD/JPR220822140253-IMD-B.nc.9' from 'https://github.com/openradar/open-radar-data/raw/main/data/IMD/JPR220822140253-IMD-B.nc.9' to '/home/docs/.cache/open-radar-data'.
<xarray.DataTree>
Group: /
│   Attributes:
│       Conventions:  Cf/Radial
│       institution:  India Meteorological Department
│       source:       IMD NetCDF
│       title:        IMD multi-volume dataset (2 volumes)
├── Group: /vcp_00
│   │   Dimensions:              (sweep: 10)
│   │   Coordinates:
│   │       altitude             float32 4B ...
│   │       latitude             float32 4B ...
│   │       longitude            float32 4B ...
│   │   Dimensions without coordinates: sweep
│   │   Data variables:
│   │       volume_number        int64 8B 0
│   │       platform_type        <U5 20B 'fixed'
│   │       instrument_type      <U5 20B 'radar'
│   │       time_coverage_start  <U20 80B '2022-08-22T13:52:53Z'
│   │       time_coverage_end    <U20 80B '2022-08-22T13:58:55Z'
│   │       sweep_group_name     (sweep) <U7 280B 'sweep_0' 'sweep_1' ... 'sweep_9'
│   │       sweep_fixed_angle    (sweep) float64 80B 0.4999 0.9998 2.0 ... 16.0 21.0
│   │   Attributes:
│   │       Conventions:         CF-1.8, WMO CF-1.0, ACDD-1.3
│   │       wmo__cf_profile:     FM 301-XX
│   │       version:             2.0
│   │       title:               IMD radar data
│   │       institution:         India Meteorological Department
│   │       references:          
│   │       source:              IMD NetCDF
│   │       history:             
│   │       comment:             
│   │       instrument_name:     
│   │       platform_is_mobile:  false
│   │       volume_number:       0
│   ├── Group: /vcp_00/sweep_0
│   │       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
│   │       Coordinates:
│   │         * azimuth                   (azimuth) float32 1kB 0.1703 1.005 ... 358.2 359.0
│   │           elevation                 (azimuth) float32 1kB ...
│   │           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T13:53:0...
│   │         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
│   │         * frequency                 (frequency) float32 4B 5.625e+09
│   │       Data variables: (12/47)
│   │           nyquist_velocity          float32 4B ...
│   │           unambiguous_range         float32 4B ...
│   │           calibConst                float32 4B ...
│   │           radarConst                float32 4B ...
│   │           radar_beam_width_h        float32 4B ...
│   │           radar_receiver_bandwidth  float32 4B ...
│   │           ...                        ...
│   │           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
│   │           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
│   │           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
│   │           sweep_fixed_angle         float64 8B 0.4999
│   │           sweep_number              int64 8B 0
│   │           rays_angle_resolution     float64 8B 1.0
│   ├── Group: /vcp_00/sweep_1
│   │       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
│   │       Coordinates:
│   │         * azimuth                   (azimuth) float32 1kB 0.1703 1.027 ... 358.2 359.0
│   │           elevation                 (azimuth) float32 1kB ...
│   │           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T13:53:3...
│   │         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
│   │         * frequency                 (frequency) float32 4B 5.625e+09
│   │       Data variables: (12/47)
│   │           nyquist_velocity          float32 4B ...
│   │           unambiguous_range         float32 4B ...
│   │           calibConst                float32 4B ...
│   │           radarConst                float32 4B ...
│   │           radar_beam_width_h        float32 4B ...
│   │           radar_receiver_bandwidth  float32 4B ...
│   │           ...                        ...
│   │           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
│   │           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
│   │           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
│   │           sweep_fixed_angle         float64 8B 0.9998
│   │           sweep_number              int64 8B 1
│   │           rays_angle_resolution     float64 8B 1.0
│   ├── Group: /vcp_00/sweep_2
│   │       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
│   │       Coordinates:
│   │         * azimuth                   (azimuth) float32 1kB 0.1428 1.027 ... 358.2 359.0
│   │           elevation                 (azimuth) float32 1kB ...
│   │           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T13:54:1...
│   │         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
│   │         * frequency                 (frequency) float32 4B 5.625e+09
│   │       Data variables: (12/47)
│   │           nyquist_velocity          float32 4B ...
│   │           unambiguous_range         float32 4B ...
│   │           calibConst                float32 4B ...
│   │           radarConst                float32 4B ...
│   │           radar_beam_width_h        float32 4B ...
│   │           radar_receiver_bandwidth  float32 4B ...
│   │           ...                        ...
│   │           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
│   │           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
│   │           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
│   │           sweep_fixed_angle         float64 8B 2.0
│   │           sweep_number              int64 8B 2
│   │           rays_angle_resolution     float64 8B 1.0
│   ├── Group: /vcp_00/sweep_3
│   │       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
│   │       Coordinates:
│   │         * azimuth                   (azimuth) float32 1kB 0.1483 1.005 ... 358.2 359.0
│   │           elevation                 (azimuth) float32 1kB ...
│   │           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T13:54:4...
│   │         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
│   │         * frequency                 (frequency) float32 4B 5.625e+09
│   │       Data variables: (12/47)
│   │           nyquist_velocity          float32 4B ...
│   │           unambiguous_range         float32 4B ...
│   │           calibConst                float32 4B ...
│   │           radarConst                float32 4B ...
│   │           radar_beam_width_h        float32 4B ...
│   │           radar_receiver_bandwidth  float32 4B ...
│   │           ...                        ...
│   │           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
│   │           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
│   │           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
│   │           sweep_fixed_angle         float64 8B 2.999
│   │           sweep_number              int64 8B 3
│   │           rays_angle_resolution     float64 8B 1.0
│   ├── Group: /vcp_00/sweep_4
│   │       Dimensions:                   (azimuth: 356, range: 999, frequency: 1)
│   │       Coordinates:
│   │         * azimuth                   (azimuth) float32 1kB 0.1593 1.016 ... 358.2 359.0
│   │           elevation                 (azimuth) float32 1kB ...
│   │           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T13:55:2...
│   │         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
│   │         * frequency                 (frequency) float32 4B 5.625e+09
│   │       Data variables: (12/47)
│   │           nyquist_velocity          float32 4B ...
│   │           unambiguous_range         float32 4B ...
│   │           calibConst                float32 4B ...
│   │           radarConst                float32 4B ...
│   │           radar_beam_width_h        float32 4B ...
│   │           radar_receiver_bandwidth  float32 4B ...
│   │           ...                        ...
│   │           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
│   │           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
│   │           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
│   │           sweep_fixed_angle         float64 8B 4.499
│   │           sweep_number              int64 8B 4
│   │           rays_angle_resolution     float64 8B 1.0
│   ├── Group: /vcp_00/sweep_5
│   │       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
│   │       Coordinates:
│   │         * azimuth                   (azimuth) float32 1kB 0.1648 1.016 ... 358.2 359.0
│   │           elevation                 (azimuth) float32 1kB ...
│   │           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T13:55:5...
│   │         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
│   │         * frequency                 (frequency) float32 4B 5.625e+09
│   │       Data variables: (12/47)
│   │           nyquist_velocity          float32 4B ...
│   │           unambiguous_range         float32 4B ...
│   │           calibConst                float32 4B ...
│   │           radarConst                float32 4B ...
│   │           radar_beam_width_h        float32 4B ...
│   │           radar_receiver_bandwidth  float32 4B ...
│   │           ...                        ...
│   │           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
│   │           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
│   │           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
│   │           sweep_fixed_angle         float64 8B 5.999
│   │           sweep_number              int64 8B 5
│   │           rays_angle_resolution     float64 8B 1.0
│   ├── Group: /vcp_00/sweep_6
│   │       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
│   │       Coordinates:
│   │         * azimuth                   (azimuth) float32 1kB 0.1483 1.033 ... 358.1 359.0
│   │           elevation                 (azimuth) float32 1kB ...
│   │           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T13:56:3...
│   │         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
│   │         * frequency                 (frequency) float32 4B 5.625e+09
│   │       Data variables: (12/47)
│   │           nyquist_velocity          float32 4B ...
│   │           unambiguous_range         float32 4B ...
│   │           calibConst                float32 4B ...
│   │           radarConst                float32 4B ...
│   │           radar_beam_width_h        float32 4B ...
│   │           radar_receiver_bandwidth  float32 4B ...
│   │           ...                        ...
│   │           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
│   │           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
│   │           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
│   │           sweep_fixed_angle         float64 8B 8.998
│   │           sweep_number              int64 8B 6
│   │           rays_angle_resolution     float64 8B 1.0
│   ├── Group: /vcp_00/sweep_7
│   │       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
│   │       Coordinates:
│   │         * azimuth                   (azimuth) float32 1kB 0.1648 1.016 ... 358.2 359.0
│   │           elevation                 (azimuth) float32 1kB ...
│   │           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T13:57:0...
│   │         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
│   │         * frequency                 (frequency) float32 4B 5.625e+09
│   │       Data variables: (12/47)
│   │           nyquist_velocity          float32 4B ...
│   │           unambiguous_range         float32 4B ...
│   │           calibConst                float32 4B ...
│   │           radarConst                float32 4B ...
│   │           radar_beam_width_h        float32 4B ...
│   │           radar_receiver_bandwidth  float32 4B ...
│   │           ...                        ...
│   │           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
│   │           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
│   │           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
│   │           sweep_fixed_angle         float64 8B 12.0
│   │           sweep_number              int64 8B 7
│   │           rays_angle_resolution     float64 8B 1.0
│   ├── Group: /vcp_00/sweep_8
│   │       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
│   │       Coordinates:
│   │         * azimuth                   (azimuth) float32 1kB 0.1703 1.027 ... 358.2 359.0
│   │           elevation                 (azimuth) float32 1kB ...
│   │           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T13:57:4...
│   │         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
│   │         * frequency                 (frequency) float32 4B 5.625e+09
│   │       Data variables: (12/47)
│   │           nyquist_velocity          float32 4B ...
│   │           unambiguous_range         float32 4B ...
│   │           calibConst                float32 4B ...
│   │           radarConst                float32 4B ...
│   │           radar_beam_width_h        float32 4B ...
│   │           radar_receiver_bandwidth  float32 4B ...
│   │           ...                        ...
│   │           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
│   │           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
│   │           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
│   │           sweep_fixed_angle         float64 8B 16.0
│   │           sweep_number              int64 8B 8
│   │           rays_angle_resolution     float64 8B 1.0
│   └── Group: /vcp_00/sweep_9
│           Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
│           Coordinates:
│             * azimuth                   (azimuth) float32 1kB 0.1373 1.022 ... 358.1 359.0
│               elevation                 (azimuth) float32 1kB ...
│               time                      (azimuth) datetime64[ns] 3kB 2022-08-22T13:58:5...
│             * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
│             * frequency                 (frequency) float32 4B 5.625e+09
│           Data variables: (12/47)
│               nyquist_velocity          float32 4B ...
│               unambiguous_range         float32 4B ...
│               calibConst                float32 4B ...
│               radarConst                float32 4B ...
│               radar_beam_width_h        float32 4B ...
│               radar_receiver_bandwidth  float32 4B ...
│               ...                        ...
│               scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
│               n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
│               pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
│               sweep_fixed_angle         float64 8B 21.0
│               sweep_number              int64 8B 9
│               rays_angle_resolution     float64 8B 1.0
└── Group: /vcp_01
    │   Dimensions:              (sweep: 10)
    │   Coordinates:
    │       altitude             float32 4B ...
    │       latitude             float32 4B ...
    │       longitude            float32 4B ...
    │   Dimensions without coordinates: sweep
    │   Data variables:
    │       volume_number        int64 8B 0
    │       platform_type        <U5 20B 'fixed'
    │       instrument_type      <U5 20B 'radar'
    │       time_coverage_start  <U20 80B '2022-08-22T14:02:53Z'
    │       time_coverage_end    <U20 80B '2022-08-22T14:08:55Z'
    │       sweep_group_name     (sweep) <U7 280B 'sweep_0' 'sweep_1' ... 'sweep_9'
    │       sweep_fixed_angle    (sweep) float64 80B 0.4999 0.9998 2.0 ... 16.0 21.0
    │   Attributes:
    │       Conventions:         CF-1.8, WMO CF-1.0, ACDD-1.3
    │       wmo__cf_profile:     FM 301-XX
    │       version:             2.0
    │       title:               IMD radar data
    │       institution:         India Meteorological Department
    │       references:          
    │       source:              IMD NetCDF
    │       history:             
    │       comment:             
    │       instrument_name:     
    │       platform_is_mobile:  false
    │       volume_number:       0
    ├── Group: /vcp_01/sweep_0
    │       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
    │       Coordinates:
    │         * azimuth                   (azimuth) float32 1kB 0.1538 1.005 ... 358.1 359.0
    │           elevation                 (azimuth) float32 1kB ...
    │           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T14:03:2...
    │         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
    │         * frequency                 (frequency) float32 4B 5.625e+09
    │       Data variables: (12/47)
    │           nyquist_velocity          float32 4B ...
    │           unambiguous_range         float32 4B ...
    │           calibConst                float32 4B ...
    │           radarConst                float32 4B ...
    │           radar_beam_width_h        float32 4B ...
    │           radar_receiver_bandwidth  float32 4B ...
    │           ...                        ...
    │           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
    │           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
    │           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
    │           sweep_fixed_angle         float64 8B 0.4999
    │           sweep_number              int64 8B 0
    │           rays_angle_resolution     float64 8B 1.0
    ├── Group: /vcp_01/sweep_1
    │       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
    │       Coordinates:
    │         * azimuth                   (azimuth) float32 1kB 0.1538 1.005 ... 358.2 359.0
    │           elevation                 (azimuth) float32 1kB ...
    │           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T14:04:0...
    │         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
    │         * frequency                 (frequency) float32 4B 5.625e+09
    │       Data variables: (12/47)
    │           nyquist_velocity          float32 4B ...
    │           unambiguous_range         float32 4B ...
    │           calibConst                float32 4B ...
    │           radarConst                float32 4B ...
    │           radar_beam_width_h        float32 4B ...
    │           radar_receiver_bandwidth  float32 4B ...
    │           ...                        ...
    │           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
    │           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
    │           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
    │           sweep_fixed_angle         float64 8B 0.9998
    │           sweep_number              int64 8B 1
    │           rays_angle_resolution     float64 8B 1.0
    ├── Group: /vcp_01/sweep_2
    │       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
    │       Coordinates:
    │         * azimuth                   (azimuth) float32 1kB 0.1593 0.9998 ... 359.0
    │           elevation                 (azimuth) float32 1kB ...
    │           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T14:04:3...
    │         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
    │         * frequency                 (frequency) float32 4B 5.625e+09
    │       Data variables: (12/47)
    │           nyquist_velocity          float32 4B ...
    │           unambiguous_range         float32 4B ...
    │           calibConst                float32 4B ...
    │           radarConst                float32 4B ...
    │           radar_beam_width_h        float32 4B ...
    │           radar_receiver_bandwidth  float32 4B ...
    │           ...                        ...
    │           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
    │           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
    │           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
    │           sweep_fixed_angle         float64 8B 2.0
    │           sweep_number              int64 8B 2
    │           rays_angle_resolution     float64 8B 1.0
    ├── Group: /vcp_01/sweep_3
    │       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
    │       Coordinates:
    │         * azimuth                   (azimuth) float32 1kB 0.1813 1.033 ... 358.2 359.0
    │           elevation                 (azimuth) float32 1kB ...
    │           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T14:05:1...
    │         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
    │         * frequency                 (frequency) float32 4B 5.625e+09
    │       Data variables: (12/47)
    │           nyquist_velocity          float32 4B ...
    │           unambiguous_range         float32 4B ...
    │           calibConst                float32 4B ...
    │           radarConst                float32 4B ...
    │           radar_beam_width_h        float32 4B ...
    │           radar_receiver_bandwidth  float32 4B ...
    │           ...                        ...
    │           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
    │           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
    │           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
    │           sweep_fixed_angle         float64 8B 2.999
    │           sweep_number              int64 8B 3
    │           rays_angle_resolution     float64 8B 1.0
    ├── Group: /vcp_01/sweep_4
    │       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
    │       Coordinates:
    │         * azimuth                   (azimuth) float32 1kB 0.1648 1.016 ... 358.2 359.0
    │           elevation                 (azimuth) float32 1kB ...
    │           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T14:05:4...
    │         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
    │         * frequency                 (frequency) float32 4B 5.625e+09
    │       Data variables: (12/47)
    │           nyquist_velocity          float32 4B ...
    │           unambiguous_range         float32 4B ...
    │           calibConst                float32 4B ...
    │           radarConst                float32 4B ...
    │           radar_beam_width_h        float32 4B ...
    │           radar_receiver_bandwidth  float32 4B ...
    │           ...                        ...
    │           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
    │           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
    │           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
    │           sweep_fixed_angle         float64 8B 4.499
    │           sweep_number              int64 8B 4
    │           rays_angle_resolution     float64 8B 1.0
    ├── Group: /vcp_01/sweep_5
    │       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
    │       Coordinates:
    │         * azimuth                   (azimuth) float32 1kB 0.1483 1.016 ... 358.1 359.0
    │           elevation                 (azimuth) float32 1kB ...
    │           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T14:06:2...
    │         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
    │         * frequency                 (frequency) float32 4B 5.625e+09
    │       Data variables: (12/47)
    │           nyquist_velocity          float32 4B ...
    │           unambiguous_range         float32 4B ...
    │           calibConst                float32 4B ...
    │           radarConst                float32 4B ...
    │           radar_beam_width_h        float32 4B ...
    │           radar_receiver_bandwidth  float32 4B ...
    │           ...                        ...
    │           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
    │           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
    │           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
    │           sweep_fixed_angle         float64 8B 5.999
    │           sweep_number              int64 8B 5
    │           rays_angle_resolution     float64 8B 1.0
    ├── Group: /vcp_01/sweep_6
    │       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
    │       Coordinates:
    │         * azimuth                   (azimuth) float32 1kB 0.1593 1.011 ... 358.1 359.0
    │           elevation                 (azimuth) float32 1kB ...
    │           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T14:06:5...
    │         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
    │         * frequency                 (frequency) float32 4B 5.625e+09
    │       Data variables: (12/47)
    │           nyquist_velocity          float32 4B ...
    │           unambiguous_range         float32 4B ...
    │           calibConst                float32 4B ...
    │           radarConst                float32 4B ...
    │           radar_beam_width_h        float32 4B ...
    │           radar_receiver_bandwidth  float32 4B ...
    │           ...                        ...
    │           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
    │           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
    │           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
    │           sweep_fixed_angle         float64 8B 8.998
    │           sweep_number              int64 8B 6
    │           rays_angle_resolution     float64 8B 1.0
    ├── Group: /vcp_01/sweep_7
    │       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
    │       Coordinates:
    │         * azimuth                   (azimuth) float32 1kB 0.1703 1.027 ... 358.2 359.0
    │           elevation                 (azimuth) float32 1kB ...
    │           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T14:07:3...
    │         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
    │         * frequency                 (frequency) float32 4B 5.625e+09
    │       Data variables: (12/47)
    │           nyquist_velocity          float32 4B ...
    │           unambiguous_range         float32 4B ...
    │           calibConst                float32 4B ...
    │           radarConst                float32 4B ...
    │           radar_beam_width_h        float32 4B ...
    │           radar_receiver_bandwidth  float32 4B ...
    │           ...                        ...
    │           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
    │           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
    │           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
    │           sweep_fixed_angle         float64 8B 12.0
    │           sweep_number              int64 8B 7
    │           rays_angle_resolution     float64 8B 1.0
    ├── Group: /vcp_01/sweep_8
    │       Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
    │       Coordinates:
    │         * azimuth                   (azimuth) float32 1kB 0.1483 1.027 ... 358.2 359.0
    │           elevation                 (azimuth) float32 1kB ...
    │           time                      (azimuth) datetime64[ns] 3kB 2022-08-22T14:08:0...
    │         * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
    │         * frequency                 (frequency) float32 4B 5.625e+09
    │       Data variables: (12/47)
    │           nyquist_velocity          float32 4B ...
    │           unambiguous_range         float32 4B ...
    │           calibConst                float32 4B ...
    │           radarConst                float32 4B ...
    │           radar_beam_width_h        float32 4B ...
    │           radar_receiver_bandwidth  float32 4B ...
    │           ...                        ...
    │           scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
    │           n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
    │           pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
    │           sweep_fixed_angle         float64 8B 16.0
    │           sweep_number              int64 8B 8
    │           rays_angle_resolution     float64 8B 1.0
    └── Group: /vcp_01/sweep_9
            Dimensions:                   (azimuth: 360, range: 999, frequency: 1)
            Coordinates:
              * azimuth                   (azimuth) float32 1kB 0.1538 1.011 ... 358.2 359.0
                elevation                 (azimuth) float32 1kB ...
                time                      (azimuth) datetime64[ns] 3kB 2022-08-22T14:08:4...
              * range                     (range) float64 8kB 300.0 550.0 ... 2.498e+05
              * frequency                 (frequency) float32 4B 5.625e+09
            Data variables: (12/47)
                nyquist_velocity          float32 4B ...
                unambiguous_range         float32 4B ...
                calibConst                float32 4B ...
                radarConst                float32 4B ...
                radar_beam_width_h        float32 4B ...
                radar_receiver_bandwidth  float32 4B ...
                ...                        ...
                scan_rate                 (azimuth) float32 1kB 10.18 10.18 ... 10.18 10.18
                n_samples                 (azimuth) int32 1kB 42 42 42 42 42 ... 42 42 42 42
                pulse_width               (azimuth) float32 1kB 1e-06 1e-06 ... 1e-06 1e-06
                sweep_fixed_angle         float64 8B 21.0
                sweep_number              int64 8B 9
                rays_angle_resolution     float64 8B 1.0
tree["vcp_00/sweep_0"].ds["DBZH"]
<xarray.DataArray 'DBZH' (azimuth: 360, range: 999)> Size: 1MB
[359640 values with dtype=float32]
Coordinates:
  * azimuth    (azimuth) float32 1kB 0.1703 1.005 2.148 ... 357.0 358.2 359.0
    elevation  (azimuth) float32 1kB ...
    time       (azimuth) datetime64[ns] 3kB 2022-08-22T13:53:02 ... 2022-08-2...
  * range      (range) float64 8kB 300.0 550.0 800.0 ... 2.496e+05 2.498e+05
Attributes:
    units:          dBZ
    long_name:      Equivalent reflectivity factor H
    polarization:   Horizontal
    standard_name:  radar_equivalent_reflectivity_factor_h