From 27a057eba7a267d9fd13ef91867fe5301025320a Mon Sep 17 00:00:00 2001
From: tomrink <rink@ssec.wisc.edu>
Date: Thu, 10 Dec 2020 15:32:50 -0600
Subject: [PATCH] snapshot...

---
 modules/aeolus/aeolus_amv.py | 83 ++++++++++++++++++++++++++++++++++--
 1 file changed, 79 insertions(+), 4 deletions(-)

diff --git a/modules/aeolus/aeolus_amv.py b/modules/aeolus/aeolus_amv.py
index c477adf8..3db084c6 100644
--- a/modules/aeolus/aeolus_amv.py
+++ b/modules/aeolus/aeolus_amv.py
@@ -15,7 +15,7 @@ from amv.intercompare import get_raob_dict_cdf
 
 
 amv_file_duration = 60  # minutes
-half_width = 25  # search box centered on AEOLUS profile (FGF coordinates)
+half_width = 40  # search box centered on AEOLUS profile (FGF coordinates)
 num_elems = 5424
 num_lines = 5424
 
@@ -89,10 +89,47 @@ class Framework(AMVFiles):
         self.lon_name = 'Longitude'
         self.lat_name = 'Latitude'
 
-        self.out_params = ['Lon', 'Lat', 'Element', 'Line', 'pressure', 'wind_speed', 'wind_direction']
-        self.params = ['MedianPress', 'Wind_Speed', 'Wind_Dir']
+        self.out_params = ['Lon', 'Lat', 'Element', 'Line', 'pressure', 'wind_speed', 'wind_direction', 'BestFitPresLvl']
+        self.params = ['MedianPress', 'Wind_Speed', 'Wind_Dir', 'BestFitPresLvl']
         self.meta_dict = {'Lon': ('degrees east', 'f4'), 'Lat': ('degrees north', 'f4'), 'Element': (None, 'i4'), 'Line': (None, 'i4'),
-                          'pressure': ('hPa', 'f4'), 'wind_speed': ('m s-1', 'f4'), 'wind_direction': ('degrees', 'f4')}
+                          'pressure': ('hPa', 'f4'), 'wind_speed': ('m s-1', 'f4'), 'wind_direction': ('degrees', 'f4'),
+                          'BestFitPresLvl': ('hPa', 'f4')}
+
+    def get_parameters(self):
+        return self.params
+
+    def get_out_parameters(self):
+        return self.out_params
+
+    def get_meta_dict(self):
+        return self.meta_dict
+
+    def get_navigation(self):
+        return GEOSNavigation(sub_lon=-75.0)
+
+    def get_datetime(self, pathname):
+        fname = os.path.split(pathname)[1]
+        toks = fname.split('_')
+        dstr = toks[4]
+        tstr = toks[5]
+        dtstr = dstr + tstr
+        dto = datetime.datetime.strptime(dtstr, '%Y%j%H%M').replace(tzinfo=timezone.utc)
+
+        return dto
+
+
+class FrameworkCloudHeight(AMVFiles):
+    def __init__(self, files_path, file_time_span):
+        super().__init__(files_path, file_time_span, '*_CLOUD_HEIGHT_EN'+'*.nc', None)
+
+        self.elem_name = 'Element'
+        self.line_name = 'Line'
+        self.lon_name = 'Longitude'
+        self.lat_name = 'Latitude'
+
+        self.out_params = ['CldTopPres', 'CldTopHght', 'CldOptDpth']
+        self.params = ['CldTopPres', 'CldTopHght', 'CldOptDpth']
+        self.meta_dict = {'CldTopPres': ('hPa', 'f4'), 'CldTopHght': ('km', 'f4'), 'CldOptDpth': ('km', 'f4')}
 
     def get_parameters(self):
         return self.params
@@ -446,6 +483,44 @@ def run_best_fit_all():
         analyze2(amvs_list, bf_list, raob_match_list, bf_gfs_list)
 
 
+def get_product_at_locs(raob_to_amv_dct, ts, files, filepath=None):
+    keys = list(raob_to_amv_dct.keys())
+    m_dct = {}
+
+    nav = files.get_navigation()
+    the_params = files.get_parameters()
+    num_params = len(the_params)
+
+    if filepath is None:
+        filepath, ftime, f_idx = files.get_file(ts)
+    ds = Dataset(filepath)
+
+    param_s = []
+    for pstr in the_params:
+        data = ds[pstr][:]
+        data = data.data
+        param_s.append(data)
+    param_nd = np.stack(param_s)
+
+    for key in keys:
+        amvs = raob_to_amv_dct.get(key)
+        num_amvs = amvs.shape[1]
+        alons = amvs[0, :]
+        alats = amvs[1, :]
+
+        cc, ll = nav.earth_to_lc_s(alons, alats)
+
+        aaa = np.zeros((num_params, num_amvs), dtype=np.float)
+        for k in range(num_amvs):
+            aaa[:, k] = param_nd[:, ll[k], cc[k]]
+
+        m_dct[key] = aaa
+
+    ds.close()
+
+    return m_dct
+
+
 def run_best_fit(raob_to_amv_dct, raob_dct, gfs_filename=None):
     keys = list(raob_to_amv_dct.keys())
 
-- 
GitLab