def test_attenuation_correction_rsl():
    """ Test calculate_attenuation on data read using RSL """

    # read in the data
    radar = pyart.io.read_rsl(RSLNAME)

    # add the fields created by phase_proc
    reproc_phase = np.load(PHASENAME)
    radar.fields['proc_dp_phase_shift'] = {'data': reproc_phase}

    spec_at, cor_z = attenuation.calculate_attenuation(
        radar, 8.6, debug=True, a_coef=0.17)

    ref_cor_z = np.load(CORZNAME)
    ref_spec_at = np.load(SPECATNAME)

    # XXX no recasting to float32 should be done here.
    cor_z['data'].data[cor_z['data'].mask] = -9999.0
    assert_array_equal(ref_spec_at, spec_at['data'].astype('float32'))
    assert_array_equal(ref_cor_z, cor_z['data'].astype('float32'))
Example #2
0
def test_attenuation_correction_rsl():
    """ Test calculate_attenuation on data read using RSL """

    # read in the data
    radar = pyart.io.read_rsl(RSLNAME)

    # add the fields created by phase_proc
    reproc_phase = np.load(PHASENAME)
    radar.fields['proc_dp_phase_shift'] = {'data': reproc_phase}

    spec_at, cor_z = attenuation.calculate_attenuation(radar,
                                                       8.6,
                                                       debug=True,
                                                       a_coef=0.17)

    ref_cor_z = np.load(CORZNAME)
    ref_spec_at = np.load(SPECATNAME)

    # XXX no recasting to float32 should be done here.
    cor_z['data'].data[cor_z['data'].mask] = -9999.0
    assert_array_equal(ref_spec_at, spec_at['data'].astype('float32'))
    assert_array_equal(ref_cor_z, cor_z['data'].astype('float32'))
    # append a datetime object
    mydatetime = netCDF4.num2date(myradar.time['data'][0],
                                  myradar.time['units'],
                                  calendar=myradar.time['calendar'])
    mydict = dt_to_dict(mydatetime)
    mydict.update({'scanmode': {'ppi': 'sur', 'rhi': 'rhi'}
                  [myradar.sweep_mode[0]], 'fac': metadata['facility']})
    ofilename = outdir + '%(scanmode)scmac%(fac)s.c0.%(year)04d%(month)02d%(day)02d.%(hour)02d%(minute)02d%(second)02d.nc' % mydict
    reproc_phase, sob_kdp = phase_proc.phase_proc(
        myradar, params['reflectivity_offset'], sys_phase=params['sys_phase'],
        overide_sys_phase=params['overide_sys_phase'], debug=True, nowrap=ng)
    myradar.fields.update({'recalculated_diff_phase': sob_kdp,
                          'proc_dp_phase_shift': reproc_phase})

    #attenuation correction
    spec_at, cor_z = attenuation.calculate_attenuation(
        myradar, params['reflectivity_offset'], debug=True, a_coef=0.17)
    myradar.fields.update({'specific_attenuation': spec_at})
    myradar.fields.update({'corrected_reflectivity_horizontal': cor_z})
    R = 51.3 * (myradar.fields['specific_attenuation']['data']) ** 0.81
    rainrate = copy.deepcopy(myradar.fields['diff_phase'])
    rainrate['data'] = R
    rainrate['valid_min'] = 0.0
    rainrate['valid_max'] = 400.0
    rainrate['standard_name'] = 'rainfall_rate'
    rainrate['long_name'] = 'rainfall_rate'
    rainrate['least_significant_digit'] = 1
    rainrate['units'] = 'mm/hr'
    myradar.fields.update({'rain_rate_A': rainrate})
    netcdf_obj = netCDF4.Dataset(ofilename, 'w', format='NETCDF4')
    nc_utils.write_radar4(netcdf_obj, myradar)
    netcdf_obj.close()
 rge = 40.0 * 1000.0
 ng = rge / gates
 # Perform Linear programming phase processing to get the conditionally
 # fitted phase profile and sobel filtered KDP field
 reproc_phase, sob_kdp = phase_proc.phase_proc(
     myradar, params['reflectivity_offset'],
     sys_phase=params['sys_phase'],
     overide_sys_phase=params['overide_sys_phase'], debug=True, nowrap=ng)
 # Append these back into the radar object
 myradar.fields.update({'recalculated_diff_phase': sob_kdp,
                        'proc_dp_phase_shift': reproc_phase})
 # attenuation correction, this time we just use a straight procedural
 # method, this is a variant of the ZPHI technique and returns both the
 # specific attenuation (dBZ/km) and corrected Z (dBZ)
 # Note: no ZDR correction as of yet...
 spec_at, cor_z = attenuation.calculate_attenuation(
     myradar, params['reflectivity_offset'], debug=True, ncp_min=0.4)
 # Append these new fields to the radar object
 myradar.fields.update({'specific_attenuation': spec_at})
 myradar.fields.update({'corrected_reflectivity_horizontal': cor_z})
 # The following lines deal with determining file name
 mydatetime = netCDF4.num2date(myradar.time['data'][0],
                               myradar.time['units'],
                               calendar=myradar.time['calendar'])
 #append a datetime object
 mydict = dt_to_dict(mydatetime)
 mydict.update({
     'scanmode': {'ppi': 'sur', 'rhi': 'rhi'}[myradar.sweep_mode[0]],
     'fac': metadata['facility']})
 ofilename = outdir + '%(scanmode)scmac%(fac)s.c0.%(year)04d%(month)02d%(day)02d.%(hour)02d%(minute)02d%(second)02d.nc' % mydict
 # Open a netcdf file for output
 netcdf_obj = netCDF4.Dataset(ofilename, 'w', format='NETCDF4')
