Microphysical Processes - Radar Profiles#

import datetime as dt

import matplotlib.pyplot as plt
import numpy as np
import xarray as xr
import radarpolarimetry as rp

Preparation#

zlevels = rp.visdict14["ZH"]["ticks"]
zdrlevels = rp.visdict14["ZDR"]["ticks"]
rholevels = rp.visdict14["RHO"]["ticks"]
kdplevels = rp.visdict14["KDP"]["ticks"]
philevels = rp.visdict14["PHI"]["ticks"]

levels = lambda x: dict(levels=x, cbar_kwargs=dict(ticks=x))

Event 1#

Vertical Profile - VP#

  • 22.06.2011 09:00 - 14:30 UTC

  • scan: ‘vertical_scan’

  • zh_offset: -2.5

  • zdr_offset: -0.8

zh_offset = -2.5
zdr_offset = -0.8
start_time = dt.datetime(2011, 6, 22, 9)
stop_time = dt.datetime(2011, 6, 22, 14, 30)
delta = stop_time - start_time
loc = "boxpol"
scan = "vertical_scan"

Open dataset (VP)#

reindex_angle = dict(start_angle=0, stop_angle=360, angle_res=1.0, direction=1)
sweep_vp_1 = rp.load_timeseries_sweep(
    start_time, delta, scan, reindex_angle=reindex_angle
)
display(sweep_vp_1)
loading 66 files
<xarray.Dataset> Size: 2GB
Dimensions:            (time2: 66, azimuth: 360, range: 2000)
Coordinates:
  * azimuth            (azimuth) float64 3kB 0.5 1.5 2.5 ... 357.5 358.5 359.5
    elevation          (azimuth) float64 3kB dask.array<chunksize=(360,), meta=np.ndarray>
    time               (time2, azimuth) datetime64[ns] 190kB dask.array<chunksize=(1, 360), meta=np.ndarray>
  * range              (range) float32 8kB 12.5 37.5 ... 4.996e+04 4.999e+04
    longitude          float64 8B 7.072
    latitude           float64 8B 50.73
    altitude           float64 8B 99.5
Dimensions without coordinates: time2
Data variables: (12/18)
    KDP                (time2, azimuth, range) float32 190MB dask.array<chunksize=(1, 360, 2000), meta=np.ndarray>
    PHIDP              (time2, azimuth, range) float32 190MB dask.array<chunksize=(1, 360, 2000), meta=np.ndarray>
    DBZH               (time2, azimuth, range) float32 190MB dask.array<chunksize=(1, 360, 2000), meta=np.ndarray>
    DBZV               (time2, azimuth, range) float32 190MB dask.array<chunksize=(1, 360, 2000), meta=np.ndarray>
    RHOHV              (time2, azimuth, range) float32 190MB dask.array<chunksize=(1, 360, 2000), meta=np.ndarray>
    DBTH               (time2, azimuth, range) float32 190MB dask.array<chunksize=(1, 360, 2000), meta=np.ndarray>
    ...                 ...
    sweep_mode         (time2) <U20 5kB 'azimuth_surveillance' ... 'azimuth_s...
    sweep_number       (time2) int64 528B 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0
    prt_mode           (time2) <U7 2kB 'not_set' 'not_set' ... 'not_set'
    follow_mode        (time2) <U7 2kB 'not_set' 'not_set' ... 'not_set'
    sweep_fixed_angle  (time2) float64 528B 90.0 90.0 90.0 ... 90.0 90.0 90.0
    nyquist_velocity   (time2) object 528B None None None ... None None None
Attributes:
    source:       gamic
    pulse_width:  1
sweep_vp_1 = sweep_vp_1.set_coords("sweep_mode")
sweep_vp_1["sweep_mode"] = sweep_vp_1["sweep_mode"][0]
sweep_vp_1 = sweep_vp_1.wrl.georef.georeference()
sweep_vp_1 = sweep_vp_1.assign_coords(height=sweep_vp_1.z.mean("azimuth"))
display(sweep_vp_1)
<xarray.Dataset> Size: 2GB
Dimensions:            (time2: 66, azimuth: 360, range: 2000)
Coordinates: (12/16)
  * azimuth            (azimuth) float64 3kB 0.5 1.5 2.5 ... 357.5 358.5 359.5
    elevation          (azimuth) float64 3kB dask.array<chunksize=(360,), meta=np.ndarray>
    time               (time2, azimuth) datetime64[ns] 190kB dask.array<chunksize=(1, 360), meta=np.ndarray>
  * range              (range) float32 8kB 12.5 37.5 ... 4.996e+04 4.999e+04
    x                  (azimuth, range) float64 6MB 2.092e-05 ... -0.08315
    y                  (azimuth, range) float64 6MB 0.002397 0.00719 ... 9.528
    ...                 ...
    height             (range) float64 16kB 112.0 137.0 ... 5.006e+04 5.009e+04
    sweep_mode         <U20 80B 'azimuth_surveillance'
    longitude          float64 8B 7.072
    latitude           float64 8B 50.73
    altitude           float64 8B 99.5
    crs_wkt            int64 8B 0
Dimensions without coordinates: time2
Data variables: (12/17)
    KDP                (time2, azimuth, range) float32 190MB dask.array<chunksize=(1, 360, 2000), meta=np.ndarray>
    PHIDP              (time2, azimuth, range) float32 190MB dask.array<chunksize=(1, 360, 2000), meta=np.ndarray>
    DBZH               (time2, azimuth, range) float32 190MB dask.array<chunksize=(1, 360, 2000), meta=np.ndarray>
    DBZV               (time2, azimuth, range) float32 190MB dask.array<chunksize=(1, 360, 2000), meta=np.ndarray>
    RHOHV              (time2, azimuth, range) float32 190MB dask.array<chunksize=(1, 360, 2000), meta=np.ndarray>
    DBTH               (time2, azimuth, range) float32 190MB dask.array<chunksize=(1, 360, 2000), meta=np.ndarray>
    ...                 ...
    ZDR                (time2, azimuth, range) float32 190MB dask.array<chunksize=(1, 360, 2000), meta=np.ndarray>
    sweep_number       (time2) int64 528B 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0
    prt_mode           (time2) <U7 2kB 'not_set' 'not_set' ... 'not_set'
    follow_mode        (time2) <U7 2kB 'not_set' 'not_set' ... 'not_set'
    sweep_fixed_angle  (time2) float64 528B 90.0 90.0 90.0 ... 90.0 90.0 90.0
    nyquist_velocity   (time2) object 528B None None None ... None None None
Attributes:
    source:       gamic
    pulse_width:  1

Apply offsets (VP)#

sweep_vp_1["DBZH"] -= zh_offset
sweep_vp_1["DBTH"] -= zh_offset
sweep_vp_1["ZDR"] -= zdr_offset

Calculate median (VP)#

with xr.set_options(keep_attrs=True):
    vp_1 = sweep_vp_1.where(sweep_vp_1.RHOHV > 0.95).median("azimuth", skipna=True)
display(vp_1)
<xarray.Dataset> Size: 8MB
Dimensions:            (time2: 66, range: 2000)
Coordinates:
  * range              (range) float32 8kB 12.5 37.5 ... 4.996e+04 4.999e+04
    height             (range) float64 16kB 112.0 137.0 ... 5.006e+04 5.009e+04
    sweep_mode         <U20 80B 'azimuth_surveillance'
    longitude          float64 8B 7.072
    latitude           float64 8B 50.73
    altitude           float64 8B 99.5
    crs_wkt            int64 8B 0
