From 17dd34e1fb134600fa585f9ed459992e1233aafc Mon Sep 17 00:00:00 2001 From: tomrink <rink@ssec.wisc.edu> Date: Fri, 11 Jun 2021 15:47:10 -0500 Subject: [PATCH] improve match_amvs_to_aeolus --- modules/aeolus/aeolus_amv.py | 63 +++++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 26 deletions(-) diff --git a/modules/aeolus/aeolus_amv.py b/modules/aeolus/aeolus_amv.py index 9ec22215..ba631516 100644 --- a/modules/aeolus/aeolus_amv.py +++ b/modules/aeolus/aeolus_amv.py @@ -1684,27 +1684,30 @@ def match_amvs_to_aeolus(aeolus_dict, amv_files_path, amv_source='OPS', band='14 keys = list(aeolus_dict.keys()) + dataset = None + dataset_s = [] + amv_lons = None + amv_lats = None + cc = None + ll = None + last_f_idx = -1 for key in keys: fname, ftime, f_idx = amv_files.get_file_containing_time(key) if f_idx is None: continue + profs = aeolus_dict.get(key) if profs is None: continue - layers = profs - - lat = layers[0, 0] - lon = layers[0, 1] - - c_rng, l_rng = get_search_box(nav, lon, lat) - if c_rng is None: - continue + match_dict[key] = [] if f_idx != last_f_idx: last_f_idx = f_idx ds = Dataset(fname) + dataset = ds + dataset_s.append(ds) amv_lons = ds[amv_files.lon_name][:] amv_lats = ds[amv_files.lat_name][:] @@ -1712,31 +1715,39 @@ def match_amvs_to_aeolus(aeolus_dict, amv_files_path, amv_source='OPS', band='14 ll = ds[amv_files.line_name][:] # cc, ll = nav.earth_to_lc_s(amv_lons, amv_lats) + for prof in profs: + lat = prof[0, 0] + lon = prof[0, 1] + c_rng, l_rng = get_search_box(nav, lon, lat) + if c_rng is None: + continue + + in_cc = np.logical_and(cc > c_rng[0], cc < c_rng[1]) + in_ll = np.logical_and(ll > l_rng[0], ll < l_rng[1]) + in_box = np.logical_and(in_cc, in_ll) + + num_amvs = np.sum(in_box) + if num_amvs == 0: + continue + param_s = [] - param_s.append(amv_lons) - param_s.append(amv_lats) - param_s.append(cc) - param_s.append(ll) + param_s.append(amv_lons[in_box]) + param_s.append(amv_lats[in_box]) + param_s.append(cc[in_box]) + param_s.append(ll[in_box]) for param in amv_params: if param == 'V_3D': - param_s.append(ds[param][:, 0]) - param_s.append(ds[param][:, 1]) + param_s.append(ds[param][in_box, 0]) + param_s.append(ds[param][in_box, 1]) else: - param_s.append(ds[param][:]) + param_s.append(ds[param][in_box]) - ds.close() + param_nd = np.vstack(param_s) + match_dict[key].append(param_nd) - in_cc = np.logical_and(cc > c_rng[0], cc < c_rng[1]) - in_ll = np.logical_and(ll > l_rng[0], ll < l_rng[1]) - in_box = np.logical_and(in_cc, in_ll) - num_amvs = np.sum(in_box) - if num_amvs == 0: - continue - # dist = haversine_np(lon, lat, amv_lons[in_box], amv_lats[in_box]) - param_nd = np.vstack(param_s) - param_nd = param_nd[:, in_box] - match_dict[key] = param_nd + for ds in dataset_s: + ds.close() return match_dict -- GitLab