Ejemplo n.º 1
0
def get_data(usr_case=None):

    file_met, usr_case = get_files(usr_case)
    index_field, name_field = get_index_field(usr_case)
    dfBBY = []
    dfCZD = []
    dfFRS = []
    # period = get_request_dates(usr_case)

    for f in file_met:
        loc = f[-12:-9]
        if loc == "bby":
            #            elev = 15
            #            dfBBY.append(mf.parse_surface(
            #                f, index_field[loc], name_field, elev))
            dfBBY.append(mf.parse_surface(f))
        elif loc == "czc":
            #            elev = 462
            #            dfCZD.append(mf.parse_surface(
            #                f, index_field[loc], name_field, elev))
            dfCZD.append(mf.parse_surface(f))
        elif loc == "frs":
            #            elev = 462
            #            dfFRS.append(mf.parse_surface(
            #                f, index_field[loc], name_field, elev))
            dfFRS.append(mf.parse_surface(f))

    if len(dfBBY) > 1:
        meteoBBY = pd.concat(dfBBY)
    else:
        meteoBBY = dfBBY[0]

    if len(dfCZD) > 1:
        meteoCZD = pd.concat(dfCZD)
    else:
        meteoCZD = dfCZD[0]

    if len(dfFRS) > 1:
        meteoFRS = pd.concat(dfFRS)
    else:
        try:
            meteoFRS = dfFRS[0]
        except IndexError:
            index = meteoBBY.index
            columns = meteoBBY.columns
            meteoFRS = pd.DataFrame(index=index, columns=columns)

    return meteoBBY, meteoCZD, meteoFRS, usr_case
Ejemplo n.º 2
0
def get_data(usr_case=None):

    file_met, usr_case = get_files(usr_case)
    index_field, name_field = get_index_field(usr_case)
    dfBBY = []
    dfCZD = []
    dfFRS = []
    # period = get_request_dates(usr_case)

    for f in file_met:
        loc = f[-12:-9]
        if loc == 'bby':
#            elev = 15
#            dfBBY.append(mf.parse_surface(
#                f, index_field[loc], name_field, elev))
            dfBBY.append(mf.parse_surface(f))
        elif loc == 'czc':
#            elev = 462
#            dfCZD.append(mf.parse_surface(
#                f, index_field[loc], name_field, elev))
            dfCZD.append(mf.parse_surface(f))            
        elif loc == 'frs':
#            elev = 462
#            dfFRS.append(mf.parse_surface(
#                f, index_field[loc], name_field, elev))
            dfFRS.append(mf.parse_surface(f))

    if len(dfBBY) > 1:
        meteoBBY = pd.concat(dfBBY)
    else:
        meteoBBY = dfBBY[0]

    if len(dfCZD) > 1:
        meteoCZD = pd.concat(dfCZD)
    else:
        meteoCZD = dfCZD[0]

    if len(dfFRS) > 1:
        meteoFRS = pd.concat(dfFRS)
    else:
        try:
            meteoFRS = dfFRS[0]
        except IndexError:
            index = meteoBBY.index
            columns = meteoBBY.columns
            meteoFRS = pd.DataFrame(index=index, columns=columns)

    return meteoBBY, meteoCZD, meteoFRS, usr_case
Ejemplo n.º 3
0
def get_surface_data(usr_case, homedir=None):
    ''' set directory and input files '''
    case = 'case' + usr_case.zfill(2)
    casedir = homedir + '/' + case
    out = os.listdir(casedir)
    out.sort()
    files = []

    for f in out:
        if f[-3:] in ['met', 'urf']:
            files.append(f)

    file_met = []
    for f in files:
        if f[:3] == 'bby':
            file_met.append(casedir + '/' + f)

    df = []
    for f in file_met:
        meteo = mf.parse_surface(f)
        df.append(meteo)

    if len(df) > 1:
        surface = pd.concat(df)
    else:
        surface = df[0]

    return surface