Dimensions without coordinates: time2
Data variables: (12/14)
    KDP                (time2, range) float32 528kB dask.array<chunksize=(1, 2000), meta=np.ndarray>
    PHIDP              (time2, range) float32 528kB dask.array<chunksize=(1, 2000), meta=np.ndarray>
    DBZH               (time2, range) float32 528kB dask.array<chunksize=(1, 2000), meta=np.ndarray>
    DBZV               (time2, range) float32 528kB dask.array<chunksize=(1, 2000), meta=np.ndarray>
    RHOHV              (time2, range) float32 528kB dask.array<chunksize=(1, 2000), meta=np.ndarray>
    DBTH               (time2, range) float32 528kB dask.array<chunksize=(1, 2000), meta=np.ndarray>
    ...                 ...
    VRADV              (time2, range) float32 528kB dask.array<chunksize=(1, 2000), meta=np.ndarray>
    WRADH              (time2, range) float32 528kB dask.array<chunksize=(1, 2000), meta=np.ndarray>
    WRADV              (time2, range) float32 528kB dask.array<chunksize=(1, 2000), meta=np.ndarray>
    ZDR                (time2, range) float32 528kB dask.array<chunksize=(1, 2000), meta=np.ndarray>
    sweep_number       (time2, range) float64 1MB dask.array<chunksize=(1, 2000), meta=np.ndarray>
    sweep_fixed_angle  (time2, range) float64 1MB dask.array<chunksize=(1, 2000), meta=np.ndarray>
Attributes:
    source:       gamic
    pulse_width:  1

Plot moments (VP)#

_kwargs = dict(x="time2", y="height", ylim=(0, 8000), cmap="HomeyerRainbow")
fig = plt.figure(figsize=(16, 8))
ax1 = fig.add_subplot(221)
kwargs = _kwargs | levels(zlevels) | dict(ax=ax1)
vp_1.DBZH.plot.contourf(**kwargs)
ax1.set_title(vp_1.DBZH.attrs["long_name"])
ax2 = fig.add_subplot(222)
kwargs = _kwargs | levels(zdrlevels) | dict(ax=ax2)
vp_1.ZDR.plot.contourf(**kwargs)
ax2.set_title(vp_1.ZDR.attrs["long_name"])
ax3 = fig.add_subplot(223)
kwargs = _kwargs | levels(rholevels) | dict(ax=ax3)
vp_1.RHOHV.plot.contourf(**kwargs)
ax3.set_title(vp_1.RHOHV.attrs["long_name"])
ax4 = fig.add_subplot(224)
philevels2 = np.arange(-10, 10, 1)
kwargs = _kwargs | levels(philevels2) | dict(ax=ax4)
vp_1.PHIDP.plot.contourf(**kwargs)
ax4.set_title(vp_1.PHIDP.attrs["long_name"])
# kwargs = _kwargs | levels(kdplevels) | dict(ax=ax4)
# vp_1.KDP.plot.contourf(**kwargs)
# ax4.set_title(vp_1.KDP.attrs["long_name"])
Text(0.5, 1.0, 'Differential phase HV')
../../_images/6984353f027b83f3ff5f594458665b2768343023bd72715b020b19be5cd90d89.png

Quasi Vertical Profile - QVP#

  • 22.06.2011 09:00 - 14:30 UTC

  • scan: ‘ppi_8p1deg’

# recent boxpol event
start_time = dt.datetime(2011, 6, 22, 9)
stop_time = dt.datetime(2011, 6, 22, 14, 30)
delta = stop_time - start_time
loc = "boxpol"
scan = "ppi_8p1deg"

Open dataset (QVP)#

reindex_angle = dict(start_angle=0, stop_angle=360, angle_res=1.0, direction=1)
sweep_1 = rp.load_timeseries_sweep(start_time, delta, scan, reindex_angle=reindex_angle)
sweep_1 = sweep_1.set_coords("sweep_mode")
sweep_1["sweep_mode"] = sweep_1["sweep_mode"][0]
sweep_1 = sweep_1.wrl.georef.georeference()
sweep_1 = sweep_1.assign_coords(height=sweep_1.z.mean("azimuth"))
loading 66 files

Apply offsets (QVP)#

sweep_1["DBTH"] -= zh_offset
sweep_1["DBZH"] -= zh_offset
sweep_1["ZDR"] -= zdr_offset

Preprocess data (QVP)#

##%%time
# sweep_1a = rp.workflow(sweep_1, scan, rp.data_path())

Open preprocessed dataset (QVP)#

workflow_file = f"/radar/rp-data/workflow/tmp_{start_time:%Y%m%dT%H%M}_{stop_time:%Y%m%dT%H%M}_workflow.nc"
with rp.rpol_data.open(workflow_file) as f:
    workflow_file = f.name
sweep_1 = xr.open_dataset(
    workflow_file,
    chunks=dict(time2=1),
)
display(sweep_1)
<xarray.Dataset> Size: 6GB
Dimensions:            (time2: 66, azimuth: 360, range: 1000)
Coordinates: (12/24)
  * time2              (time2) datetime64[ns] 528B 2011-06-22T09:03:46 ... 20...
  * azimuth            (azimuth) float64 3kB 0.5 1.5 2.5 ... 357.5 358.5 359.5
    elevation          (azimuth) float64 3kB dask.array<chunksize=(360,), meta=np.ndarray>
    time               (time2, azimuth) datetime64[ns] 190kB dask.array<chunksize=(1, 360), meta=np.ndarray>
  * range              (range) float32 4kB 50.0 150.0 ... 9.985e+04 9.995e+04
    x                  (azimuth, range) float64 3MB dask.array<chunksize=(360, 1000), meta=np.ndarray>
    ...                 ...
    crs_wkt            int64 8B ...
    band               int64 8B ...
    spatial_ref        int64 8B ...
    stdev              float64 8B ...
    NOISE_LEVEL        float64 8B ...
    alpha              float64 8B ...
Data variables: (12/55)
    KDP                (time2, azimuth, range) float32 95MB dask.array<chunksize=(1, 180, 500), meta=np.ndarray>
    PHIDP              (time2, azimuth, range) float32 95MB dask.array<chunksize=(1, 180, 500), meta=np.ndarray>
    DBZH               (time2, azimuth, range) float32 95MB dask.array<chunksize=(1, 180, 500), meta=np.ndarray>
    DBZV               (time2, azimuth, range) float32 95MB dask.array<chunksize=(1, 180, 500), meta=np.ndarray>
    RHOHV              (time2, azimuth, range) float32 95MB dask.array<chunksize=(1, 180, 500), meta=np.ndarray>
    DBTH               (time2, azimuth, range) float32 95MB dask.array<chunksize=(1, 180, 500), meta=np.ndarray>
    ...                 ...
    AH                 (time2, azimuth, range) float64 190MB dask.array<chunksize=(1, 360, 1000), meta=np.ndarray>
    KDP_AH             (time2, azimuth, range) float64 190MB dask.array<chunksize=(1, 360, 1000), meta=np.ndarray>
    PHIDP_CORR5        (time2, azimuth, range) float64 190MB dask.array<chunksize=(1, 360, 1000), meta=np.ndarray>
    DBTH_CORR5         (time2, azimuth, range) float64 190MB dask.array<chunksize=(1, 360, 1000), meta=np.ndarray>
    DBZH_CORR5         (time2, azimuth, range) float64 190MB dask.array<chunksize=(1, 360, 1000), meta=np.ndarray>
    ZDR_CORR5          (time2, azimuth, range) float64 190MB dask.array<chunksize=(1, 360, 1000), meta=np.ndarray>

Calculate median (QVP)#

with xr.set_options(keep_attrs=True):
    swp_median_1 = sweep_1.where(
        (sweep_1.DBZH_CORR1 > 0) & (sweep_1.RHOHV_NC > 0.8)
    ).median("azimuth", skipna=True)
    swp_median_1 = swp_median_1.where(swp_median_1.DBZH_CORR1 > 0)
display(swp_median_1)
<xarray.Dataset> Size: 22MB
Dimensions:            (time2: 66, range: 1000)
Coordinates: (12/13)
  * time2              (time2) datetime64[ns] 528B 2011-06-22T09:03:46 ... 20...
  * range              (range) float32 4kB 50.0 150.0 ... 9.985e+04 9.995e+04
    height             (range) float64 8kB dask.array<chunksize=(1000,), meta=np.ndarray>
    sweep_mode         <U20 80B ...
    longitude          float64 8B ...
    latitude           float64 8B ...
    ...                 ...
    crs_wkt            int64 8B ...
    band               int64 8B ...
    spatial_ref        int64 8B ...
    stdev              float64 8B ...
    NOISE_LEVEL        float64 8B ...
    alpha              float64 8B ...
