From 45b12b310641c248dc3173588a176b4103277d06 Mon Sep 17 00:00:00 2001 From: tomrink <rink@ssec.wisc.edu> Date: Mon, 16 Nov 2020 03:25:16 -0600 Subject: [PATCH] snapshot... --- modules/amv/intercompare.py | 111 ++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) diff --git a/modules/amv/intercompare.py b/modules/amv/intercompare.py index 294e7b6c..1cec919c 100644 --- a/modules/amv/intercompare.py +++ b/modules/amv/intercompare.py @@ -13,6 +13,7 @@ import h5py import time from scipy.interpolate import interp1d from util.util import minimize_quadratic +from netCDF4 import Dataset #-- AMV intercompare stuff ------------------------------------------ @@ -106,6 +107,116 @@ def filter_amvs(amvs, qitype=amv_cqi_idx, qival=50, lat_range=None): else: return amvs[keep, :] +def get_raob_dict_cdf(filename): + rtgrp = Dataset(filename, 'r', format='NETCDF3') + + sta_lats_var = rtgrp['staLat'] + sta_lats_var.set_always_mask(False) + sta_lats_var.set_auto_mask(False) + + sta_lons_var = rtgrp['staLon'] + sta_lons_var.set_always_mask(False) + sta_lons_var.set_auto_mask(False) + + sta_lats = sta_lats_var[:] + sta_lons = sta_lons_var[:] + + sta_msk = np.logical_and(sta_lats > -90.0, sta_lats < 90.0) + # sta_msk = np.invert(sta_lats._mask) + num_sta = np.sum(sta_msk) + sta_lats = sta_lats[sta_msk] + sta_lons = sta_lons[sta_msk] + + # mandatory levels + man_levs = rtgrp['prMan'] + man_levs = man_levs[:, :] + num_man_levs = rtgrp['numMand'] + num_man_levs = num_man_levs[:]._data + man_temp = rtgrp['tpMan'] + man_temp = man_temp[:, :] + man_spd = rtgrp['wsMan'] + man_spd = man_spd[:, :] + man_dir = rtgrp['wdMan'] + man_dir = man_dir[:, :] + + # significant levels + sig_levs = rtgrp['prSigW'] + sig_levs = sig_levs[:, :] + num_sig_levs = rtgrp['numSigW'] + num_sig_levs = num_sig_levs[:]._data + sig_temp = rtgrp['tpSigW'] + sig_temp = sig_temp[:, :] + sig_spd = rtgrp['wsSigW'] + sig_spd = sig_spd[:, :] + sig_dir = rtgrp['wdSigW'] + sig_dir = sig_dir[:, :] + + man_levs = man_levs[sta_msk,] + num_man_levs = num_man_levs[sta_msk] + + sig_levs = sig_levs[sta_msk,] + num_sig_levs = num_sig_levs[sta_msk] + + man_temp = man_temp[sta_msk,] + man_spd = man_spd[sta_msk,] + man_dir = man_dir[sta_msk,] + + sig_temp = sig_temp[sta_msk,] + sig_spd = sig_spd[sta_msk,] + sig_dir = sig_dir[sta_msk,] + + raob_dct = {} + for k in range(num_sta): + lon = sta_lons[k] + lat = sta_lats[k] + + vld_man = np.invert(man_levs[k]._mask) + vld_man = np.logical_and(vld_man, np.invert(man_spd[k]._mask)) + vld_man = np.logical_and(vld_man, np.invert(man_dir[k]._mask)) + + vld_sig = np.invert(sig_levs[k]._mask) + vld_sig = np.logical_and(vld_sig, np.invert(sig_spd[k]._mask)) + vld_sig = np.logical_and(vld_sig, np.invert(sig_dir[k]._mask)) + + vld_man_levs = man_levs[k, vld_man] + vld_man_spd = man_spd[k, vld_man] + vld_man_dir = man_dir[k, vld_man] + vld_man_temp = man_temp[k, vld_man] + + s_idxs = np.argsort(vld_man_levs) + s_man_levs = vld_man_levs[s_idxs] + s_man_spd = vld_man_spd[s_idxs] + s_man_dir = vld_man_dir[s_idxs] + s_man_temp = vld_man_temp[s_idxs] + + vld_sig_levs = sig_levs[k, vld_sig] + vld_sig_spd = sig_spd[k, vld_sig] + vld_sig_dir = sig_dir[k, vld_sig] + vld_sig_temp = sig_temp[k, vld_sig] + + all_levs = np.append(s_man_levs, vld_sig_levs) + all_temp = np.append(s_man_temp, vld_sig_temp) + all_spd = np.append(s_man_spd, vld_sig_spd) + all_dir = np.append(s_man_dir, vld_sig_dir) + + if len(all_levs) == 0: + continue + + s_idxs = np.argsort(all_levs) + all_levs = all_levs[s_idxs] + all_temp = all_temp[s_idxs] + all_spd = all_spd[s_idxs] + + all_levs = all_levs[::-1] + all_temp = all_temp[::-1] + all_spd = all_spd[::-1] + all_dir = all_dir[::-1] + + raob = np.stack([all_levs._data, all_temp._data, all_dir._data, all_spd._data], axis=1) + + raob_dct[(lat, lon)] = raob + + return raob_dct def get_raob_dict(filename): header = None -- GitLab