From eeb6600b19fe61ae4154fe85c6a95d1c172c4a44 Mon Sep 17 00:00:00 2001 From: tomrink <rink@ssec.wisc.edu> Date: Thu, 17 Dec 2020 21:19:30 -0600 Subject: [PATCH] snapshot... --- modules/aeolus/aeolus_amv.py | 117 ++++++++++++++++++++++++++++++----- 1 file changed, 101 insertions(+), 16 deletions(-) diff --git a/modules/aeolus/aeolus_amv.py b/modules/aeolus/aeolus_amv.py index 4a80d503..e809be80 100644 --- a/modules/aeolus/aeolus_amv.py +++ b/modules/aeolus/aeolus_amv.py @@ -171,7 +171,8 @@ class OPS(AMVFiles): 'pressure': ('hPa', 'f4'), 'wind_speed': ('m s-1', 'f4'), 'wind_direction': ('degrees', 'f4')} def get_navigation(self): - return GEOSNavigation(sub_lon=-75.2) + # return GEOSNavigation(sub_lon=-75.2) ? + return GEOSNavigation(sub_lon=-75.0) def get_datetime(self, pathname): fname = os.path.split(pathname)[1] @@ -471,19 +472,19 @@ def run_best_fit_all(): amv_prod_list = [] for k, file in enumerate(raob_files): raob_dct, ts = get_raob_dict_cdf(raob_dir+file) - # m_d = match_amvs_to_raobs(raob_dct, ts, amv_files=amv_files) - # amvs_list, bf_list, raob_match_list, bf_gfs_list = run_best_fit(m_d, raob_dct, gfs_dir+gfs_files[k], - # amvs_list=amvs_list, bf_list=bf_list, raob_match_list=raob_match_list, bf_gfs_list=bf_gfs_list) - # prd_dct = get_product_at_locs(m_d, ts, prd_files, amv_prod_list=amv_prod_list) - # analyze2(amvs_list, bf_list, raob_match_list, bf_gfs_list, amv_prod_list) - # - amvs = get_amvs(amv_files, ts) - amvs_list.append(amvs) - bfs = run_best_fit_gfs(amvs, gfs_dir+gfs_files[k], amv_lat_idx=0, amv_lon_idx=1, amv_prs_idx=4, amv_spd_idx=5, amv_dir_idx=6) - bf_list.append(bfs) + m_d = match_amvs_to_raobs(raob_dct, ts, amv_files=amv_files) + amvs_list, bf_list, raob_match_list, bf_gfs_list = run_best_fit(m_d, raob_dct, gfs_dir+gfs_files[k], + amvs_list=amvs_list, bf_list=bf_list, raob_match_list=raob_match_list, bf_gfs_list=bf_gfs_list) + prd_dct = get_product_at_locs(m_d, ts, prd_files, amv_prod_list=amv_prod_list) + analyze2(amvs_list, bf_list, raob_match_list, bf_gfs_list, amv_prod_list) + + # amvs = get_amvs(amv_files, ts) + # amvs_list.append(amvs) + # bfs = run_best_fit_gfs(amvs, gfs_dir+gfs_files[k], amv_lat_idx=0, amv_lon_idx=1, amv_prs_idx=4, amv_spd_idx=5, amv_dir_idx=6) + # bf_list.append(bfs) # bin_ranges, bin_pres, bin_spd, bin_dir = analyze2(amvs_list, bf_list, raob_match_list, bf_gfs_list, amv_prod_list) - bin_ranges, bin_pres, bin_spd, bin_dir = compare_amvs_bestfit(amvs_list, bf_list, bin_size=100) + bin_ranges, bin_pres, bin_spd, bin_dir = compare_amvs_bestfit_all(amvs_list, bf_list, bin_size=100) return bin_ranges, bin_pres, bin_spd, bin_dir @@ -1030,11 +1031,19 @@ def analyze2(amvs_list, bf_list, raob_match_list, bf_gfs_list, amv_prod_list): return bin_ranges, bin_pres, bin_spd, bin_dir -def compare_amvs_bestfit(amvs_list, bfs_list, bin_size=200): +def compare_amvs_bestfit_all(amvs_list, bfs_list, bin_size=200): amvs = np.concatenate(amvs_list, axis=1) amvs = np.transpose(amvs, axes=[1, 0]) bfs = np.stack(bfs_list, axis=0) + return compare_amvs_bestfit(amvs, bfs, bin_size=bin_size) + + +def compare_amvs_bestfit(amvs, bfs, bin_size=200): + # amvs = np.concatenate(amvs_list, axis=1) + # amvs = np.transpose(amvs, axes=[1, 0]) + # bfs = np.stack(bfs_list, axis=0) + good_amvs = amvs num_good = good_amvs.shape[0] didx = 6 @@ -1150,11 +1159,11 @@ def compare_amvs_bestfit(amvs_list, bfs_list, bin_size=200): def make_plot(): # f = open('/Users/tomrink/amv_raob.pkl', 'rb') - f = open('/Users/tomrink/bf_bf_gfs.pkl', 'rb') + f = open('/Users/tomrink/amv_bf_gfs_all_linear.pkl', 'rb') tup_r = pickle.load(f) f.close() - f = open('/Users/tomrink/amv_gfs.pkl', 'rb') + f = open('/Users/tomrink/amv_bf_gfs_all_nearest.pkl', 'rb') tup_g = pickle.load(f) f.close() @@ -1199,8 +1208,48 @@ def make_plot(): spd_mad_g.append(np.average(np.abs(bin_spd_g[i]))) spd_bias_g.append(np.average(bin_spd_g[i])) - #do_plot(x_values, [pres_mad_r], ['LBF'], ['blue'], title='RAOB-BFS', x_axis_label='MAD', y_axis_label='hPa', invert=True, flip=True) + do_plot(x_values, [pres_mad_r, pres_mad_g], ['GFS_linear', 'GFS_nearest'], ['blue', 'red'], title='ACHA - BestFit', x_axis_label='MAD', y_axis_label='hPa', invert=True, flip=True) + #do_plot(x_values, [pres_mad_r, pres_mad_g], ['RAOB', 'GFS'], ['blue', 'red'], title='ACHA - BestFit', x_axis_label='MAD', y_axis_label='hPa', invert=True, flip=True) + #do_plot(x_values, [spd_mad_r, spd_mad_g], ['RAOB', 'GFS'], ['blue', 'red'], title='ACHA - BestFit', x_axis_label='MAE (m/s)', y_axis_label='hPa', invert=True, flip=True) + #do_plot(x_values, [pres_bias_r, pres_bias_g], ['RAOB', 'GFS'], ['blue', 'red'], title='ACHA - BestFit', x_axis_label='BIAS', y_axis_label='hPa', invert=True, flip=True) + #do_plot(x_values, [spd_bias_r, spd_bias_g], ['RAOB', 'GFS'], ['blue', 'red'], title='ACHA - BestFit', x_axis_label='BIAS (m/s)', y_axis_label='hPa', invert=True, flip=True) + #do_plot(x_values, [num_pres_r, num_pres_g], ['RAOB:'+str(num_r), 'GFS:'+str(num_g)], ['blue', 'red'], x_axis_label='Normalized Count', y_axis_label='hPa', invert=True, flip=True) + + +def make_plot2(bin_pres_r, bin_ranges): + + x_values = [] + num_pres_r = [] + num_pres_g = [] + num_spd = [] + num_dir = [] + pres_mad_r = [] + pres_bias_r = [] + pres_mad_g = [] + pres_bias_g = [] + spd_mad_r = [] + spd_bias_r = [] + spd_mad_g = [] + spd_bias_g = [] + + num_r = 0 + for i in range(len(bin_ranges)): + num_r += bin_pres_r[i].shape[0] + + for i in range(len(bin_ranges)): + x_values.append(np.average(bin_ranges[i])) + num_pres_r.append((bin_pres_r[i].shape[0])/num_r) + + pres_mad_r.append(np.average(np.abs(bin_pres_r[i]))) + pres_bias_r.append(np.average(bin_pres_r[i])) + + + #spd_mad_r.append(np.average(np.abs(bin_spd_r[i]))) + #spd_bias_r.append(np.average(bin_spd_r[i])) + + + do_plot(x_values, [pres_mad_r], ['RAOB'], ['blue'], title='ACHA - BestFit', x_axis_label='MAD', y_axis_label='hPa', invert=True, flip=True) #do_plot(x_values, [pres_mad_r, pres_mad_g], ['RAOB', 'GFS'], ['blue', 'red'], title='ACHA - BestFit', x_axis_label='MAD', y_axis_label='hPa', invert=True, flip=True) #do_plot(x_values, [spd_mad_r, spd_mad_g], ['RAOB', 'GFS'], ['blue', 'red'], title='ACHA - BestFit', x_axis_label='MAE (m/s)', y_axis_label='hPa', invert=True, flip=True) #do_plot(x_values, [pres_bias_r, pres_bias_g], ['RAOB', 'GFS'], ['blue', 'red'], title='ACHA - BestFit', x_axis_label='BIAS', y_axis_label='hPa', invert=True, flip=True) @@ -1208,6 +1257,42 @@ def make_plot(): #do_plot(x_values, [num_pres_r, num_pres_g], ['RAOB:'+str(num_r), 'GFS:'+str(num_g)], ['blue', 'red'], x_axis_label='Normalized Count', y_axis_label='hPa', invert=True, flip=True) +def make_plot3(amvs_list, bfs_list): + num = len(amvs_list) + + bin_ranges = get_press_bin_ranges(100, 1000, bin_size=100) + + y_values = [] + x_values = None + line_labels = [] + colors = [] + for k in range(num): + bfs = np.stack(bfs_list[k]) + amvs = np.concatenate(amvs_list[k], axis=1) + amvs = np.transpose(amvs, axes=[1, 0]) + #amvs = amvs_list[k] + + bin_ranges, bin_pres, bin_spd, bin_dir = compare_amvs_bestfit(amvs, bfs, bin_size=100) + + #diff = amvs[:, 4] - amvs[:, 7] + #bin_pres = bin_data_by(diff, amvs[:, 4], bin_ranges) + + pres_mad = [] + x_values = [] + for i in range(len(bin_ranges)): + x_values.append(np.average(bin_ranges[i])) + #num_pres_r.append((bin_pres[i].shape[0]) / num_r) + + pres_mad.append(np.average(np.abs(bin_pres[i]))) + #pres_bias.append(np.average(bin_pres[i])) + + line_labels.append(None) + colors.append(None) + y_values.append(pres_mad) + + do_plot(x_values, y_values, line_labels, colors, title='Daily ACHA - BestFit RAOB', x_axis_label='MAD', y_axis_label='hPa', invert=True, flip=True) + + # imports the S4 NOAA output # filename: full path as a string, '/home/user/filename' # returns a dict: time -> list of profiles (a profile is a list of levels) -- GitLab