Data variables: (12/53)
    KDP                (time2, range) float32 264kB dask.array<chunksize=(1, 1000), meta=np.ndarray>
    PHIDP              (time2, range) float32 264kB dask.array<chunksize=(1, 1000), meta=np.ndarray>
    DBZH               (time2, range) float32 264kB dask.array<chunksize=(1, 1000), meta=np.ndarray>
    DBZV               (time2, range) float32 264kB dask.array<chunksize=(1, 1000), meta=np.ndarray>
    RHOHV              (time2, range) float32 264kB dask.array<chunksize=(1, 1000), meta=np.ndarray>
    DBTH               (time2, range) float32 264kB dask.array<chunksize=(1, 1000), meta=np.ndarray>
    ...                 ...
    AH                 (time2, range) float64 528kB dask.array<chunksize=(1, 1000), meta=np.ndarray>
    KDP_AH             (time2, range) float64 528kB dask.array<chunksize=(1, 1000), meta=np.ndarray>
    PHIDP_CORR5        (time2, range) float64 528kB dask.array<chunksize=(1, 1000), meta=np.ndarray>
    DBTH_CORR5         (time2, range) float64 528kB dask.array<chunksize=(1, 1000), meta=np.ndarray>
    DBZH_CORR5         (time2, range) float64 528kB dask.array<chunksize=(1, 1000), meta=np.ndarray>
    ZDR_CORR5          (time2, range) float64 528kB dask.array<chunksize=(1, 1000), meta=np.ndarray>

Plot moments (QVP)#

_kwargs = dict(x="time2", y="height", ylim=(0, 10000), cmap="HomeyerRainbow")

fig = plt.figure(figsize=(14, 8))
ax1 = fig.add_subplot(221)
kwargs = _kwargs | levels(zlevels) | dict(ax=ax1)
swp_median_1.DBZH_CORR1.plot.contourf(**kwargs)
ax1.set_title(swp_median_1.DBZH_CORR1.attrs["long_name"])
ax2 = fig.add_subplot(222)
kwargs = _kwargs | levels(zdrlevels) | dict(ax=ax2)
swp_median_1.ZDR_CORR1.plot.contourf(**kwargs)
ax2.set_title(swp_median_1.ZDR_CORR1.attrs["long_name"])
ax3 = fig.add_subplot(223)
kwargs = _kwargs | levels(rholevels) | dict(ax=ax3)
swp_median_1.RHOHV_NC.plot.contourf(**kwargs)
ax3.set_title(swp_median_1.RHOHV_NC.attrs["long_name"])
ax4 = fig.add_subplot(224)
# kwargs = _kwargs | levels(philevels) | dict(ax=ax4)
# swp_median_1.PHIDP_CORR1.plot.contourf(**kwargs)
# ax4.set_title(swp_median_1.PHIDP_CORR1.attrs["long_name"])
kwargs = _kwargs | levels(kdplevels) | dict(ax=ax4)
swp_median_1.KDP_VULP.plot.contourf(**kwargs)
ax4.set_title(swp_median_1.KDP_VULP.attrs["long_name"])
fig.tight_layout()
../../_images/57c414c87b83975878ad1d7fe4164e7d5282407f827419f5db360d6e16a24508.png

Range Height Indicator - RHI#

  • 22.06.2011 12 UTC

  • scan: ‘rhi309’

# recent boxpol event
start_time = dt.datetime(2011, 6, 22, 12)
stop_time = dt.datetime(2011, 6, 22, 12, 5)
delta = stop_time - start_time
loc = "boxpol"
scan = "rhi309"

Open dataset (QVP)#

reindex_angle = dict(start_angle=0, stop_angle=90, angle_res=0.2, direction=1)
sweep_rhi_1 = rp.load_single_sweep(start_time, scan, reindex_angle=reindex_angle)

Apply offsets (QVP)#

sweep_rhi_1["DBZH"] -= zh_offset
sweep_rhi_1["DBTH"] -= zh_offset
sweep_rhi_1["ZDR"] -= zdr_offset

Preprocess data (QVP)#

##%%time
# sweep_rhi_1 = rp.workflow(sweep_rhi_1, scan, rp.data_path())

Open preprocessed dataset (QVP)#

workflow_file = f"/radar/rp-data/workflow/tmp_{start_time:%Y%m%dT%H%M}_{stop_time:%Y%m%dT%H%M}_workflow.nc"
with rp.rpol_data.open(workflow_file) as f:
    workflow_file = f.name
sweep_rhi_1 = xr.open_dataset(workflow_file)
display(sweep_rhi_1)
<xarray.Dataset> Size: 151MB
Dimensions:            (elevation: 450, range: 1000)
Coordinates: (12/18)
  * elevation          (elevation) float64 4kB 0.1 0.3 0.5 ... 89.5 89.7 89.9
    azimuth            (elevation) float64 4kB ...
    time               (elevation) datetime64[ns] 4kB ...
  * range              (range) float32 4kB 25.0 75.0 ... 4.992e+04 4.998e+04
    x                  (elevation, range) float64 4MB ...
    y                  (elevation, range) float64 4MB ...
    ...                 ...
    latitude           float64 8B ...
    altitude           float64 8B ...
    crs_wkt            int64 8B ...
    stdev              float64 8B ...
    NOISE_LEVEL        float64 8B ...
    alpha              float64 8B ...
Data variables: (12/51)
    KDP                (elevation, range) float32 2MB ...
    PHIDP              (elevation, range) float32 2MB ...
    DBZH               (elevation, range) float32 2MB ...
    DBZV               (elevation, range) float32 2MB ...
    RHOHV              (elevation, range) float32 2MB ...
    DBTH               (elevation, range) float32 2MB ...
    ...                 ...
    AH                 (elevation, range) float64 4MB ...
    KDP_AH             (elevation, range) float64 4MB ...
    PHIDP_CORR5        (elevation, range) float64 4MB ...
    DBTH_CORR5         (elevation, range) float64 4MB ...
    DBZH_CORR5         (elevation, range) float64 4MB ...
    ZDR_CORR5          (elevation, range) float64 4MB ...

Plot moments (QVP)#

_kwargs = dict(x="gr", y="z", ylim=(0, 8000), cmap="HomeyerRainbow")
fig = plt.figure(figsize=(16, 8))
ax1 = fig.add_subplot(221)
kwargs = _kwargs | levels(zlevels) | dict(ax=ax1)
sweep_rhi_1.DBZH_CORR2.plot.contourf(**kwargs)
ax1.set_title(sweep_rhi_1.DBZH_CORR2.attrs["long_name"])
ax2 = fig.add_subplot(222)
kwargs = _kwargs | levels(zdrlevels) | dict(ax=ax2)
sweep_rhi_1.ZDR_CORR2.plot.contourf(**kwargs)
ax2.set_title(sweep_rhi_1.ZDR_CORR2.attrs["long_name"])
ax3 = fig.add_subplot(223)
kwargs = _kwargs | levels(rholevels) | dict(ax=ax3)
sweep_rhi_1.RHOHV_NC.plot.contourf(**kwargs)
ax3.set_title(sweep_rhi_1.RHOHV_NC.attrs["long_name"])
ax4 = fig.add_subplot(224)
# philevels2 = np.arange(0, 15, 1)
# kwargs = _kwargs | levels(philevels2) | dict(ax=ax4)
# sweep_rhi_1.PHIDP_CORR2.plot.contourf(**kwargs)
# ax4.set_title(sweep_rhi_1.PHIDP_CORR2.attrs["long_name"])
kwargs = _kwargs | levels(kdplevels) | dict(ax=ax4)
sweep_rhi_1.KDP_VULP.plot(**kwargs)
ax4.set_title(sweep_rhi_1.KDP_VULP.attrs["long_name"])
fig.tight_layout()
../../_images/b3adf60affde2b395f8d1a3feca68dd46723da45206ccb860f676cfabed8b209.png