Ejemplo n.º 4
0
def main(option):

    if option == 'compare':
        dfBBY = []
        dfCZD = []
        for f in file_met:
            loc = f[-12:-9]
            if loc == 'bby':
                dfBBY.append(mf.parse_surface(f))
            elif loc == 'czc':
                dfCZD.append(mf.parse_surface(f))

        if len(dfBBY) > 1:
            meteoBBY = pd.concat(dfBBY)
        else:
            meteoBBY = dfBBY[0]

        if len(dfCZD) > 1:
            meteoCZD = pd.concat(dfCZD)
        else:
            meteoCZD = dfCZD[0]

        make_compare(BBY=meteoBBY, CZD=meteoCZD)

    else:

        df = []
        for f in file_met:
            # df.append(mf.parse_surface(f,index_field[usr_loc],name_field,elev[usr_loc]))
            df.append(mf.parse_surface(f))

        if len(df) > 1:
            meteo = pd.concat(df)
        else:
            meteo = df[0]

        make_meteo(meteo)
        make_thermo(meteo)

    plt.show()
Ejemplo n.º 5
0
def get_surf(f=None):
    surf = mf.parse_surface(f)
    sucomp = -surf.wspd * np.sin(np.radians(surf.wdir))
    svcomp = -surf.wspd * np.cos(np.radians(surf.wdir))
    surf['U'] = sucomp
    surf['V'] = svcomp
    surf.drop(surf.columns[[0, 1, 2, 5, 6, 7, 8, 9, 10]], axis=1, inplace=True)
    g = pd.TimeGrouper('10T')
    surfU = surf.U.groupby(g).mean()
    surfV = surf.V.groupby(g).mean()
    surf10 = pd.DataFrame(data={'U': surfU, 'V': surfV})

    return surf10
def get_surf(f=None):
    surf = mf.parse_surface(f)
    sucomp = -surf.wspd * np.sin(np.radians(surf.wdir))
    svcomp = -surf.wspd * np.cos(np.radians(surf.wdir))
    surf['U'] = sucomp
    surf['V'] = svcomp
    surf.drop(surf.columns[[0, 1, 2, 5, 6, 7, 8, 9, 10]], axis=1, inplace=True)
    g = pd.TimeGrouper('10T')
    surfU = surf.U.groupby(g).mean()
    surfV = surf.V.groupby(g).mean()
    surf10 = pd.DataFrame(data={'U': surfU, 'V': surfV})

    return surf10
Ejemplo n.º 7
0
def get_pressure(case=None, homedir=None):
    from glob import glob

    fpath = homedir + '/SURFACE/case{}/bby*'
    surf_files = glob(fpath.format(str(case).zfill(2)))
    surf_files.sort()
    df_list = []
    for f in surf_files:
        df_list.append(mf.parse_surface(f))

    if len(df_list) > 1:
        df = pd.concat(df_list)
    else:
        df = df_list[0]

    g = pd.TimeGrouper('60T')
    dfg = df['press'].groupby(g).mean()
    return dfg
rcParams['mathtext.default'] = 'sf'


def cosd(array):
    return np.cos(np.radians(array))


homedir = '/localdata'
topdf = False

case = range(13, 14)
res = 'coarse'
o = 'case{}_total_wind_{}.pdf'

surf_file = '/Users/raulvalenzuela/Data/SURFACE/case13/czc04047.met'
czd = mf.parse_surface(surf_file)

surf_file = '/Users/raulvalenzuela/Data/SURFACE/case13/bby04047.met'
bby = mf.parse_surface(surf_file)

czdh = czd.preciph[~czd.preciph.isnull()]
bbyh = bby.preciph[~bby.preciph.isnull()]
''' creates plot with seaborn style '''
# with sns.axes_style("white"):
#     sns.set_style('ticks',
#               {'xtick.direction': u'in',
#                'ytick.direction': u'in'}
#               )

scale = 1.3
plt.figure(figsize=(8 * scale, 6 * scale))
Ejemplo n.º 9
0
    " first index is mesowest file, second index is \
    BBY (1 or more files) "

    f = get_filenames(case, homedir)

    " parse mesowest data "
    meso = mf.parse_mesowest_excel(f[0])
    t = get_times(case)
    mpress = meso.loc[t[0]:t[1]]['PMSL'].values
    mesoidx = meso.loc[t[0]:t[1]].index

    " parse surface BBY data "
    if len(f[1]) > 1:
        '  more than one day of obs '
        surf = mf.parse_surface(f[1][0])
        for ff in f[1][1:]:
            surf = surf.append(mf.parse_surface(ff))
    else:
        ' only one day '
        surf = mf.parse_surface(f[1][0])

    " resample to 1min so we can find \
    mesowest index "

    surf = surf.resample('1T').interpolate()

    " adjust bias is mesowest in case 1 and 2 "
    if case in [1, 2]:
        bias = 9
    else:
Ejemplo n.º 10
0
        'bby': [3, 6, 9, 10, 12, 17, 26],
        'czc': [3, 4, 5, 6, 8, 13, 22]
    }
else:
    index_field = {
        'bby': [3, 4, 5, 6, 8, 13, 15],
        'czc': [3, 4, 5, 6, 8, 13, 15]
    }
''' make dataframe for each station '''
dfBBY = []
dfCZD = []
for f in file_met:
    loc = f[-12:-9]
    if loc == 'bby':
        dfBBY.append(
            mf.parse_surface(f, index_field[loc], name_field, elev[loc]))
    elif loc == 'czc':
        dfCZD.append(
            mf.parse_surface(f, index_field[loc], name_field, elev[loc]))
''' concatenate dataframes when there is
more than one day of data '''
if len(dfBBY) > 1:
    meteoBBY = pd.concat(dfBBY)
else:
    meteoBBY = dfBBY[0]

if len(dfCZD) > 1:
    meteoCZD = pd.concat(dfCZD)
else:
    meteoCZD = dfCZD[0]
Ejemplo n.º 11
0
def run(case, tta=None, plot_theory=False, grid=True, ax=None, homedir=None,
        color_surf=(0, 0, 0.5, 0.5),color_wp=(0, 0.5, 0, 0.5),
        add_date=False, wprof_hgt=None):

    " process gapflow analysis"

    " first index is mesowest file, second index is \
    BBY (1 or more files) "
    f = get_filenames(case,homedir)

    " parse mesowest data "
    meso = mf.parse_mesowest_excel(f[0])
    t = get_times(case)
    mpress = meso.loc[t[0]: t[1]]['PMSL'].values
    mesoidx = meso.loc[t[0]: t[1]].index

    " parse surface BBY data "
    if len(f[1]) > 1:
        '  more than one day of obs '
        surf = mf.parse_surface(f[1][0])
        for ff in f[1][1:]:
            surf = surf.append(mf.parse_surface(ff))
    else:
        ' only one day '
        surf = mf.parse_surface(f[1][0])

    " resample to 1min so we can find \
    mesowest index "
    surf = surf.resample('1T').interpolate()

    " adjust bias is mesowest in case 1 and 2 "
    if case in [1, 2]:
        bias = 9
    else:
        bias = 0
    spress = surf.loc[mesoidx]['press'].values - bias

    " BBY and mesowest pressure difference "
    pressDiff = spress - mpress

    " BBY surface winds "
    swspd = surf.loc[mesoidx]['wspd'].values
    swdir = surf.loc[mesoidx]['wdir'].values
    ucomp = -swspd*np.sin(np.radians(swdir))

    " gapflow dataframe "
    d = {'ucomp': ucomp, 'wspd': swspd, 'wdir': swdir,
         'pdiff': pressDiff, 'Bpress': spress, 'Kpress': mpress}
    gapflow = pd.DataFrame(data=d, index=mesoidx)

    " removes rows with NaN "
    gapflow = gapflow[np.isfinite(gapflow['Kpress'])]

    " add wind profiler data at target altitude "
    out = get_windprof(case,
                       gapflow_time=gapflow.index,
                       top_hgt_km=wprof_hgt,
                       homedir=homedir)
    wp_wspd, wp_wdir = out
    wp_ucomp = -wp_wspd*np.sin(np.radians(wp_wdir))
    gapflow['wp_ws'] = wp_wspd
    gapflow['wp_wd'] = wp_wdir
    gapflow['wp_ucomp'] = wp_ucomp

    " Mass etal 95 equation "
    # blh = get_BLH(case)
    blh = 500  #[m]
    massPa, massU = mass_eq(air_density=1.24, BLH=blh)
    path = make_polygon(massPa, massU)

    gapflow = check_polygon(gapflow, path)
    # gapflow['gapflow'] = ((gapflow.poly is True) & (gapflow.wdir <= 120))
