コード例 #1
0
        # 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'
コード例 #2
0
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