From 648d92b564bd6b8a83b1981a68ab3bd7b1737595 Mon Sep 17 00:00:00 2001
From: tomrink <rink@ssec.wisc.edu>
Date: Wed, 7 Jun 2023 13:56:47 -0500
Subject: [PATCH] snapshot...

---
 modules/util/util.py | 154 ++++++++++++++++++-------------------------
 1 file changed, 64 insertions(+), 90 deletions(-)

diff --git a/modules/util/util.py b/modules/util/util.py
index 60d6cb5c..93ae51c3 100644
--- a/modules/util/util.py
+++ b/modules/util/util.py
@@ -432,11 +432,6 @@ def make_times(dt_str_0, dt_str_1=None, format_code='%Y-%m-%d_%H:%M', num_steps=
     return dt_obj_s, ts_s
 
 
-def make_histogram(values, edges):
-    h = np.histogram(values, bins=edges)
-    return h
-
-
 def normalize(data, param, mean_std_dict, copy=True):
 
     if mean_std_dict.get(param) is None:
@@ -460,23 +455,6 @@ def normalize(data, param, mean_std_dict, copy=True):
     return data
 
 
-def add_noise(data, noise_scale=0.01, seed=None, copy=True):
-    if copy:
-        data = data.copy()
-
-    shape = data.shape
-    data = data.flatten()
-
-    if seed is not None:
-        np.random.seed(seed)
-    rnd = np.random.normal(loc=0, scale=noise_scale, size=data.size)
-    data += rnd
-
-    data = np.reshape(data, shape)
-
-    return data
-
-
 def denormalize(data, param, mean_std_dict, copy=True):
     if copy:
         data = data.copy()
@@ -542,18 +520,17 @@ def descale(data, param, mean_std_dict, copy=True):
     return data
 
 
-def scale2(data, lo, hi, copy=True):
+def add_noise(data, noise_scale=0.01, seed=None, copy=True):
     if copy:
         data = data.copy()
 
     shape = data.shape
     data = data.flatten()
 
-    data -= lo
-    data /= (hi - lo)
-
-    not_valid = np.isnan(data)
-    data[not_valid] = 0
+    if seed is not None:
+        np.random.seed(seed)
+    rnd = np.random.normal(loc=0, scale=noise_scale, size=data.size)
+    data += rnd
 
     data = np.reshape(data, shape)
 
@@ -704,6 +681,65 @@ def concat_dict_s(t_dct_0, t_dct_1):
     return t_dct_0
 
 
+rho_water = 1000000.0  # g m^-3
+rho_ice = 917000.0  # g m^-3
+
+# real(kind=real4), parameter:: Rho_Water = 1.0    !g / m ^ 3
+# real(kind=real4), parameter:: Rho_Ice = 0.917    !g / m ^ 3
+#
+# !--- compute
+# cloud
+# water
+# path
+# if (Iphase == 0) then
+# Cwp_Dcomp(Elem_Idx, Line_Idx) = 0.55 * Tau * Reff * Rho_Water
+# Lwp_Dcomp(Elem_Idx, Line_Idx) = 0.55 * Tau * Reff * Rho_Water
+# else
+# Cwp_Dcomp(Elem_Idx, Line_Idx) = 0.667 * Tau * Reff * Rho_Ice
+# Iwp_Dcomp(Elem_Idx, Line_Idx) = 0.667 * Tau * Reff * Rho_Ice
+# endif
+
+
+def compute_lwc_iwc(iphase, reff, opd, geo_dz):
+    xy_shape = iphase.shape
+
+    iphase = iphase.flatten()
+    keep_0 = np.invert(np.isnan(iphase))
+
+    reff = reff.flatten()
+    keep_1 = np.invert(np.isnan(reff))
+
+    opd = opd.flatten()
+    keep_2 = np.invert(np.isnan(opd))
+
+    geo_dz = geo_dz.flatten()
+    keep_3 = np.logical_and(np.invert(np.isnan(geo_dz)), geo_dz > 1.0)
+
+    keep = keep_0 & keep_1 & keep_2 & keep_3
+
+    lwp_dcomp = np.zeros(reff.shape[0])
+    iwp_dcomp = np.zeros(reff.shape[0])
+    lwp_dcomp[:] = np.nan
+    iwp_dcomp[:] = np.nan
+
+    ice = iphase == 1 & keep
+    no_ice = iphase != 1 & keep
+
+    # compute ice/liquid water path, g m-2
+    reff *= 1.0e-06  # convert microns to meters
+
+    iwp_dcomp[ice] = 0.667 * opd[ice] * rho_ice * reff[ice]
+    lwp_dcomp[no_ice] = 0.55 * opd[no_ice] * rho_water * reff[no_ice]
+
+    iwp_dcomp /= geo_dz
+    lwp_dcomp /= geo_dz
+
+    lwp_dcomp = lwp_dcomp.reshape(xy_shape)
+    iwp_dcomp = iwp_dcomp.reshape(xy_shape)
+
+    return lwp_dcomp, iwp_dcomp
+
+
 # Example GOES file to retrieve GEOS parameters in MetPy form (CONUS)
 exmp_file_conus = '/Users/tomrink/data/OR_ABI-L1b-RadC-M6C14_G16_s20193140811215_e20193140813588_c20193140814070.nc'
 # Full Disk
@@ -802,68 +838,6 @@ def make_for_full_domain_predict(h5f, name_list=None, satellite='GOES16', domain
     return grd_dct, ll, cc
 
 
-# rho_water = 1.
-# rho_ice = 0.917
-
-rho_water = 1000000.0  # g m^-3
-rho_ice = 917000.0  # g m^-3
-
-# real(kind=real4), parameter:: Rho_Water = 1.0    !g / m ^ 3
-# real(kind=real4), parameter:: Rho_Ice = 0.917    !g / m ^ 3
-#
-# !--- compute
-# cloud
-# water
-# path
-# if (Iphase == 0) then
-# Cwp_Dcomp(Elem_Idx, Line_Idx) = 0.55 * Tau * Reff * Rho_Water
-# Lwp_Dcomp(Elem_Idx, Line_Idx) = 0.55 * Tau * Reff * Rho_Water
-# else
-# Cwp_Dcomp(Elem_Idx, Line_Idx) = 0.667 * Tau * Reff * Rho_Ice
-# Iwp_Dcomp(Elem_Idx, Line_Idx) = 0.667 * Tau * Reff * Rho_Ice
-# endif
-
-
-def compute_lwc_iwc(iphase, reff, opd, geo_dz):
-    xy_shape = iphase.shape
-
-    iphase = iphase.flatten()
-    keep_0 = np.invert(np.isnan(iphase))
-
-    reff = reff.flatten()
-    keep_1 = np.invert(np.isnan(reff))
-
-    opd = opd.flatten()
-    keep_2 = np.invert(np.isnan(opd))
-
-    geo_dz = geo_dz.flatten()
-    keep_3 = np.logical_and(np.invert(np.isnan(geo_dz)), geo_dz > 1.0)
-
-    keep = keep_0 & keep_1 & keep_2 & keep_3
-
-    lwp_dcomp = np.zeros(reff.shape[0])
-    iwp_dcomp = np.zeros(reff.shape[0])
-    lwp_dcomp[:] = np.nan
-    iwp_dcomp[:] = np.nan
-
-    ice = iphase == 1 & keep
-    no_ice = iphase != 1 & keep
-
-    # compute ice/liquid water path, g m-2
-    reff *= 1.0e-06  # convert microns to meters
-
-    iwp_dcomp[ice] = 0.667 * opd[ice] * rho_ice * reff[ice]
-    lwp_dcomp[no_ice] = 0.55 * opd[no_ice] * rho_water * reff[no_ice]
-
-    iwp_dcomp /= geo_dz
-    lwp_dcomp /= geo_dz
-
-    lwp_dcomp = lwp_dcomp.reshape(xy_shape)
-    iwp_dcomp = iwp_dcomp.reshape(xy_shape)
-
-    return lwp_dcomp, iwp_dcomp
-
-
 def make_for_full_domain_predict_viirs_clavrx(h5f, name_list=None, res_fac=1, day_night='DAY', use_dnb=False):
     w_x = 16
     w_y = 16
-- 
GitLab