Event 2 - QVP#

  • 22.02.2016 16:00 - 19:30 UTC

  • scan: ‘n_ppi_280deg’

  • zh_offset: -1.0

  • zdr_offset: -0.4

zh_offset = -1
zdr_offset = -0.4
# recent boxpol event
start_time = dt.datetime(2016, 2, 22, 16)
stop_time = dt.datetime(2016, 2, 22, 19, 35)
delta = stop_time - start_time
loc = "boxpol"
scan = "n_ppi_280deg"

Open dataset - 2#

reindex_angle = dict(start_angle=0, stop_angle=360, angle_res=1.0, direction=1)
sweep_2 = rp.load_timeseries_sweep(start_time, delta, scan, reindex_angle=reindex_angle)
sweep_2 = sweep_2.set_coords("sweep_mode")
sweep_2["sweep_mode"] = sweep_2["sweep_mode"][0]
sweep_2 = sweep_2.wrl.georef.georeference()
sweep_2 = sweep_2.assign_coords(height=sweep_2.z.mean("azimuth"))
loading 43 files

Apply offsets - 2#

sweep_2["DBTH"] -= zh_offset
sweep_2["DBZH"] -= zh_offset
sweep_2["ZDR"] -= zdr_offset

Preprocess data - 2#

##%%time
# sweep_2a = rp.workflow(sweep_2, scan, rp.data_path())

Open preprocessed dataset - 2#

workflow_file = f"/radar/rp-data/workflow/tmp_{start_time:%Y%m%dT%H%M}_{stop_time:%Y%m%dT%H%M}_workflow.nc"
with rp.rpol_data.open(workflow_file) as f:
    workflow_file = f.name
sweep_2 = xr.open_dataset(
    workflow_file,
    chunks=dict(time2=1),
)
display(sweep_2)
<xarray.Dataset> Size: 1GB
Dimensions:            (time2: 43, azimuth: 360, range: 350)
Coordinates: (12/24)
  * time2              (time2) datetime64[ns] 344B 2016-02-22T16:00:50 ... 20...
  * azimuth            (azimuth) float64 3kB 0.5 1.5 2.5 ... 357.5 358.5 359.5
    elevation          (azimuth) float64 3kB dask.array<chunksize=(360,), meta=np.ndarray>
    time               (time2, azimuth) datetime64[ns] 124kB dask.array<chunksize=(1, 360), meta=np.ndarray>
  * range              (range) float32 1kB 50.0 150.0 ... 3.485e+04 3.495e+04
    x                  (azimuth, range) float64 1MB dask.array<chunksize=(360, 350), meta=np.ndarray>
    ...                 ...
    crs_wkt            int64 8B ...
    band               int64 8B ...
    spatial_ref        int64 8B ...
    stdev              float64 8B ...
    NOISE_LEVEL        float64 8B ...
    alpha              float64 8B ...
Data variables: (12/55)
    KDP                (time2, azimuth, range) float32 22MB dask.array<chunksize=(1, 360, 350), meta=np.ndarray>
    PHIDP              (time2, azimuth, range) float32 22MB dask.array<chunksize=(1, 360, 350), meta=np.ndarray>
    DBZH               (time2, azimuth, range) float32 22MB dask.array<chunksize=(1, 360, 350), meta=np.ndarray>
    DBZV               (time2, azimuth, range) float32 22MB dask.array<chunksize=(1, 360, 350), meta=np.ndarray>
    RHOHV              (time2, azimuth, range) float32 22MB dask.array<chunksize=(1, 360, 350), meta=np.ndarray>
    DBTH               (time2, azimuth, range) float32 22MB dask.array<chunksize=(1, 360, 350), meta=np.ndarray>
    ...                 ...
    AH                 (time2, azimuth, range) float64 43MB dask.array<chunksize=(1, 360, 350), meta=np.ndarray>
    KDP_AH             (time2, azimuth, range) float64 43MB dask.array<chunksize=(1, 360, 350), meta=np.ndarray>
    PHIDP_CORR5        (time2, azimuth, range) float64 43MB dask.array<chunksize=(1, 360, 350), meta=np.ndarray>
    DBTH_CORR5         (time2, azimuth, range) float64 43MB dask.array<chunksize=(1, 360, 350), meta=np.ndarray>
    DBZH_CORR5         (time2, azimuth, range) float64 43MB dask.array<chunksize=(1, 360, 350), meta=np.ndarray>
    ZDR_CORR5          (time2, azimuth, range) float64 43MB dask.array<chunksize=(1, 360, 350), meta=np.ndarray>

Calculate median - 2#

with xr.set_options(keep_attrs=True):
    qvp_2 = sweep_2.where((sweep_2.DBZH_CORR2 > 0) & (sweep_2.RHOHV_NC > 0.8)).median(
        "azimuth", skipna=True
    )
    qvp_2 = qvp_2.where(qvp_2.DBZH_CORR2 > 0)
display(qvp_2)
<xarray.Dataset> Size: 5MB
Dimensions:            (time2: 43, range: 350)
Coordinates: (12/13)
  * time2              (time2) datetime64[ns] 344B 2016-02-22T16:00:50 ... 20...
  * range              (range) float32 1kB 50.0 150.0 ... 3.485e+04 3.495e+04
    height             (range) float64 3kB dask.array<chunksize=(350,), meta=np.ndarray>
    sweep_mode         <U20 80B ...
    longitude          float64 8B ...
    latitude           float64 8B ...
    ...                 ...
    crs_wkt            int64 8B ...
    band               int64 8B ...
    spatial_ref        int64 8B ...
    stdev              float64 8B ...
    NOISE_LEVEL        float64 8B ...
    alpha              float64 8B ...
Data variables: (12/53)
    KDP                (time2, range) float32 60kB dask.array<chunksize=(1, 350), meta=np.ndarray>
    PHIDP              (time2, range) float32 60kB dask.array<chunksize=(1, 350), meta=np.ndarray>
    DBZH               (time2, range) float32 60kB dask.array<chunksize=(1, 350), meta=np.ndarray>
    DBZV               (time2, range) float32 60kB dask.array<chunksize=(1, 350), meta=np.ndarray>
    RHOHV              (time2, range) float32 60kB dask.array<chunksize=(1, 350), meta=np.ndarray>
    DBTH               (time2, range) float32 60kB dask.array<chunksize=(1, 350), meta=np.ndarray>
    ...                 ...
    AH                 (time2, range) float64 120kB dask.array<chunksize=(1, 350), meta=np.ndarray>
    KDP_AH             (time2, range) float64 120kB dask.array<chunksize=(1, 350), meta=np.ndarray>
    PHIDP_CORR5        (time2, range) float64 120kB dask.array<chunksize=(1, 350), meta=np.ndarray>
    DBTH_CORR5         (time2, range) float64 120kB dask.array<chunksize=(1, 350), meta=np.ndarray>
    DBZH_CORR5         (time2, range) float64 120kB dask.array<chunksize=(1, 350), meta=np.ndarray>
    ZDR_CORR5          (time2, range) float64 120kB dask.array<chunksize=(1, 350), meta=np.ndarray>

Plot moments - 2#

_kwargs = dict(x="time2", y="height", ylim=(0, 5000), cmap="HomeyerRainbow")

fig = plt.figure(figsize=(14, 8))
ax1 = fig.add_subplot(221)
kwargs = _kwargs | levels(zlevels) | dict(ax=ax1)
qvp_2.DBZH_CORR2.plot.contourf(**kwargs)
ax1.set_title(qvp_2.DBZH_CORR2.attrs["long_name"])
ax2 = fig.add_subplot(222)
kwargs = _kwargs | levels(zdrlevels) | dict(ax=ax2)
qvp_2.ZDR_CORR2.plot.contourf(**kwargs)
ax2.set_title(qvp_2.ZDR_CORR2.attrs["long_name"])
ax3 = fig.add_subplot(223)
kwargs = _kwargs | levels(rholevels) | dict(ax=ax3)
qvp_2.RHOHV_NC.plot.contourf(**kwargs)
ax3.set_title(qvp_2.RHOHV_NC.attrs["long_name"])
ax4 = fig.add_subplot(224)
philevels2 = np.arange(0, 5, 0.2)
kwargs = _kwargs | levels(philevels2) | dict(ax=ax4)
qvp_2.PHIDP_CORR2.plot(**kwargs)
ax4.set_title(qvp_2.PHIDP_CORR2.attrs["long_name"])
# kwargs = _kwargs | levels(kdplevels) | dict(ax=ax4)
# qvp_2.KDP_VULP.plot.contourf(**kwargs)
# ax4.set_title(qvp_2.KDP_VULP.attrs["long_name"])
fig.tight_layout()
../../_images/a812926bb3a2eac30558327a515338c2436c7b5a6b537cfd9bcf69f3ec42be67.png