Example #5
0
    rge = 10.0 * 1000.0
    ng = rge / gates
    mydatetime = netCDF4.num2date(
        myradar.time['data'][0], myradar.time['units'],
        calendar=myradar.time['calendar'])  # append a datetime object
    mydict = dt_to_dict(mydatetime)
    mydict.update({'scanmode': {'ppi': 'sur', 'rhi': 'rhi'}
                  [myradar.sweep_mode[0]], 'fac': fac})
    ofilename = outdir + '%(scanmode)scmac%(fac)s.c0.%(year)04d%(month)02d%(day)02d.%(hour)02d%(minute)02d%(second)02d.nc' % mydict
    reproc_phase, sob_kdp = phase_proc.phase_proc(myradar, offset, debug=True,
                                                  nowrap)
    myradar.fields.update({'recalculated_diff_phase': sob_kdp,
                           'proc_dp_phase_shift': reproc_phase})

    # attenuation correction
    spec_at, cor_z = attenuation.calculate_attenuation(
        myradar, offset, debug=True, a_coef=0.17)
    myradar.fields.update({'specific_attenuation': spec_at})
    myradar.fields.update({'corrected_reflectivity_horizontal': cor_z})
    R = 51.3 * (myradar.fields['specific_attenuation']['data']) ** 0.81
    rainrate = copy.deepcopy(myradar.fields['diff_phase'])
    rainrate['data'] = R
    rainrate['valid_min'] = 0.0
    rainrate['valid_max'] = 400.0
    rainrate['standard_name'] = 'rainfall_rate'
    rainrate['long_name'] = 'rainfall_rate'
    rainrate['least_significant_digit'] = 1
    rainrate['units'] = 'mm/hr'
    myradar.fields.update({'rain_rate_A': rainrate})
    netcdf_obj = netCDF4.Dataset(ofilename, 'w', format='NETCDF4')
    nc_utils.write_radar4(netcdf_obj, myradar)
    netcdf_obj.close()
