diff --git a/modules/util/util.py b/modules/util/util.py index 7cb5e43d853a6195ec69b0646d6c174e1fedd29b..b39304335813a650f42eeef4b1be160a35630899 100644 --- a/modules/util/util.py +++ b/modules/util/util.py @@ -1,10 +1,12 @@ import numpy as np +import xarray as xr import datetime from datetime import timezone from metpy.units import units from metpy.calc import thickness_hydrostatic from collections import namedtuple import os +import h5py LatLonTuple = namedtuple('LatLonTuple', ['lat', 'lon']) @@ -350,4 +352,69 @@ def normalize(data, param, mean_std_dict, add_noise=False, noise_scale=1.0, seed data = np.reshape(data, shape) - return data \ No newline at end of file + return data + +# ------------ This code will not be needed when we implement a Fully Connected CNN ----------------------------------- +# 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 +exmp_file_fd = '/Users/tomrink/data/OR_ABI-L1b-RadF-M6C16_G16_s20212521800223_e20212521809542_c20212521809596.nc' + + +def make_for_full_domain_predict(clvrx_file, name_list=None, domain='FD'): + w_x = 16 + w_y = 16 + + if domain == 'CONUS': + exmpl_ds = xr.open_dataset(exmp_file_conus) + elif domain == 'FD': + exmpl_ds = xr.open_dataset(exmp_file_fd) + mdat = exmpl_ds.metpy.parse_cf('Rad') + geos = mdat.metpy.cartopy_crs + xlen = mdat.x.values.size + ylen = mdat.y.values.size + exmpl_ds.close() + + h5f = h5py.File(clvrx_file, 'r') + + grd_dct = {name: None for name in name_list} + + cnt_a = 0 + for didx, ds_name in enumerate(name_list): + gvals = get_grid_values_all(h5f, ds_name) + if gvals is not None: + grd_dct[ds_name] = gvals + cnt_a += 1 + + if cnt_a > 0 and cnt_a != len(name_list): + raise GenericException('weirdness') + + grd_dct_n = {name: [] for name in name_list} + + n_x = int(xlen/w_x) + n_y = int(ylen/w_y) + + i_0 = 0 + j_0 = 0 + + cc = [] + ll = [] + + for didx, ds_name in enumerate(name_list): + for j in range(4, n_y-4, 1): + j_ul = j_0 + j * w_y + for i in range(4, n_x-4, 1): + i_ul = i_0 + i * w_x + if didx == 0: + ll.append(j_ul) + cc.append(i_ul) + grd_dct_n[ds_name].append(grd_dct[ds_name][j_ul:j_ul+w_y, i_ul:i_ul+w_x]) + + grd_dct = {name: None for name in name_list} + for didx, ds_name in enumerate(name_list): + grd_dct[ds_name] = np.stack(grd_dct_n[ds_name]) + + h5f.close() + + return grd_dct, ll, cc +# ------------------------------------------------------------------------------------------- \ No newline at end of file