def main(): case=7 mesocase=get_mesocase(case) mesofiles=mesocase['files'] st = mesocase['dates'][0] en = mesocase['dates'][1] stations=mesocase['stations'] var=['TMP','RELH','PMSL','DRCT'] hl=[] xticks = pd.date_range(start=st,end=en, freq='3H') fig,ax = plt.subplots(len(var),1,figsize=(13,10),sharex=True) for i,f in enumerate(mesofiles): df=mf.parse_mesowest_excel(f) df2=df[st:en] for j in range(len(var)): l=ax[j].plot(df2.index,df2[var[j]],'-o') ax[j].invert_xaxis() ax[j].set_xticks(xticks) ax[j].set_xlim([en,st]) if j == 0: hl.append(l) deg_sign= u'\N{DEGREE SIGN}' lns = [line[0] for line in hl] ax[0].legend(lns, stations, loc=0) ax[0].set_ylabel('Temperature [' +deg_sign+'C]') ax[1].set_ylim([40,105]) ax[1].set_ylabel('Relative humidity [%]') ax[2].set_ylim([1015,1025]) ax[2].set_ylabel('Pressure MSL [hPa]') ax[3].set_yticks(range(0,360+60,60)) ax[3].set_ylabel('Wind direction [deg]') datefmt = dates.DateFormatter('%d\n%H') ax[3].xaxis.set_major_formatter(datefmt) ax[3].set_xlabel(r'$\Leftarrow$'+' Time [UTC]') t1='METAR surface observations (source: Mesowest)' t2='\nDate: ' + st.strftime('%b-%Y') plt.suptitle(t1+t2) plt.show(block=False)
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 \
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