# print hind_url hind_file = open_url(hind_url) pcp_hind = hind_file['pcp'] hind = np.asarray(pcp_hind) # Arquivo observação obs_url = "http://opendap.funceme.br:8001/data/OBSERVATION/CMAP/1.0DG/GLB/cmap.{0}-{1}-1.0dg.fix.nc".format(myhind, mytseason.upper()) # print obs_url obs_file = open_url(obs_url) pcp_obs = obs_file['pcp'] obs = np.asarray(pcp_obs) myfcst = fsct[0, i_lat, i_lon] myhind = hind[:, i_lat, i_lon] myobs = obs[:, i_lat, i_lon] below, normal, above, fsignal, fstd, opad = cs.compute_probability(myfcst, myhind, myobs) fsignal = np.expand_dims(fsignal, axis=0) pm.plotnorm(fsignal, fstd, opad, fig_name=figname, fig_title='') shutil.copy2(figname, figrealname) else: # se a imagem ja tiver sido gerada, apenas faz copia para exibir no site shutil.copy2(figrealname, figname) elif myopt == "a": print 't1' pass else: print 't2'
def compute_reliability(fcst, clim): ''' fcst e clim devem ter as mesmas dims fcst - Ex: previsões do modelo clim - Ex: climatologia do modelo ou observado :param: fcst - Array com 3 dimensões: (tempo, lat, lon) :type param: numpy array 3d :param: clim - Array com 3 dimensões: (tempo, lat, lon) :type param: numpy array 3d :return: arquivo de verificação ''' # transforma num masked array para retirar a mascara # pcp_masked = np.ma.array(obs) # mask_obs = pcp_masked.mask # if mask_obs: # pcp_nan = np.where(mask_obs, np.NaN,obs) # else: # pcp_nan = obs # Verifica os limites dos tercis # Não é do mesmo modo que é calculado na previsão! # Na previsão usa-se uma normal. xlow = 1. / 3. * 100 xup = 2. / 3. * 100 pcp_low = np.percentile(clim, xlow, axis=0) pcp_up = np.percentile(clim, xup, axis=0) # path_below = "reliability_below.txt" # path_normal = "reliability_normal.txt" # path_above = "reliability_above.txt" # f_verifc_below = open(path_below, 'w') # f_verifc_normal = open(path_normal, 'w') # f_verifc_above = open(path_above, 'w') f_verifc_below = [] f_verifc_normal = [] f_verifc_above = [] for i in range(0, obs.shape[0]): p_below, p_normal, p_above, fcst_signal, fcst_std, obs_pad, dummy =\ cs.compute_probability(model[i], model, pcp_nan, lentime) p_below, p_normal, p_above = p_below/100., p_normal/100., p_above/100. obs_below = (obs[i, :, :] < pcp_low) obs_normal = ((obs[i, :, :] >= pcp_low) & (obs[i, :, :] <= pcp_up)) obs_above = (obs[i, :, :] > pcp_up) for j in range(0,obs.shape[1]): for k in range(0,obs.shape[2]): # Por que True? if obs_below[j, k] == True: # f_verifc_below.write("{0} {1} \n".format(p_below[j,k], 1)) f_verifc_below.append(p_below[j, k], 1) else: # f_verifc_below.write("{0} {1} \n".format(p_below[j,k], 0)) f_verifc_below.append(p_below[j, k], 0) if obs_normal[j, k] == True: # f_verifc_normal.write("{0} {1} \n".format(p_normal[j, k], 1)) f_verifc_normal.append(p_normal[j, k], 1)) else: # f_verifc_normal.write("{0} {1} \n".format(p_normal[j,k], 0)) f_verifc_normal.append(p_normal[j, k], 0)) if obs_above[j, k] == True: # f_verifc_above.write("{0} {1} \n".format(p_above[j, k], 1)) f_verifc_above.append(p_above[j, k], 1) else: # f_verifc_above.write("{0} {1} \n".format(p_above[j,k], 0)) f_verifc_above.append(p_above[j, k], 0) return f_verifc_below, f_verifc_normal, f_verifc_above