3 Screening out weather
3.1 using correlation coefficient
Screening precipitation based on correlation coefficient is arguably the most simple and established approach for screening out weather in cases where dual-polarization data is available. It is based on removing data above a certain \(\rho_{/HV}\) tresholds, most commonly 0.95.
# Screen out the reflectivity areas with RHOHV < 0.95
<- calculate_param(my_ppi, DBZH = ifelse(RHOHV > 0.95, NA, DBZH))
my_ppi_clean # plot the original and cleaned up reflectivity:
map(my_ppi, map = basemap, param = "DBZH", zlim = c(-20, 40))
## Warning in proj4string(mybbox): CRS object has comment, which is lost in output; in tests, see
## https://cran.r-project.org/web/packages/sp/vignettes/CRS_warnings.html
map(my_ppi_clean, map = basemap, param = "DBZH", zlim = c(-20, 40))
## Warning in proj4string(mybbox): CRS object has comment, which is lost in output; in tests, see
## https://cran.r-project.org/web/packages/sp/vignettes/CRS_warnings.html
3.2 using MistNet
You can use MistNet for screening out weather when * the radar operates at S-band wavelengths * you only have single polarization data available (specifically, the three basic quantities radial velocity VRADH, reflectivity DBZH, and spectrum width WRADH).
# apply the MistNet model to the polar volume file and load it as a polar volume (pvol):
<- apply_mistnet(my_pvolfiles[1]) my_pvol
## Filename = ./data_pvol/2017/05/04/KHGX/KHGX20170504_012843_V06, callid = KHGX
## Removed 1 SAILS sweep.
## Call RSL_keep_sails() before RSL_anyformat_to_radar() to keep SAILS sweeps.
## Reading RSL polar volume with nominal time 20170504-012844, source: RAD:KHGX,PLC:HOUSTON,state:TX,radar_name:KHGX
## Running vol2birdSetUp
## Warning: disabling single-polarization precipitation filter for S-band data, continuing in DUAL polarization mode
## Warning: using MistNet, disabling other segmentation methods
## Running segmentScansUsingMistnet.
## Warning: Requested elevation scan at 1.500000 degrees but selected scan at 1.318360 degrees
## Warning: Requested elevation scan at 3.500000 degrees but selected scan at 3.120115 degrees
## Warning: Requested elevation scan at 4.500000 degrees but selected scan at 3.999025 degrees
## Warning: Ignoring scan(s) not used as MistNet input: 2 4 8 9 10 11 12 13 14 ...
## Running MistNet...done
# mistnet will add additional parameters to the
# elevation scans at 0.5, 1.5, 2.5, 3.5 and 4.5 degrees
# let's extract the scan closest to 0.5 degrees:
<- get_scan(my_pvol, 0.5)
my_scan # plot some summary info about the scan to the console:
my_scan
## Polar scan (class scan)
##
## parameters: DBZH VRADH RHOHV WEATHER BACKGROUND CELL PHIDP BIOLOGY ZDR
## elevation angle: 0.483395 deg
## dims: 1201 bins x 720 rays
MistNet adds several new parameters:
* WEATHER
: a probability (0-1) for the weather class
* BIOLOGY
: a probability (0-1) for the biology class
* BACKGROUND
: a probability (0-1) for the background (empty space) class
* CELL
: the final segmentation, which is based on the WEATHER parameters of all five MistNet elevation scans. CELL
also includes a fringe calculated by a region growing approach. CELL
values equal 1 for the additional fringe, and 2 for the originally segmented precipitation area by MistNet.
# as before, project the scan as a ppi:
<- project_as_ppi(my_scan) my_ppi
## Warning in proj4string(obj): CRS object has comment, which is lost in output; in tests, see
## https://cran.r-project.org/web/packages/sp/vignettes/CRS_warnings.html
# plot the probability for the WEATHER class
plot(my_ppi, param = 'WEATHER')
# plot the final segmentation result:
# plot the probability for the WEATHER class
plot(my_ppi, param = 'CELL')
# let's remove the identified precipitation area (and additional fringe) from the ppi, and plot it:
<- calculate_param(my_ppi, DBZH = ifelse(CELL >= 1, NA, DBZH))
my_ppi_clean map(my_ppi_clean, map=basemap, param = 'DBZH')
## Warning in proj4string(mybbox): CRS object has comment, which is lost in output; in tests, see
## https://cran.r-project.org/web/packages/sp/vignettes/CRS_warnings.html
Exercise 4: Calculate and plot a ‘cleaned up’ PPI for the radial velocity that includes only the segmentation by MistNet and not the additional fringe.
# To remove the additional fringe around the rain segmentation by MistNet
# we want to screen out CELL values equal to 2 only.
<- calculate_param(my_ppi, VRADH = ifelse(CELL >= 2, NA, VRADH))
my_ppi_clean map(my_ppi_clean, map=basemap, param = 'VRADH')
## Warning in proj4string(mybbox): CRS object has comment, which is lost in output; in tests, see
## https://cran.r-project.org/web/packages/sp/vignettes/CRS_warnings.html
3.3 using depolarization ratio
Another quantity that has been proposed for distinguishing weather and biology is the depolarization ratio (\(D_r\)), which is defined as
\[D_r=\frac{Z_{DR}+ 1 -2 \sqrt{Z_{DR}} \ \rho_{HV}}{Z_{DR}+ 1 +2 \sqrt{Z_{DR}} \ \rho_{HV}}\] First we add the depolarization ratio (DR) as a parameter. We’ll express DR on a dB scale by transforming: \[DR=10\log_{10}(D_r) \] (see Kilambi et al. 2018, A Simple and Effective Method for Separating Meteorological from Nonmeteorological Targets Using Dual-Polarization Data for more information)
# let's add depolarization ratio (DR) as a parameter (following Kilambi 2018):
<- calculate_param(my_ppi, DR = 10 * log10((1+ ZDR - 2 * (ZDR^0.5) * RHOHV) /
my_ppi 1 + ZDR+ 2 * (ZDR^0.5) * RHOHV))) (
## Warning in eval(nn <- (calc[[i]]), x$data@data): NaNs produced
Like correlation coefficient you can apply simple thresholds to its value to screen out precipitation. It has a good (potentially even better) ability to distinguish weather and biology:
# plot the depolarization ratio, using a viridis color palette:
map(my_ppi, map = basemap, param = "DR", zlim=c(-25,-5), palette = viridis::viridis(100))
## Warning in proj4string(mybbox): CRS object has comment, which is lost in output; in tests, see
## https://cran.r-project.org/web/packages/sp/vignettes/CRS_warnings.html
# Now let us screen out the reflectivity areas with DR < -12 dB:
<- calculate_param(my_ppi, DBZH = ifelse(DR < -12, NA, DBZH))
my_ppi_clean # plot the original and cleaned up reflectivity:
map(my_ppi, map = basemap, param = "DBZH", zlim = c(-20, 40))
## Warning in proj4string(mybbox): CRS object has comment, which is lost in output; in tests, see
## https://cran.r-project.org/web/packages/sp/vignettes/CRS_warnings.html
map(my_ppi_clean, map = basemap, param = "DBZH", zlim = c(-20, 40))
## Warning in proj4string(mybbox): CRS object has comment, which is lost in output; in tests, see
## https://cran.r-project.org/web/packages/sp/vignettes/CRS_warnings.html