#    sub = gapflow[(gapflow.poly is True) & (gapflow.wdir <= 120)]

    " theoretical lines "
    if plot_theory:
        if ax is None:
            fig, ax = plt.subplots(figsize=(8, 7))
            ax.set_xlabel('Pressure difference, BBY-SCK [hPa]')
            ax.set_ylabel('BBY zonal wind [m s-1]')
        # ax.scatter(gapflow['pdiff'], gapflow['ucomp'],
        #            color=color_surf, label='surf')
        # ax.scatter(gapflow['pdiff'], gapflow['wp_ucomp'],
        #            color=color_wp, label='wp')
        # ax.scatter(sub['pdiff'], sub['ucomp'], color='r')
        ax.plot(massPa/100, massU[0], marker=None)
        ax.plot(massPa/100, massU[1], linestyle='--', color='r')
        ax.plot(massPa/100, massU[2], linestyle='--', color='r')
        if grid:
            ax.grid(True)
        ax.set_xlim([-12, 1])
        ax.set_ylim([-20, 15])
        ini = mesoidx[0]
        end = mesoidx[-1]
        date = ini.strftime('%b-%Y ')
        beg = ini.strftime('%d')
        end = end.strftime('%d')
#        ax.text(0.03, 0.76, timetxt.format(str(case).zfill(2),
#                                           date, beg, end),
        if add_date is True:
            if beg == end:
                ax.text(0.03, 0.85,'{} {}'.format(beg,date),
                        fontsize=12,
                        transform=ax.transAxes)
            else:
                ax.text(0.03, 0.85,'{}-{} {}'.format(beg,end,date),
                        fontsize=12,
                        transform=ax.transAxes)

    return gapflow
name = {"bby": "BodegaBay", "czc": "Cazadero"}
elev = {"bby": 15, "czc": 462}
if usr_case in ["1", "2"]:
    index_field = {"bby": [3, 4, 10, 5, 6, 11, 13], "czc": [3, 4, 10, 5, 6, 11, 13]}
elif usr_case in ["3", "4", "5", "6", "7"]:
    index_field = {"bby": [3, 6, 9, 10, 12, 17, 26], "czc": [3, 4, 5, 6, 8, 13, 22]}
else:
    index_field = {"bby": [3, 4, 5, 6, 8, 13, 15], "czc": [3, 4, 5, 6, 8, 13, 15]}

""" make dataframe for each station """
dfBBY = []
dfCZD = []
for f in file_met:
    loc = f[-12:-9]
    if loc == "bby":
        dfBBY.append(mf.parse_surface(f, index_field[loc], name_field, elev[loc]))
    elif loc == "czc":
        dfCZD.append(mf.parse_surface(f, index_field[loc], name_field, elev[loc]))

""" concatenate dataframes when there is
more than one day of data """
if len(dfBBY) > 1:
    meteoBBY = pd.concat(dfBBY)
else:
    meteoBBY = dfBBY[0]

if len(dfCZD) > 1:
    meteoCZD = pd.concat(dfCZD)
else:
    meteoCZD = dfCZD[0]
rcParams['mathtext.default'] = 'sf'

def cosd(array):
    return np.cos(np.radians(array))


homedir = '/localdata'
topdf = False

case = range(13,14)
res = 'coarse'
o = 'case{}_total_wind_{}.pdf'

# surf_file = '/Users/raulvalenzuela/Data/SURFACE/case13/czc04047.met'
surf_file = '/localdata/SURFACE/case13/czc04047.met'
czd = mf.parse_surface(surf_file)
czdh = czd.preciph[~czd.preciph.isnull()]
surf_file = '/localdata/SURFACE/case13/bby04047.met'
bby = mf.parse_surface(surf_file)
bbyh = bby.preciph[~czd.preciph.isnull()]

''' creates plot with seaborn style '''
# with sns.axes_style("white"):
#     sns.set_style('ticks',
#               {'xtick.direction': u'in',
#                'ytick.direction': u'in'}
#               )

scale=1.3
plt.figure(figsize=(8*scale, 6*scale))