From 6ef03b6759357b7f9d2e2a65a5be6c2058cc7d2d Mon Sep 17 00:00:00 2001
From: tomrink <rink@ssec.wisc.edu>
Date: Fri, 3 Mar 2023 13:00:28 -0600
Subject: [PATCH] snapshot...

---
 modules/util/viirs_l1b_l2.py | 65 +++++++++++++-----------------------
 1 file changed, 24 insertions(+), 41 deletions(-)

diff --git a/modules/util/viirs_l1b_l2.py b/modules/util/viirs_l1b_l2.py
index e854ec58..4bef3a0b 100644
--- a/modules/util/viirs_l1b_l2.py
+++ b/modules/util/viirs_l1b_l2.py
@@ -20,6 +20,8 @@ solzen_name = group_name + 'solar_zenith'
 label_params = l2_params
 data_params = l2_params
 
+param_idx = data_params.index(group_name + target_param)
+
 # range = [0.0, 1.0]
 cld_prob_norm_hist = [0.34458323, 0.03729378, 0.01817725, 0.01246574, 0.00991681, 0.00826515, 0.00785976, 0.00595133,
                       0.00567965, 0.00579926, 0.00642895, 0.00797761, 0.01218471, 0.51741677]
@@ -31,68 +33,47 @@ cld_opd_norm_hist = [7.31926378e-01, 9.52482193e-02, 4.62747706e-02, 3.15450036e
                      6.50404531e-04, 1.73557144e-02]
 
 
-def keep_tile(param_s, tile):
-    k = param_s.index(group_name + target_param)
-    grd_k = tile[k, ].copy()
+def is_missing(p_idx, tile):
+    keep = np.invert(np.isnan(tile[p_idx, ]))
+    if np.sum(keep) / keep.size < 0.98:
+        return True
 
-    if target_param == 'cloud_probability':
-        grd_k, bflag = process_cld_prob_(grd_k)
-    elif target_param == 'cld_opd_dcomp':
-        grd_k, bflag = process_cld_opd_(grd_k)
 
-    if grd_k is not None:
-        tile[k, ] = grd_k
-        return tile, bflag
-    else:
-        return None, bflag
+def keep_tile(p_idx, tile):
+    grd_k = tile[p_idx, ].copy()
 
+    if target_param == 'cloud_probability':
+        grd_k, bflag = process_cld_prob(grd_k)
+    elif target_param == 'cld_opd_dcomp':
+        grd_k, bflag = process_cld_opd(grd_k)
 
-def process_cld_prob(param_s, tile):
-    k = param_s.index(group_name + 'cloud_probability')
-    grd_k = tile[k, ].copy()
-    grd_k = process_cld_prob_(grd_k)
     if grd_k is not None:
-        tile[k, ] = grd_k
+        tile[p_idx, ] = grd_k
         return tile
     else:
         return None
 
 
-def process_cld_prob_(grd_k):
+def process_cld_prob(grd_k):
     keep = np.invert(np.isnan(grd_k))
     num_keep = np.sum(keep)
-    if num_keep / grd_k.size < 0.98:
-        return None, True
     keep_clr = np.where(keep, grd_k < 0.20, False)
     frac_keep = np.sum(keep_clr)/num_keep
     if not (0.38 < frac_keep < 0.62):
-        return None, False
-    grd_k = np.where(np.invert(keep), 0, grd_k)  # Convert NaN to 0
-    return grd_k, False
-
-
-def process_cld_opd(param_s, tile):
-    k = param_s.index(group_name + 'cld_opd_dcomp')
-    grd_k = tile[k, ].copy()
-    grd_k = process_cld_opd_(grd_k)
-    if grd_k is not None:
-        tile[k, ] = grd_k
-        return tile
-    else:
         return None
+    grd_k = np.where(np.invert(keep), 0, grd_k)  # Convert NaN to 0
+    return grd_k
 
 
-def process_cld_opd_(grd_k):
+def process_cld_opd(grd_k):
     keep = np.invert(np.isnan(grd_k))
     num_keep = np.sum(keep)
-    if num_keep / grd_k.size < 0.98:
-        return None, True
     grd_k = np.where(np.invert(keep), 0, grd_k)
     keep = np.where(keep, np.logical_and(0.1 < grd_k, grd_k < 158.0), False)
     frac_keep = np.sum(keep)/num_keep
     if frac_keep < 0.50:
-        return None, False
-    return grd_k, False
+        return None
+    return grd_k
 
 
 def run_all(directory, out_directory, day_night='ANY', start=10):
@@ -219,9 +200,11 @@ def run(data_h5f, param_s, train_tiles, valid_tiles, num_keep_x_tiles=8, tile_wi
                 continue
 
             nda = data[:, j_a:j_b, i_a:i_b]
-            nda, missing_flag = keep_tile(param_s, nda)
-            if not missing_flag:
-                num_not_missing += 1
+            if is_missing(param_idx, nda):
+                continue
+            num_not_missing += 1
+
+            nda = keep_tile(param_idx, nda)
             if nda is not None:
                 tiles.append(nda)
 
-- 
GitLab