示例#1
0
 def test_filter_gabella(self):
     filename = util.get_wradlib_data_file('misc/polar_dBZ_fbg.gz')
     data = np.loadtxt(filename)
     clutter.filter_gabella(data,
                            wsize=5,
                            thrsnorain=0.,
                            tr1=6.,
                            n_p=8,
                            tr2=1.3)
def ex_clutter_gabella():
    # load the example data
    import numpy as np
    # Todo: link right data set
    testdata = np.loadtxt(os.path.dirname(__file__) + '/' + 'data/polar_dBZ_fbg.gz')

    # calculate the clutter map
    clmap = clutter.filter_gabella(testdata,
                                   wsize=5,
                                   thrsnorain=0.,
                                   tr1=6.,
                                   n_p=8,
                                   tr2=1.3)

    # visualize the result
    ax, pm = vis.plot_ppi(clmap)
    ax.set_title('cluttermap')
    pl.show()
示例#3
0
def ex_clutter_gabella():
    # load the example data
    import numpy as np
    # Todo: link right data set
    testdata = np.loadtxt(
        os.path.dirname(__file__) + '/' + 'data/polar_dBZ_fbg.gz')

    # calculate the clutter map
    clmap = clutter.filter_gabella(testdata,
                                   wsize=5,
                                   thrsnorain=0.,
                                   tr1=6.,
                                   n_p=8,
                                   tr2=1.3)

    # visualize the result
    ax, pm = vis.plot_ppi(clmap)
    ax.set_title('cluttermap')
    pl.show()
示例#4
0
 def test_filter_gabella(self):
     filename = util.get_wradlib_data_file('misc/polar_dBZ_fbg.gz')
     data = np.loadtxt(filename)
     clutter.filter_gabella(data, wsize=5, thrsnorain=0., tr1=6.,
                            n_p=8, tr2=1.3)
示例#5
0
def main(radar, tilt_list, ref_fieldname):
    """
    Apply a clutter removal workflow to a single radar volume
    ===============
    (1) Gabella texture filter
    (2) Despeckle
    Parameters:
    ===============
        radar: pyart radar object
        
        tilt_list: list
            tilt list to process. Empty triggers processing for all tilts
    Returns:
    ===============
        radar: pyart radar object
    """

    #config
    rain_cut_dbz = 10.
    #min_dbz       = 0.
    #snr_threshold = 10

    #define the indices for the required sweep
    sweep_startidx = radar.sweep_start_ray_index['data'][:]
    sweep_endidx = radar.sweep_end_ray_index['data'][:]
    refl_data = radar.fields[ref_fieldname]['data'].copy()
    clutter_mask = np.zeros_like(refl_data)  #clutter flag = 1, no clutter = 0

    #build list of tilts to process for gabella filter
    if not tilt_list:
        tilt_list = np.arange(len(sweep_startidx))
    else:
        tilt_list = np.array(tilt_list)

    #loop through sweeps
    for k in tilt_list:
        #extract ppi
        ppi = refl_data[sweep_startidx[k]:sweep_endidx[k] + 1]
        #generate clutter mask for ppi
        clmap = clutter.filter_gabella(ppi,
                                       wsize=5,
                                       thrsnorain=rain_cut_dbz,
                                       tr1=10.,
                                       n_p=8,
                                       tr2=1.3)
        #insert clutter mask for ppi into volume mask
        clutter_mask[sweep_startidx[k]:sweep_endidx[k] + 1] = clmap

    #add clutter mask to radar object
    clutter_field = {
        'data': clutter_mask,
        'units': 'mask',
        'long_name': 'Gabella clutter mask',
        'standard_name': 'CLUTTER',
        'comments': 'wradlib implementation of Gabella et al., 2002'
    }
    radar.add_field('reflectivity_clutter',
                    clutter_field,
                    replace_existing=True)

    #apply clutter filter to gatefiler
    gatefilter = pyart.correct.GateFilter(radar)
    gatefilter.exclude_equal('reflectivity_clutter', 1)

    #generate depseckle filter
    gate_range = radar.range['meters_between_gates']
    #apply limits
    if gate_range < 250:
        print('gate range too small in clutter.py, setting to 250m')
        gate_range = 250
    if gate_range > 1000:
        print('gate range too large in clutter.py, setting to 1000m')
        gate_range = 1000
    #rescale and calculate sz
    despeckle_factor = 1000 / gate_range  #scale despeckle according to gate size
    despeckle_sz = 15 * despeckle_factor  #1000m = 15, 500m = 30, 250m = 60
    #apply despeckle to gatefilter
    gatefilter = pyart.correct.despeckle.despeckle_field(radar,
                                                         ref_fieldname,
                                                         gatefilter=gatefilter,
                                                         size=despeckle_sz)

    #apply filter to mask
    cor_refl_data = np.ma.masked_where(gatefilter.gate_excluded,
                                       refl_data.copy())

    #return radar object
    return cor_refl_data, gatefilter