diff --git a/modules/aeolus/aeolus_amv.py b/modules/aeolus/aeolus_amv.py index c24515bc0b3bf481b02ea8e06b5cf11361a8281b..fac7df0431e04c339b8921d1b98cbd28e4da3e8f 100644 --- a/modules/aeolus/aeolus_amv.py +++ b/modules/aeolus/aeolus_amv.py @@ -470,12 +470,16 @@ def run_best_fit_all(): raob_dct, ts = get_raob_dict_cdf(raob_dir+file) m_d = match_amvs_to_raobs(raob_dct, ts, amv_files=amv_files) #bf_dct = run_best_fit(m_d, raob_dct, gfs_dir+gfs_files[k]) - prd_dct = get_product_at_locs(m_d, ts, prd_files) + #prd_dct = get_product_at_locs(m_d, ts, prd_files) #out_list.append((bf_dct, prd_dct)) amvs = get_amvs(amv_files, ts) 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) - out_list.append((amvs, np.array(bfs), prd_dct)) + alons = amvs[0, :] + alats = amvs[1, :] + prds = get_product_at_lat_lons(prd_files, ts, alons, alats, filepath=None) + + out_list.append((amvs, np.array(bfs), prds)) return out_list @@ -555,6 +559,32 @@ def get_product_at_locs1x1(raob_to_amv_dct, ts, files, filepath=None): return m_dct +def get_product_at_lat_lons(files, ts, lons, lats, filepath=None): + nav = files.get_navigation() + the_params = files.get_parameters() + num_params = len(the_params) + + if filepath is None: + filepath, ftime, f_idx = files.get_file(ts) + ds = Dataset(filepath) + + var_s = [] + for pstr in the_params: + var = ds[pstr] + var_s.append(var) + + num = lons.shape[0] + + cc, ll = nav.earth_to_lc_s(lons, lats) + + aaa = np.zeros((num_params, num), dtype=np.float) + for vidx, var in enumerate(var_s): + for k in range(num): + aaa[vidx, k] = var[ll[k], cc[k]].data + + return np.transpose(aaa, axes=[1, 0]) + + def run_best_fit2(raob_to_amv_dct, raob_dct, gfs_filename=None): bfs_dct ={} keys = list(raob_to_amv_dct.keys())