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