From 3cb5e6504d30fb5f19d398a421cfe03b43239f10 Mon Sep 17 00:00:00 2001
From: tomrink <rink@ssec.wisc.edu>
Date: Tue, 31 Oct 2023 21:14:09 -0500
Subject: [PATCH] snapshot...

---
 modules/util/util.py | 698 -------------------------------------------
 1 file changed, 698 deletions(-)

diff --git a/modules/util/util.py b/modules/util/util.py
index c4b2b13d..d8db73d5 100644
--- a/modules/util/util.py
+++ b/modules/util/util.py
@@ -15,7 +15,6 @@ from scipy.interpolate import RectBivariateSpline, interp2d
 from scipy.ndimage import gaussian_filter
 from scipy.signal import medfilt2d
 from cartopy.crs import Geostationary, Globe
-import geos_nav
 
 LatLonTuple = namedtuple('LatLonTuple', ['lat', 'lon'])
 
@@ -667,19 +666,6 @@ def add_noise(data, noise_scale=0.01, seed=None, copy=True):
     return data
 
 
-# Keep for reference. These pkl files are incompatible with latest version of Cartopy
-# f = open(ancillary_path+'geos_crs_goes16_FD.pkl', 'rb')
-# geos_goes16_fd = pickle.load(f)
-# f.close()
-#
-# f = open(ancillary_path+'geos_crs_goes16_CONUS.pkl', 'rb')
-# geos_goes16_conus = pickle.load(f)
-# f.close()
-#
-# f = open(ancillary_path+'geos_crs_H08_FD.pkl', 'rb')
-# geos_h08_fd = pickle.load(f)
-# f.close()
-
 crs_goes16_fd = Geostationary(central_longitude=-75.0, satellite_height=35786023.0, sweep_axis='x',
                                globe=Globe(ellipse=None, semimajor_axis=6378137.0, semiminor_axis=6356752.31414,
                                            inverse_flattening=298.2572221))
@@ -692,9 +678,6 @@ crs_h08_fd = Geostationary(central_longitude=140.7, satellite_height=35785.863,
                             globe=Globe(ellipse=None, semimajor_axis=6378.137, semiminor_axis=6356.7523,
                                         inverse_flattening=298.25702))
 
-geos_goes16_fd = geos_nav.GEOSNavigation()
-geos_goes16_conus = geos_nav.GEOSNavigation(CFAC=5.6E-05, LFAC=-5.6E-05, COFF=-0.101332, LOFF=0.128212, num_elems=2500, num_lines=1500)
-
 
 def get_cartopy_crs(satellite, domain):
     if satellite == 'GOES16':
@@ -816,285 +799,6 @@ exmp_file_conus = '/Users/tomrink/data/OR_ABI-L1b-RadC-M6C14_G16_s20193140811215
 # Full Disk
 exmp_file_fd = '/Users/tomrink/data/OR_ABI-L1b-RadF-M6C16_G16_s20212521800223_e20212521809542_c20212521809596.nc'
 