Example #6
0
 # append a datetime object
 mydatetime = netCDF4.num2date(myradar.time['data'][0],
                               myradar.time['units'],
                               calendar=myradar.time['calendar'])
 mydict = dt_to_dict(mydatetime)
 mydict.update({'scanmode': {'ppi': 'sur', 'rhi': 'rhi'}
               [myradar.sweep_mode[0]], 'fac': metadata['facility'],
               'name':metadata['instrument_name']})
 ofilename = outdir + '%(name)s%(scanmode)scmac%(fac)s.c0.%(year)04d%(month)02d%(day)02d.%(hour)02d%(minute)02d%(second)02d.nc' % mydict
 reproc_phase, sob_kdp = phase_proc.phase_proc_lp(
     myradar, params['reflectivity_offset'], sys_phase=params['sys_phase'],
     overide_sys_phase=params['overide_sys_phase'], debug=True, nowrap=ng)
 myradar.fields.update({'recalculated_diff_phase': sob_kdp,
                      'proc_dp_phase_shift': reproc_phase})
 #attenuation correction
 spec_at, cor_z = attenuation.calculate_attenuation(
    myradar, params['reflectivity_offset'], debug=True, a_coef=0.17)
 myradar.fields.update({'specific_attenuation': spec_at})
 myradar.fields.update({'corrected_reflectivity_horizontal': cor_z})
 R = 51.3 * (myradar.fields['specific_attenuation']['data']) ** 0.81
 rainrate = copy.deepcopy(myradar.fields['diff_phase'])
 rainrate['data'] = R
 rainrate['valid_min'] = 0.0
 rainrate['valid_max'] = 400.0
 rainrate['standard_name'] = 'rainfall_rate'
 rainrate['long_name'] = 'rainfall_rate'
 rainrate['least_significant_digit'] = 1
 rainrate['units'] = 'mm/hr'
 myradar.fields.update({'rain_rate_A': rainrate})
 mask=myradar.fields['corrected_reflectivity_horizontal']['data'].mask
 myradar.fields['rain_rate_A']['data'][np.where(mask)]=0.0
 myradar.fields['rain_rate_A'].update({'comment':'Rain rate calculated from specific_attenuation, R=51.3*specific_attenuation**0.81, note R=0.0 where norm coherent power < 0.4 or rhohv < 0.8'})
Example #7
0
    outdir = sys.argv[2]

    # open the radar file
    my_mdv_object = py_mdv.read_mdv(filename, debug=True)
    myradar = radar.Radar(my_mdv_object)

    gates = myradar.range['data'][1] - myradar.range['data'][0]
    rge = 10.0 * 1000.0
    ng = rge / gates
    #append a datetime object
    mydatetime = netCDF4.num2date(myradar.time['data'][0],
                                  myradar.time['units'],
                                  calendar=myradar.time['calendar'])
    mydict = dt_to_dict(mydatetime)
    mydict.update({'scanmode': {'ppi': 'sur', 'rhi': 'rhi'}
                   [myradar.sweep_mode[0]]})

    ofilename = outdir + '%(scanmode)scmacI7.c0.%(year)04d%(month)02d%(day)02d.%(hour)02d%(minute)02d%(second)02d.nc' % mydict

    reproc_phase, sob_kdp = phase_proc.phase_proc(myradar, -2.0, debug=True, 
                                                  nowrap=ng)
    myradar.fields.update({'recalculated_diff_phase': sob_kdp,
                           'proc_dp_phase_shift': reproc_phase})
    spec_at, cor_z = attenuation.calculate_attenuation(
        myradar, -2.0, debug=True)
    myradar.fields.update({'specific_attenuation': spec_at})
    myradar.fields.update({'corrected_reflectivity_horizontal': cor_z})
    netcdf_obj = netCDF4.Dataset(ofilename, 'w', format='NETCDF4')
    nc_utils.write_radar4(netcdf_obj, myradar)
    netcdf_obj.close()