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'))
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')
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()
# 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'})
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()