-# keep for reference
-# 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()
-
-# Taiwan domain:
-# lon, lat = 120.955098, 23.834310
-# elem, line = (1789, 1505)
-# # UR from Taiwan
-# lon, lat = 135.0, 35.0
-# elem_ur, line_ur = (2499, 995)
-taiwan_i0 = 1079
-taiwan_j0 = 995
-taiwan_lenx = 1420
-taiwan_leny = 1020
-# geos.transform_point(135.0, 35.0, ccrs.PlateCarree(), False)
-# geos.transform_point(106.61, 13.97, ccrs.PlateCarree(), False)
-taiwain_extent = [-3342, -502, 1470, 3510]  # GEOS coordinates, not line, elem
-
-
-# ------------ This code will not be needed when we implement a Fully Convolutional CNN -----------------------------------
-# Generate and return tiles of name_list parameters
-def make_for_full_domain_predict(h5f, name_list=None, satellite='GOES16', domain='FD', res_fac=1,
-                                 data_extent=None):
-    w_x = 16
-    w_y = 16
-    i_0 = 0
-    j_0 = 0
-    s_x = int(w_x / res_fac)
-    s_y = int(w_y / res_fac)
-
-    geos, xlen, xmin, xmax, ylen, ymin, ymax = get_cartopy_crs(satellite, domain)
-    if satellite == 'GOES16':
-        if data_extent is not None:
-            ll_pt_a = data_extent[0]
-            ll_pt_b = data_extent[1]
-
-    if satellite == 'H08':
-        xlen = taiwan_lenx
-        ylen = taiwan_leny
-        i_0 = taiwan_i0
-        j_0 = taiwan_j0
-    elif satellite == 'H09':
-        xlen = taiwan_lenx
-        ylen = taiwan_leny
-        i_0 = taiwan_i0
-        j_0 = taiwan_j0
-
-    grd_dct = {name: None for name in name_list}
-
-    cnt_a = 0
-    for ds_name in name_list:
-        fill_value, fill_value_name = get_fill_attrs(ds_name)
-        gvals = get_grid_values(h5f, ds_name, j_0, i_0, None, num_j=ylen, num_i=xlen, fill_value_name=fill_value_name, fill_value=fill_value)
-        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/s_x) - 1
-    n_y = int(ylen/s_y) - 1
-
-    r_x = xlen - (n_x * s_x)
-    x_d = 0 if r_x >= w_x else int((w_x - r_x)/s_x)
-    n_x -= x_d
-
-    r_y = ylen - (n_y * s_y)
-    y_d = 0 if r_y >= w_y else int((w_y - r_y)/s_y)
-    n_y -= y_d
-
-    ll = [j_0 + j*s_y for j in range(n_y)]
-    cc = [i_0 + i*s_x for i in range(n_x)]
-
-    for ds_name in name_list:
-        for j in range(n_y):
-            j_ul = j * s_y
-            j_ul_b = j_ul + w_y
-            for i in range(n_x):
-                i_ul = i * s_x
-                i_ul_b = i_ul + w_x
-                grd_dct_n[ds_name].append(grd_dct[ds_name][j_ul:j_ul_b, i_ul:i_ul_b])
-
-    grd_dct = {name: None for name in name_list}
-    for ds_name in name_list:
-        grd_dct[ds_name] = np.stack(grd_dct_n[ds_name])
-
-    return grd_dct, ll, cc
-
-
-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
-    i_0 = 0
-    j_0 = 0
-    s_x = int(w_x / res_fac)
-    s_y = int(w_y / res_fac)
-
-    ylen = h5f['scan_lines_along_track_direction'].shape[0]
-    xlen = h5f['pixel_elements_along_scan_direction'].shape[0]
-
-    use_nl_comp = False
-    if (day_night == 'NIGHT' or day_night == 'AUTO') and use_dnb:
-        use_nl_comp = True
-
-    grd_dct = {name: None for name in name_list}
-
-    cnt_a = 0
-    for ds_name in name_list:
-        name = ds_name
-
-        if use_nl_comp:
-            if ds_name == 'cld_reff_dcomp':
-                name = 'cld_reff_nlcomp'
-            elif ds_name == 'cld_opd_dcomp':
-                name = 'cld_opd_nlcomp'
-
-        fill_value, fill_value_name = get_fill_attrs(name)
-        gvals = get_grid_values(h5f, name, j_0, i_0, None, num_j=ylen, num_i=xlen, fill_value_name=fill_value_name, fill_value=fill_value)
-        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')
-
-    # TODO: need to investigate discrepencies with compute_lwc_iwc
-    # if use_nl_comp:
-    #     cld_phase = get_grid_values(h5f, 'cloud_phase', j_0, i_0, None, num_j=ylen, num_i=xlen)
-    #     cld_dz = get_grid_values(h5f, 'cld_geo_thick', j_0, i_0, None, num_j=ylen, num_i=xlen)
-    #     reff = grd_dct['cld_reff_dcomp']
-    #     opd = grd_dct['cld_opd_dcomp']
-    #
-    #     lwc_nlcomp, iwc_nlcomp = compute_lwc_iwc(cld_phase, reff, opd, cld_dz)
-    #     grd_dct['iwc_dcomp'] = iwc_nlcomp
-    #     grd_dct['lwc_dcomp'] = lwc_nlcomp
-
-    grd_dct_n = {name: [] for name in name_list}
-
-    n_x = int(xlen/s_x) - 1
-    n_y = int(ylen/s_y) - 1
-
-    r_x = xlen - (n_x * s_x)
-    x_d = 0 if r_x >= w_x else int((w_x - r_x)/s_x)
-    n_x -= x_d
-
-    r_y = ylen - (n_y * s_y)
-    y_d = 0 if r_y >= w_y else int((w_y - r_y)/s_y)
-    n_y -= y_d
-
-    ll = [j_0 + j*s_y for j in range(n_y)]
-    cc = [i_0 + i*s_x for i in range(n_x)]
-
-    for ds_name in name_list:
-        for j in range(n_y):
-            j_ul = j * s_y
-            j_ul_b = j_ul + w_y
-            for i in range(n_x):
-                i_ul = i * s_x
-                i_ul_b = i_ul + w_x
-                grd_dct_n[ds_name].append(grd_dct[ds_name][j_ul:j_ul_b, i_ul:i_ul_b])
-
-    grd_dct = {name: None for name in name_list}
-    for ds_name in name_list:
-        grd_dct[ds_name] = np.stack(grd_dct_n[ds_name])
-
-    lats = get_grid_values(h5f, 'latitude', j_0, i_0, None, num_j=ylen, num_i=xlen)
-    lons = get_grid_values(h5f, 'longitude', j_0, i_0, None, num_j=ylen, num_i=xlen)
-
-    ll_2d, cc_2d = np.meshgrid(ll, cc, indexing='ij')
-
-    lats = lats[ll_2d, cc_2d]
-    lons = lons[ll_2d, cc_2d]
-
-    return grd_dct, ll, cc, lats, lons
-
-
-def make_for_full_domain_predict2(h5f, satellite='GOES16', domain='FD', res_fac=1):
-    w_x = 16
-    w_y = 16
-    i_0 = 0
-    j_0 = 0
-    s_x = int(w_x / res_fac)
-    s_y = int(w_y / res_fac)
-
-    geos, xlen, xmin, xmax, ylen, ymin, ymax = get_cartopy_crs(satellite, domain)
-    if satellite == 'H08':
-        xlen = taiwan_lenx
-        ylen = taiwan_leny
-        i_0 = taiwan_i0
-        j_0 = taiwan_j0
-
-    n_x = int(xlen/s_x)
-    n_y = int(ylen/s_y)
-
-    solzen = get_grid_values(h5f, 'solar_zenith_angle', j_0, i_0, None, num_j=ylen, num_i=xlen)
-    satzen = get_grid_values(h5f, 'sensor_zenith_angle', j_0, i_0, None, num_j=ylen, num_i=xlen)
-    solzen = solzen[0:(n_y-1)*s_y:s_y, 0:(n_x-1)*s_x:s_x]
-    satzen = satzen[0:(n_y-1)*s_y:s_y, 0:(n_x-1)*s_x:s_x]
-
-    return solzen, satzen
-# -------------------------------------------------------------------------------------------
-
-
-def prepare_evaluate(h5f, name_list, satellite='GOES16', domain='FD', res_fac=1, offset=0):
-    w_x = 16
-    w_y = 16
-    i_0 = 0
-    j_0 = 0
-    s_x = w_x // res_fac
-    s_y = w_y // res_fac
-
-    geos, xlen, xmin, xmax, ylen, ymin, ymax = get_cartopy_crs(satellite, domain)
-    if satellite == 'H08':
-        xlen = taiwan_lenx
-        ylen = taiwan_leny
-        i_0 = taiwan_i0
-        j_0 = taiwan_j0
-    elif satellite == 'H09':
-        xlen = taiwan_lenx
-        ylen = taiwan_leny
-        i_0 = taiwan_i0
-        j_0 = taiwan_j0
-
-    n_x = (xlen // s_x)
-    n_y = (ylen // s_y)
-
-    # r_x = xlen - (n_x * s_x)
-    # x_d = 0 if r_x >= w_x else int((w_x - r_x)/s_x)
-    # n_x -= x_d
-    #
-    # r_y = ylen - (n_y * s_y)
-    # y_d = 0 if r_y >= w_y else int((w_y - r_y)/s_y)
-    # n_y -= y_d
-
-    ll = [(offset+j_0) + j*s_y for j in range(n_y)]
-    cc = [(offset+i_0) + i*s_x for i in range(n_x)]
-
-    grd_dct_n = {name: [] for name in name_list}
-
-    cnt_a = 0
-    for ds_name in name_list:
-        fill_value, fill_value_name = get_fill_attrs(ds_name)
-        gvals = get_grid_values(h5f, ds_name, j_0, i_0, None, num_j=ylen, num_i=xlen, fill_value_name=fill_value_name, fill_value=fill_value)
-        gvals = np.expand_dims(gvals, axis=0)
-        if gvals is not None:
-            grd_dct_n[ds_name] = gvals
-            cnt_a += 1
-
-    if cnt_a > 0 and cnt_a != len(name_list):
-        raise GenericException('weirdness')
-
-    solzen = get_grid_values(h5f, 'solar_zenith_angle', j_0, i_0, None, num_j=ylen, num_i=xlen)
-    satzen = get_grid_values(h5f, 'sensor_zenith_angle', j_0, i_0, None, num_j=ylen, num_i=xlen)
-    solzen = solzen[0:n_y*s_y:s_y, 0:n_x*s_x:s_x]
-    satzen = satzen[0:n_y*s_y:s_y, 0:n_x*s_x:s_x]
-
-    return grd_dct_n, solzen, satzen, ll, cc
-
-
-flt_level_ranges_str = {k: None for k in range(5)}
-flt_level_ranges_str[0] = '0_2000'
-flt_level_ranges_str[1] = '2000_4000'
-flt_level_ranges_str[2] = '4000_6000'
-flt_level_ranges_str[3] = '6000_8000'
-flt_level_ranges_str[4] = '8000_15000'
-
-# flt_level_ranges_str = {k: None for k in range(1)}
-# flt_level_ranges_str[0] = 'column'
-
 
 def get_cf_nav_parameters(satellite='GOES16', domain='FD'):
     param_dct = None
@@ -1152,371 +856,6 @@ def get_cf_nav_parameters(satellite='GOES16', domain='FD'):
     return param_dct
 
 
-def write_icing_file(clvrx_str_time, output_dir, preds_dct, probs_dct, x, y, lons, lats, elems, lines):
-    outfile_name = output_dir + 'icing_prediction_'+clvrx_str_time+'.h5'
-    h5f_out = h5py.File(outfile_name, 'w')
-
-    dim_0_name = 'x'
-    dim_1_name = 'y'
-
-    prob_s = []
-    pred_s = []
-
-    flt_lvls = list(preds_dct.keys())
-    for flvl in flt_lvls:
-        preds = preds_dct[flvl]
-        pred_s.append(preds)
-        icing_pred_ds = h5f_out.create_dataset('icing_prediction_level_'+flt_level_ranges_str[flvl], data=preds, dtype='i2')
-        icing_pred_ds.attrs.create('coordinates', data='y x')
-        icing_pred_ds.attrs.create('grid_mapping', data='Projection')
-        icing_pred_ds.attrs.create('missing', data=-1)
-        icing_pred_ds.dims[0].label = dim_0_name
-        icing_pred_ds.dims[1].label = dim_1_name
-
-    for flvl in flt_lvls:
-        probs = probs_dct[flvl]
-        prob_s.append(probs)
-        icing_prob_ds = h5f_out.create_dataset('icing_probability_level_'+flt_level_ranges_str[flvl], data=probs, dtype='f4')
-        icing_prob_ds.attrs.create('coordinates', data='y x')
-        icing_prob_ds.attrs.create('grid_mapping', data='Projection')
-        icing_prob_ds.attrs.create('missing', data=-1.0)
-        icing_prob_ds.dims[0].label = dim_0_name
-        icing_prob_ds.dims[1].label = dim_1_name
-
-    prob_s = np.stack(prob_s, axis=-1)
-    max_prob = np.max(prob_s, axis=2)
-
-    icing_prob_ds = h5f_out.create_dataset('max_icing_probability_column', data=max_prob, dtype='f4')
-    icing_prob_ds.attrs.create('coordinates', data='y x')
-    icing_prob_ds.attrs.create('grid_mapping', data='Projection')
-    icing_prob_ds.attrs.create('missing', data=-1.0)
-    icing_prob_ds.dims[0].label = dim_0_name
-    icing_prob_ds.dims[1].label = dim_1_name
-
-    max_lvl = np.argmax(prob_s, axis=2)
-
-    icing_pred_ds = h5f_out.create_dataset('max_icing_probability_level', data=max_lvl, dtype='i2')
-    icing_pred_ds.attrs.create('coordinates', data='y x')
-    icing_pred_ds.attrs.create('grid_mapping', data='Projection')
-    icing_pred_ds.attrs.create('missing', data=-1)
-    icing_pred_ds.dims[0].label = dim_0_name
-    icing_pred_ds.dims[1].label = dim_1_name
-
-    lon_ds = h5f_out.create_dataset('longitude', data=lons, dtype='f4')
-    lon_ds.attrs.create('units', data='degrees_east')
-    lon_ds.attrs.create('long_name', data='icing prediction longitude')
-    lon_ds.dims[0].label = dim_0_name
-    lon_ds.dims[1].label = dim_1_name
-
-    lat_ds = h5f_out.create_dataset('latitude', data=lats, dtype='f4')
-    lat_ds.attrs.create('units', data='degrees_north')
-    lat_ds.attrs.create('long_name', data='icing prediction latitude')
-    lat_ds.dims[0].label = dim_0_name
-    lat_ds.dims[1].label = dim_1_name
-
-    proj_ds = h5f_out.create_dataset('Projection', data=0, dtype='b')
-    proj_ds.attrs.create('long_name', data='Himawari Imagery Projection')
-    proj_ds.attrs.create('grid_mapping_name', data='geostationary')
-    proj_ds.attrs.create('sweep_angle_axis', data='y')
-    proj_ds.attrs.create('units', data='rad')
-    proj_ds.attrs.create('semi_major_axis', data=6378.137)
-    proj_ds.attrs.create('semi_minor_axis', data=6356.7523)
-    proj_ds.attrs.create('inverse_flattening', data=298.257)
-    proj_ds.attrs.create('perspective_point_height', data=35785.863)
-    proj_ds.attrs.create('latitude_of_projection_origin', data=0.0)
-    proj_ds.attrs.create('longitude_of_projection_origin', data=140.7)
-    proj_ds.attrs.create('CFAC', data=20466275)
-    proj_ds.attrs.create('LFAC', data=20466275)
-    proj_ds.attrs.create('COFF', data=2750.5)
-    proj_ds.attrs.create('LOFF', data=2750.5)
-
-    if x is not None:
-        x_ds = h5f_out.create_dataset('x', data=x, dtype='f8')
-        x_ds.dims[0].label = dim_0_name
-        x_ds.attrs.create('units', data='rad')
-        x_ds.attrs.create('standard_name', data='projection_x_coordinate')
-        x_ds.attrs.create('long_name', data='GOES PUG W-E fixed grid viewing angle')
-        x_ds.attrs.create('scale_factor', data=5.58879902955962e-05)
-        x_ds.attrs.create('add_offset', data=-0.153719917308037)
-        x_ds.attrs.create('CFAC', data=20466275)
-        x_ds.attrs.create('COFF', data=2750.5)
-
-        y_ds = h5f_out.create_dataset('y', data=y, dtype='f8')
-        y_ds.dims[0].label = dim_1_name
-        y_ds.attrs.create('units', data='rad')
-        y_ds.attrs.create('standard_name', data='projection_y_coordinate')
-        y_ds.attrs.create('long_name', data='GOES PUG S-N fixed grid viewing angle')
-        y_ds.attrs.create('scale_factor', data=-5.58879902955962e-05)
-        y_ds.attrs.create('add_offset', data=0.153719917308037)
-        y_ds.attrs.create('LFAC', data=20466275)
-        y_ds.attrs.create('LOFF', data=2750.5)
-
-    if elems is not None:
-        elem_ds = h5f_out.create_dataset('elems', data=elems, dtype='i2')
-        elem_ds.dims[0].label = dim_0_name
-        line_ds = h5f_out.create_dataset('lines', data=lines, dtype='i2')
-        line_ds.dims[0].label = dim_1_name
-        pass
-
-    h5f_out.close()
-
-
-def write_icing_file_nc4(clvrx_str_time, output_dir, preds_dct, probs_dct,
-                         x, y, lons, lats, elems, lines, satellite='GOES16', domain='CONUS',
-                         has_time=False, use_nan=False, prob_thresh=0.5, bt_10_4=None):
-    outfile_name = output_dir + 'icing_prediction_'+clvrx_str_time+'.nc'
-    rootgrp = Dataset(outfile_name, 'w', format='NETCDF4')
-
-    rootgrp.setncattr('Conventions', 'CF-1.7')
-
-    dim_0_name = 'x'
-    dim_1_name = 'y'
-    time_dim_name = 'time'
-    geo_coords = 'time y x'
-
-    dim_0 = rootgrp.createDimension(dim_0_name, size=x.shape[0])
-    dim_1 = rootgrp.createDimension(dim_1_name, size=y.shape[0])
-    dim_time = rootgrp.createDimension(time_dim_name, size=1)
-
-    tvar = rootgrp.createVariable('time', 'f8', time_dim_name)
-    tvar[0] = get_timestamp(clvrx_str_time)
-    tvar.units = 'seconds since 1970-01-01 00:00:00'
-
-    if not has_time:
-        var_dim_list = [dim_1_name, dim_0_name]
-    else:
-        var_dim_list = [time_dim_name, dim_1_name, dim_0_name]
-
-    prob_s = []
-
-    flt_lvls = list(preds_dct.keys())
-    for flvl in flt_lvls:
-        preds = preds_dct[flvl]
-
-        icing_pred_ds = rootgrp.createVariable('icing_prediction_level_'+flt_level_ranges_str[flvl], 'i2', var_dim_list)
-        icing_pred_ds.setncattr('coordinates', geo_coords)
-        icing_pred_ds.setncattr('grid_mapping', 'Projection')
-        icing_pred_ds.setncattr('missing', -1)
-        if has_time:
-            preds = preds.reshape((1, y.shape[0], x.shape[0]))
-        icing_pred_ds[:,] = preds
-
-    for flvl in flt_lvls:
-        probs = probs_dct[flvl]
-        prob_s.append(probs)
-
-        icing_prob_ds = rootgrp.createVariable('icing_probability_level_'+flt_level_ranges_str[flvl], 'f4', var_dim_list)
-        icing_prob_ds.setncattr('coordinates', geo_coords)
-        icing_prob_ds.setncattr('grid_mapping', 'Projection')
-        if not use_nan:
-            icing_prob_ds.setncattr('missing', -1.0)
-        else:
-            icing_prob_ds.setncattr('missing', np.nan)
-        if has_time:
-            probs = probs.reshape((1, y.shape[0], x.shape[0]))
-        if use_nan:
-            probs = np.where(probs < prob_thresh, np.nan, probs)
-        icing_prob_ds[:,] = probs
-
-    prob_s = np.stack(prob_s, axis=-1)
-    max_prob = np.max(prob_s, axis=2)
-    if use_nan:
-        max_prob = np.where(max_prob < prob_thresh, np.nan, max_prob)
-    if has_time:
-        max_prob = max_prob.reshape(1, y.shape[0], x.shape[0])
-
-    icing_prob_ds = rootgrp.createVariable('max_icing_probability_column', 'f4', var_dim_list)
-    icing_prob_ds.setncattr('coordinates', geo_coords)
-    icing_prob_ds.setncattr('grid_mapping', 'Projection')
-    if not use_nan:
-        icing_prob_ds.setncattr('missing', -1.0)
-    else:
-        icing_prob_ds.setncattr('missing', np.nan)
-    icing_prob_ds[:,] = max_prob
-
-    prob_s = np.where(prob_s < prob_thresh, -1.0, prob_s)
-    max_lvl = np.where(np.all(prob_s == -1, axis=2), -1, np.argmax(prob_s, axis=2))
-    if use_nan:
-        max_lvl = np.where(max_lvl == -1, np.nan, max_lvl)
-    if has_time:
-        max_lvl = max_lvl.reshape((1, y.shape[0], x.shape[0]))
-
-    icing_pred_ds = rootgrp.createVariable('max_icing_probability_level', 'i2', var_dim_list)
-    icing_pred_ds.setncattr('coordinates', geo_coords)
-    icing_pred_ds.setncattr('grid_mapping', 'Projection')
-    icing_pred_ds.setncattr('missing', -1)
-    icing_pred_ds[:,] = max_lvl
-
-    if bt_10_4 is not None:
-        bt_ds = rootgrp.createVariable('bt_10_4', 'f4', var_dim_list)
-        bt_ds.setncattr('coordinates', geo_coords)
-        bt_ds.setncattr('grid_mapping', 'Projection')
-        bt_ds[:,] = bt_10_4
-
-    lon_ds = rootgrp.createVariable('longitude', 'f4', [dim_1_name, dim_0_name])
-    lon_ds.units = 'degrees_east'
-    lon_ds[:,] = lons
-
-    lat_ds = rootgrp.createVariable('latitude', 'f4', [dim_1_name, dim_0_name])
-    lat_ds.units = 'degrees_north'
-    lat_ds[:,] = lats
-
-    cf_nav_dct = get_cf_nav_parameters(satellite, domain)
-
-    if satellite == 'H08':
-        long_name = 'Himawari Imagery Projection'
-    elif satellite == 'H09':
-        long_name = 'Himawari Imagery Projection'
-    elif satellite == 'GOES16':
-        long_name = 'GOES-16/17 Imagery Projection'
-
-    proj_ds = rootgrp.createVariable('Projection', 'b')
-    proj_ds.setncattr('long_name', long_name)
-    proj_ds.setncattr('grid_mapping_name', 'geostationary')
-    proj_ds.setncattr('sweep_angle_axis', cf_nav_dct['sweep_angle_axis'])
-    proj_ds.setncattr('semi_major_axis', cf_nav_dct['semi_major_axis'])
-    proj_ds.setncattr('semi_minor_axis', cf_nav_dct['semi_minor_axis'])
-    proj_ds.setncattr('inverse_flattening', cf_nav_dct['inverse_flattening'])
-    proj_ds.setncattr('perspective_point_height', cf_nav_dct['perspective_point_height'])
-    proj_ds.setncattr('latitude_of_projection_origin', cf_nav_dct['latitude_of_projection_origin'])
-    proj_ds.setncattr('longitude_of_projection_origin', cf_nav_dct['longitude_of_projection_origin'])
-
-    if x is not None:
-        x_ds = rootgrp.createVariable(dim_0_name, 'f8', [dim_0_name])
-        x_ds.units = 'rad'
-        x_ds.setncattr('axis', 'X')
-        x_ds.setncattr('standard_name', 'projection_x_coordinate')
-        x_ds.setncattr('long_name', 'fixed grid viewing angle')
-        x_ds.setncattr('scale_factor', cf_nav_dct['x_scale_factor'])
-        x_ds.setncattr('add_offset', cf_nav_dct['x_add_offset'])
-        x_ds[:] = x
-
-        y_ds = rootgrp.createVariable(dim_1_name, 'f8', [dim_1_name])
-        y_ds.units = 'rad'
-        y_ds.setncattr('axis', 'Y')
-        y_ds.setncattr('standard_name', 'projection_y_coordinate')
-        y_ds.setncattr('long_name', 'fixed grid viewing angle')
-        y_ds.setncattr('scale_factor', cf_nav_dct['y_scale_factor'])
-        y_ds.setncattr('add_offset', cf_nav_dct['y_add_offset'])
-        y_ds[:] = y
-
-    if elems is not None:
-        elem_ds = rootgrp.createVariable('elems', 'i2', [dim_0_name])
-        elem_ds[:] = elems
-        line_ds = rootgrp.createVariable('lines', 'i2', [dim_1_name])
-        line_ds[:] = lines
-        pass
-
-    rootgrp.close()
-
-
-def write_icing_file_nc4_viirs(clvrx_str_time, output_dir, preds_dct, probs_dct, lons, lats,
-                               has_time=False, use_nan=False, prob_thresh=0.5, bt_10_4=None):
-    outfile_name = output_dir + 'icing_prediction_'+clvrx_str_time+'.nc'
-    rootgrp = Dataset(outfile_name, 'w', format='NETCDF4')
-
-    rootgrp.setncattr('Conventions', 'CF-1.7')
-
-    dim_0_name = 'x'
-    dim_1_name = 'y'
-    time_dim_name = 'time'
-    geo_coords = 'longitude latitude'
-
-    dim_1_len, dim_0_len = lons.shape
-
-    dim_0 = rootgrp.createDimension(dim_0_name, size=dim_0_len)
-    dim_1 = rootgrp.createDimension(dim_1_name, size=dim_1_len)
-    dim_time = rootgrp.createDimension(time_dim_name, size=1)
-
-    tvar = rootgrp.createVariable('time', 'f8', time_dim_name)
-    tvar[0] = get_timestamp(clvrx_str_time)
-    tvar.units = 'seconds since 1970-01-01 00:00:00'
-
-    if not has_time:
-        var_dim_list = [dim_1_name, dim_0_name]
-    else:
-        var_dim_list = [time_dim_name, dim_1_name, dim_0_name]
-
-    prob_s = []
-
-    flt_lvls = list(preds_dct.keys())
-    for flvl in flt_lvls:
-        preds = preds_dct[flvl]
-
-        icing_pred_ds = rootgrp.createVariable('icing_prediction_level_'+flt_level_ranges_str[flvl], 'i2', var_dim_list)
-        icing_pred_ds.setncattr('coordinates', geo_coords)
-        icing_pred_ds.setncattr('grid_mapping', 'Projection')
-        icing_pred_ds.setncattr('missing', -1)
-        if has_time:
-            preds = preds.reshape((1, dim_1_len, dim_0_len))
-        icing_pred_ds[:,] = preds
-
-    for flvl in flt_lvls:
-        probs = probs_dct[flvl]
-        prob_s.append(probs)
-
-        icing_prob_ds = rootgrp.createVariable('icing_probability_level_'+flt_level_ranges_str[flvl], 'f4', var_dim_list)
-        icing_prob_ds.setncattr('coordinates', geo_coords)
-        icing_prob_ds.setncattr('grid_mapping', 'Projection')
-        if not use_nan:
-            icing_prob_ds.setncattr('missing', -1.0)
-        else:
-            icing_prob_ds.setncattr('missing', np.nan)
-        if has_time:
-            probs = probs.reshape((1, dim_1_len, dim_0_len))
-        if use_nan:
-            probs = np.where(probs < prob_thresh, np.nan, probs)
-        icing_prob_ds[:,] = probs
-
-    prob_s = np.stack(prob_s, axis=-1)
-    max_prob = np.max(prob_s, axis=2)
-    if use_nan:
-        max_prob = np.where(max_prob < prob_thresh, np.nan, max_prob)
-    if has_time:
-        max_prob = max_prob.reshape(1, dim_1_len, dim_0_len)
-
-    icing_prob_ds = rootgrp.createVariable('max_icing_probability_column', 'f4', var_dim_list)
-    icing_prob_ds.setncattr('coordinates', geo_coords)
-    icing_prob_ds.setncattr('grid_mapping', 'Projection')
-    if not use_nan:
-        icing_prob_ds.setncattr('missing', -1.0)
-    else:
-        icing_prob_ds.setncattr('missing', np.nan)
-    icing_prob_ds[:,] = max_prob
-
-    prob_s = np.where(prob_s < prob_thresh, -1.0, prob_s)
-    max_lvl = np.where(np.all(prob_s == -1, axis=2), -1, np.argmax(prob_s, axis=2))
-    if use_nan:
-        max_lvl = np.where(max_lvl == -1, np.nan, max_lvl)
-    if has_time:
-        max_lvl = max_lvl.reshape((1, dim_1_len, dim_0_len))
-
-    icing_pred_ds = rootgrp.createVariable('max_icing_probability_level', 'i2', var_dim_list)
-    icing_pred_ds.setncattr('coordinates', geo_coords)
-    icing_pred_ds.setncattr('grid_mapping', 'Projection')
-    icing_pred_ds.setncattr('missing', -1)
-    icing_pred_ds[:,] = max_lvl
-
-    if bt_10_4 is not None:
-        bt_ds = rootgrp.createVariable('bt_10_4', 'f4', var_dim_list)
-        bt_ds.setncattr('coordinates', geo_coords)
-        bt_ds.setncattr('grid_mapping', 'Projection')
-        bt_ds[:,] = bt_10_4
-
-    lon_ds = rootgrp.createVariable('longitude', 'f4', [dim_1_name, dim_0_name])
-    lon_ds.units = 'degrees_east'
-    lon_ds[:,] = lons
-
-    lat_ds = rootgrp.createVariable('latitude', 'f4', [dim_1_name, dim_0_name])
-    lat_ds.units = 'degrees_north'
-    lat_ds[:,] = lats
-
-    proj_ds = rootgrp.createVariable('Projection', 'b')
-    proj_ds.setncattr('grid_mapping_name', 'latitude_longitude')
-
-    rootgrp.close()
-
-
 def write_cld_prods_file_nc4(clvrx_str_time, outfile_name, cloud_fraction, cloud_frac_opd,
                             x, y, elems, lines, satellite='GOES16', domain='CONUS',
                             has_time=False):
@@ -1680,40 +1019,3 @@ def median_filter_2d(z, kernel_size=3):
 
 def median_filter_2d_single(z, kernel_size=3):
     return medfilt2d(z, kernel_size=kernel_size)
-
-
-def get_training_parameters(day_night='DAY', l1b_andor_l2='both', satellite='GOES16', use_dnb=False):
-    if day_night == 'DAY':
-        train_params_l2 = ['cld_height_acha', 'cld_geo_thick', 'cld_temp_acha', 'cld_press_acha', 'supercooled_cloud_fraction',
-                           'cld_emiss_acha', 'conv_cloud_fraction', 'cld_reff_dcomp', 'cld_opd_dcomp', 'iwc_dcomp', 'lwc_dcomp']
-
-        if satellite == 'GOES16':
-            train_params_l1b = ['temp_10_4um_nom', 'temp_11_0um_nom', 'temp_12_0um_nom', 'temp_13_3um_nom', 'temp_3_75um_nom',
-                                'temp_6_2um_nom', 'temp_6_7um_nom', 'temp_7_3um_nom', 'temp_8_5um_nom', 'temp_9_7um_nom',
-                                'refl_0_47um_nom', 'refl_0_65um_nom', 'refl_0_86um_nom', 'refl_1_38um_nom', 'refl_1_60um_nom']
-                                # 'refl_2_10um_nom']
-        elif satellite == 'H08':
-            train_params_l1b = ['temp_10_4um_nom', 'temp_12_0um_nom', 'temp_8_5um_nom', 'temp_3_75um_nom', 'refl_2_10um_nom',
-                                'refl_1_60um_nom', 'refl_0_86um_nom', 'refl_0_47um_nom']
-    else:
-        train_params_l2 = ['cld_height_acha', 'cld_geo_thick', 'cld_temp_acha', 'cld_press_acha', 'supercooled_cloud_fraction',
-                           'cld_emiss_acha', 'conv_cloud_fraction', 'cld_reff_acha', 'cld_opd_acha']
-
-        if use_dnb is True:
-            train_params_l2 = ['cld_height_acha', 'cld_geo_thick', 'cld_temp_acha', 'cld_press_acha', 'supercooled_cloud_fraction',
-                               'cld_emiss_acha', 'conv_cloud_fraction', 'cld_reff_dcomp', 'cld_opd_dcomp', 'iwc_dcomp', 'lwc_dcomp']
-
-        if satellite == 'GOES16':
-            train_params_l1b = ['temp_10_4um_nom', 'temp_11_0um_nom', 'temp_12_0um_nom', 'temp_13_3um_nom', 'temp_3_75um_nom',
-                                'temp_6_2um_nom', 'temp_6_7um_nom', 'temp_7_3um_nom', 'temp_8_5um_nom', 'temp_9_7um_nom']
-        elif satellite == 'H08':
-            train_params_l1b = ['temp_10_4um_nom', 'temp_12_0um_nom', 'temp_8_5um_nom', 'temp_3_75um_nom']
-
-    if l1b_andor_l2 == 'both':
-        train_params = train_params_l1b + train_params_l2
-    elif l1b_andor_l2 == 'l1b':
-        train_params = train_params_l1b
-    elif l1b_andor_l2 == 'l2':
-        train_params = train_params_l2
-
-    return train_params, train_params_l1b, train_params_l2
-- 
GitLab