diff --git a/modules/icing/pirep_goes.py b/modules/icing/pirep_goes.py index 834b151ec495213d5d8f6fe7ec7cf777406d140b..517371d39e8502187ce56374a51f82ea1b3b13af 100644 --- a/modules/icing/pirep_goes.py +++ b/modules/icing/pirep_goes.py @@ -278,30 +278,38 @@ def analyze(ice_dct, no_ice_dct): def apply_qc_icing_pireps(icing_alt, cld_top_hgt, cld_phase, cld_opd, bt_11um, cld_mask): - opd_threshold = 6 + opd_threshold = 2 closeness = 100.0 # meters num_obs = len(icing_alt) - cld_mask = cld_mask.reshape((num_obs, -1)) - cld_top_hgt = cld_top_hgt.reshape((num_obs, -1)) - cld_phase = cld_phase.reshape((num_obs, -1)) - cld_opd = cld_opd.reshape((num_obs, -1)) - bt_11um = bt_11um.reshape((num_obs, -1)) - - keep_0 = np.logical_or(cld_mask == 2, cld_mask == 3) # cloudy - keep_1 = np.invert(np.isnan(cld_top_hgt)) - keep_2 = np.invert(np.isnan(bt_11um)) - keep_3 = np.invert(np.isnan(cld_opd)) - keep = keep_0 & keep_1 & keep_2 & keep_3 - - keep = np.where(keep, cld_top_hgt[:, ] > icing_alt[:], False) - keep = np.where(keep, - np.invert((cld_phase[:, ] == 3) & - np.logical_and(cld_top_hgt[:, ]+closeness > icing_alt[:], cld_top_hgt[:, ]-closeness < icing_alt[:])), - False) - - keep = np.where(keep, (cld_opd[:, ] > opd_threshold) & (cld_phase[:, ] == 3) & (cld_top_hgt[:, ] > icing_alt[:]), False) - keep = np.where(keep, np.invert((cld_phase[:, ] == 3) & (cld_opd[:, ] < 0.1) & (cld_top_hgt[:, ] > icing_alt[:]), False)) - keep = np.where(keep, np.invert(bt_11um[:, ] > 270.0), False) - keep = np.where(keep, np.invert(bt_11um[:, ] < 228.0), False) - - return keep + cld_mask = cld_mask[:, :, :].reshape((num_obs, -1)) + cld_top_hgt = cld_top_hgt[:, :, :].reshape((num_obs, -1)) + cld_phase = cld_phase[:, :, :].reshape((num_obs, -1)) + cld_opd = cld_opd[:, :, :].reshape((num_obs, -1)) + bt_11um = bt_11um[:, :, :].reshape((num_obs, -1)) + + mask = [] + for i in range(num_obs): + keep_0 = np.logical_or(cld_mask[i,] == 2, cld_mask[i,] == 3) # cloudy + keep_1 = np.invert(np.isnan(cld_top_hgt[i,])) + keep_2 = np.invert(np.isnan(bt_11um[i,])) + keep_3 = np.invert(np.isnan(cld_opd[i,])) + keep = keep_0 & keep_1 & keep_2 & keep_3 + + keep = np.where(keep, cld_top_hgt[i,] > icing_alt[i], False) + + keep = np.where(keep, + np.invert((cld_phase[i,] == 3) & + np.logical_and(cld_top_hgt[i,]+closeness > icing_alt[i], cld_top_hgt[i,]-closeness < icing_alt[i])), + False) + + keep = np.where(keep, (cld_opd[i,] >= opd_threshold) & (cld_phase[i,] == 4) & (cld_top_hgt[i,] > icing_alt[i]), False) + + keep = np.where(keep, np.invert((cld_phase[i,] == 3) & (cld_opd[i,] < 0.1) & (cld_top_hgt[i,] > icing_alt[i])), False) + + keep = np.where(keep, np.invert(bt_11um[i,] > 270.0), False) + + keep = np.where(keep, np.invert(bt_11um[i,] < 228.0), False) + + mask.append(keep) + + return mask