Event 3 - RHI#

  • 01.07.2013 15:30, 15:40, 15:50 UTC

  • n_rhi_lacros

  • n_rhi_joyce

korrigiert/unkorrigiert

zh_offset = -4
zdr_offset = -2
# recent boxpol event
start_time = dt.datetime(2013, 7, 1, 15, 30)
stop_time = dt.datetime(2013, 7, 1, 16, 00)
delta = stop_time - start_time
loc = "boxpol"
scan1 = "n_rhi_joyce"
scan2 = "n_rhi_lacros"

Open dataset - 3#

reindex_angle = dict(start_angle=0, stop_angle=90, angle_res=0.2, direction=1)
sweep_rhi_3_1 = rp.load_timeseries_sweep(
    start_time, delta, scan1, reindex_angle=reindex_angle
)
sweep_rhi_3_1 = sweep_rhi_3_1.assign_coords(time2=sweep_rhi_3_1.time.min("elevation"))
sweep_rhi_3_2 = rp.load_timeseries_sweep(
    start_time, delta, scan2, reindex_angle=reindex_angle
)
sweep_rhi_3_2 = sweep_rhi_3_2.assign_coords(time2=sweep_rhi_3_2.time.min("elevation"))
sweep_rhi_3 = xr.merge([sweep_rhi_3_1, sweep_rhi_3_2])
display(sweep_rhi_3)
loading 3 files
loading 3 files
<xarray.Dataset> Size: 86MB
Dimensions:            (elevation: 450, range: 667, time2: 6)
Coordinates:
  * elevation          (elevation) float64 4kB 0.1 0.3 0.5 ... 89.5 89.7 89.9
    azimuth            (elevation) float64 4kB dask.array<chunksize=(450,), meta=np.ndarray>
    time               (time2, elevation) datetime64[ns] 22kB dask.array<chunksize=(1, 450), meta=np.ndarray>
  * range              (range) float32 3kB 37.5 112.5 ... 4.991e+04 4.999e+04
  * time2              (time2) datetime64[ns] 48B 2013-07-01T15:30:01 ... 201...
    longitude          float64 8B 7.072
    latitude           float64 8B 50.73
    altitude           float64 8B 99.5
Data variables: (12/18)
    KDP                (time2, elevation, range) float32 7MB dask.array<chunksize=(1, 450, 667), meta=np.ndarray>
    PHIDP              (time2, elevation, range) float32 7MB dask.array<chunksize=(1, 450, 667), meta=np.ndarray>
    DBZH               (time2, elevation, range) float32 7MB dask.array<chunksize=(1, 450, 667), meta=np.ndarray>
    DBZV               (time2, elevation, range) float32 7MB dask.array<chunksize=(1, 450, 667), meta=np.ndarray>
    RHOHV              (time2, elevation, range) float32 7MB dask.array<chunksize=(1, 450, 667), meta=np.ndarray>
    DBTH               (time2, elevation, range) float32 7MB dask.array<chunksize=(1, 450, 667), meta=np.ndarray>
    ...                 ...
    sweep_mode         (time2) object 48B 'rhi' 'rhi' 'rhi' 'rhi' 'rhi' 'rhi'
    sweep_number       (time2) float64 48B 0.0 0.0 0.0 0.0 0.0 0.0
    prt_mode           (time2) object 48B 'not_set' 'not_set' ... 'not_set'
    follow_mode        (time2) object 48B 'not_set' 'not_set' ... 'not_set'
    sweep_fixed_angle  (time2) float64 48B 175.0 175.0 175.0 175.0 175.0 175.0
    nyquist_velocity   (time2) object 48B None nan None nan None nan
Attributes:
    source:       gamic
    pulse_width:  1

Apply offsets - 3#

sweep_rhi_3["DBZH"] -= zh_offset
sweep_rhi_3["DBTH"] -= zh_offset
sweep_rhi_3["ZDR"] -= zdr_offset

Preprocess data - 3#

##%%time
# sweep_rhi_3a = rp.workflow(sweep_rhi_3, scan, rp.data_path())

Open preprocessed dataset - 3#

workflow_file = f"/radar/rp-data/workflow/tmp_{start_time:%Y%m%dT%H%M}_{stop_time:%Y%m%dT%H%M}_workflow.nc"
with rp.rpol_data.open(workflow_file) as f:
    workflow_file = f.name
sweep_rhi_3 = xr.open_dataset(
    workflow_file,
    chunks=dict(time2=1),
)
display(sweep_rhi_3)
<xarray.Dataset> Size: 496MB
Dimensions:            (time2: 6, elevation: 450, range: 667)
Coordinates: (12/19)
  * time2              (time2) datetime64[ns] 48B 2013-07-01T15:30:01 ... 201...
  * elevation          (elevation) float64 4kB 0.1 0.3 0.5 ... 89.5 89.7 89.9
    azimuth            (elevation) float64 4kB dask.array<chunksize=(450,), meta=np.ndarray>
    time               (time2, elevation) datetime64[ns] 22kB dask.array<chunksize=(1, 450), meta=np.ndarray>
  * range              (range) float32 3kB 37.5 112.5 ... 4.991e+04 4.999e+04
    x                  (elevation, range) float64 2MB dask.array<chunksize=(450, 667), meta=np.ndarray>
    ...                 ...
    latitude           float64 8B ...
    altitude           float64 8B ...
    crs_wkt            int64 8B ...
    stdev              float64 8B ...
    NOISE_LEVEL        float64 8B ...
    alpha              float64 8B ...
Data variables: (12/51)
    KDP                (time2, elevation, range) float32 7MB dask.array<chunksize=(1, 450, 667), meta=np.ndarray>
    PHIDP              (time2, elevation, range) float32 7MB dask.array<chunksize=(1, 450, 667), meta=np.ndarray>
    DBZH               (time2, elevation, range) float32 7MB dask.array<chunksize=(1, 450, 667), meta=np.ndarray>
    DBZV               (time2, elevation, range) float32 7MB dask.array<chunksize=(1, 450, 667), meta=np.ndarray>
    RHOHV              (time2, elevation, range) float32 7MB dask.array<chunksize=(1, 450, 667), meta=np.ndarray>
    DBTH               (time2, elevation, range) float32 7MB dask.array<chunksize=(1, 450, 667), meta=np.ndarray>
    ...                 ...
    AH                 (time2, elevation, range) float64 14MB dask.array<chunksize=(1, 450, 667), meta=np.ndarray>
    KDP_AH             (time2, elevation, range) float64 14MB dask.array<chunksize=(1, 450, 667), meta=np.ndarray>
    PHIDP_CORR5        (time2, elevation, range) float64 14MB dask.array<chunksize=(1, 450, 667), meta=np.ndarray>
    DBTH_CORR5         (time2, elevation, range) float64 14MB dask.array<chunksize=(1, 450, 667), meta=np.ndarray>
    DBZH_CORR5         (time2, elevation, range) float64 14MB dask.array<chunksize=(1, 450, 667), meta=np.ndarray>
    ZDR_CORR5          (time2, elevation, range) float64 14MB dask.array<chunksize=(1, 450, 667), meta=np.ndarray>

Plot moments - 3#

seletc different timesteps below

