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
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
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
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()
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_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))
" 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:
'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]
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))