Beispiel #1
0
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
Beispiel #3
0
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)
Beispiel #5
0
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)
Beispiel #9
0
    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)
Beispiel #13
0
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+'_')


Beispiel #16
0
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