_kwargs = dict(x="gr", y="z", xlim=(0, 20000), ylim=(0, 10000), cmap="HomeyerRainbow")
rhi_3 = sweep_rhi_3.isel(time2=1)
uncorrected - 3#
fig = plt.figure(figsize=(16, 8))
ax1 = fig.add_subplot(221)
kwargs = _kwargs | levels(zlevels) | dict(ax=ax1)
rhi_3.DBZH.plot.contourf(**kwargs)
ax1.set_title(rhi_3.DBZH.attrs["long_name"])
ax2 = fig.add_subplot(222)
kwargs = _kwargs | levels(zdrlevels) | dict(ax=ax2)
rhi_3.ZDR.plot.contourf(**kwargs)
ax2.set_title(rhi_3.ZDR.attrs["long_name"])
ax3 = fig.add_subplot(223)
kwargs = _kwargs | levels(rholevels) | dict(ax=ax3)
rhi_3.RHOHV.plot.contourf(**kwargs)
ax3.set_title(rhi_3.RHOHV.attrs["long_name"])
ax4 = fig.add_subplot(224)
philevels2 = np.arange(0, 15, 1)
philevels2 = np.arange(-100, -80, 1)
kwargs = _kwargs | levels(philevels2) | dict(ax=ax4)
rhi_3.PHIDP.plot.contourf(**kwargs)
ax4.set_title(rhi_3.PHIDP.attrs["long_name"])
# kwargs = _kwargs | levels(kdplevels) | dict(ax=ax4)
# rhi_3.KDP_VULP.plot(**kwargs)
# ax4.set_title(rhi_3.KDP_VULP.attrs["long_name"])
fig.tight_layout()
../../_images/b5726e55d3348b1b7279d2f1cfc4e245ff64c99a8b44484cb060bae288bbffa9.png
corrected - 3#
fig = plt.figure(figsize=(16, 8))
ax1 = fig.add_subplot(221)
kwargs = _kwargs | levels(zlevels) | dict(ax=ax1)
rhi_3.DBZH_CORR2.plot.contourf(**kwargs)
ax1.set_title(rhi_3.DBZH_CORR2.attrs["long_name"])
ax2 = fig.add_subplot(222)
kwargs = _kwargs | levels(zdrlevels) | dict(ax=ax2)
rhi_3.ZDR_CORR2.plot.contourf(**kwargs)
ax2.set_title(rhi_3.ZDR_CORR1.attrs["long_name"])
ax3 = fig.add_subplot(223)
kwargs = _kwargs | levels(rholevels) | dict(ax=ax3)
rhi_3.RHOHV_NC.plot.contourf(**kwargs)
ax3.set_title(rhi_3.RHOHV_NC.attrs["long_name"])
ax4 = fig.add_subplot(224)
philevels2 = np.arange(0, 40, 2)
kwargs = _kwargs | levels(philevels2) | dict(ax=ax4)
rhi_3.PHIDP_CORR2.plot.contourf(**kwargs)
ax4.set_title(rhi_3.PHIDP_CORR2.attrs["long_name"])
# kwargs = _kwargs | levels(kdplevels) | dict(ax=ax4)
# rhi_3.KDP_VULP.plot(**kwargs)
# ax4.set_title(rhi_3.KDP_VULP.attrs["long_name"])
fig.tight_layout()
../../_images/681303bffeaf98ff61a456915c94a565fe8a3a4172f842ee4d5c3a060466a750.png

Event 4 - QVP#

  • 01.06.2016 04:00 - 10:00 UTC

  • scan: ‘n_ppi_280deg

  • zh_offset: -1.0

  • zdr_offset: -0.8

zh_offset = -1.0
zdr_offset = -0.8
# recent boxpol event
start_time = dt.datetime(2016, 6, 1, 4)
stop_time = dt.datetime(2016, 6, 1, 10)
delta = stop_time - start_time
loc = "boxpol"
scan = "n_ppi_280deg"

Open dataset - 4#

reindex_angle = dict(start_angle=0, stop_angle=360, angle_res=1.0, direction=1)
sweep_4 = rp.load_timeseries_sweep(start_time, delta, scan, reindex_angle=reindex_angle)
sweep_4 = sweep_4.set_coords("sweep_mode")
sweep_4["sweep_mode"] = sweep_4["sweep_mode"][0]
sweep_4 = sweep_4.wrl.georef.georeference()
sweep_4 = sweep_4.assign_coords(height=sweep_4.z.mean("azimuth"))
loading 72 files

Apply offsets - 4#

sweep_4["DBTH"] -= zh_offset
sweep_4["DBZH"] -= zh_offset
sweep_4["ZDR"] -= zdr_offset

Preprocess data - 4#

##%%time
# sweep_4a = rp.workflow(sweep_4, scan, rp.data_path())

Open preprocessed dataset - 4#

workflow_file = f"/radar/rp-data/workflow/tmp_{start_time:%Y%m%dT%H%M}_{stop_time:%Y%m%dT%H%M}_workflow.nc"
with rp.rpol_data.open(workflow_file) as f:
    workflow_file = f.name
sweep_4 = xr.open_dataset(workflow_file)
display(sweep_4)
<xarray.Dataset> Size: 2GB
Dimensions:            (time2: 72, azimuth: 360, range: 350)
Coordinates: (12/24)
  * time2              (time2) datetime64[ns] 576B 2016-06-01T04:00:50 ... 20...
  * azimuth            (azimuth) float64 3kB 0.5 1.5 2.5 ... 357.5 358.5 359.5
    elevation          (azimuth) float64 3kB ...
    time               (time2, azimuth) datetime64[ns] 207kB ...
  * range              (range) float32 1kB 50.0 150.0 ... 3.485e+04 3.495e+04
    x                  (azimuth, range) float64 1MB ...
    ...                 ...
    crs_wkt            int64 8B ...
    band               int64 8B ...
    spatial_ref        int64 8B ...
    stdev              float64 8B ...
    NOISE_LEVEL        float64 8B ...
    alpha              float64 8B ...
Data variables: (12/55)
    KDP                (time2, azimuth, range) float32 36MB ...
    PHIDP              (time2, azimuth, range) float32 36MB ...
    DBZH               (time2, azimuth, range) float32 36MB ...
    DBZV               (time2, azimuth, range) float32 36MB ...
    RHOHV              (time2, azimuth, range) float32 36MB ...
    DBTH               (time2, azimuth, range) float32 36MB ...
    ...                 ...
    AH                 (time2, azimuth, range) float64 73MB ...
    KDP_AH             (time2, azimuth, range) float64 73MB ...
    PHIDP_CORR5        (time2, azimuth, range) float64 73MB ...
    DBTH_CORR5         (time2, azimuth, range) float64 73MB ...
    DBZH_CORR5         (time2, azimuth, range) float64 73MB ...
    ZDR_CORR5          (time2, azimuth, range) float64 73MB ...

Calculate median - 4#

with xr.set_options(keep_attrs=True):
    qvp_4 = sweep_4.where((sweep_4.DBZH_CORR2 > 0) & (sweep_4.RHOHV_NC > 0.8)).median(
        "azimuth", skipna=True
    )
    qvp_4 = qvp_4.where(qvp_4.DBZH_CORR2 > 0)
display(qvp_4)
<xarray.Dataset> Size: 8MB
Dimensions:            (time2: 72, range: 350)
Coordinates: (12/13)
  * time2              (time2) datetime64[ns] 576B 2016-06-01T04:00:50 ... 20...
  * range              (range) float32 1kB 50.0 150.0 ... 3.485e+04 3.495e+04
    height             (range) float64 3kB 123.0 170.0 ... 1.652e+04 1.657e+04
    sweep_mode         <U20 80B 'azimuth_surveillance'
    longitude          float64 8B 7.072
    latitude           float64 8B 50.73
    ...                 ...
    crs_wkt            int64 8B 0
    band               int64 8B 1
    spatial_ref        int64 8B 0
    stdev              float64 8B 0.00128
    NOISE_LEVEL        float64 8B -24.0
    alpha              float64 8B 0.28
