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 (T→DBTH,
Z→DBZH, V→VRADH, W→WRADH; 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:28ZPlot Range vs. Azimuth#
ds.DBZH.plot(y="azimuth")
<matplotlib.collections.QuadMesh at 0x76a282f4f230>
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:28Zopen_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.0Volume 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.0Plot 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")
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.0group_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.0tree["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