Load ODIM_H5 Volume data from German Weather Service#

In this example, we obtain and read the latest 30 minutes of available volumetric radar data from German Weather Service available at opendata.dwd.de. Finally we do some plotting.

This retrieves 6 timesteps of the 10 sweeps (moments DBZH and VRADH) of the DWD volume scan of a distinct radar. This amounts to 120 data files which are combined into one volumetric Cf/Radial2 like xarray powered structure.

Exports to single file Odim_H5 and Cf/Radial2 format are shown at the end of this tutorial.

Note

The following code is based on xarray, xarray-datatree and xradar. It claims multiple data files and presents them in a DataTree.

[1]:
import wradlib as wrl
import warnings

warnings.filterwarnings("ignore")
import matplotlib.pyplot as plt
import numpy as np
import xarray as xr

try:
    get_ipython().run_line_magic("matplotlib inline")
except:
    plt.ion()
/home/runner/micromamba/envs/wradlib-tests/lib/python3.11/site-packages/h5py/__init__.py:36: UserWarning: h5py is running against HDF5 1.14.3 when it was built against 1.14.2, this may cause problems
  _warn(("h5py is running against HDF5 {0} when it was built against {1}, "
[2]:
import urllib3
import os
import io
import glob
import shutil
import datetime

Download radar volumes of latest 30 minutes from server using wetterdienst#

wetterdienst is a neat package for easy retrieval of data primarily from DWD. For further information have a look at their documentation.

[3]:
from wetterdienst.provider.dwd.radar import (
    DwdRadarDataFormat,
    DwdRadarDataSubset,
    DwdRadarParameter,
    DwdRadarValues,
)
from wetterdienst.provider.dwd.radar.sites import DwdRadarSite
[4]:
elevations = range(10)

end_date = datetime.datetime.utcnow()
start_date = end_date - datetime.timedelta(minutes=30)

results_velocity = []
results_reflectivity = []

for el in elevations:
    # Horizontal Doppler Velocity
    request_velocity = DwdRadarValues(
        parameter=DwdRadarParameter.SWEEP_VOL_VELOCITY_H,
        start_date=start_date,
        end_date=end_date,
        site=DwdRadarSite.ESS,
        elevation=el,
        fmt=DwdRadarDataFormat.HDF5,
        subset=DwdRadarDataSubset.POLARIMETRIC,
    )

    # Horizontal Reflectivity
    request_reflectivity = DwdRadarValues(
        parameter=DwdRadarParameter.SWEEP_VOL_REFLECTIVITY_H,
        start_date=start_date,
        end_date=end_date,
        elevation=el,
        site=DwdRadarSite.ESS,
        fmt=DwdRadarDataFormat.HDF5,
        subset=DwdRadarDataSubset.POLARIMETRIC,
    )

    # Submit requests.
    results_velocity.append(request_velocity.query())
    results_reflectivity.append(request_reflectivity.query())
[5]:
import wetterdienst

wetterdienst.__version__
[5]:
'0.49.0'

Acquire data as memory buffer#

[6]:
%%time
volume_velocity = []
for item1 in results_velocity:
    files = []
    for item2 in item1:
        files.append(item2.data)
    volume_velocity.append(files)
more-to-come:

class:

stderr

0%| | 0/240 [00:00<?, ?it/s]

</pre>

0%| | 0/240 [00:00<?, ?it/s]

end{sphinxVerbatim}

0%| | 0/240 [00:00<?, ?it/s]

more-to-come:

class:

stderr

0%| | 1/240 [00:02&lt;08:46, 2.20s/it]

</pre>

0%| | 1/240 [00:02<08:46, 2.20s/it]

end{sphinxVerbatim}

0%| | 1/240 [00:02<08:46, 2.20s/it]

more-to-come:

class:

stderr

1%| | 2/240 [00:02&lt;03:57, 1.00it/s]

</pre>

1%| | 2/240 [00:02<03:57, 1.00it/s]

end{sphinxVerbatim}

1%| | 2/240 [00:02<03:57, 1.00it/s]

more-to-come:

class:

stderr

1%|▏ | 3/240 [00:02&lt;02:24, 1.64it/s]

</pre>

1%|▏ | 3/240 [00:02<02:24, 1.64it/s]

end{sphinxVerbatim}

1%|▏ | 3/240 [00:02<02:24, 1.64it/s]

more-to-come:

class:

stderr

2%|▏ | 4/240 [00:02&lt;01:40, 2.34it/s]

</pre>

2%|▏ | 4/240 [00:02<01:40, 2.34it/s]

end{sphinxVerbatim}

2%|▏ | 4/240 [00:02<01:40, 2.34it/s]

more-to-come:

class:

stderr

2%|▏ | 5/240 [00:02&lt;01:16, 3.08it/s]

</pre>

2%|▏ | 5/240 [00:02<01:16, 3.08it/s]

end{sphinxVerbatim}

2%|▏ | 5/240 [00:02<01:16, 3.08it/s]

more-to-come:

class:

stderr

2%|▎ | 6/240 [00:02&lt;01:01, 3.80it/s]

</pre>

2%|▎ | 6/240 [00:02<01:01, 3.80it/s]

end{sphinxVerbatim}

2%|▎ | 6/240 [00:02<01:01, 3.80it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:03&lt;00:52, 4.47it/s]

</pre>

3%|▎ | 7/240 [00:03<00:52, 4.47it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:03<00:52, 4.47it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:03&lt;01:42, 2.27it/s]

</pre>

3%|▎ | 7/240 [00:03<01:42, 2.27it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:03<01:42, 2.27it/s]


more-to-come:

class:

stderr

0%| | 0/240 [00:00&lt;?, ?it/s]

</pre>

0%| | 0/240 [00:00<?, ?it/s]

end{sphinxVerbatim}

0%| | 0/240 [00:00<?, ?it/s]

more-to-come:

class:

stderr

0%| | 1/240 [00:00&lt;02:21, 1.69it/s]

</pre>

0%| | 1/240 [00:00<02:21, 1.69it/s]

end{sphinxVerbatim}

0%| | 1/240 [00:00<02:21, 1.69it/s]

more-to-come:

class:

stderr

1%| | 2/240 [00:00&lt;01:18, 3.03it/s]

</pre>

1%| | 2/240 [00:00<01:18, 3.03it/s]

end{sphinxVerbatim}

1%| | 2/240 [00:00<01:18, 3.03it/s]

more-to-come:

class:

stderr

1%|▏ | 3/240 [00:00&lt;00:58, 4.07it/s]

</pre>

1%|▏ | 3/240 [00:00<00:58, 4.07it/s]

end{sphinxVerbatim}

1%|▏ | 3/240 [00:00<00:58, 4.07it/s]

more-to-come:

class:

stderr

2%|▏ | 4/240 [00:01&lt;00:48, 4.86it/s]

</pre>

2%|▏ | 4/240 [00:01<00:48, 4.86it/s]

end{sphinxVerbatim}

2%|▏ | 4/240 [00:01<00:48, 4.86it/s]

more-to-come:

class:

stderr

2%|▏ | 5/240 [00:01&lt;00:43, 5.46it/s]

</pre>

2%|▏ | 5/240 [00:01<00:43, 5.46it/s]

end{sphinxVerbatim}

2%|▏ | 5/240 [00:01<00:43, 5.46it/s]

more-to-come:

class:

stderr

2%|▎ | 6/240 [00:01&lt;00:39, 5.91it/s]

</pre>

2%|▎ | 6/240 [00:01<00:39, 5.91it/s]

end{sphinxVerbatim}

2%|▎ | 6/240 [00:01<00:39, 5.91it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:37, 6.25it/s]

</pre>

3%|▎ | 7/240 [00:01<00:37, 6.25it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:37, 6.25it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:48, 4.81it/s]

</pre>

3%|▎ | 7/240 [00:01<00:48, 4.81it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:48, 4.81it/s]


more-to-come:

class:

stderr

0%| | 0/240 [00:00&lt;?, ?it/s]

</pre>

0%| | 0/240 [00:00<?, ?it/s]

end{sphinxVerbatim}

0%| | 0/240 [00:00<?, ?it/s]

more-to-come:

class:

stderr

0%| | 1/240 [00:00&lt;02:21, 1.69it/s]

</pre>

0%| | 1/240 [00:00<02:21, 1.69it/s]

end{sphinxVerbatim}

0%| | 1/240 [00:00<02:21, 1.69it/s]

more-to-come:

class:

stderr

1%| | 2/240 [00:00&lt;01:19, 3.01it/s]

</pre>

1%| | 2/240 [00:00<01:19, 3.01it/s]

end{sphinxVerbatim}

1%| | 2/240 [00:00<01:19, 3.01it/s]

more-to-come:

class:

stderr

1%|▏ | 3/240 [00:00&lt;01:04, 3.65it/s]

</pre>

1%|▏ | 3/240 [00:00<01:04, 3.65it/s]

end{sphinxVerbatim}

1%|▏ | 3/240 [00:00<01:04, 3.65it/s]

more-to-come:

class:

stderr

2%|▏ | 4/240 [00:01&lt;00:52, 4.49it/s]

</pre>

2%|▏ | 4/240 [00:01<00:52, 4.49it/s]

end{sphinxVerbatim}

2%|▏ | 4/240 [00:01<00:52, 4.49it/s]

more-to-come:

class:

stderr

2%|▏ | 5/240 [00:01&lt;00:45, 5.21it/s]

</pre>

2%|▏ | 5/240 [00:01<00:45, 5.21it/s]

end{sphinxVerbatim}

2%|▏ | 5/240 [00:01<00:45, 5.21it/s]

more-to-come:

class:

stderr

2%|▎ | 6/240 [00:01&lt;00:40, 5.77it/s]

</pre>

2%|▎ | 6/240 [00:01<00:40, 5.77it/s]

end{sphinxVerbatim}

2%|▎ | 6/240 [00:01<00:40, 5.77it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:37, 6.26it/s]

</pre>

3%|▎ | 7/240 [00:01<00:37, 6.26it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:37, 6.26it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:49, 4.67it/s]

</pre>

3%|▎ | 7/240 [00:01<00:49, 4.67it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:49, 4.67it/s]


more-to-come:

class:

stderr

0%| | 0/240 [00:00&lt;?, ?it/s]

</pre>

0%| | 0/240 [00:00<?, ?it/s]

end{sphinxVerbatim}

0%| | 0/240 [00:00<?, ?it/s]

more-to-come:

class:

stderr

0%| | 1/240 [00:00&lt;02:35, 1.54it/s]

</pre>

0%| | 1/240 [00:00<02:35, 1.54it/s]

end{sphinxVerbatim}

0%| | 1/240 [00:00<02:35, 1.54it/s]

more-to-come:

class:

stderr

1%| | 2/240 [00:00&lt;01:23, 2.84it/s]

</pre>

1%| | 2/240 [00:00<01:23, 2.84it/s]

end{sphinxVerbatim}

1%| | 2/240 [00:00<01:23, 2.84it/s]

more-to-come:

class:

stderr

1%|▏ | 3/240 [00:00&lt;01:01, 3.88it/s]

</pre>

1%|▏ | 3/240 [00:00<01:01, 3.88it/s]

end{sphinxVerbatim}

1%|▏ | 3/240 [00:00<01:01, 3.88it/s]

more-to-come:

class:

stderr

2%|▏ | 4/240 [00:01&lt;00:51, 4.54it/s]

</pre>

2%|▏ | 4/240 [00:01<00:51, 4.54it/s]

end{sphinxVerbatim}

2%|▏ | 4/240 [00:01<00:51, 4.54it/s]

more-to-come:

class:

stderr

2%|▏ | 5/240 [00:01&lt;00:45, 5.19it/s]

</pre>

2%|▏ | 5/240 [00:01<00:45, 5.19it/s]

end{sphinxVerbatim}

2%|▏ | 5/240 [00:01<00:45, 5.19it/s]

more-to-come:

class:

stderr

2%|▎ | 6/240 [00:01&lt;00:41, 5.69it/s]

</pre>

2%|▎ | 6/240 [00:01<00:41, 5.69it/s]

end{sphinxVerbatim}

2%|▎ | 6/240 [00:01<00:41, 5.69it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:38, 6.08it/s]

</pre>

3%|▎ | 7/240 [00:01<00:38, 6.08it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:38, 6.08it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:50, 4.57it/s]

</pre>

3%|▎ | 7/240 [00:01<00:50, 4.57it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:50, 4.57it/s]


more-to-come:

class:

stderr

0%| | 0/240 [00:00&lt;?, ?it/s]

</pre>

0%| | 0/240 [00:00<?, ?it/s]

end{sphinxVerbatim}

0%| | 0/240 [00:00<?, ?it/s]

more-to-come:

class:

stderr

0%| | 1/240 [00:00&lt;02:17, 1.74it/s]

</pre>

0%| | 1/240 [00:00<02:17, 1.74it/s]

end{sphinxVerbatim}

0%| | 1/240 [00:00<02:17, 1.74it/s]

more-to-come:

class:

stderr

1%| | 2/240 [00:00&lt;01:17, 3.06it/s]

</pre>

1%| | 2/240 [00:00<01:17, 3.06it/s]

end{sphinxVerbatim}

1%| | 2/240 [00:00<01:17, 3.06it/s]

more-to-come:

class:

stderr

1%|▏ | 3/240 [00:00&lt;00:58, 4.08it/s]

</pre>

1%|▏ | 3/240 [00:00<00:58, 4.08it/s]

end{sphinxVerbatim}

1%|▏ | 3/240 [00:00<00:58, 4.08it/s]

more-to-come:

class:

stderr

2%|▏ | 4/240 [00:01&lt;00:48, 4.84it/s]

</pre>

2%|▏ | 4/240 [00:01<00:48, 4.84it/s]

end{sphinxVerbatim}

2%|▏ | 4/240 [00:01<00:48, 4.84it/s]

more-to-come:

class:

stderr

2%|▏ | 5/240 [00:01&lt;00:43, 5.39it/s]

</pre>

2%|▏ | 5/240 [00:01<00:43, 5.39it/s]

end{sphinxVerbatim}

2%|▏ | 5/240 [00:01<00:43, 5.39it/s]

more-to-come:

class:

stderr

2%|▎ | 6/240 [00:01&lt;00:40, 5.78it/s]

</pre>

2%|▎ | 6/240 [00:01<00:40, 5.78it/s]

end{sphinxVerbatim}

2%|▎ | 6/240 [00:01<00:40, 5.78it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:38, 6.09it/s]

</pre>

3%|▎ | 7/240 [00:01<00:38, 6.09it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:38, 6.09it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:48, 4.77it/s]

</pre>

3%|▎ | 7/240 [00:01<00:48, 4.77it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:48, 4.77it/s]


more-to-come:

class:

stderr

0%| | 0/240 [00:00&lt;?, ?it/s]

</pre>

0%| | 0/240 [00:00<?, ?it/s]

end{sphinxVerbatim}

0%| | 0/240 [00:00<?, ?it/s]

more-to-come:

class:

stderr

0%| | 1/240 [00:00&lt;02:21, 1.69it/s]

</pre>

0%| | 1/240 [00:00<02:21, 1.69it/s]

end{sphinxVerbatim}

0%| | 1/240 [00:00<02:21, 1.69it/s]

more-to-come:

class:

stderr

1%| | 2/240 [00:00&lt;01:18, 3.03it/s]

</pre>

1%| | 2/240 [00:00<01:18, 3.03it/s]

end{sphinxVerbatim}

1%| | 2/240 [00:00<01:18, 3.03it/s]

more-to-come:

class:

stderr

1%|▏ | 3/240 [00:00&lt;00:58, 4.04it/s]

</pre>

1%|▏ | 3/240 [00:00<00:58, 4.04it/s]

end{sphinxVerbatim}

1%|▏ | 3/240 [00:00<00:58, 4.04it/s]

more-to-come:

class:

stderr

2%|▏ | 4/240 [00:01&lt;00:49, 4.79it/s]

</pre>

2%|▏ | 4/240 [00:01<00:49, 4.79it/s]

end{sphinxVerbatim}

2%|▏ | 4/240 [00:01<00:49, 4.79it/s]

more-to-come:

class:

stderr

2%|▏ | 5/240 [00:01&lt;00:43, 5.35it/s]

</pre>

2%|▏ | 5/240 [00:01<00:43, 5.35it/s]

end{sphinxVerbatim}

2%|▏ | 5/240 [00:01<00:43, 5.35it/s]

more-to-come:

class:

stderr

2%|▎ | 6/240 [00:01&lt;00:40, 5.76it/s]

</pre>

2%|▎ | 6/240 [00:01<00:40, 5.76it/s]

end{sphinxVerbatim}

2%|▎ | 6/240 [00:01<00:40, 5.76it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:38, 6.07it/s]

</pre>

3%|▎ | 7/240 [00:01<00:38, 6.07it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:38, 6.07it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:49, 4.73it/s]

</pre>

3%|▎ | 7/240 [00:01<00:49, 4.73it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:49, 4.73it/s]


more-to-come:

class:

stderr

0%| | 0/240 [00:00&lt;?, ?it/s]

</pre>

0%| | 0/240 [00:00<?, ?it/s]

end{sphinxVerbatim}

0%| | 0/240 [00:00<?, ?it/s]

more-to-come:

class:

stderr

0%| | 1/240 [00:00&lt;02:31, 1.58it/s]

</pre>

0%| | 1/240 [00:00<02:31, 1.58it/s]

end{sphinxVerbatim}

0%| | 1/240 [00:00<02:31, 1.58it/s]

more-to-come:

class:

stderr

1%| | 2/240 [00:00&lt;01:18, 3.02it/s]

</pre>

1%| | 2/240 [00:00<01:18, 3.02it/s]

end{sphinxVerbatim}

1%| | 2/240 [00:00<01:18, 3.02it/s]

more-to-come:

class:

stderr

1%|▏ | 3/240 [00:00&lt;00:55, 4.30it/s]

</pre>

1%|▏ | 3/240 [00:00<00:55, 4.30it/s]

end{sphinxVerbatim}

1%|▏ | 3/240 [00:00<00:55, 4.30it/s]

more-to-come:

class:

stderr

2%|▏ | 4/240 [00:00&lt;00:44, 5.34it/s]

</pre>

2%|▏ | 4/240 [00:00<00:44, 5.34it/s]

end{sphinxVerbatim}

2%|▏ | 4/240 [00:00<00:44, 5.34it/s]

more-to-come:

class:

stderr

2%|▏ | 5/240 [00:01&lt;00:38, 6.18it/s]

</pre>

2%|▏ | 5/240 [00:01<00:38, 6.18it/s]

end{sphinxVerbatim}

2%|▏ | 5/240 [00:01<00:38, 6.18it/s]

more-to-come:

class:

stderr

2%|▎ | 6/240 [00:01&lt;00:34, 6.85it/s]

</pre>

2%|▎ | 6/240 [00:01<00:34, 6.85it/s]

end{sphinxVerbatim}

2%|▎ | 6/240 [00:01<00:34, 6.85it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:31, 7.38it/s]

</pre>

3%|▎ | 7/240 [00:01<00:31, 7.38it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:31, 7.38it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:44, 5.25it/s]

</pre>

3%|▎ | 7/240 [00:01<00:44, 5.25it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:44, 5.25it/s]


more-to-come:

class:

stderr

0%| | 0/240 [00:00&lt;?, ?it/s]

</pre>

0%| | 0/240 [00:00<?, ?it/s]

end{sphinxVerbatim}

0%| | 0/240 [00:00<?, ?it/s]

more-to-come:

class:

stderr

0%| | 1/240 [00:00&lt;02:12, 1.80it/s]

</pre>

0%| | 1/240 [00:00<02:12, 1.80it/s]

end{sphinxVerbatim}

0%| | 1/240 [00:00<02:12, 1.80it/s]

more-to-come:

class:

stderr

1%| | 2/240 [00:00&lt;01:10, 3.38it/s]

</pre>

1%| | 2/240 [00:00<01:10, 3.38it/s]

end{sphinxVerbatim}

1%| | 2/240 [00:00<01:10, 3.38it/s]

more-to-come:

class:

stderr

1%|▏ | 3/240 [00:00&lt;00:50, 4.72it/s]

</pre>

1%|▏ | 3/240 [00:00<00:50, 4.72it/s]

end{sphinxVerbatim}

1%|▏ | 3/240 [00:00<00:50, 4.72it/s]

more-to-come:

class:

stderr

2%|▏ | 4/240 [00:00&lt;00:40, 5.78it/s]

</pre>

2%|▏ | 4/240 [00:00<00:40, 5.78it/s]

end{sphinxVerbatim}

2%|▏ | 4/240 [00:00<00:40, 5.78it/s]

more-to-come:

class:

stderr

2%|▏ | 5/240 [00:01&lt;00:35, 6.63it/s]

</pre>

2%|▏ | 5/240 [00:01<00:35, 6.63it/s]

end{sphinxVerbatim}

2%|▏ | 5/240 [00:01<00:35, 6.63it/s]

more-to-come:

class:

stderr

2%|▎ | 6/240 [00:01&lt;00:32, 7.28it/s]

</pre>

2%|▎ | 6/240 [00:01<00:32, 7.28it/s]

end{sphinxVerbatim}

2%|▎ | 6/240 [00:01<00:32, 7.28it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:30, 7.76it/s]

</pre>

3%|▎ | 7/240 [00:01<00:30, 7.76it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:30, 7.76it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:40, 5.70it/s]

</pre>

3%|▎ | 7/240 [00:01<00:40, 5.70it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:40, 5.70it/s]


more-to-come:

class:

stderr

0%| | 0/240 [00:00&lt;?, ?it/s]

</pre>

0%| | 0/240 [00:00<?, ?it/s]

end{sphinxVerbatim}

0%| | 0/240 [00:00<?, ?it/s]

more-to-come:

class:

stderr

0%| | 1/240 [00:00&lt;02:16, 1.76it/s]

</pre>

0%| | 1/240 [00:00<02:16, 1.76it/s]

end{sphinxVerbatim}

0%| | 1/240 [00:00<02:16, 1.76it/s]

more-to-come:

class:

stderr

1%| | 2/240 [00:00&lt;01:11, 3.33it/s]

</pre>

1%| | 2/240 [00:00<01:11, 3.33it/s]

end{sphinxVerbatim}

1%| | 2/240 [00:00<01:11, 3.33it/s]

more-to-come:

class:

stderr

1%|▏ | 3/240 [00:00&lt;00:50, 4.67it/s]

</pre>

1%|▏ | 3/240 [00:00<00:50, 4.67it/s]

end{sphinxVerbatim}

1%|▏ | 3/240 [00:00<00:50, 4.67it/s]

more-to-come:

class:

stderr

2%|▏ | 4/240 [00:00&lt;00:40, 5.76it/s]

</pre>

2%|▏ | 4/240 [00:00<00:40, 5.76it/s]

end{sphinxVerbatim}

2%|▏ | 4/240 [00:00<00:40, 5.76it/s]

more-to-come:

class:

stderr

2%|▏ | 5/240 [00:01&lt;00:35, 6.60it/s]

</pre>

2%|▏ | 5/240 [00:01<00:35, 6.60it/s]

end{sphinxVerbatim}

2%|▏ | 5/240 [00:01<00:35, 6.60it/s]

more-to-come:

class:

stderr

2%|▎ | 6/240 [00:01&lt;00:32, 7.26it/s]

</pre>

2%|▎ | 6/240 [00:01<00:32, 7.26it/s]

end{sphinxVerbatim}

2%|▎ | 6/240 [00:01<00:32, 7.26it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:29, 7.77it/s]

</pre>

3%|▎ | 7/240 [00:01<00:29, 7.77it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:29, 7.77it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:41, 5.65it/s]

</pre>

3%|▎ | 7/240 [00:01<00:41, 5.65it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:41, 5.65it/s]


more-to-come:

class:

stderr

0%| | 0/240 [00:00&lt;?, ?it/s]

</pre>

0%| | 0/240 [00:00<?, ?it/s]

end{sphinxVerbatim}

0%| | 0/240 [00:00<?, ?it/s]

more-to-come:

class:

stderr

0%| | 1/240 [00:00&lt;02:05, 1.90it/s]

</pre>

0%| | 1/240 [00:00<02:05, 1.90it/s]

end{sphinxVerbatim}

0%| | 1/240 [00:00<02:05, 1.90it/s]

more-to-come:

class:

stderr

1%| | 2/240 [00:00&lt;01:07, 3.54it/s]

</pre>

1%| | 2/240 [00:00<01:07, 3.54it/s]

end{sphinxVerbatim}

1%| | 2/240 [00:00<01:07, 3.54it/s]

more-to-come:

class:

stderr

1%|▏ | 3/240 [00:00&lt;00:48, 4.89it/s]

</pre>

1%|▏ | 3/240 [00:00<00:48, 4.89it/s]

end{sphinxVerbatim}

1%|▏ | 3/240 [00:00<00:48, 4.89it/s]

more-to-come:

class:

stderr

2%|▏ | 4/240 [00:00&lt;00:39, 5.95it/s]

</pre>

2%|▏ | 4/240 [00:00<00:39, 5.95it/s]

end{sphinxVerbatim}

2%|▏ | 4/240 [00:00<00:39, 5.95it/s]

more-to-come:

class:

stderr

2%|▏ | 5/240 [00:00&lt;00:34, 6.79it/s]

</pre>

2%|▏ | 5/240 [00:00<00:34, 6.79it/s]

end{sphinxVerbatim}

2%|▏ | 5/240 [00:00<00:34, 6.79it/s]

more-to-come:

class:

stderr

2%|▎ | 6/240 [00:01&lt;00:31, 7.39it/s]

</pre>

2%|▎ | 6/240 [00:01<00:31, 7.39it/s]

end{sphinxVerbatim}

2%|▎ | 6/240 [00:01<00:31, 7.39it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:29, 7.85it/s]

</pre>

3%|▎ | 7/240 [00:01<00:29, 7.85it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:29, 7.85it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:39, 5.85it/s]

</pre>

3%|▎ | 7/240 [00:01<00:39, 5.85it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:39, 5.85it/s]

CPU times: user 3.48 s, sys: 122 ms, total: 3.6 s
Wall time: 15.5 s

[7]:
volume_velocity = [v[-6:] for v in volume_velocity]
volume_velocity = np.array(volume_velocity).T.tolist()
[8]:
%%time
volume_reflectivity = []
for item1 in results_reflectivity:
    files = []
    for item2 in item1:
        files.append(item2.data)
    volume_reflectivity.append(files)
more-to-come:

class:

stderr

0%| | 0/240 [00:00&lt;?, ?it/s]

</pre>

0%| | 0/240 [00:00<?, ?it/s]

end{sphinxVerbatim}

0%| | 0/240 [00:00<?, ?it/s]

more-to-come:

class:

stderr

0%| | 1/240 [00:00&lt;02:12, 1.80it/s]

</pre>

0%| | 1/240 [00:00<02:12, 1.80it/s]

end{sphinxVerbatim}

0%| | 1/240 [00:00<02:12, 1.80it/s]

more-to-come:

class:

stderr

1%| | 2/240 [00:00&lt;01:11, 3.34it/s]

</pre>

1%| | 2/240 [00:00<01:11, 3.34it/s]

end{sphinxVerbatim}

1%| | 2/240 [00:00<01:11, 3.34it/s]

more-to-come:

class:

stderr

1%|▏ | 3/240 [00:00&lt;00:51, 4.59it/s]

</pre>

1%|▏ | 3/240 [00:00<00:51, 4.59it/s]

end{sphinxVerbatim}

1%|▏ | 3/240 [00:00<00:51, 4.59it/s]

more-to-come:

class:

stderr

2%|▏ | 4/240 [00:00&lt;00:42, 5.58it/s]

</pre>

2%|▏ | 4/240 [00:00<00:42, 5.58it/s]

end{sphinxVerbatim}

2%|▏ | 4/240 [00:00<00:42, 5.58it/s]

more-to-come:

class:

stderr

2%|▏ | 5/240 [00:01&lt;00:37, 6.33it/s]

</pre>

2%|▏ | 5/240 [00:01<00:37, 6.33it/s]

end{sphinxVerbatim}

2%|▏ | 5/240 [00:01<00:37, 6.33it/s]

more-to-come:

class:

stderr

2%|▎ | 6/240 [00:01&lt;00:34, 6.87it/s]

</pre>

2%|▎ | 6/240 [00:01<00:34, 6.87it/s]

end{sphinxVerbatim}

2%|▎ | 6/240 [00:01<00:34, 6.87it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:32, 7.27it/s]

</pre>

3%|▎ | 7/240 [00:01<00:32, 7.27it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:32, 7.27it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:42, 5.47it/s]

</pre>

3%|▎ | 7/240 [00:01<00:42, 5.47it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:42, 5.47it/s]


more-to-come:

class:

stderr

0%| | 0/240 [00:00&lt;?, ?it/s]

</pre>

0%| | 0/240 [00:00<?, ?it/s]

end{sphinxVerbatim}

0%| | 0/240 [00:00<?, ?it/s]

more-to-come:

class:

stderr

0%| | 1/240 [00:00&lt;02:10, 1.83it/s]

</pre>

0%| | 1/240 [00:00<02:10, 1.83it/s]

end{sphinxVerbatim}

0%| | 1/240 [00:00<02:10, 1.83it/s]

more-to-come:

class:

stderr

1%| | 2/240 [00:00&lt;01:10, 3.37it/s]

</pre>

1%| | 2/240 [00:00<01:10, 3.37it/s]

end{sphinxVerbatim}

1%| | 2/240 [00:00<01:10, 3.37it/s]

more-to-come:

class:

stderr

1%|▏ | 3/240 [00:00&lt;00:51, 4.60it/s]

</pre>

1%|▏ | 3/240 [00:00<00:51, 4.60it/s]

end{sphinxVerbatim}

1%|▏ | 3/240 [00:00<00:51, 4.60it/s]

more-to-come:

class:

stderr

2%|▏ | 4/240 [00:00&lt;00:42, 5.53it/s]

</pre>

2%|▏ | 4/240 [00:00<00:42, 5.53it/s]

end{sphinxVerbatim}

2%|▏ | 4/240 [00:00<00:42, 5.53it/s]

more-to-come:

class:

stderr

2%|▏ | 5/240 [00:01&lt;00:37, 6.24it/s]

</pre>

2%|▏ | 5/240 [00:01<00:37, 6.24it/s]

end{sphinxVerbatim}

2%|▏ | 5/240 [00:01<00:37, 6.24it/s]

more-to-come:

class:

stderr

2%|▎ | 6/240 [00:01&lt;00:34, 6.80it/s]

</pre>

2%|▎ | 6/240 [00:01<00:34, 6.80it/s]

end{sphinxVerbatim}

2%|▎ | 6/240 [00:01<00:34, 6.80it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:32, 7.19it/s]

</pre>

3%|▎ | 7/240 [00:01<00:32, 7.19it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:32, 7.19it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:42, 5.45it/s]

</pre>

3%|▎ | 7/240 [00:01<00:42, 5.45it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:42, 5.45it/s]


more-to-come:

class:

stderr

0%| | 0/240 [00:00&lt;?, ?it/s]

</pre>

0%| | 0/240 [00:00<?, ?it/s]

end{sphinxVerbatim}

0%| | 0/240 [00:00<?, ?it/s]

more-to-come:

class:

stderr

0%| | 1/240 [00:00&lt;02:14, 1.77it/s]

</pre>

0%| | 1/240 [00:00<02:14, 1.77it/s]

end{sphinxVerbatim}

0%| | 1/240 [00:00<02:14, 1.77it/s]

more-to-come:

class:

stderr

1%| | 2/240 [00:00&lt;01:13, 3.26it/s]

</pre>

1%| | 2/240 [00:00<01:13, 3.26it/s]

end{sphinxVerbatim}

1%| | 2/240 [00:00<01:13, 3.26it/s]

more-to-come:

class:

stderr

1%|▏ | 3/240 [00:00&lt;00:53, 4.46it/s]

</pre>

1%|▏ | 3/240 [00:00<00:53, 4.46it/s]

end{sphinxVerbatim}

1%|▏ | 3/240 [00:00<00:53, 4.46it/s]

more-to-come:

class:

stderr

2%|▏ | 4/240 [00:00&lt;00:43, 5.39it/s]

</pre>

2%|▏ | 4/240 [00:00<00:43, 5.39it/s]

end{sphinxVerbatim}

2%|▏ | 4/240 [00:00<00:43, 5.39it/s]

more-to-come:

class:

stderr

2%|▏ | 5/240 [00:01&lt;00:38, 6.10it/s]

</pre>

2%|▏ | 5/240 [00:01<00:38, 6.10it/s]

end{sphinxVerbatim}

2%|▏ | 5/240 [00:01<00:38, 6.10it/s]

more-to-come:

class:

stderr

2%|▎ | 6/240 [00:01&lt;00:35, 6.61it/s]

</pre>

2%|▎ | 6/240 [00:01<00:35, 6.61it/s]

end{sphinxVerbatim}

2%|▎ | 6/240 [00:01<00:35, 6.61it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:33, 7.02it/s]

</pre>

3%|▎ | 7/240 [00:01<00:33, 7.02it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:33, 7.02it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:43, 5.30it/s]

</pre>

3%|▎ | 7/240 [00:01<00:43, 5.30it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:43, 5.30it/s]


more-to-come:

class:

stderr

0%| | 0/240 [00:00&lt;?, ?it/s]

</pre>

0%| | 0/240 [00:00<?, ?it/s]

end{sphinxVerbatim}

0%| | 0/240 [00:00<?, ?it/s]

more-to-come:

class:

stderr

0%| | 1/240 [00:00&lt;02:16, 1.74it/s]

</pre>

0%| | 1/240 [00:00<02:16, 1.74it/s]

end{sphinxVerbatim}

0%| | 1/240 [00:00<02:16, 1.74it/s]

more-to-come:

class:

stderr

1%| | 2/240 [00:00&lt;01:15, 3.17it/s]

</pre>

1%| | 2/240 [00:00<01:15, 3.17it/s]

end{sphinxVerbatim}

1%| | 2/240 [00:00<01:15, 3.17it/s]

more-to-come:

class:

stderr

1%|▏ | 3/240 [00:00&lt;00:55, 4.29it/s]

</pre>

1%|▏ | 3/240 [00:00<00:55, 4.29it/s]

end{sphinxVerbatim}

1%|▏ | 3/240 [00:00<00:55, 4.29it/s]

more-to-come:

class:

stderr

2%|▏ | 4/240 [00:00&lt;00:45, 5.14it/s]

</pre>

2%|▏ | 4/240 [00:00<00:45, 5.14it/s]

end{sphinxVerbatim}

2%|▏ | 4/240 [00:00<00:45, 5.14it/s]

more-to-come:

class:

stderr

2%|▏ | 5/240 [00:01&lt;00:40, 5.79it/s]

</pre>

2%|▏ | 5/240 [00:01<00:40, 5.79it/s]

end{sphinxVerbatim}

2%|▏ | 5/240 [00:01<00:40, 5.79it/s]

more-to-come:

class:

stderr

2%|▎ | 6/240 [00:01&lt;00:37, 6.25it/s]

</pre>

2%|▎ | 6/240 [00:01<00:37, 6.25it/s]

end{sphinxVerbatim}

2%|▎ | 6/240 [00:01<00:37, 6.25it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:35, 6.63it/s]

</pre>

3%|▎ | 7/240 [00:01<00:35, 6.63it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:35, 6.63it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:45, 5.07it/s]

</pre>

3%|▎ | 7/240 [00:01<00:45, 5.07it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:45, 5.07it/s]


more-to-come:

class:

stderr

0%| | 0/240 [00:00&lt;?, ?it/s]

</pre>

0%| | 0/240 [00:00<?, ?it/s]

end{sphinxVerbatim}

0%| | 0/240 [00:00<?, ?it/s]

more-to-come:

class:

stderr

0%| | 1/240 [00:00&lt;02:15, 1.76it/s]

</pre>

0%| | 1/240 [00:00<02:15, 1.76it/s]

end{sphinxVerbatim}

0%| | 1/240 [00:00<02:15, 1.76it/s]

more-to-come:

class:

stderr

1%| | 2/240 [00:00&lt;01:16, 3.12it/s]

</pre>

1%| | 2/240 [00:00<01:16, 3.12it/s]

end{sphinxVerbatim}

1%| | 2/240 [00:00<01:16, 3.12it/s]

more-to-come:

class:

stderr

1%|▏ | 3/240 [00:01&lt;02:11, 1.81it/s]

</pre>

1%|▏ | 3/240 [00:01<02:11, 1.81it/s]

end{sphinxVerbatim}

1%|▏ | 3/240 [00:01<02:11, 1.81it/s]

more-to-come:

class:

stderr

2%|▏ | 4/240 [00:01&lt;01:34, 2.51it/s]

</pre>

2%|▏ | 4/240 [00:01<01:34, 2.51it/s]

end{sphinxVerbatim}

2%|▏ | 4/240 [00:01<01:34, 2.51it/s]

more-to-come:

class:

stderr

2%|▏ | 5/240 [00:01&lt;01:13, 3.22it/s]

</pre>

2%|▏ | 5/240 [00:01<01:13, 3.22it/s]

end{sphinxVerbatim}

2%|▏ | 5/240 [00:01<01:13, 3.22it/s]

more-to-come:

class:

stderr

2%|▎ | 6/240 [00:02&lt;00:59, 3.91it/s]

</pre>

2%|▎ | 6/240 [00:02<00:59, 3.91it/s]

end{sphinxVerbatim}

2%|▎ | 6/240 [00:02<00:59, 3.91it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:02&lt;00:51, 4.54it/s]

</pre>

3%|▎ | 7/240 [00:02<00:51, 4.54it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:02<00:51, 4.54it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:02&lt;01:11, 3.24it/s]

</pre>

3%|▎ | 7/240 [00:02<01:11, 3.24it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:02<01:11, 3.24it/s]


more-to-come:

class:

stderr

0%| | 0/240 [00:00&lt;?, ?it/s]

</pre>

0%| | 0/240 [00:00<?, ?it/s]

end{sphinxVerbatim}

0%| | 0/240 [00:00<?, ?it/s]

more-to-come:

class:

stderr

0%| | 1/240 [00:00&lt;02:20, 1.70it/s]

</pre>

0%| | 1/240 [00:00<02:20, 1.70it/s]

end{sphinxVerbatim}

0%| | 1/240 [00:00<02:20, 1.70it/s]

more-to-come:

class:

stderr

1%| | 2/240 [00:00&lt;01:19, 3.00it/s]

</pre>

1%| | 2/240 [00:00<01:19, 3.00it/s]

end{sphinxVerbatim}

1%| | 2/240 [00:00<01:19, 3.00it/s]

more-to-come:

class:

stderr

1%|▏ | 3/240 [00:00&lt;00:59, 4.01it/s]

</pre>

1%|▏ | 3/240 [00:00<00:59, 4.01it/s]

end{sphinxVerbatim}

1%|▏ | 3/240 [00:00<00:59, 4.01it/s]

more-to-come:

class:

stderr

2%|▏ | 4/240 [00:01&lt;00:49, 4.77it/s]

</pre>

2%|▏ | 4/240 [00:01<00:49, 4.77it/s]

end{sphinxVerbatim}

2%|▏ | 4/240 [00:01<00:49, 4.77it/s]

more-to-come:

class:

stderr

2%|▏ | 5/240 [00:01&lt;00:44, 5.32it/s]

</pre>

2%|▏ | 5/240 [00:01<00:44, 5.32it/s]

end{sphinxVerbatim}

2%|▏ | 5/240 [00:01<00:44, 5.32it/s]

more-to-come:

class:

stderr

2%|▎ | 6/240 [00:01&lt;00:40, 5.74it/s]

</pre>

2%|▎ | 6/240 [00:01<00:40, 5.74it/s]

end{sphinxVerbatim}

2%|▎ | 6/240 [00:01<00:40, 5.74it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:38, 6.05it/s]

</pre>

3%|▎ | 7/240 [00:01<00:38, 6.05it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:38, 6.05it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:49, 4.71it/s]

</pre>

3%|▎ | 7/240 [00:01<00:49, 4.71it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:49, 4.71it/s]


more-to-come:

class:

stderr

0%| | 0/240 [00:00&lt;?, ?it/s]

</pre>

0%| | 0/240 [00:00<?, ?it/s]

end{sphinxVerbatim}

0%| | 0/240 [00:00<?, ?it/s]

more-to-come:

class:

stderr

0%| | 1/240 [00:00&lt;02:11, 1.82it/s]

</pre>

0%| | 1/240 [00:00<02:11, 1.82it/s]

end{sphinxVerbatim}

0%| | 1/240 [00:00<02:11, 1.82it/s]

more-to-come:

class:

stderr

1%| | 2/240 [00:00&lt;01:10, 3.38it/s]

</pre>

1%| | 2/240 [00:00<01:10, 3.38it/s]

end{sphinxVerbatim}

1%| | 2/240 [00:00<01:10, 3.38it/s]

more-to-come:

class:

stderr

1%|▏ | 3/240 [00:00&lt;00:50, 4.66it/s]

</pre>

1%|▏ | 3/240 [00:00<00:50, 4.66it/s]

end{sphinxVerbatim}

1%|▏ | 3/240 [00:00<00:50, 4.66it/s]

more-to-come:

class:

stderr

2%|▏ | 4/240 [00:00&lt;00:41, 5.67it/s]

</pre>

2%|▏ | 4/240 [00:00<00:41, 5.67it/s]

end{sphinxVerbatim}

2%|▏ | 4/240 [00:00<00:41, 5.67it/s]

more-to-come:

class:

stderr

2%|▏ | 5/240 [00:01&lt;00:36, 6.49it/s]

</pre>

2%|▏ | 5/240 [00:01<00:36, 6.49it/s]

end{sphinxVerbatim}

2%|▏ | 5/240 [00:01<00:36, 6.49it/s]

more-to-come:

class:

stderr

2%|▎ | 6/240 [00:01&lt;00:33, 7.07it/s]

</pre>

2%|▎ | 6/240 [00:01<00:33, 7.07it/s]

end{sphinxVerbatim}

2%|▎ | 6/240 [00:01<00:33, 7.07it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:31, 7.51it/s]

</pre>

3%|▎ | 7/240 [00:01<00:31, 7.51it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:31, 7.51it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:41, 5.59it/s]

</pre>

3%|▎ | 7/240 [00:01<00:41, 5.59it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:41, 5.59it/s]


more-to-come:

class:

stderr

0%| | 0/240 [00:00&lt;?, ?it/s]

</pre>

0%| | 0/240 [00:00<?, ?it/s]

end{sphinxVerbatim}

0%| | 0/240 [00:00<?, ?it/s]

more-to-come:

class:

stderr

0%| | 1/240 [00:00&lt;02:10, 1.84it/s]

</pre>

0%| | 1/240 [00:00<02:10, 1.84it/s]

end{sphinxVerbatim}

0%| | 1/240 [00:00<02:10, 1.84it/s]

more-to-come:

class:

stderr

1%| | 2/240 [00:00&lt;01:09, 3.44it/s]

</pre>

1%| | 2/240 [00:00<01:09, 3.44it/s]

end{sphinxVerbatim}

1%| | 2/240 [00:00<01:09, 3.44it/s]

more-to-come:

class:

stderr

1%|▏ | 3/240 [00:00&lt;00:49, 4.77it/s]

</pre>

1%|▏ | 3/240 [00:00<00:49, 4.77it/s]

end{sphinxVerbatim}

1%|▏ | 3/240 [00:00<00:49, 4.77it/s]

more-to-come:

class:

stderr

2%|▏ | 4/240 [00:00&lt;00:40, 5.84it/s]

</pre>

2%|▏ | 4/240 [00:00<00:40, 5.84it/s]

end{sphinxVerbatim}

2%|▏ | 4/240 [00:00<00:40, 5.84it/s]

more-to-come:

class:

stderr

2%|▏ | 5/240 [00:00&lt;00:35, 6.63it/s]

</pre>

2%|▏ | 5/240 [00:00<00:35, 6.63it/s]

end{sphinxVerbatim}

2%|▏ | 5/240 [00:00<00:35, 6.63it/s]

more-to-come:

class:

stderr

2%|▎ | 6/240 [00:01&lt;00:32, 7.20it/s]

</pre>

2%|▎ | 6/240 [00:01<00:32, 7.20it/s]

end{sphinxVerbatim}

2%|▎ | 6/240 [00:01<00:32, 7.20it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:30, 7.64it/s]

</pre>

3%|▎ | 7/240 [00:01<00:30, 7.64it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:30, 7.64it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:40, 5.70it/s]

</pre>

3%|▎ | 7/240 [00:01<00:40, 5.70it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:40, 5.70it/s]


more-to-come:

class:

stderr

0%| | 0/240 [00:00&lt;?, ?it/s]

</pre>

0%| | 0/240 [00:00<?, ?it/s]

end{sphinxVerbatim}

0%| | 0/240 [00:00<?, ?it/s]

more-to-come:

class:

stderr

0%| | 1/240 [00:00&lt;02:11, 1.82it/s]

</pre>

0%| | 1/240 [00:00<02:11, 1.82it/s]

end{sphinxVerbatim}

0%| | 1/240 [00:00<02:11, 1.82it/s]

more-to-come:

class:

stderr

1%| | 2/240 [00:00&lt;01:09, 3.42it/s]

</pre>

1%| | 2/240 [00:00<01:09, 3.42it/s]

end{sphinxVerbatim}

1%| | 2/240 [00:00<01:09, 3.42it/s]

more-to-come:

class:

stderr

1%|▏ | 3/240 [00:00&lt;00:49, 4.76it/s]

</pre>

1%|▏ | 3/240 [00:00<00:49, 4.76it/s]

end{sphinxVerbatim}

1%|▏ | 3/240 [00:00<00:49, 4.76it/s]

more-to-come:

class:

stderr

2%|▏ | 4/240 [00:00&lt;00:40, 5.81it/s]

</pre>

2%|▏ | 4/240 [00:00<00:40, 5.81it/s]

end{sphinxVerbatim}

2%|▏ | 4/240 [00:00<00:40, 5.81it/s]

more-to-come:

class:

stderr

2%|▏ | 5/240 [00:01&lt;00:35, 6.61it/s]

</pre>

2%|▏ | 5/240 [00:01<00:35, 6.61it/s]

end{sphinxVerbatim}

2%|▏ | 5/240 [00:01<00:35, 6.61it/s]

more-to-come:

class:

stderr

2%|▎ | 6/240 [00:01&lt;00:32, 7.27it/s]

</pre>

2%|▎ | 6/240 [00:01<00:32, 7.27it/s]

end{sphinxVerbatim}

2%|▎ | 6/240 [00:01<00:32, 7.27it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:30, 7.75it/s]

</pre>

3%|▎ | 7/240 [00:01<00:30, 7.75it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:30, 7.75it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:40, 5.71it/s]

</pre>

3%|▎ | 7/240 [00:01<00:40, 5.71it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:40, 5.71it/s]


more-to-come:

class:

stderr

0%| | 0/240 [00:00&lt;?, ?it/s]

</pre>

0%| | 0/240 [00:00<?, ?it/s]

end{sphinxVerbatim}

0%| | 0/240 [00:00<?, ?it/s]

more-to-come:

class:

stderr

0%| | 1/240 [00:00&lt;02:06, 1.89it/s]

</pre>

0%| | 1/240 [00:00<02:06, 1.89it/s]

end{sphinxVerbatim}

0%| | 1/240 [00:00<02:06, 1.89it/s]

more-to-come:

class:

stderr

1%| | 2/240 [00:00&lt;01:07, 3.51it/s]

</pre>

1%| | 2/240 [00:00<01:07, 3.51it/s]

end{sphinxVerbatim}

1%| | 2/240 [00:00<01:07, 3.51it/s]

more-to-come:

class:

stderr

1%|▏ | 3/240 [00:00&lt;00:49, 4.83it/s]

</pre>

1%|▏ | 3/240 [00:00<00:49, 4.83it/s]

end{sphinxVerbatim}

1%|▏ | 3/240 [00:00<00:49, 4.83it/s]

more-to-come:

class:

stderr

2%|▏ | 4/240 [00:00&lt;00:40, 5.88it/s]

</pre>

2%|▏ | 4/240 [00:00<00:40, 5.88it/s]

end{sphinxVerbatim}

2%|▏ | 4/240 [00:00<00:40, 5.88it/s]

more-to-come:

class:

stderr

2%|▏ | 5/240 [00:00&lt;00:34, 6.73it/s]

</pre>

2%|▏ | 5/240 [00:00<00:34, 6.73it/s]

end{sphinxVerbatim}

2%|▏ | 5/240 [00:00<00:34, 6.73it/s]

more-to-come:

class:

stderr

2%|▎ | 6/240 [00:01&lt;00:31, 7.37it/s]

</pre>

2%|▎ | 6/240 [00:01<00:31, 7.37it/s]

end{sphinxVerbatim}

2%|▎ | 6/240 [00:01<00:31, 7.37it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:29, 7.86it/s]

</pre>

3%|▎ | 7/240 [00:01<00:29, 7.86it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:29, 7.86it/s]

more-to-come:

class:

stderr

3%|▎ | 7/240 [00:01&lt;00:40, 5.82it/s]

</pre>

3%|▎ | 7/240 [00:01<00:40, 5.82it/s]

end{sphinxVerbatim}

3%|▎ | 7/240 [00:01<00:40, 5.82it/s]

CPU times: user 3.32 s, sys: 69.7 ms, total: 3.39 s
Wall time: 13.8 s

[9]:
volume_reflectivity = [v[-6:] for v in volume_reflectivity]
volume_reflectivity = np.array(volume_reflectivity).T.tolist()

Read the data into xarray powered structure#

[10]:
from datatree import DataTree, open_datatree
import xradar


def concat_radar_datatree(objs, dim="volume_time"):
    root_ds = [obj["/"].ds for obj in objs]
    root = xr.concat(root_ds, dim=dim)
    dtree = DataTree(data=root, name="root")
    for grp in objs[0].groups[1:]:
        ngrps = [obj[grp[1:]].ds for obj in objs]
        ngrp = xr.concat(ngrps, dim=dim)
        DataTree(ngrp, name=grp[1:], parent=dtree)
    return dtree
[11]:
dsl = []
reindex_angle = dict(
    tolerance=1.0, start_angle=0, stop_angle=360, angle_res=1.0, direction=1
)
for r, v in zip(volume_reflectivity, volume_velocity):
    ds0 = [
        xr.open_dataset(r0, engine="odim", group="sweep_0", reindex_angle=reindex_angle)
        for r0 in r
    ]
    ds1 = [
        xr.open_dataset(v0, engine="odim", group="sweep_0", reindex_angle=reindex_angle)
        for v0 in v
    ]
    ds = [xr.merge([r0, v0], compat="override") for r0, v0 in zip(ds0, ds1)]
    ds.insert(0, xr.open_dataset(r[0], group="/"))
    dsl.append(ds)
# this takes some private functions from xradar, take care here
trees = [
    DataTree(data=xradar.io.backends.common._assign_root(ds), name="root") for ds in dsl
]
trees = [
    xradar.io.backends.common._attach_sweep_groups(tree, ds[1:])
    for tree, ds in zip(trees, dsl)
]
vol = concat_radar_datatree(trees, dim="volume_time")
# align sweep_numbers to cover for single sweep single moment layout of DWD
for i, swp in enumerate(vol.groups[1:]):
    vol[swp]["sweep_number"] = i
[12]:
vol
[12]:
<xarray.DatasetView>
Dimensions:              (volume_time: 6)
Dimensions without coordinates: volume_time
Data variables:
    volume_number        (volume_time) int64 0 0 0 0 0 0
    platform_type        (volume_time) <U5 'fixed' 'fixed' ... 'fixed' 'fixed'
    instrument_type      (volume_time) <U5 'radar' 'radar' ... 'radar' 'radar'
    time_coverage_start  (volume_time) <U20 '2023-12-11T07:55:35Z' ... '2023-...
    time_coverage_end    (volume_time) <U20 '2023-12-11T07:59:03Z' ... '2023-...
    longitude            (volume_time) float64 6.967 6.967 6.967 ... 6.967 6.967
    altitude             (volume_time) float64 185.1 185.1 185.1 ... 185.1 185.1
    latitude             (volume_time) float64 51.41 51.41 51.41 ... 51.41 51.41
Attributes:
    Conventions:      ODIM_H5/V2_2
    version:          None
    title:            None
    institution:      None
    references:       None
    source:           None
    history:          None
    comment:          im/exported using xradar
    instrument_name:  None
[13]:
vol["sweep_9"]
[13]:
<xarray.DatasetView>
Dimensions:            (range: 240, azimuth: 360, volume_time: 6)
Coordinates:
  * range              (range) float32 125.0 375.0 625.0 ... 5.962e+04 5.988e+04
  * azimuth            (azimuth) float64 0.5 1.5 2.5 3.5 ... 357.5 358.5 359.5
    elevation          (volume_time, azimuth) float64 24.98 24.98 ... 24.98
    time               (volume_time, azimuth) datetime64[ns] 2023-12-11T07:58...
    longitude          float64 6.967
    latitude           float64 51.41
    altitude           float64 185.1
Dimensions without coordinates: volume_time
Data variables:
    DBZH               (volume_time, azimuth, range) float32 -64.0 ... -64.0
    sweep_mode         (volume_time) <U20 'azimuth_surveillance' ... 'azimuth...
    sweep_number       int64 9
    prt_mode           (volume_time) <U7 'not_set' 'not_set' ... 'not_set'
    follow_mode        (volume_time) <U7 'not_set' 'not_set' ... 'not_set'
    sweep_fixed_angle  (volume_time) float64 25.0 25.0 25.0 25.0 25.0 25.0
    VRADH              (volume_time, azimuth, range) float32 -128.0 ... -128.0

Inspect structure#

Root Group#

[14]:
vol.root
[14]:
<xarray.DatasetView>
Dimensions:              (volume_time: 6)
Dimensions without coordinates: volume_time
Data variables:
    volume_number        (volume_time) int64 0 0 0 0 0 0
    platform_type        (volume_time) <U5 'fixed' 'fixed' ... 'fixed' 'fixed'
    instrument_type      (volume_time) <U5 'radar' 'radar' ... 'radar' 'radar'
    time_coverage_start  (volume_time) <U20 '2023-12-11T07:55:35Z' ... '2023-...
    time_coverage_end    (volume_time) <U20 '2023-12-11T07:59:03Z' ... '2023-...
    longitude            (volume_time) float64 6.967 6.967 6.967 ... 6.967 6.967
    altitude             (volume_time) float64 185.1 185.1 185.1 ... 185.1 185.1
    latitude             (volume_time) float64 51.41 51.41 51.41 ... 51.41 51.41
Attributes:
    Conventions:      ODIM_H5/V2_2
    version:          None
    title:            None
    institution:      None
    references:       None
    source:           None
    history:          None
    comment:          im/exported using xradar
    instrument_name:  None

Sweep Groups#

[15]:
vol["sweep_0"]
[15]:
<xarray.DatasetView>
Dimensions:            (range: 720, azimuth: 360, volume_time: 6)
Coordinates:
  * range              (range) float32 125.0 375.0 625.0 ... 1.796e+05 1.799e+05
  * azimuth            (azimuth) float64 0.5 1.5 2.5 3.5 ... 357.5 358.5 359.5
    elevation          (volume_time, azimuth) float64 5.493 5.493 ... 5.493
    time               (volume_time, azimuth) datetime64[ns] 2023-12-11T07:55...
    longitude          float64 6.967
    latitude           float64 51.41
    altitude           float64 185.1
Dimensions without coordinates: volume_time
Data variables:
    DBZH               (volume_time, azimuth, range) float32 -64.0 ... -64.0
    sweep_mode         (volume_time) <U20 'azimuth_surveillance' ... 'azimuth...
    sweep_number       int64 0
    prt_mode           (volume_time) <U7 'not_set' 'not_set' ... 'not_set'
    follow_mode        (volume_time) <U7 'not_set' 'not_set' ... 'not_set'
    sweep_fixed_angle  (volume_time) float64 5.499 5.499 5.499 5.499 5.499 5.499
    VRADH              (volume_time, azimuth, range) float32 -128.0 ... -128.0

plot sweeps#

DBZH#

[16]:
vol["sweep_0"].isel(volume_time=0)
[16]:
<xarray.DatasetView>
Dimensions:            (range: 720, azimuth: 360)
Coordinates:
  * range              (range) float32 125.0 375.0 625.0 ... 1.796e+05 1.799e+05
  * azimuth            (azimuth) float64 0.5 1.5 2.5 3.5 ... 357.5 358.5 359.5
    elevation          (azimuth) float64 5.493 5.493 5.493 ... 5.493 5.493 5.493
    time               (azimuth) datetime64[ns] 2023-12-11T07:55:54.763500288...
    longitude          float64 6.967
    latitude           float64 51.41
    altitude           float64 185.1
Data variables:
    DBZH               (azimuth, range) float32 -64.0 -64.0 ... -64.0 -64.0
    sweep_mode         <U20 'azimuth_surveillance'
    sweep_number       int64 0
    prt_mode           <U7 'not_set'
    follow_mode        <U7 'not_set'
    sweep_fixed_angle  float64 5.499
    VRADH              (azimuth, range) float32 -128.0 6.008 ... -128.0 -128.0
[17]:
fig, gs = plt.subplots(
    4, 3, figsize=(20, 30), sharex=True, sharey=True, constrained_layout=True
)

for i, grp in enumerate(vol.groups[1:]):
    swp = vol[grp].isel(volume_time=0).ds
    swp = swp.assign_coords(sweep_mode=swp.sweep_mode)
    swp.DBZH.wrl.georef.georeference().wrl.vis.plot(ax=gs.flat[i], fig=fig)
    ax = plt.gca()
    ax.set_title(swp.sweep_fixed_angle.values)

fig.delaxes(gs.flat[-2])
fig.delaxes(gs.flat[-1])
../../_images/notebooks_workflow_recipe4_24_0.png

VRADH#

[18]:
fig, gs = plt.subplots(
    4, 3, figsize=(20, 30), sharex=True, sharey=True, constrained_layout=True
)

for i, grp in enumerate(vol.groups[1:]):
    swp = vol[grp].isel(volume_time=0).ds
    swp = swp.assign_coords(sweep_mode=swp.sweep_mode)
    swp.VRADH.wrl.georef.georeference().wrl.vis.plot(ax=gs.flat[i], fig=fig)
    ax = plt.gca()
    ax.set_title(swp.sweep_fixed_angle.values)

fig.delaxes(gs.flat[-2])
fig.delaxes(gs.flat[-1])
../../_images/notebooks_workflow_recipe4_26_0.png

Plot single sweep using cartopy#

[19]:
vol0 = vol.isel(volume_time=0)
swp = vol0["sweep_9"].ds
# need to assign sweep_mode as coordinate
swp = swp.assign_coords(sweep_mode=swp.sweep_mode)
[20]:
import cartopy
import cartopy.crs as ccrs
import cartopy.feature as cfeature

map_trans = ccrs.AzimuthalEquidistant(
    central_latitude=vol0.root.ds.latitude.values,
    central_longitude=vol0.root.ds.longitude.values,
)
[21]:
map_proj = ccrs.AzimuthalEquidistant(
    central_latitude=vol0.root.ds.latitude.values,
    central_longitude=vol0.root.ds.longitude.values,
)

pm = swp.DBZH.wrl.georef.georeference().wrl.vis.plot(crs=map_proj)
ax = plt.gca()
ax.gridlines(crs=map_proj)
print(ax)
< GeoAxes: +proj=aeqd +ellps=WGS84 +lon_0=6.967111 +lat_0=51.405649 +x_0=0.0 +y_0=0.0 +no_defs +type=crs >
../../_images/notebooks_workflow_recipe4_30_1.png
[22]:
map_proj = ccrs.Mercator(central_longitude=vol0.root.ds.longitude.values)
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection=map_proj)
pm = swp.DBZH.wrl.georef.georeference().wrl.vis.plot(ax=ax)
ax.gridlines(draw_labels=True)
[22]:
<cartopy.mpl.gridliner.Gridliner at 0x7ff768d3e390>
../../_images/notebooks_workflow_recipe4_31_1.png
[23]:
fig = plt.figure(figsize=(10, 8))
proj = ccrs.AzimuthalEquidistant(
    central_latitude=vol0.root.ds.latitude.values,
    central_longitude=vol0.root.ds.longitude.values,
)
ax = fig.add_subplot(111, projection=proj)
pm = swp.DBZH.wrl.georef.georeference().wrl.vis.plot(ax=ax)
ax.gridlines()
[23]:
<cartopy.mpl.gridliner.Gridliner at 0x7ff768f9e610>
../../_images/notebooks_workflow_recipe4_32_1.png

Inspect radar moments#

The DataArrays can be accessed by key or by attribute. Each DataArray inherits dimensions and coordinates of it’s parent dataset. There are attributes connected which are defined by Cf/Radial and/or ODIM_H5 standard.

[24]:
vol["sweep_9"].isel(volume_time=0).ds.DBZH
[24]:
<xarray.DataArray 'DBZH' (azimuth: 360, range: 240)>
array([[-64.00293 , -64.00293 ,  23.176842, ..., -64.00293 , -64.00293 ,
        -64.00293 ],
       [-64.00293 , -64.00293 ,  22.822334, ..., -64.00293 , -64.00293 ,
        -64.00293 ],
       [-64.00293 , -64.00293 ,  22.230507, ..., -64.00293 , -64.00293 ,
        -64.00293 ],
       ...,
       [-64.00293 , -64.00293 ,  23.335052, ..., -64.00293 , -64.00293 ,
        -64.00293 ],
       [-64.00293 , -64.00293 ,  19.271393, ..., -64.00293 , -64.00293 ,
        -64.00293 ],
       [-64.00293 , -64.00293 ,  22.318405, ..., -64.00293 , -64.00293 ,
        -64.00293 ]], dtype=float32)
Coordinates:
  * range      (range) float32 125.0 375.0 625.0 ... 5.962e+04 5.988e+04
  * azimuth    (azimuth) float64 0.5 1.5 2.5 3.5 4.5 ... 356.5 357.5 358.5 359.5
    elevation  (azimuth) float64 24.98 24.98 24.98 24.98 ... 24.98 24.98 24.98
    time       (azimuth) datetime64[ns] 2023-12-11T07:58:54.953000192 ... 202...
    longitude  float64 6.967
    latitude   float64 51.41
    altitude   float64 185.1
Attributes:
    _Undetect:      0.0
    units:          dBZ
    standard_name:  radar_equivalent_reflectivity_factor_h
    long_name:      Equivalent reflectivity factor H
[25]:
vol["sweep_9"].isel(volume_time=0).ds.sweep_mode
[25]:
<xarray.DataArray 'sweep_mode' ()>
array('azimuth_surveillance', dtype='<U20')
Coordinates:
    longitude  float64 6.967
    latitude   float64 51.41
    altitude   float64 185.1

Plot Quasi Vertical Profile#

[26]:
ts = vol["sweep_9"]
ts
[26]:
<xarray.DatasetView>
Dimensions:            (range: 240, azimuth: 360, volume_time: 6)
Coordinates:
  * range              (range) float32 125.0 375.0 625.0 ... 5.962e+04 5.988e+04
  * azimuth            (azimuth) float64 0.5 1.5 2.5 3.5 ... 357.5 358.5 359.5
    elevation          (volume_time, azimuth) float64 24.98 24.98 ... 24.98
    time               (volume_time, azimuth) datetime64[ns] 2023-12-11T07:58...
    longitude          float64 6.967
    latitude           float64 51.41
    altitude           float64 185.1
Dimensions without coordinates: volume_time
Data variables:
    DBZH               (volume_time, azimuth, range) float32 -64.0 ... -64.0
    sweep_mode         (volume_time) <U20 'azimuth_surveillance' ... 'azimuth...
    sweep_number       int64 9
    prt_mode           (volume_time) <U7 'not_set' 'not_set' ... 'not_set'
    follow_mode        (volume_time) <U7 'not_set' 'not_set' ... 'not_set'
    sweep_fixed_angle  (volume_time) float64 25.0 25.0 25.0 25.0 25.0 25.0
    VRADH              (volume_time, azimuth, range) float32 -128.0 ... -128.0
[27]:
fig = plt.figure(figsize=(10, 4))
ax = fig.add_subplot(111)
ts.ds.DBZH.median("azimuth").plot(x="volume_time", vmin=-10, vmax=30, ax=ax)
ax.set_title(f"{np.datetime_as_string(ts.ds.time[0][0].values, unit='D')}")
ax.set_ylim(0, 20000)
[27]:
(0.0, 20000.0)
../../_images/notebooks_workflow_recipe4_38_1.png

Export to OdimH5#

This exports the radar volume at given timestep including all moments into one ODIM_H5 compliant data file.

[28]:
xradar.io.to_odim(vol0, "dwd_odim.h5", source="RAD:DWD")

Export to Cf/Radial2#

This exports the radar volume at given timestep including all moments into one Cf/Radial2 compliant data file.

[29]:
xradar.io.to_cfradial2(vol0, "dwd_cfradial2.nc")

Import again#

[30]:
vol1 = xradar.io.open_odim_datatree("dwd_odim.h5")
display(vol1)
<xarray.DatasetView>
Dimensions:              ()
Data variables:
    volume_number        int64 0
    platform_type        <U5 'fixed'
    instrument_type      <U5 'radar'
    time_coverage_start  <U20 '2023-12-11T07:55:36Z'
    time_coverage_end    <U20 '2023-12-11T07:59:02Z'
    longitude            float64 6.967
    altitude             float64 185.1
    latitude             float64 51.41
Attributes:
    Conventions:      ODIM_H5/V2_2
    version:          None
    title:            None
    institution:      None
    references:       None
    source:           None
    history:          None
    comment:          im/exported using xradar
    instrument_name:  None
[31]:
vol2 = open_datatree("dwd_cfradial2.nc")
display(vol2)
<xarray.DatasetView>
Dimensions:              ()
Data variables:
    volume_number        int64 ...
    platform_type        <U5 ...
    instrument_type      <U5 ...
    time_coverage_start  <U20 ...
    time_coverage_end    <U20 ...
    longitude            float64 ...
    altitude             float64 ...
    latitude             float64 ...
Attributes:
    Conventions:      Cf/Radial
    version:          2.0
    title:            None
    institution:      None
    references:       None
    source:           None
    history:          None: xradar v0.4.2 CfRadial2 export
    comment:          im/exported using xradar
    instrument_name:  None