Data variables: (12/53)
    KDP                (time2, range) float32 101kB nan nan 0.7706 ... nan nan
    PHIDP              (time2, range) float32 101kB nan nan -84.83 ... nan nan
    DBZH               (time2, range) float32 101kB nan nan 4.573 ... nan nan
    DBZV               (time2, range) float32 101kB nan nan 4.306 ... nan nan
    RHOHV              (time2, range) float32 101kB nan nan 0.9388 ... nan nan
    DBTH               (time2, range) float32 101kB nan nan 5.171 ... nan nan
    ...                 ...
    AH                 (time2, range) float64 202kB nan nan ... nan nan
    KDP_AH             (time2, range) float64 202kB nan nan 3.33e-06 ... nan nan
    PHIDP_CORR5        (time2, range) float64 202kB nan nan ... nan nan
    DBTH_CORR5         (time2, range) float64 202kB nan nan 5.172 ... nan nan
    DBZH_CORR5         (time2, range) float64 202kB nan nan 4.574 ... nan nan
    ZDR_CORR5          (time2, range) float64 202kB nan nan 0.0783 ... nan nan

Plot moments - 4#

_kwargs = dict(x="time2", y="height", ylim=(0, 8000), cmap="HomeyerRainbow")

fig = plt.figure(figsize=(14, 8))
ax1 = fig.add_subplot(221)
kwargs = _kwargs | levels(zlevels) | dict(ax=ax1)
qvp_4.DBZH_CORR2.plot.contourf(**kwargs)
ax1.set_title(qvp_4.DBZH_CORR2.attrs["long_name"])
ax2 = fig.add_subplot(222)
kwargs = _kwargs | levels(zdrlevels) | dict(ax=ax2)
qvp_4.ZDR_CORR2.plot.contourf(**kwargs)
ax2.set_title(qvp_4.ZDR_CORR2.attrs["long_name"])
ax3 = fig.add_subplot(223)
kwargs = _kwargs | levels(rholevels) | dict(ax=ax3)
qvp_4.RHOHV_NC.plot.contourf(**kwargs)
ax3.set_title(qvp_4.RHOHV_NC.attrs["long_name"])
ax4 = fig.add_subplot(224)
philevels2 = np.arange(0, 15, 1)
kwargs = _kwargs | levels(philevels2) | dict(ax=ax4)
qvp_4.PHIDP_CORR2.plot(**kwargs)
ax4.set_title(qvp_4.PHIDP_CORR2.attrs["long_name"])
# kwargs = _kwargs | levels(kdplevels) | dict(ax=ax4)
# qvp_4.KDP_VULP.plot.contourf(**kwargs)
# ax4.set_title(qvp_4.KDP_VULP.attrs["long_name"])
fig.tight_layout()
../../_images/037ac8e4ebae676722b0ac4fe59525110393208bb1dea48cc44af8871c608ff2.png

Event 5 - RHI#

  • 07.10.2014 01:20 UTC

  • scan: ‘n_rhi_lacros’

zh_offset = -0.2
zdr_offset = -0.4
# recent boxpol event
start_time = dt.datetime(2014, 10, 7, 1, 20)
stop_time = dt.datetime(2014, 10, 7, 1, 25)
loc = "boxpol"
scan = "n_rhi_lacros"

Open dataset - 5#

reindex_angle = dict(start_angle=0, stop_angle=90, angle_res=0.2, direction=1)
sweep_rhi_5 = rp.load_single_sweep(start_time, scan, reindex_angle=reindex_angle)

Apply offsets - 5#

sweep_rhi_5["DBZH"] -= zh_offset
sweep_rhi_5["DBTH"] -= zh_offset
sweep_rhi_5["ZDR"] -= zdr_offset

Preprocess data - 5#

##%%time
# sweep_rhi_5 = rp.workflow(sweep_rhi_5, scan, rp.data_path())

Open preprocessed dataset - 5#

workflow_file = f"/radar/rp-data/workflow/tmp_{start_time:%Y%m%dT%H%M}_{stop_time:%Y%m%dT%H%M}_workflow.nc"
with rp.rpol_data.open(workflow_file) as f:
    workflow_file = f.name
sweep_rhi_5 = xr.open_dataset(workflow_file)
display(sweep_rhi_5)
<xarray.Dataset> Size: 101MB
Dimensions:            (elevation: 450, range: 667)
Coordinates: (12/18)
  * elevation          (elevation) float64 4kB 0.1 0.3 0.5 ... 89.5 89.7 89.9
    azimuth            (elevation) float64 4kB ...
    time               (elevation) datetime64[ns] 4kB ...
  * range              (range) float32 3kB 37.5 112.5 ... 4.991e+04 4.999e+04
    x                  (elevation, range) float64 2MB ...
    y                  (elevation, range) float64 2MB ...
    ...                 ...
    latitude           float64 8B ...
    altitude           float64 8B ...
    crs_wkt            int64 8B ...
    stdev              float64 8B ...
    NOISE_LEVEL        float64 8B ...
    alpha              float64 8B ...
Data variables: (12/51)
    KDP                (elevation, range) float32 1MB ...
    PHIDP              (elevation, range) float32 1MB ...
    DBZH               (elevation, range) float32 1MB ...
    DBZV               (elevation, range) float32 1MB ...
    RHOHV              (elevation, range) float32 1MB ...
    DBTH               (elevation, range) float32 1MB ...
    ...                 ...
    AH                 (elevation, range) float64 2MB ...
    KDP_AH             (elevation, range) float64 2MB ...
    PHIDP_CORR5        (elevation, range) float64 2MB ...
    DBTH_CORR5         (elevation, range) float64 2MB ...
    DBZH_CORR5         (elevation, range) float64 2MB ...
    ZDR_CORR5          (elevation, range) float64 2MB ...

Plot moments - 5#

_kwargs = dict(x="gr", y="z", xlim=(0, 25000), ylim=(0, 8000), cmap="HomeyerRainbow")
fig = plt.figure(figsize=(16, 8))
ax1 = fig.add_subplot(221)
kwargs = _kwargs | levels(zlevels) | dict(ax=ax1)
sweep_rhi_5.DBZH_CORR2.plot.contourf(**kwargs)
ax1.set_title(sweep_rhi_5.DBZH_CORR2.attrs["long_name"])
ax2 = fig.add_subplot(222)
kwargs = _kwargs | levels(zdrlevels) | dict(ax=ax2)
sweep_rhi_5.ZDR_CORR2.plot.contourf(**kwargs)
ax2.set_title(sweep_rhi_5.ZDR_CORR1.attrs["long_name"])
ax3 = fig.add_subplot(223)
kwargs = _kwargs | levels(rholevels) | dict(ax=ax3)
sweep_rhi_5.RHOHV_NC.plot.contourf(**kwargs)
ax3.set_title(sweep_rhi_5.RHOHV_NC.attrs["long_name"])
ax4 = fig.add_subplot(224)
# philevels2 = np.arange(0, 40, 2)
# kwargs = _kwargs | levels(philevels2) | dict(ax=ax4)
# sweep_rhi_5.PHIDP_CORR2.plot.contourf(**kwargs)
# ax4.set_title(sweep_rhi_5.PHIDP_CORR2.attrs["long_name"])
kwargs = _kwargs | levels(kdplevels) | dict(ax=ax4)
sweep_rhi_5.KDP_VULP.plot(**kwargs)
ax4.set_title(sweep_rhi_5.KDP_VULP.attrs["long_name"])
fig.tight_layout()
../../_images/c3ae70ef202b7629a082b9a596c4077e13bcae6414ca4510ec18d1f6b2408b97.png

Event 6 - QVP#

  • 26.7.2015 von 15:30 bis 18:30 UTC

  • scan: ‘n_ppi_280deg’

  • zh_offset = 2.5 ??

  • zdr_offset = 0.8 ??

zh_offset = -1.0
zdr_offset = -0.9
# recent boxpol event
start_time = dt.datetime(2015, 7, 26, 15, 30)
stop_time = dt.datetime(2015, 7, 26, 18, 30)
delta = stop_time - start_time
loc = "boxpol"
scan = "n_ppi_110deg"

Open dataset - 6#

