Precipitation estimation module
After the attenuation correction we can estimate the precipitation amount with a z-R conversion. In the function qpe_zr
the parameter a and b depends on the drop size distribution and the water temeperature.
The qpe_zr
function contains basic functions from \(\omega radlib\). At first, the unit “dBZ” is converted to “Z”. Afterwards the precipitation depth is calculated over an integration interval, which should be correspond to the scan interval of the weather radar. All parameter can be defined in the configuration file, which is loaded in the qpe_zr
function. We use the attenuation corrected data, which we have processed with the attenuation correction module, for precipitation
estimation.
import wrainfo as wrf
Note
The function works also for a xarray dataset which is linking over the time.
[1]:
ds_rain = wrf.precipitation.qpe_zr(ds=ds_clutter_corr,
moment="DBZH_CORR",
path="/tests/data/test_settings_wrainfo.json",
a=200,
b=1.6)
ds_rain
[1]:
<xarray.Dataset> Dimensions: (azimuth: 720, range: 936) Coordinates: (12/15) * azimuth (azimuth) float64 0.25 0.75 1.25 1.75 ... 358.8 359.2 359.8 elevation (azimuth) float64 0.5 0.5 0.5 0.5 0.5 ... 0.5 0.5 0.5 0.5 rtime (azimuth) datetime64[ns] 2022-02-16T13:45:28.941817600 .... * range (range) float32 37.5 112.5 187.5 ... 7.009e+04 7.016e+04 time datetime64[ns] 2022-02-16T13:45:01 sweep_mode <U20 'azimuth_surveillance' ... ... x (azimuth, range) float64 ... y (azimuth, range) float64 ... z (azimuth, range) float64 ... gr (azimuth, range) float64 ... rays (azimuth, range) float64 ... bins (azimuth, range) float32 ... Data variables: (12/13) RATE (azimuth, range) float32 ... DBZH (azimuth, range) float32 ... VRAD (azimuth, range) float32 ... ZDR (azimuth, range) float32 ... KDP (azimuth, range) float32 ... PHIDP (azimuth, range) float32 ... ... ... WRAD (azimuth, range) float32 ... QC_INFO (azimuth, range) float32 ... FUZZ (azimuth, range) float64 ... DBZH_no_clutter (azimuth, range) float32 ... DBZH_CORR (azimuth, range) float32 nan nan nan nan ... nan nan nan PREC_ZR (azimuth, range) float32 nan nan nan nan ... nan nan nan Attributes: fixed_angle: 0.5
- azimuth: 720
- range: 936
- azimuth(azimuth)float640.25 0.75 1.25 ... 359.2 359.8
- standard_name :
- ray_azimuth_angle
- long_name :
- azimuth_angle_from_true_north
- units :
- degrees
- axis :
- radial_azimuth_coordinate
- a1gate :
- 1
- angle_res :
- 0.5
array([2.5000e-01, 7.5000e-01, 1.2500e+00, ..., 3.5875e+02, 3.5925e+02, 3.5975e+02])
- elevation(azimuth)float64...
- standard_name :
- ray_elevation_angle
- long_name :
- elevation_angle_from_horizontal_plane
- units :
- degrees
- axis :
- radial_elevation_coordinate
array([0.5, 0.5, 0.5, ..., 0.5, 0.5, 0.5])
- rtime(azimuth)datetime64[ns]...
- standard_name :
- time
array(['2022-02-16T13:45:28.941817600', '2022-02-16T13:45:28.980652544', '2022-02-16T13:45:01.019417600', ..., '2022-02-16T13:45:28.825312256', '2022-02-16T13:45:28.864147456', '2022-02-16T13:45:28.902982400'], dtype='datetime64[ns]')
- range(range)float3237.5 112.5 ... 7.009e+04 7.016e+04
- units :
- meters
- standard_name :
- projection_range_coordinate
- long_name :
- range_to_measurement_volume
- spacing_is_constant :
- true
- axis :
- radial_range_coordinate
- meters_to_center_of_first_gate :
- 37.5
- meters_between_gates :
- 75.0
array([3.75000e+01, 1.12500e+02, 1.87500e+02, ..., 7.00125e+04, 7.00875e+04, 7.01625e+04], dtype=float32)
- time()datetime64[ns]...
- standard_name :
- time
array('2022-02-16T13:45:01.000000000', dtype='datetime64[ns]')
- sweep_mode()object...
array('azimuth_surveillance', dtype='<U20')
- longitude()float64...
- long_name :
- longitude
- units :
- degrees_east
- standard_name :
- longitude
array(13.24397)
- latitude()float64...
- long_name :
- latitude
- units :
- degrees_north
- positive :
- up
- standard_name :
- latitude
array(53.55478)
- altitude()float64...
- long_name :
- altitude
- units :
- meters
- standard_name :
- altitude
array(38.)
- x(azimuth, range)float64...
[673920 values with dtype=float64]
- y(azimuth, range)float64...
[673920 values with dtype=float64]
- z(azimuth, range)float64...
[673920 values with dtype=float64]
- gr(azimuth, range)float64...
[673920 values with dtype=float64]
- rays(azimuth, range)float64...
[673920 values with dtype=float64]
- bins(azimuth, range)float32...
[673920 values with dtype=float32]
- RATE(azimuth, range)float32...
- _Undetect :
- 0
- standard_name :
- rainfall_rate
- long_name :
- rainfall_rate
- units :
- mm h-1
[673920 values with dtype=float32]
- DBZH(azimuth, range)float32...
- _Undetect :
- 0
- standard_name :
- radar_equivalent_reflectivity_factor_h
- long_name :
- Equivalent reflectivity factor H
- units :
- dBZ
[673920 values with dtype=float32]
- VRAD(azimuth, range)float32...
- _Undetect :
- 0
- standard_name :
- radial_velocity_of_scatterers_away_from_instrument
- long_name :
- Radial velocity of scatterers away from instrument
- units :
- meters per seconds
[673920 values with dtype=float32]
- ZDR(azimuth, range)float32...
- _Undetect :
- 0
- standard_name :
- radar_differential_reflectivity_hv
- long_name :
- Log differential reflectivity H/V
- units :
- dB
[673920 values with dtype=float32]
- KDP(azimuth, range)float32...
- _Undetect :
- 0
- standard_name :
- radar_specific_differential_phase_hv
- long_name :
- Specific differential phase HV
- units :
- degrees per kilometer
[673920 values with dtype=float32]
- PHIDP(azimuth, range)float32...
- _Undetect :
- 0
- standard_name :
- radar_differential_phase_hv
- long_name :
- Differential phase HV
- units :
- degrees
[673920 values with dtype=float32]
- RHOHV(azimuth, range)float32...
- _Undetect :
- 0
- standard_name :
- radar_correlation_coefficient_hv
- long_name :
- Correlation coefficient HV
- units :
- unitless
[673920 values with dtype=float32]
- WRAD(azimuth, range)float32...
- _Undetect :
- 0
- standard_name :
- radar_doppler_spectrum_width
- long_name :
- Doppler spectrum width
- units :
- meters per second
[673920 values with dtype=float32]
- QC_INFO(azimuth, range)float32...
- _Undetect :
- 0
[673920 values with dtype=float32]
- FUZZ(azimuth, range)float64...
[673920 values with dtype=float64]
- DBZH_no_clutter(azimuth, range)float32...
- standard_name :
- radar_equivalent_reflectivity_factor_h
- long_name :
- Equivalent reflectivity factor H
- unit :
- dBZ
[673920 values with dtype=float32]
- DBZH_CORR(azimuth, range)float32nan nan nan nan ... nan nan nan nan
- _Undetect :
- 0
- standard_name :
- radar_equivalent_reflectivity_factor_h
- long_name :
- Equivalent reflectivity factor H
- units :
- dBZ
array([[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., 21. , nan, nan], [ nan, nan, nan, ..., 23. , 22.5, 21.5], ..., [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]], dtype=float32)
- PREC_ZR(azimuth, range)float32nan nan nan nan ... nan nan nan nan
- standard_name :
- precipitation_amount_z_r_relationship
- long_name :
- precipitation_amount_z_r_relationship
- unit :
- mm
array([[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., 0.06239862, nan, nan], [ nan, nan, nan, ..., 0.08320989, 0.07743281, 0.06705406], ..., [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]], dtype=float32)
- fixed_angle :
- 0.5
Note
The German Weather Service uses based on statistical analyses for a=256 and b=1.42.
Seealso
You can find a detailed description of the basic function from \(\omega radlib\), here.
Now we can plot the precipitation amount.
[2]:
import wradlib as wrl
import matplotlib.pyplot as plt
# georefenced dataset for plot
ds_rain_georef=ds_rain.pipe(wrl.georef.georeference)
ds_rain_georef.PREC_ZR.plot(x="x", y="y", cmap="jet", vmax=1.5)
[2]:
<matplotlib.collections.QuadMesh at 0x15343dea6df0>
Library Reference
Seealso
Get more information about the precipitaion estimation module in the library reference section.