def retrieval(observations): #~ wrapretrieval.wrapretrieval( #~ observations['cfg_filename'], #~ observations['additional_output_filename'], #~ observations['measurements_filename'], #~ ) #alternative mydir = os.path.dirname(__file__) cmd = mydir + "/wrapretrieval.o '{}' '{}' '{}'".format( observations['cfg_filename'], observations['additional_output_filename'], observations['measurements_filename']) print cmd os.system(cmd) #alternative with debugging #~ mydir = os.path.dirname(__file__) #~ #cmd = "valgrind --leak-check=yes "+mydir+"/wrapretrieval.o '{}' '{}' '{}'".format(observations['cfg_filename'], observations['additional_output_filename'], observations['measurements_filename']) #~ cmd = "valgrind "+mydir+"/wrapretrieval.o '{}' '{}' '{}'".format(observations['cfg_filename'], observations['additional_output_filename'], observations['measurements_filename']) #~ print cmd #~ os.system(cmd) ao_dct = ao.ao_dct(observations['additional_output_filename']) return ao_dct
def retrieval(observations): wrapretrieval.wrapretrieval( observations['cfg_filename'], observations['additional_output_filename'], observations['measurements_filename'], ) ao = additional_output.ao_dct(observations['additional_output_filename']) return ao
def plot_spectrum(ao_name, fname, opts = {}): fontsize0 = 20 mpl.rc('xtick', labelsize=fontsize0) mpl.rc('ytick', labelsize=fontsize0) ao = additional_output.ao_dct(ao_name) recalc = {} recalc['spectrum_velocity_center'] = np.repeat( [np.linspace(-15.,15., 500)], len(ao['azel_r1_m']), axis=0) d = recalc['spectrum_velocity_center'][0,1] - recalc['spectrum_velocity_center'][0,0] recalc['spectrum_velocity_ubound'] = recalc['spectrum_velocity_center'] + d/2. recalc['spectrum_velocity_lbound'] = recalc['spectrum_velocity_center'] - d/2. recalc = calc_hr_spectrum.ao_to_recalc(ao, recalc) calc_hr_spectrum.smooth_spectra(recalc) for plot in [ 'Doppler_spectrum_dBZ_hh', 'Doppler_spectrum_dBZ_hv', 'Doppler_spectrum_dBZ_vh', 'Doppler_spectrum_dBZ_vv', 'specific_dBZdr', 'specific_dBLdr', 'specific_rho_co', 'specific_rho_cxh', 'specific_rho_cxv', ]: if plot in recalc.keys(): fig = plt.figure(figsize=(5,5)) ax=plt.subplot(111) if ('title' in opts.keys()): ax.set_title(opts['title']) z = recalc[plot][0] z = np.where(z == calc_hr_spectrum._FillValueminINF, np.nan, z) ax.plot(recalc['spectrum_velocity_center'][0,:], z, linewidth=2) ax.set_xlabel("Doppler velocity [m/s]") ax.set_ylabel('[dB]') ax.set_xbound(-5., 5.) plt.tight_layout() plt.savefig(fname + '_'+plot+'.png') plt.close(fig)
def calc_radar_meas(observations): nrad = len(observations['azel_r1_m']) txtfile = "" for variable in [ 'enu_radar_location_x', 'enu_radar_location_y', 'enu_radar_location_z', 'enu_radar_time_t', 'azel_r1_m', 'azel_r2_m', 'azel_alpha_rad', 'azel_gamma_rad', 'beam_FWHM0_rad', 'beam_FWHM1_rad', 'dt', ]: if variable not in observations.keys(): print "variable '{0}' was not found in dictionary!".format( variable) exit(0) txtfile += "!! {0} ".format(variable) txtfile += "{0} {1} ".format(1, nrad) for i in range(nrad): txtfile += "{0:.5e} ".format(observations[variable][i]) txtfile += "\n" f = open('./tmpmeasurements.z', 'w') f.write(txtfile) f.close() wrapradarfilter.wrapradarfilter( observations['cfg_filename'], observations['additional_output_filename'], './tmpmeasurements.z', ) #alternative #mydir = os.path.dirname(__file__) #cmd = mydir+"/radarfilter.o '{}' '{}' '{}'".format(observations['cfg_filename'], observations['additional_output_filename'], './tmpmeasurements.z',) #os.system(cmd) #alternative with debugging #mydir = os.path.dirname(__file__) #cmd = "valgrind --leak-check=yes "+mydir+"/radarfilter.o '{}' '{}' '{}'".format(observations['cfg_filename'], observations['additional_output_filename'], './tmpmeasurements.z',) #print cmd #os.system(cmd) os.remove('./tmpmeasurements.z') ao = additional_output.ao_dct(observations['additional_output_filename']) return ao
def plot_spectrum(ao_name, fname, opts={}): fontsize0 = 20 mpl.rc('xtick', labelsize=fontsize0) mpl.rc('ytick', labelsize=fontsize0) ao = additional_output.ao_dct(ao_name) recalc = {} recalc['spectrum_velocity_center'] = np.repeat( [np.linspace(-15., 15., 500)], len(ao['azel_r1_m']), axis=0) d = recalc['spectrum_velocity_center'][ 0, 1] - recalc['spectrum_velocity_center'][0, 0] recalc['spectrum_velocity_ubound'] = recalc[ 'spectrum_velocity_center'] + d / 2. recalc['spectrum_velocity_lbound'] = recalc[ 'spectrum_velocity_center'] - d / 2. recalc = calc_hr_spectrum.ao_to_recalc(ao, recalc) calc_hr_spectrum.smooth_spectra(recalc) for plot in [ 'Doppler_spectrum_dBZ_hh', 'Doppler_spectrum_dBZ_hv', 'Doppler_spectrum_dBZ_vh', 'Doppler_spectrum_dBZ_vv', 'specific_dBZdr', 'specific_dBLdr', 'specific_rho_co', 'specific_rho_cxh', 'specific_rho_cxv', ]: if plot in recalc.keys(): fig = plt.figure(figsize=(5, 5)) ax = plt.subplot(111) if ('title' in opts.keys()): ax.set_title(opts['title']) z = recalc[plot][0] z = np.where(z == calc_hr_spectrum._FillValueminINF, np.nan, z) ax.plot(recalc['spectrum_velocity_center'][0, :], z, linewidth=2) ax.set_xlabel("Doppler velocity [m/s]") ax.set_ylabel('[dB]') ax.set_xbound(-5., 5.) plt.tight_layout() plt.savefig(fname + '_' + plot + '.png') plt.close(fig)
def calc_radar_meas(observations): nrad = len(observations["azel_r1_m"]) txtfile = "" for variable in [ "enu_radar_location_x", "enu_radar_location_y", "enu_radar_location_z", "enu_radar_time_t", "azel_r1_m", "azel_r2_m", "azel_alpha_rad", "azel_gamma_rad", "beam_FWHM0_rad", "beam_FWHM1_rad", "dt", ]: if variable not in observations.keys(): print "variable '{0}' was not found in dictionary!".format(variable) exit(0) txtfile += "!! {0} ".format(variable) txtfile += "{0} {1} ".format(1, nrad) for i in range(nrad): txtfile += "{0:.5e} ".format(observations[variable][i]) txtfile += "\n" f = open("./tmpmeasurements.z", "w") f.write(txtfile) f.close() wrapradarfilter.wrapradarfilter( observations["cfg_filename"], observations["additional_output_filename"], "./tmpmeasurements.z" ) # alternative # mydir = os.path.dirname(__file__) # cmd = mydir+"/radarfilter.o '{}' '{}' '{}'".format(observations['cfg_filename'], observations['additional_output_filename'], './tmpmeasurements.z',) # os.system(cmd) # alternative with debugging # mydir = os.path.dirname(__file__) # cmd = "valgrind --leak-check=yes "+mydir+"/radarfilter.o '{}' '{}' '{}'".format(observations['cfg_filename'], observations['additional_output_filename'], './tmpmeasurements.z',) # print cmd # os.system(cmd) os.remove("./tmpmeasurements.z") ao = additional_output.ao_dct(observations["additional_output_filename"]) return ao
def plot_scanning(ao_name, fname, input_opts={}): default_opts = { 'xmin': -15., 'xmax': 15., 'ymin': -15., 'ymax': 15., 'tmin': -1.e100, 'tmax': 1.e100, 'dBZmin': -40., 'dBZmax': 40., 'Doppler_velocity_ms_min': -15., 'Doppler_velocity_ms_max': 15., } opts = deepcopy(default_opts) opts.update(input_opts) fontsize0 = 12 mpl.rc('xtick', labelsize=fontsize0) mpl.rc('ytick', labelsize=fontsize0) ao = additional_output.ao_dct(ao_name) okindices = np.arange(len( ao['enu_radar_time_t']))[(opts['tmin'] < ao['enu_radar_time_t']) & (ao['enu_radar_time_t'] < opts['tmax'])] for plot in [ 'dBZ_hh', 'Doppler_velocity_hh_ms', 'Doppler_spectral_width_hh_ms', ]: if plot in ao.keys(): fig = plt.figure(figsize=(4, 4)) ax = plt.subplot(111) if plot == 'dBZ_hh': plt_cmap = plt.cm.get_cmap("jet", 100) z = np.array(ao['dBZ_hh'][okindices]) plt.title(r"dBZ", fontsize=fontsize0) #vmin, vmax = z.min(), z.max() vmin, vmax = opts['dBZmin'], opts['dBZmax'] if plot == 'Doppler_velocity_hh_ms': plt_cmap = plt.cm.RdBu_r z = np.array(ao['Doppler_velocity_hh_ms'][okindices]) plt.title(r"Doppler mean velocity [m/s]", fontsize=fontsize0) tmp = np.max(np.abs(((1, z.min(), z.max())))) #vmin, vmax = -tmp, tmp vmin, vmax = opts['Doppler_velocity_ms_min'], opts[ 'Doppler_velocity_ms_max'] if plot == 'Doppler_spectral_width_hh_ms': plt_cmap = plt.cm.get_cmap("jet", 100) z = np.array( np.sqrt(ao['Doppler_spectral_width_hh_ms'][okindices]**2.)) plt.title(r"spectral width [m/s]", fontsize=fontsize0) vmin, vmax = 0., np.max((1., z.max())) #vmin, vmax = 0., 5. #plt_cmap.set_over('Purple') plt_cmap.set_over('Magenta') plt_cmap.set_under('Pink') plt_cmap.set_bad('1.') if ('title' in opts.keys()): ax.set_title(opts['title']) x = np.array(ao['center_x'][okindices]) * 1.e-3 y = np.array(ao['center_y'][okindices]) * 1.e-3 ang = np.rad2deg(np.arctan2(x, y)) % 360. # Set up a regular grid of interpolation points n = 50 dx = (opts['xmax'] - opts['xmin']) / n xedges = np.linspace(opts['xmin'] - dx / 2., opts['xmax'] + dx / 2., n + 1) dy = (opts['ymax'] - opts['ymin']) / n yedges = np.linspace(opts['ymin'] - dy / 2., opts['ymax'] + dy / 2., n + 1) xi, yi = np.linspace(opts['xmin'], opts['xmax'], n), np.linspace(opts['ymin'], opts['ymax'], n) xi, yi = np.meshgrid(xi, yi) plt.xlabel('x [km]', fontsize=fontsize0) plt.ylabel('y [km]', fontsize=fontsize0) zi = scipy.interpolate.griddata((x, y), z, (xi, yi), method='linear', fill_value=np.nan) if 'retrieved_u' in ao.keys(): zi_u = scipy.interpolate.griddata((x, y), ao['retrieved_u'][okindices], (xi, yi), method='linear', fill_value=np.nan) zi_v = scipy.interpolate.griddata((x, y), ao['retrieved_v'][okindices], (xi, yi), method='linear', fill_value=np.nan) H, xedges, yedges = np.histogram2d(y, x, bins=(xedges, yedges)) okdata = H > 0 #remove badly interpolated points #~ ri = np.sqrt((xi ** 2.) + (yi ** 2.)) #~ angi = np.rad2deg(np.arctan2(xi, yi)) % 360. #~ mydang = 360./ n #~ okdata = np.zeros(ri.shape) #~ fct = 1.5 #~ for myang in np.arange(0, 360., mydang): #~ sel = ((myang < ang) & (ang <= (myang + fct * mydang))) #~ if np.sum(sel) > 1: #~ myrmin = np.min(1.e-3 * ao['azel_r1_m'][sel]) #~ myrmax = np.max(1.e-3 * ao['azel_r2_m'][sel]) #~ sel2 = (((myang < angi) & (angi <= (myang + fct * mydang))) & #~ ((myrmin < ri) & (ri <= myrmax))) #~ okdata = np.where(sel2 #~ , 1., okdata) zi = np.where(okdata, zi, np.nan) if 'retrieved_u' in ao.keys(): zi_u = np.where(okdata, zi_u, np.nan) zi_v = np.where(okdata, zi_v, np.nan) iskip = 5 Q = ax.quiver( np.ndarray.flatten(xi[::iskip, ::iskip]), np.ndarray.flatten(yi[::iskip, ::iskip]), np.ndarray.flatten(zi_u[::iskip, ::iskip]), np.ndarray.flatten(zi_v[::iskip, ::iskip]), ) plt.imshow(zi, origin='lower', extent=[ opts['xmin'], opts['xmax'], opts['ymin'], opts['ymax'] ], cmap=plt_cmap, interpolation='none', vmin=vmin, vmax=vmax) plt.colorbar(shrink=0.6, extend='both') plt.tight_layout() plt.savefig(fname + "_" + plot + ".png") plt.close(fig)
observations['enu_radar_time_t'] = np.zeros(observations['n']) observations['azel_r2_m'] = observations['azel_r1_m'] + observations['dr'] observations['azel_alpha_rad'] = np.zeros( observations['n']) + np.deg2rad(alpha) observations['azel_gamma_rad'] = np.zeros( observations['n']) + np.deg2rad(elevation_angle) observations['beam_FWHM0_rad'] = np.zeros( observations['n']) + myplotdct['beam_FWHM0_rad'] observations['beam_FWHM1_rad'] = np.zeros( observations['n']) + myplotdct['beam_FWHM1_rad'] observations['dt'] = np.ones(observations['n']) ao = radarfilter.calc_radar_meas(observations) else: ao = additional_output.ao_dct(observations['additional_output_filename']) if True: #~ #do a recalculation with nicer resolution import scipy.interpolate from matplotlib.mlab import griddata import matplotlib.pyplot as plt import matplotlib fontsize0 = 20 matplotlib.rc('xtick', labelsize=fontsize0) matplotlib.rc('ytick', labelsize=fontsize0) recalc = ao_to_recalc(ao)
def plot_spectogram(ao_name, fname, opts={}): fontsize0 = 20 mpl.rc('xtick', labelsize=fontsize0) mpl.rc('ytick', labelsize=fontsize0) ao = additional_output.ao_dct(ao_name) recalc = {} recalc['spectrum_velocity_center'] = np.repeat( [np.linspace(-15., 15., 1000)], len(ao['azel_r1_m']), axis=0) recalc = calc_hr_spectrum.ao_to_recalc(ao, recalc) for plot in [ 'Doppler_spectrum_dBZ_hh', 'Doppler_spectrum_dBZ_hv', 'Doppler_spectrum_dBZ_vh', 'Doppler_spectrum_dBZ_vv', 'specific_dBZdr', 'specific_dBLdr', 'specific_rho_co', 'specific_rho_cxh', 'specific_rho_cxv', ]: if plot in recalc.keys(): fig = plt.figure(figsize=(5, 5)) ax = plt.subplot(111) #plt_cmap = plt.cm.jet plt_cmap = plt.cm.get_cmap("jet", 100) plt_cmap.set_over('Black') plt_cmap.set_under('LightGray') plt_cmap.set_bad('0.') if ('title' in opts.keys()): ax.set_title(opts['title']) z = recalc[plot] z = np.where(z == calc_hr_spectrum._FillValueminINF, np.nan, z) vmin = np.nanmin(z) vmax = np.nanmax(z) if plot in opts.keys(): if 'vmin' in opts[plot].keys(): vmin = opts[plot]['vmin'] #z = np.where(z < vmin, np.nan, z) if 'vmax' in opts[plot].keys(): vmax = opts[plot]['vmax'] #z = np.where(z > vmax, np.nan, z) bounds = np.linspace(vmin, vmax, 101) #norm = mpl.colors.BoundaryNorm(bounds, plt_cmap.N) #~ if plot in [ #~ 'Doppler_spectrum_dBZ_hh', #~ 'Doppler_spectrum_dBZ_hv', #~ 'Doppler_spectrum_dBZ_vh', #~ 'Doppler_spectrum_dBZ_vv', #~ ]: #~ for i in range(z.shape[0]): #~ z[i,:] = np.where(z[i,:] < (np.nanmax(z[i,:]) - 20.), np.nan, z[i,:]) nspectrum = z.shape[1] ranges = np.repeat(ao['azel_r1_m'], nspectrum).reshape(z.shape) heights = np.repeat(ao['center_z'], nspectrum).reshape(z.shape) CF = ax.contourf(recalc['spectrum_velocity_center'], 1.e-3 * heights, z, bounds, cmap=plt_cmap, vmin=vmin, vmax=vmax, extend='both') ax.set_xbound(-5., 5.) ax.set_xlabel("Doppler velocity [m/s]") ax.set_ylabel("height [km]") cb = plt.colorbar( CF, shrink=0.7, #ticks=bounds, spacing='uniform', ) #cb.set_clim(vmin-10.,vmax+10.) plt.tight_layout() plt.savefig(fname + '_' + plot + '.png') plt.close(fig)
def plot_spectogram(ao_name, fname, opts = {}): fontsize0 = 20 mpl.rc('xtick', labelsize=fontsize0) mpl.rc('ytick', labelsize=fontsize0) ao = additional_output.ao_dct(ao_name) recalc = {} recalc['spectrum_velocity_center'] = np.repeat( [np.linspace(-15.,15., 1000)], len(ao['azel_r1_m']), axis=0) recalc = calc_hr_spectrum.ao_to_recalc(ao, recalc) for plot in [ 'Doppler_spectrum_dBZ_hh', 'Doppler_spectrum_dBZ_hv', 'Doppler_spectrum_dBZ_vh', 'Doppler_spectrum_dBZ_vv', 'specific_dBZdr', 'specific_dBLdr', 'specific_rho_co', 'specific_rho_cxh', 'specific_rho_cxv', ]: if plot in recalc.keys(): fig = plt.figure(figsize=(5,5)) ax=plt.subplot(111) #plt_cmap = plt.cm.jet plt_cmap = plt.cm.get_cmap("jet", 100) plt_cmap.set_over('Black') plt_cmap.set_under('LightGray') plt_cmap.set_bad('0.') if ('title' in opts.keys()): ax.set_title(opts['title']) z = recalc[plot] z = np.where(z == calc_hr_spectrum._FillValueminINF, np.nan, z) vmin = np.nanmin(z); vmax = np.nanmax(z) if plot in opts.keys(): if 'vmin' in opts[plot].keys(): vmin = opts[plot]['vmin'] #z = np.where(z < vmin, np.nan, z) if 'vmax' in opts[plot].keys(): vmax = opts[plot]['vmax'] #z = np.where(z > vmax, np.nan, z) bounds = np.linspace(vmin, vmax,101) #norm = mpl.colors.BoundaryNorm(bounds, plt_cmap.N) #~ if plot in [ #~ 'Doppler_spectrum_dBZ_hh', #~ 'Doppler_spectrum_dBZ_hv', #~ 'Doppler_spectrum_dBZ_vh', #~ 'Doppler_spectrum_dBZ_vv', #~ ]: #~ for i in range(z.shape[0]): #~ z[i,:] = np.where(z[i,:] < (np.nanmax(z[i,:]) - 20.), np.nan, z[i,:]) nspectrum = z.shape[1] ranges = np.repeat(ao['azel_r1_m'] , nspectrum).reshape( z.shape) heights = np.repeat(ao['center_z'] , nspectrum).reshape( z.shape) CF = ax.contourf( recalc['spectrum_velocity_center'], 1.e-3 * heights, z, bounds, cmap=plt_cmap, vmin=vmin, vmax=vmax, extend='both') ax.set_xbound(-5., 5.) ax.set_xlabel("Doppler velocity [m/s]") ax.set_ylabel("height [km]") cb = plt.colorbar( CF, shrink=0.7, #ticks=bounds, spacing='uniform', ) #cb.set_clim(vmin-10.,vmax+10.) plt.tight_layout() plt.savefig(fname + '_'+plot+'.png') plt.close(fig)
observations["cfg_filename"] = "../../../input_files/general/standard_output.cfg;" observations["cfg_filename"] += "../../../input_files/general/water_refractive_index_segelstein.cfg;" observations["cfg_filename"] += "../../../input_files/general/white1999_integral.cfg;" observations["cfg_filename"] += "../../../input_files/general/atmosphere/US1976.cfg;" observations["cfg_filename"] += "../../../input_files/general/instruments/tara.cfg;" observations["cfg_filename"] += "../../../input_files/retrieval/radarfilter/standard.cfg;" # observations['cfg_filename'] += "../../../input_files/retrieval/scatterers/rain.cfg;" observations["cfg_filename"] += "../../../input_files/retrieval/algorithm/windvectors_lwm.cfg;" observations["additional_output_filename"] = additional_output_filename observations["measurements_filename"] = measurements_filename ao = retrieval.retrieval(observations) else: ao = additional_output.ao_dct(additional_output_filename) # from mpl_toolkits.basemap import Basemap, cm # from matplotlib import rc # rc('text',usetex=True) fontsize0 = 16 matplotlib.rc("xtick", labelsize=fontsize0) matplotlib.rc("ytick", labelsize=fontsize0) for plot in ["dBZ_hh", "Doppler_velocity_hh_ms", "Doppler_spectral_width_hh_ms"]: fig = plt.figure(figsize=(8, 8)) ax = fig.add_subplot(1, 1, 1)
def calc_circulation_divergence(ao_name, input_opts={}): default_opts = { 'rangeintervals': 20, 'rmin_km': 0., 'rmax_km': 15., } opts = deepcopy(default_opts) opts.update(input_opts) ao = additional_output.ao_dct(ao_name) res = {} if ('retrieved_u' in ao.keys()) and ('retrieved_v' in ao.keys()): lst_ranges = np.linspace(opts['rmin_km'] * 1.e3, opts['rmax_km'] * 1.e3, opts['rangeintervals'] + 1) ao_range = (ao['azel_r1_m'] + ao['azel_r2_m']) / 2. res['range_min_km'] = lst_ranges[:-1] * 1.e-3 res['range_max_km'] = lst_ranges[1:] * 1.e-3 res['range_km'] = (res['range_min_km'] + res['range_max_km']) / 2. res['circulation_inproduct'] = np.zeros(res['range_km'].shape) res['divergence_inproduct'] = np.zeros(res['range_km'].shape) #walk through range intervals for i_int in range(opts['rangeintervals']): range0 = lst_ranges[i_int] range1 = lst_ranges[i_int + 1] sel = (range0 < ao_range) & (ao_range < range1) #obtain results thisdata = {} thisdata['range'] = np.compress(sel, ao_range) thisdata['x'] = np.compress(sel, ao['center_x']) thisdata['y'] = np.compress(sel, ao['center_y']) thisdata['azel_alpha_rad'] = np.compress(sel, ao['azel_alpha_rad']) thisdata['u'] = np.compress(sel, ao['retrieved_u']) thisdata['v'] = np.compress(sel, ao['retrieved_v']) thisdata['norm_x'] = thisdata['x'] / np.sqrt((thisdata['x']**2.) + (thisdata['y']**2.)) thisdata['norm_y'] = thisdata['y'] / np.sqrt((thisdata['x']**2.) + (thisdata['y']**2.)) #calculate inproducts thisdata['circulation_inproduct'] = ( thisdata['u'] * thisdata['norm_x']) + (thisdata['v'] * thisdata['norm_y']) thisdata['divergence_inproduct'] = ( thisdata['u'] * thisdata['norm_y']) + (thisdata['v'] * thisdata['norm_x']) #delete nans thisdata['circulation_inproduct'] = np.compress( np.isnan(thisdata['circulation_inproduct']) == False, thisdata['circulation_inproduct']) thisdata['divergence_inproduct'] = np.compress( np.isnan(thisdata['divergence_inproduct']) == False, thisdata['divergence_inproduct']) #calculate weighting function n_ang = 100 lst_ang = np.linspace(0, 2 * np.pi, n_ang + 1) thisdata['weights'] = np.zeros(thisdata['range'].shape) for i_ang in range(n_ang): myindicies = np.argmin( (lst_ang[i_ang] < thisdata['azel_alpha_rad']) & (thisdata['azel_alpha_rad'] < lst_ang[i_ang + 1])) thisdata['weights'][myindicies] = np.sum(myindicies) thisdata['weights'] = thisdata['weights'] / np.sum( thisdata['weights']) res['circulation_inproduct'][i_int] = np.sum( thisdata['weights'] * thisdata['circulation_inproduct']) res['divergence_inproduct'][i_int] = np.sum( thisdata['weights'] * thisdata['divergence_inproduct']) del thisdata return res
#if not os.path.exists(additional_output_filename): if True: observations = {} #general configuration files observations['cfg_filename'] = "../../../input_files/general/standard_output.cfg;" observations['cfg_filename'] += "../../../input_files/general/water_refractive_index_segelstein.cfg;" observations['cfg_filename'] += "../../../input_files/general/white1999_integral.cfg;" observations['cfg_filename'] += "../../../input_files/general/atmosphere/US1976.cfg;" observations['cfg_filename'] += "../../../input_files/general/instruments/tara.cfg;" observations['cfg_filename'] += "../../../input_files/retrieval/algorithm/windvectors_fdvar_horizontal_hdir_solution.cfg;" observations['additional_output_filename'] = additional_output_filename observations['measurements_filename'] = measurements_filename ao = retrieval.retrieval(observations) else: ao = additional_output.ao_dct(additional_output_filename) opts = { 'Doppler_velocity_ms_min': -10., 'Doppler_velocity_ms_max': 10., } fun_plot_scanning.plot_scanning(additional_output_filename, 'fdvar_plots_scanning/scanning_'+myway+'_', opts)
elevation_angle = 0. observations['dr'] = dr observations['r1_slice'] = slice(0., 15.e3 + 1., dr * di) observations['phi_slice'] = slice(0., 2. * np.pi, 2. * np.pi / 72.) phi, r1 = np.mgrid[observations['phi_slice'], observations['r1_slice']] observations['azel_r1_m'] = deepcopy(np.ndarray.flatten(r1)) observations['azel_alpha_rad'] = deepcopy(np.ndarray.flatten(phi)) del r1, phi observations['n'] = len(observations['azel_r1_m']) observations['enu_radar_location_x'] = np.zeros(observations['n']) observations['enu_radar_location_y'] = np.zeros(observations['n']) observations['enu_radar_location_z'] = np.zeros(observations['n']) + 500. observations['enu_radar_time_t'] = np.zeros(observations['n']) observations['azel_r2_m'] = observations['azel_r1_m'] + observations['dr'] observations['azel_gamma_rad'] = np.zeros(observations['n']) + np.deg2rad(elevation_angle) observations['beam_FWHM0_rad'] = np.zeros(observations['n']) + np.deg2rad(2.1) observations['beam_FWHM1_rad'] = np.zeros(observations['n']) + np.deg2rad(2.1) observations['dt'] = np.ones(observations['n']) ao = radarfilter.calc_radar_meas(observations) else: ao = additional_output.ao_dct(observations['additional_output_filename']) fun_plot_scanning.plot_scanning(observations['additional_output_filename'], 'scanning_plots/scanning_'+myway+'_')
def calc_curl_and_divergence(ao_name, input_opts={}): default_opts = { 'rangeintervals': 20, 'rmin_km': 0., 'rmax_km': 15., } opts = deepcopy(default_opts) opts.update(input_opts) ao = additional_output.ao_dct(ao_name) res = {} if ('retrieved_u' in ao.keys()) and ('retrieved_v' in ao.keys()): lst_ranges_m = np.linspace(opts['rmin_km'] * 1.e3, opts['rmax_km'] * 1.e3, opts['rangeintervals'] + 1) ao_range_m = (ao['azel_r1_m'] + ao['azel_r2_m']) / 2. res['range_min_km'] = lst_ranges_m[:-1] * 1.e-3 res['range_max_km'] = lst_ranges_m[1:] * 1.e-3 res['range_km'] = (res['range_min_km'] + res['range_max_km']) / 2. res['curl'] = np.zeros(res['range_km'].shape) res['divergence'] = np.zeros(res['range_km'].shape) #walk through range intervals for i_int in range(opts['rangeintervals']): range0_m = lst_ranges_m[i_int] range1_m = lst_ranges_m[i_int + 1] sel_range = (range0_m < ao_range_m) & (ao_range_m < range1_m) sel_nonans = (np.isnan(ao['retrieved_u']) == False) & (np.isnan( ao['retrieved_v']) == False) n_ang = 100 lst_ang = np.linspace(0, 2 * np.pi, n_ang + 1, True) for i_ang in range(n_ang): ang0 = lst_ang[i_ang] ang1 = lst_ang[i_ang + 1] myindices = (sel_range & sel_nonans & (ang0 < ao['azel_alpha_rad']) & (ao['azel_alpha_rad'] < ang1)) avg_u = np.average(ao['retrieved_u'][myindices]) avg_v = np.average(ao['retrieved_v'][myindices]) if np.isnan(avg_u) or np.isnan(avg_v): myindices = (sel_range & sel_nonans) avg_u = np.average(ao['retrieved_u'][myindices]) avg_v = np.average(ao['retrieved_v'][myindices]) if np.isnan(avg_u) or np.isnan(avg_v): myindices = (sel_nonans) avg_u = np.average(ao['retrieved_u'][myindices]) avg_v = np.average(ao['retrieved_v'][myindices]) curl_tmp_val = (avg_u * (np.cos(ang1) - np.cos(ang0))) - ( avg_v * (np.sin(ang1) - np.sin(ang0))) div_tmp_val = (-1. * avg_u * (np.sin(ang1) - np.sin(ang0))) + ( avg_v * (np.cos(ang1) - np.cos(ang0))) res['curl'][i_int] += curl_tmp_val res['divergence'][i_int] += div_tmp_val return res