reindex_angle = dict(start_angle=0, stop_angle=360, angle_res=1.0, direction=1)
sweep_6 = rp.load_timeseries_sweep(start_time, delta, scan, reindex_angle=reindex_angle)
sweep_6 = sweep_6.set_coords("sweep_mode")
sweep_6["sweep_mode"] = sweep_6["sweep_mode"][0]
sweep_6 = sweep_6.wrl.georef.georeference()
sweep_6 = sweep_6.assign_coords(height=sweep_6.z.mean("azimuth"))
loading 36 files

Apply offsets - 6#

sweep_6["DBTH"] -= zh_offset
sweep_6["DBZH"] -= zh_offset
sweep_6["ZDR"] -= zdr_offset

Preprocess data - 6#

##%%time
# sweep_6a = rp.workflow(sweep_6, scan, rp.data_path())

Open preprocessed dataset - 6#

workflow_file = f"/radar/rp-data/workflow/tmp_{start_time:%Y%m%dT%H%M}_{stop_time:%Y%m%dT%H%M}_workflow.nc"
with rp.rpol_data.open(workflow_file) as f:
    workflow_file = f.name
sweep_6 = xr.open_dataset(workflow_file, chunks=dict(time2=1))
display(sweep_6)
<xarray.Dataset> Size: 3GB
Dimensions:            (time2: 36, azimuth: 360, range: 1000)
Coordinates: (12/24)
  * time2              (time2) datetime64[ns] 288B 2015-07-26T15:31:42 ... 20...
  * azimuth            (azimuth) float64 3kB 0.5 1.5 2.5 ... 357.5 358.5 359.5
    elevation          (azimuth) float64 3kB dask.array<chunksize=(360,), meta=np.ndarray>
    time               (time2, azimuth) datetime64[ns] 104kB dask.array<chunksize=(1, 360), meta=np.ndarray>
  * range              (range) float32 4kB 50.0 150.0 ... 9.985e+04 9.995e+04
    x                  (azimuth, range) float64 3MB dask.array<chunksize=(360, 1000), meta=np.ndarray>
    ...                 ...
    crs_wkt            int64 8B ...
    band               int64 8B ...
    spatial_ref        int64 8B ...
    stdev              float64 8B ...
    NOISE_LEVEL        float64 8B ...
    alpha              float64 8B ...
Data variables: (12/55)
    KDP                (time2, azimuth, range) float32 52MB dask.array<chunksize=(1, 180, 500), meta=np.ndarray>
    PHIDP              (time2, azimuth, range) float32 52MB dask.array<chunksize=(1, 180, 500), meta=np.ndarray>
    DBZH               (time2, azimuth, range) float32 52MB dask.array<chunksize=(1, 180, 500), meta=np.ndarray>
    DBZV               (time2, azimuth, range) float32 52MB dask.array<chunksize=(1, 180, 500), meta=np.ndarray>
    RHOHV              (time2, azimuth, range) float32 52MB dask.array<chunksize=(1, 180, 500), meta=np.ndarray>
    DBTH               (time2, azimuth, range) float32 52MB dask.array<chunksize=(1, 180, 500), meta=np.ndarray>
    ...                 ...
    AH                 (time2, azimuth, range) float64 104MB dask.array<chunksize=(1, 360, 1000), meta=np.ndarray>
    KDP_AH             (time2, azimuth, range) float64 104MB dask.array<chunksize=(1, 360, 1000), meta=np.ndarray>
    PHIDP_CORR5        (time2, azimuth, range) float64 104MB dask.array<chunksize=(1, 360, 1000), meta=np.ndarray>
    DBTH_CORR5         (time2, azimuth, range) float64 104MB dask.array<chunksize=(1, 360, 1000), meta=np.ndarray>
    DBZH_CORR5         (time2, azimuth, range) float64 104MB dask.array<chunksize=(1, 360, 1000), meta=np.ndarray>
    ZDR_CORR5          (time2, azimuth, range) float64 104MB dask.array<chunksize=(1, 360, 1000), meta=np.ndarray>

Calculate median - 6#

with xr.set_options(keep_attrs=True):
    qvp_6 = sweep_6.where((sweep_6.DBZH_CORR2 > 0) & (sweep_6.RHOHV_NC > 0.8)).median(
        "azimuth", skipna=True
    )
    qvp_6 = qvp_6.where(qvp_6.DBZH_CORR2 > 0)
display(qvp_6)
<xarray.Dataset> Size: 12MB
Dimensions:            (time2: 36, range: 1000)
Coordinates: (12/13)
  * time2              (time2) datetime64[ns] 288B 2015-07-26T15:31:42 ... 20...
  * range              (range) float32 4kB 50.0 150.0 ... 9.985e+04 9.995e+04
    height             (range) float64 8kB dask.array<chunksize=(1000,), meta=np.ndarray>
    sweep_mode         <U20 80B ...
    longitude          float64 8B ...
    latitude           float64 8B ...
    ...                 ...
    crs_wkt            int64 8B ...
    band               int64 8B ...
    spatial_ref        int64 8B ...
    stdev              float64 8B ...
    NOISE_LEVEL        float64 8B ...
    alpha              float64 8B ...
Data variables: (12/53)
    KDP                (time2, range) float32 144kB dask.array<chunksize=(1, 1000), meta=np.ndarray>
    PHIDP              (time2, range) float32 144kB dask.array<chunksize=(1, 1000), meta=np.ndarray>
    DBZH               (time2, range) float32 144kB dask.array<chunksize=(1, 1000), meta=np.ndarray>
    DBZV               (time2, range) float32 144kB dask.array<chunksize=(1, 1000), meta=np.ndarray>
    RHOHV              (time2, range) float32 144kB dask.array<chunksize=(1, 1000), meta=np.ndarray>
    DBTH               (time2, range) float32 144kB dask.array<chunksize=(1, 1000), meta=np.ndarray>
    ...                 ...
    AH                 (time2, range) float64 288kB dask.array<chunksize=(1, 1000), meta=np.ndarray>
    KDP_AH             (time2, range) float64 288kB dask.array<chunksize=(1, 1000), meta=np.ndarray>
    PHIDP_CORR5        (time2, range) float64 288kB dask.array<chunksize=(1, 1000), meta=np.ndarray>
    DBTH_CORR5         (time2, range) float64 288kB dask.array<chunksize=(1, 1000), meta=np.ndarray>
    DBZH_CORR5         (time2, range) float64 288kB dask.array<chunksize=(1, 1000), meta=np.ndarray>
    ZDR_CORR5          (time2, range) float64 288kB dask.array<chunksize=(1, 1000), meta=np.ndarray>

Plot moments - 6#

_kwargs = dict(x="time2", y="height", ylim=(0, 8000), cmap="HomeyerRainbow")

fig = plt.figure(figsize=(14, 8))
ax1 = fig.add_subplot(221)
kwargs = _kwargs | levels(zlevels) | dict(ax=ax1)
qvp_6.DBZH_CORR2.plot.contourf(**kwargs)
ax1.set_title(qvp_6.DBZH_CORR2.attrs["long_name"])
ax2 = fig.add_subplot(222)
kwargs = _kwargs | levels(zdrlevels) | dict(ax=ax2)
qvp_6.ZDR_CORR2.plot.contourf(**kwargs)
ax2.set_title(qvp_6.ZDR_CORR2.attrs["long_name"])
ax3 = fig.add_subplot(223)
kwargs = _kwargs | levels(rholevels) | dict(ax=ax3)
qvp_6.RHOHV_NC.plot.contourf(**kwargs)
ax3.set_title(qvp_6.RHOHV_NC.attrs["long_name"])
ax4 = fig.add_subplot(224)
philevels2 = np.arange(0, 25, 1)
kwargs = _kwargs | levels(philevels2) | dict(ax=ax4)
qvp_6.PHIDP_CORR2.plot(**kwargs)
ax4.set_title(qvp_6.PHIDP_CORR2.attrs["long_name"])
# kwargs = _kwargs | levels(kdplevels) | dict(ax=ax4)
# qvp_6.KDP_VULP.plot.contourf(**kwargs)
# ax4.set_title(qvp_6.KDP_VULP.attrs["long_name"])
fig.tight_layout()
../../_images/4ad30f06a492ab5e524801c7093b8c891663ef1ba1d84b5dd30c04f85d534cb7.png