From 221e42941ccbdf2934155ab2931744c7ee72677d Mon Sep 17 00:00:00 2001
From: tomrink <rink@ssec.wisc.edu>
Date: Wed, 28 Jul 2021 16:35:43 -0500
Subject: [PATCH] new method 'check_oblique', improved get_grid_values_all

---
 modules/util/util.py | 46 +++++++++++++++++++++++++++++++++++---------
 1 file changed, 37 insertions(+), 9 deletions(-)

diff --git a/modules/util/util.py b/modules/util/util.py
index 618c6676..5f0f80e0 100644
--- a/modules/util/util.py
+++ b/modules/util/util.py
@@ -205,24 +205,52 @@ def is_night(solzen, test_angle=100.0):
         return True
 
 
-def get_grid_values_all(h5f, grid_name, scale_factor_name='scale_factor', add_offset_name='add_offset'):
+def check_oblique(satzen, test_angle=70.0):
+    satzen = satzen.flatten()
+    satzen = satzen[np.invert(np.isnan(satzen))]
+    if len(satzen) == 0 or np.sum(satzen >= test_angle) < len(satzen):
+        return False
+    else:
+        return True
+
+
+def get_grid_values_all(h5f, grid_name, scale_factor_name='scale_factor', add_offset_name='add_offset',
+                        fill_value_name='_FillValue', range_name='actual_range'):
     hfds = h5f[grid_name]
     attrs = hfds.attrs
 
-    grd_vals = hfds[:,:]
-    grd_vals = np.where(grd_vals == -999, np.nan, grd_vals)
-    grd_vals = np.where(grd_vals == -127, np.nan, grd_vals)
-    grd_vals = np.where(grd_vals == -32768, np.nan, grd_vals)
-
     if attrs is None:
-        return grd_vals
+        raise GenericException('No attributes object for: '+grid_name)
+
+    grd_vals = hfds[:,]
 
     if scale_factor_name is not None:
-        scale_factor = attrs.get(scale_factor_name)[0]
+        attr = attrs.get(scale_factor_name)
+        if attr is None:
+            raise GenericException('Attribute: '+scale_factor_name+' not found for variable: '+grid_name)
+        scale_factor = attr[0]
         grd_vals = grd_vals * scale_factor
 
     if add_offset_name is not None:
-        add_offset = attrs.get(add_offset_name)[0]
+        attr = attrs.get(add_offset_name)
+        if attr is None:
+            raise GenericException('Attribute: '+add_offset_name+' not found for variable: '+grid_name)
+        add_offset = attr[0]
         grd_vals = grd_vals + add_offset
 
+    if range_name is not None:
+        attr = attrs.get(range_name)
+        if attr is None:
+            raise GenericException('Attribute: '+range_name+' not found for variable: '+grid_name)
+        low = attr[0]
+        high = attr[1]
+        grd_vals = np.where(grd_vals < low, np.nan, grd_vals)
+        grd_vals = np.where(grd_vals > high, np.nan, grd_vals)
+    elif fill_value_name is not None:
+        attr = attrs.get(fill_value_name)
+        if attr is None:
+            raise GenericException('Attribute: '+fill_value_name+' not found for variable: '+grid_name)
+        fill_value = attr[0]
+        grd_vals = np.where(grd_vals == fill_value, np.nan, grd_vals)
+
     return grd_vals
-- 
GitLab