diff --git a/modules/icing/pirep_goes.py b/modules/icing/pirep_goes.py index 2635dd2dd445811d67a6b486d1cf7acc71633c5f..cbb1923a7c89d37f3123bf084ccdad46f3781825 100644 --- a/modules/icing/pirep_goes.py +++ b/modules/icing/pirep_goes.py @@ -1024,8 +1024,8 @@ def fov_extract(outfile='/home/rink/fovs_l1b_out.h5', train_params=l1b_ds_list, h5f_expl.close() -def tile_extract(trnfile='/home/rink/tiles_l1b_train.h5', tstfile='/home/rink/tiles_l1b_test.h5', - train_params=l1b_ds_list, ds_types=l1b_ds_types, cld_mask_name='cloud_mask', augment=False, split=0.2): +def tile_extract(trnfile='/home/rink/tiles_l1b_train.h5', tstfile='/home/rink/tiles_l1b_test.h5', l1B_or_l2='L1B', + cld_mask_name='cloud_mask', augment=False, split=0.2): icing_int_s = [] ice_time_s = [] no_ice_time_s = [] @@ -1037,8 +1037,15 @@ def tile_extract(trnfile='/home/rink/tiles_l1b_train.h5', tstfile='/home/rink/ti h5_s_icing = [] h5_s_no_icing = [] - icing_data_dct = {ds: [] for ds in train_params} - no_icing_data_dct = {ds: [] for ds in train_params} + if l1B_or_l2 == 'L1B': + params = l1b_ds_list + param_types = l1b_ds_types + elif l1B_or_l2 == 'L2': + params = ds_list + param_types = ds_types + + icing_data_dct = {ds: [] for ds in params} + no_icing_data_dct = {ds: [] for ds in params} for fidx in range(len(icing_files)): fname = icing_files[fidx] @@ -1054,11 +1061,11 @@ def tile_extract(trnfile='/home/rink/tiles_l1b_train.h5', tstfile='/home/rink/ti for i in range(num_obs): cld_msk = f[cld_mask_name][i, 12:28, 12:28] - for ds_name in train_params: + for ds_name in params: dat = f[ds_name][i, 12:28, 12:28] - # np.where(cld_tmp < 273.0, dat, np.nan) - #keep = np.logical_or(cld_msk == 2, cld_msk == 3) # cloudy - #np.where(keep, dat, np.nan) + if l1B_or_l2 == 'L2': + keep = np.logical_or(cld_msk == 2, cld_msk == 3) # cloudy + np.where(keep, dat, np.nan) icing_data_dct[ds_name].append(dat) icing_int_s.append(icing_int[i]) @@ -1068,7 +1075,7 @@ def tile_extract(trnfile='/home/rink/tiles_l1b_train.h5', tstfile='/home/rink/ti print(fname) - for ds_name in train_params: + for ds_name in params: lst = icing_data_dct[ds_name] icing_data_dct[ds_name] = np.stack(lst, axis=0) icing_int_s = np.array(icing_int_s) @@ -1091,11 +1098,11 @@ def tile_extract(trnfile='/home/rink/tiles_l1b_train.h5', tstfile='/home/rink/ti for i in range(num_obs): cld_msk = f[cld_mask_name][i, 12:28, 12:28] - for ds_name in train_params: + for ds_name in params: dat = f[ds_name][i, 12:28, 12:28] - # np.where(cld_tmp < 273.0, dat, np.nan) - #keep = np.logical_or(cld_msk == 2, cld_msk == 3) # cloudy - #np.where(keep, dat, np.nan) + if l1B_or_l2 == 'L2': + keep = np.logical_or(cld_msk == 2, cld_msk == 3) # cloudy + np.where(keep, dat, np.nan) no_icing_data_dct[ds_name].append(dat) num_no_ice += 1 no_ice_time_s.append(times[i]) @@ -1104,7 +1111,7 @@ def tile_extract(trnfile='/home/rink/tiles_l1b_train.h5', tstfile='/home/rink/ti print(fname) - for ds_name in train_params: + for ds_name in params: lst = no_icing_data_dct[ds_name] no_icing_data_dct[ds_name] = np.stack(lst, axis=0) no_icing_int_s = np.full(num_no_ice, -1) @@ -1118,12 +1125,12 @@ def tile_extract(trnfile='/home/rink/tiles_l1b_train.h5', tstfile='/home/rink/ti icing_lats = np.concatenate([ice_lat_s, no_ice_lat_s]) data_dct = {} - for ds_name in train_params: + for ds_name in params: data_dct[ds_name] = np.concatenate([icing_data_dct[ds_name], no_icing_data_dct[ds_name]]) # do sort ------------------------------------- ds_indexes = np.argsort(icing_times) - for ds_name in train_params: + for ds_name in params: data_dct[ds_name] = data_dct[ds_name][ds_indexes] icing_intensity = icing_intensity[ds_indexes] icing_times = icing_times[ds_indexes] @@ -1138,7 +1145,7 @@ def tile_extract(trnfile='/home/rink/tiles_l1b_train.h5', tstfile='/home/rink/ti # --------------------------------------------- trn_data_dct = {} - for ds_name in train_params: + for ds_name in params: trn_data_dct[ds_name] = data_dct[ds_name][trn_idxs,] trn_icing_intensity = icing_intensity[trn_idxs,] trn_icing_times = icing_times[trn_idxs,] @@ -1147,7 +1154,7 @@ def tile_extract(trnfile='/home/rink/tiles_l1b_train.h5', tstfile='/home/rink/ti # Data augmentation ------------------------------------------------------------- if augment: - trn_data_dct_aug = {ds_name: [] for ds_name in train_params} + trn_data_dct_aug = {ds_name: [] for ds_name in params} trn_icing_intensity_aug = [] trn_icing_times_aug = [] trn_icing_lons_aug = [] @@ -1159,7 +1166,7 @@ def tile_extract(trnfile='/home/rink/tiles_l1b_train.h5', tstfile='/home/rink/ti icelon = trn_icing_lons[k] icelat = trn_icing_lats[k] if iceint == 3 or iceint == 4 or iceint == 5 or iceint == 6: - for ds_name in train_params: + for ds_name in params: dat = trn_data_dct[ds_name] trn_data_dct_aug[ds_name].append(np.fliplr(dat[k,])) trn_data_dct_aug[ds_name].append(np.flipud(dat[k,])) @@ -1181,14 +1188,14 @@ def tile_extract(trnfile='/home/rink/tiles_l1b_train.h5', tstfile='/home/rink/ti trn_icing_lats_aug.append(icelat) trn_icing_lats_aug.append(icelat) - for ds_name in train_params: + for ds_name in params: trn_data_dct_aug[ds_name] = np.stack(trn_data_dct_aug[ds_name]) trn_icing_intensity_aug = np.stack(trn_icing_intensity_aug) trn_icing_times_aug = np.stack(trn_icing_times_aug) trn_icing_lons_aug = np.stack(trn_icing_lons_aug) trn_icing_lats_aug = np.stack(trn_icing_lats_aug) - for ds_name in train_params: + for ds_name in params: trn_data_dct[ds_name] = np.concatenate([trn_data_dct[ds_name], trn_data_dct_aug[ds_name]]) trn_icing_intensity = np.concatenate([trn_icing_intensity, trn_icing_intensity_aug]) trn_icing_times = np.concatenate([trn_icing_times, trn_icing_times_aug]) @@ -1197,17 +1204,17 @@ def tile_extract(trnfile='/home/rink/tiles_l1b_train.h5', tstfile='/home/rink/ti # do sort ds_indexes = np.argsort(trn_icing_times) - for ds_name in train_params: + for ds_name in params: trn_data_dct[ds_name] = trn_data_dct[ds_name][ds_indexes] trn_icing_intensity = trn_icing_intensity[ds_indexes] trn_icing_times = trn_icing_times[ds_indexes] trn_icing_lons = trn_icing_lons[ds_indexes] trn_icing_lats = trn_icing_lats[ds_indexes] - write_file(trnfile, train_params, trn_data_dct, trn_icing_intensity, trn_icing_times, trn_icing_lons, trn_icing_lats) + write_file(trnfile, params, param_types, trn_data_dct, trn_icing_intensity, trn_icing_times, trn_icing_lons, trn_icing_lats) tst_data_dct = {} - for ds_name in train_params: + for ds_name in params: tst_data_dct[ds_name] = data_dct[ds_name][tst_idxs,] tst_icing_intensity = icing_intensity[tst_idxs,] tst_icing_times = icing_times[tst_idxs,] @@ -1227,14 +1234,14 @@ def tile_extract(trnfile='/home/rink/tiles_l1b_train.h5', tstfile='/home/rink/ti # do sort ds_indexes = np.argsort(tst_icing_times) - for ds_name in train_params: + for ds_name in params: tst_data_dct[ds_name] = tst_data_dct[ds_name][ds_indexes] tst_icing_intensity = tst_icing_intensity[ds_indexes] tst_icing_times = tst_icing_times[ds_indexes] tst_icing_lons = tst_icing_lons[ds_indexes] tst_icing_lats = tst_icing_lats[ds_indexes] - write_file(tstfile, train_params, tst_data_dct, tst_icing_intensity, tst_icing_times, tst_icing_lons, tst_icing_lats) + write_file(tstfile, params, param_types, tst_data_dct, tst_icing_intensity, tst_icing_times, tst_icing_lons, tst_icing_lats) # --- close files for h5f in h5_s_icing: @@ -1244,12 +1251,12 @@ def tile_extract(trnfile='/home/rink/tiles_l1b_train.h5', tstfile='/home/rink/ti h5f.close() -def write_file(outfile, train_params, data_dct, icing_intensity, icing_times, icing_lons, icing_lats): +def write_file(outfile, params, param_types, data_dct, icing_intensity, icing_times, icing_lons, icing_lats): h5f_expl = h5py.File(a_clvr_file, 'r') h5f_out = h5py.File(outfile, 'w') - for idx, ds_name in enumerate(train_params): - dt = ds_types[idx] + for idx, ds_name in enumerate(params): + dt = param_types[idx] data = data_dct[ds_name] h5f_out.create_dataset(ds_name, data=data, dtype=dt) @@ -1269,7 +1276,7 @@ def write_file(outfile, train_params, data_dct, icing_intensity, icing_times, ic lat_ds.attrs.create('long_name', data='PIREP latitude') # copy relevant attributes - for ds_name in train_params: + for ds_name in params: h5f_ds = h5f_out[ds_name] h5f_ds.attrs.create('standard_name', data=h5f_expl[ds_name].attrs.get('standard_name')) h5f_ds.attrs.create('long_name', data=h5f_expl[ds_name].attrs.get('long_name'))