diff --git a/modules/aeolus/aeolus_amv.py b/modules/aeolus/aeolus_amv.py index 91987c10517be8dc80bcc8c3317a9d102db9b14e..a4b4d06a15883e9e5538cb86db9866c707e1ef45 100644 --- a/modules/aeolus/aeolus_amv.py +++ b/modules/aeolus/aeolus_amv.py @@ -246,12 +246,14 @@ def create_file2(filename, raob_to_amv_dct, raob_dct, amv_files): rootgrp.close() -def run_best_fit_all(amv_dir, source, product_dir, product, raob_path, gfs_path, full_domain=False): +def run_best_fit_driver(amv_dir, source, raob_path, gfs_path, product_dir, product): amv_files = get_datasource(amv_dir, source) - prd_files = get_datasource(product_dir, product) gfs_files = get_datasource(gfs_path, 'GFS') raob_ds = get_datasource(raob_path, 'RAOB') raob_files = raob_ds.flist + prd_files = None + if product_dir is None: + prd_files = get_datasource(product_dir, product) out_list = [] amvs_list = [] @@ -259,141 +261,102 @@ def run_best_fit_all(amv_dir, source, product_dir, product, raob_path, gfs_path, rb_list = [] bfs_gfs_list = [] prd_list = [] - if not full_domain: - for k, file in enumerate(raob_files): - raob_dct = get_raob_dict_cdf(file) - ts = raob_ds.ftimes[k,0] - m_d = match_amvs_to_raobs(raob_dct, ts, amv_files) - if m_d is None: - continue - gfs_file = gfs_files.get_file(ts)[0] - if gfs_file is None: - continue - bf_dct = run_best_fit(m_d, raob_dct, gfs_file) - prd_dct = get_product_at_locs(m_d, ts, prd_files) - out_list.append((bf_dct, prd_dct)) - - for tup in out_list: - ab_dct = tup[0] - pr_dct = tup[1] - keys = list(ab_dct.keys()) - for key in keys: - tup = ab_dct.get(key) - amvs_list.append(tup[0]) - bfs_list.append(tup[1]) - rb_list.append(tup[2]) - bfs_gfs_list.append(tup[3]) + for k, file in enumerate(raob_files): + raob_dct = get_raob_dict_cdf(file) + ts = raob_ds.ftimes[k,0] + m_d = match_amvs_to_raobs(raob_dct, ts, amv_files) + if m_d is None: + continue - keys = list(pr_dct.keys()) - for key in keys: - prd_list.append(pr_dct.get(key)) + gfs_file = gfs_files.get_file(ts)[0] + if gfs_file is None: + continue - amvs = np.concatenate(amvs_list) - bfs = np.concatenate(bfs_list) - rbm = np.concatenate(rb_list) - bfs_gfs = np.concatenate(bfs_gfs_list) - prd = np.concatenate(prd_list) + bf_dct = run_best_fit(m_d, raob_dct, gfs_file) - tup = (amvs, bfs, prd, bfs_gfs, rbm) - return tup - else: - for k, file in enumerate(raob_files): - raob_dct = get_raob_dict_cdf(file) - ts = raob_ds.ftimes[k,0] - amvs = get_amvs(amv_files, ts) - if amvs is None: - continue - gfs_file = gfs_files.get_file(ts)[0] - if gfs_file is None: + prd_dct = None + if prd_files is not None: + prd_dct = get_product_at_locs(m_d, ts, prd_files) + if prd_dct is None: continue - bfs = run_best_fit_gfs(amvs, gfs_file, amv_lat_idx=0, amv_lon_idx=1, amv_prs_idx=4, amv_spd_idx=5, amv_dir_idx=6) - 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)) + out_list.append((bf_dct, prd_dct)) + + for tup in out_list: + ab_dct = tup[0] + pr_dct = tup[1] - for tup in out_list: + keys = list(ab_dct.keys()) + for key in keys: + tup = ab_dct.get(key) amvs_list.append(tup[0]) bfs_list.append(tup[1]) - prd_list.append(tup[2]) + rb_list.append(tup[2]) + bfs_gfs_list.append(tup[3]) + + if pr_dct is not None: + keys = list(pr_dct.keys()) + for key in keys: + prd_list.append(pr_dct.get(key)) - amvs = np.concatenate(amvs_list) - bfs = np.concatenate(bfs_list) + amvs = np.concatenate(amvs_list) + bfs = np.concatenate(bfs_list) + rbm = np.concatenate(rb_list) + bfs_gfs = np.concatenate(bfs_gfs_list) + if len(prd_list) == 0: + tup = (amvs, bfs, None, bfs_gfs, rbm) + else: prd = np.concatenate(prd_list) + tup = (amvs, bfs, prd, bfs_gfs, rbm) - tup = (amvs, bfs, prd) - return tup + return tup -def run_best_fit_all_no_product(amv_dir, source, raob_path, gfs_path, full_domain=False): - amv_files = get_datasource(amv_dir, source) + +def run_best_fit_gfs_driver(time_s, amv_dir, amv_source, gfs_dir, product_dir, product_type): + amv_files = get_datasource(amv_dir, amv_source) gfs_files = get_datasource(gfs_path, 'GFS') - raob_ds = get_datasource(raob_path, 'RAOB') - raob_files = raob_ds.flist + prd_files = get_datasource(product_dir, product_type) - out_list = [] + out_time_s = [] amvs_list = [] bfs_list = [] - rb_list = [] - bfs_gfs_list = [] - if not full_domain: - for k, file in enumerate(raob_files): - raob_dct = get_raob_dict_cdf(file) - ts = raob_ds.ftimes[k,0] - m_d = match_amvs_to_raobs(raob_dct, ts, amv_files) - if m_d is None: - continue - gfs_file = gfs_files.get_file(ts)[0] - if gfs_file is None: - continue - bf_dct = run_best_fit(m_d, raob_dct, gfs_file) - out_list.append(bf_dct) - - for tup in out_list: - ab_dct = tup - - keys = list(ab_dct.keys()) - for key in keys: - tup = ab_dct.get(key) - amvs_list.append(tup[0]) - bfs_list.append(tup[1]) - rb_list.append(tup[2]) - bfs_gfs_list.append(tup[3]) - + prd_list = [] - amvs = np.concatenate(amvs_list) - bfs = np.concatenate(bfs_list) - rbm = np.concatenate(rb_list) - bfs_gfs = np.concatenate(bfs_gfs_list) + for ts in time_s: + amvs = get_amvs(amv_files, ts) + if amvs is None: + continue + gfs_file = gfs_files.get_file(ts)[0] + if gfs_file is None: + continue + bfs = run_best_fit_gfs(amvs, gfs_file, amv_lat_idx=0, amv_lon_idx=1, amv_prs_idx=4, amv_spd_idx=5, + amv_dir_idx=6) - tup = (amvs, bfs, bfs_gfs, rbm) - return tup - else: - for k, file in enumerate(raob_files): - raob_dct = get_raob_dict_cdf(file) - ts = raob_ds.ftimes[k,0] - amvs = get_amvs(amv_files, ts) - if amvs is None: - continue - gfs_file = gfs_files.get_file(ts)[0] - if gfs_file is None: - continue - bfs = run_best_fit_gfs(amvs, gfs_file, amv_lat_idx=0, amv_lon_idx=1, amv_prs_idx=4, amv_spd_idx=5, amv_dir_idx=6) + if product_dir is not None: alons = amvs[:, 0] alats = amvs[:, 1] + prds = get_product_at_lat_lons(prd_files, ts, alons, alats, filepath=None) + if prds is None: + continue + prd_list.append(prds) - out_list.append((amvs, np.array(bfs))) + out_times_s.append(ts) + amvs_list.append(amvs) + bfs_list.append(np.array(bfs)) - for tup in out_list: - amvs_list.append(tup[0]) - bfs_list.append(tup[1]) + if len(out_time_s) == 0: + return (None, None, None) + + out_time_s = np.array(out_time_s) + amvs = np.concatenate(amvs_list) + bfs = np.concatenate(bfs_list) + if len(prd_list) == 0: + return (amvs, bfs, None, out_time_s) - amvs = np.concatenate(amvs_list) - bfs = np.concatenate(bfs_list) + prd = np.concatenate(prd_list) + return (amvs, bfs, prd, out_time_s) - tup = (amvs, bfs) - return tup def get_product_at_locs(raob_to_amv_dct, ts, files, filepath=None): keys = list(raob_to_amv_dct.keys()) @@ -405,6 +368,8 @@ def get_product_at_locs(raob_to_amv_dct, ts, files, filepath=None): if filepath is None: filepath, ftime, f_idx = files.get_file(ts) + if filepath is None: + return None ds = Dataset(filepath) param_s = [] @@ -477,6 +442,8 @@ def get_product_at_lat_lons(files, ts, lons, lats, filepath=None): if filepath is None: filepath, ftime, f_idx = files.get_file(ts) + if filepath is None: + return None ds = Dataset(filepath) var_s = []