diff --git a/modules/icing/util.py b/modules/icing/util.py index 98e9517b9ab50a714c75645a7d41593bce3f4dce..95c7724ade4b06e6e1f98d6b1e3a2c3b04f070e4 100644 --- a/modules/icing/util.py +++ b/modules/icing/util.py @@ -359,14 +359,14 @@ def prepare_evaluate1x1(h5f, name_list, satellite='GOES16', domain='FD', res_fac 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} + grd_s = [] 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_n[ds_name] = gvals.flatten() + grd_s.append(gvals.flatten()) cnt_a += 1 if cnt_a > 0 and cnt_a != len(name_list): @@ -379,7 +379,9 @@ def prepare_evaluate1x1(h5f, name_list, satellite='GOES16', domain='FD', res_fac satzen = satzen[0:n_y*s_y:s_y, 0:n_x*s_x:s_x] cldmsk = cldmsk[0:n_y*s_y:s_y, 0:n_x*s_x:s_x] - return grd_dct_n, solzen.flatten(), satzen.flatten(), cldmsk.flatten(), ll, cc + varX = np.stack(grd_s, axis=1) + + return varX, solzen.flatten(), satzen.flatten(), cldmsk.flatten(), ll, cc flt_level_ranges_str = {k: None for k in range(6)} @@ -1492,8 +1494,10 @@ def run_icing_predict_image_1x1(clvrx_dir='/Users/tomrink/data/clavrx/RadC/', ou # use_flight_altitude=use_flight_altitude) # load parameter stats and model from disk - stdSclr = joblib.load('/home/rink/stdSclr_4.pkl') - model = joblib.load('/home/rink/icing_gbm.pkl') + stdSclr_day = joblib.load('/home/rink/stdSclr_4_day.pkl') + day_model = joblib.load('/home/rink/icing_gbm_day.pkl') + stdSclr_nght = joblib.load('/home/rink/stdSclr_4_nght.pkl') + nght_model = joblib.load('/home/rink/icing_gbm_nght.pkl') if use_flight_altitude is True: flight_levels = [0, 1, 2, 3, 4] @@ -1518,7 +1522,8 @@ def run_icing_predict_image_1x1(clvrx_dir='/Users/tomrink/data/clavrx/RadC/', ou # train_params = day_train_params # elif day_night == 'NIGHT': # train_params = nght_train_params - train_params = ['cld_temp_acha', 'supercooled_cloud_fraction', 'cld_reff_dcomp', 'cld_opd_dcomp'] + day_train_params = ['cld_temp_acha', 'supercooled_cloud_fraction', 'cld_reff_dcomp', 'cld_opd_dcomp'] + nght_train_params = ['cld_temp_acha', 'supercooled_cloud_fraction', 'cld_reff_acha', 'cld_opd_acha'] if satellite == 'H08': clvrx_ds = CLAVRx_H08(clvrx_dir) @@ -1551,62 +1556,38 @@ def run_icing_predict_image_1x1(clvrx_dir='/Users/tomrink/data/clavrx/RadC/', ou keep_lons = None keep_lats = None - data_dct, solzen, satzen, cldmsk, ll, cc = prepare_evaluate1x1(h5f, name_list=train_params, satellite=satellite, domain=domain, offset=8) + varX_day, solzen, satzen, cldmsk, ll, cc = prepare_evaluate1x1(h5f, name_list=day_train_params, satellite=satellite, domain=domain, offset=8) + varX_ngth, solzen, satzen, cldmsk, ll, cc = prepare_evaluate1x1(h5f, name_list=nght_train_params, satellite=satellite, domain=domain, offset=8) num_elems = len(cc) num_lines = len(ll) day_idxs = solzen < 80.0 - day_idxs = day_idxs.flatten() num_day_tiles = np.sum(day_idxs) nght_idxs = solzen > 100.0 - nght_idxs = nght_idxs.flatten() num_nght_tiles = np.sum(nght_idxs) - # initialize output arrays - probs_2d_dct = {flvl: None for flvl in flight_levels} - preds_2d_dct = {flvl: None for flvl in flight_levels} - for flvl in flight_levels: - fd_preds = np.zeros(num_lines * num_elems, dtype=np.int8) - fd_preds[:] = -1 - fd_probs = np.zeros(num_lines * num_elems, dtype=np.float32) - fd_probs[:] = -1.0 - preds_2d_dct[flvl] = fd_preds - probs_2d_dct[flvl] = fd_probs + cldy_idxs = cldmsk >= 2 + num_cldy_tiles = np.sum(cldy_idxs) + + fd_preds = np.zeros(num_lines * num_elems, dtype=np.int8) + fd_probs = np.zeros(num_lines * num_elems, dtype=np.float32) + fd_preds[:] = -1 + fd_probs[:] = -1.0 if (day_night == 'AUTO' or day_night == 'DAY') and num_day_tiles > 0: - for flvl in flight_levels: - preds = preds_day_dct[flvl].flatten() - probs = probs_day_dct[flvl].flatten() - fd_preds = preds_2d_dct[flvl] - fd_probs = probs_2d_dct[flvl] - fd_preds[day_idxs] = preds[day_idxs] - fd_probs[day_idxs] = probs[day_idxs] + varX_std = stdSclr_day.transform(varX_day) + probs = day_model.predict_proba(varX_std) + fd_probs[:] = probs[day_idxs] if (day_night == 'AUTO' or day_night == 'NIGHT') and num_nght_tiles > 0: - for flvl in flight_levels: - preds = preds_nght_dct[flvl].flatten() - probs = probs_nght_dct[flvl].flatten() - fd_preds = preds_2d_dct[flvl] - fd_probs = probs_2d_dct[flvl] - fd_preds[nght_idxs] = preds[nght_idxs] - fd_probs[nght_idxs] = probs[nght_idxs] + varX_std = stdSclr_nght.transform(varX_ngth) + probs = nght_model.predict_proba(varX_std) + fd_probs[:] = probs[nght_idxs] - for flvl in flight_levels: - fd_preds = preds_2d_dct[flvl] - fd_probs = probs_2d_dct[flvl] - preds_2d_dct[flvl] = fd_preds.reshape((num_lines, num_elems)) - probs_2d_dct[flvl] = fd_probs.reshape((num_lines, num_elems)) - - prob_s = [] - for flvl in flight_levels: - probs = probs_2d_dct[flvl] - prob_s.append(probs) - prob_s = np.stack(prob_s, axis=-1) - max_prob = np.max(prob_s, axis=2) - max_prob = np.where(max_prob < 0.5, np.nan, max_prob) + max_prob = fd_probs.reshape((num_lines, num_elems)) make_icing_image(h5f, max_prob, None, None, clvrx_str_time, satellite, domain, ice_lons_vld=keep_lons, ice_lats_vld=keep_lats, extent=extent)