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