tri = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC']

if myopt == "p":

    # Arquivo previsão
    fsct_url = "http://opendap.funceme.br:8001/data/ECHAM46/FORECAST/{0}/{1}/PCP/TRI/pcp-daily-total-ec4amip_{2}{3}.1.0dg.fix.nc".format(myfyear, tri[myfmon-1], myfyear, mytseason)
    # print fsct_url
    fsct_file = open_url(fsct_url)
    pcp_fsct = fsct_file['pcp']
    lats_fsct = fsct_file['lat']
    lons_fsct = fsct_file['lon']
    fsct = np.asarray(pcp_fsct)
    lats = np.asarray(lats_fsct)
    lons = np.asarray(lons_fsct)

    n_lon, n_lat, i_lon, i_lat = dg.gridpoint(lons, lats, mylon, mylat)

    n_lon = str(n_lon)
    n_lon = n_lon.replace(".","")
    n_lat = str(n_lat)
    n_lat = n_lat.replace(".","")
    # ponto do modelo a ser plotado
    figrealname = "/var/www/html/app/previsao-climatica/previsao_probabilistica/img/curve_prob_{0}_{1}.png".format(n_lon, n_lat)

    mylon = str(mylon)
    mylon = mylon.replace(".","")
    mylat = str(mylat)
    mylat = mylat.replace(".","")
    figname = "/var/www/html/app/previsao-climatica/previsao_probabilistica/img/curve_prob_%s_%s.png" % (mylon, mylat)

    # se a imagem nao tiver sido gerada anteriomente
def ProbMemb(fcst_month, fcst_year, target_year, target_months,
             hind_period, nyears, shapef, nmemb=20):

    """
    Esta função calcula a curva de probabilida a previsão (sinal)
    para todos os membros.

    :param fcst_month: Mês previsão
    :type fcst_month: str

    :param fcst_year: Ano do mês previsão
    :type fcst_year: str

    :param target_year: Ano alvo da previsão
    :type target_year: str

    :param target_months: Trimestre alvo da previsão
    :type target_months: str

    :param hind_period: Período do hindcast
    :type hind_period: str

    :param nyears: Número de anos do hindcast
    :type nyears: int

    :param shapef: Arquivo de txt com pontos da região
    :type shapef: arquivo de txt

    :param nmemb: Número de membros da preevisão/hinscast
    :type nmemb: int

    :return sig_membs_ce: Sinal da previsão para todos os membros

    """

    #### OBSERVADO ####

    print "\n +++ LENDO A CLIMATOLOGIA OBSERVADA +++\n"

    if target_year > fcst_year:

        url = 'http://opendap2.funceme.br:8001/data/dados-obs/cmap/2.5dg/' \
              'cmap.precip.season.accum.standard.2.5dg.{0}.{1}.nc' \
              .format("1982-2011", target_months)

    else:

        url = 'http://opendap2.funceme.br:8001/data/dados-obs/cmap/2.5dg/' \
              'cmap.precip.season.accum.standard.2.5dg.{0}.{1}.nc' \
              .format("1981-2010", target_months)

    print target_year, fcst_year

    print url

    obs_data = Dataset(url, 'r')

    obs_aux = obs_data.variables['precip'][:]

    obs_lons_360 = obs_data.variables['lon'][:]

    obs_lats = obs_data.variables['lat'][:]

    obs_data.close()

    obs_aux, obs_lons = shiftgrid(180., obs_aux, obs_lons_360, start=False)

    print "\n +++ INTERPOLANDO CLIMATOLOGIA OBSERVADA +++ \n"

    # Interpolação para 1 grau

    # Nova grade de 1 grau
    newlats = np.linspace(-90, 90, 181)

    newlons = np.linspace(-180, 179, 360)

    obs = np.zeros((int(obs_aux.shape[0]), int(len(newlats)), int(len(newlons))))

    x, y = np.meshgrid(newlons, newlats)

    for i in range(0, int(obs_aux.shape[0])):

        obs[i, :, :] = interp(obs_aux[i, :, :], obs_lons, obs_lats, x, y, order=1)


    #### PREVISÃO ####

    print " +++ LENDO OS MEMBROS PREVISÃO +++ \n"

    #~ Monta a url do ano da previsão com todos os membros
    url = 'http://opendap2.funceme.br:8001/data/dados-pos-processados-echam46' \
          '/forecasts/{0}/{2}/{1}/PCP/TRI/pcp-seasonacc-echam46-hind{0}-en%2.2d-{1}{2}_{3}{4}.ctl' \
          .format(hind_period, fcst_month, fcst_year, target_year, target_months)

    files = [url % d for d in range(51, 71)]

    # Inicializa array que irá receber os membros do ano da previsão
    fcst_t42 = np.zeros((20, 64, 128)) * 0

    for i, nc in enumerate(files):

        print "", nc

        fcst_data = Dataset(nc, 'r')

        fcst_aux = fcst_data.variables['pcp'][:]

        fcst_lons_360 = fcst_data.variables['longitude'][:]

        fcst_lats = fcst_data.variables['latitude'][:]

        fcst_data.close()

        fcst_aux, fcst_lons = shiftgrid(180., fcst_aux, fcst_lons_360, start=False)

        fcst_t42[i, :, :] = fcst_aux[0, :, :]

    print "\n    +++ INTERPOLANDO OS MEMBROS PREVISÃO +++ \n"

    # Interpolação para 1 grau

    # Nova grade de 1 grau

    fcst = np.zeros((20, int(len(newlats)), int(len(newlons)))) * 0

    for i in range(20):

        fcst[i, :, :] = interp(fcst_t42[i, :, :], fcst_lons, fcst_lats, x, y, order=1)


    #### HINDCAST ####

    print " +++ LENDO OS MEMBROS DE CADA ANO DO HINDCAST +++\n"

    print " ==> AGUARDE...\n"

    # Inicializa array que irá receber todos os anos e todos os membros

    hind_t42 = np.zeros((30, 20, 64, 128)) * 0

    for i, hind_year in enumerate(range(1981, 2011)):

        if target_year > fcst_year:

            target_hind_year = int(hind_year) + 1

        else:

            target_hind_year = hind_year

        # Monta a url de cada ano com todos os membros
        url = 'http://opendap2.funceme.br:8001/data/dados-pos-processados-echam46' \
              '/hindcasts/{0}/{1}/PCP/TRI/pcp-seasonacc-echam46-hind{0}-en%2.2d-{1}{3}_{4}{2}.ctl' \
              .format(hind_period, fcst_month, target_months, hind_year, target_hind_year)

        files = [url % d for d in range(51, 71)]

        # Inicializa array que irá receber os membros para cada ano
        hindmemb = np.zeros((20, 64, 128)) * 0

        for j, nc in enumerate(files):

            print nc

            hind_data = Dataset(nc, 'r')

            hind_aux = hind_data.variables['pcp'][:]

            hind_lons_360 = hind_data.variables['longitude'][:]

            hind_lats = hind_data.variables['latitude'][:]

            hind_data.close()

            hind_aux, hind_lons = shiftgrid(180., hind_aux, hind_lons_360, start=False)

            hindmemb[j, :, :] = hind_aux[0, :, :]

        hind_t42[i, :, :, :] = hindmemb[:, :, :]

    print "\n +++ INTERPOLANDO OS ANOS DE CADA MEMBRO DO HINDCAST +++ \n"

    print " ==> AGUARDE... \n"

    # Interpolação para 1 grau

    hind = np.zeros((30 , 20, int(len(newlats)), int(len(newlons)))) * 0

    for i in range(20):

        #~ print " MEMBRO:", i + 51

        for j in range(30):

            hind[j, i, :, :] = interp(hind_t42[j, i, :, :], hind_lons, hind_lats, x, y, order=1)


    print " +++ APLICANDO MÁSCARA DA REGIÃO +++ \n"

    # Retorna matriz com os pontos sobre o Ceará
    pointsgrid, lonlatgrid, mymatriz = dg.pointinside(newlats, newlons, shapefile=shapef)

    ce_fcst = np.ma.array(fcst, mask=np.tile(mymatriz, (fcst.shape[0], 1)))

    ce_hind = np.ma.array(hind, mask=np.tile(mymatriz, (hind.shape[0], hind.shape[1], 1)))

    ce_obs = np.ma.array(obs, mask=np.tile(mymatriz, (obs.shape[0], 1)))


    print " +++ MÉDIA DOS PONTOS SOBRE A REGIÃO PARA TODOS OS MEMBROS +++ \n"

    ave_ce_fcst = np.zeros((int(nmemb), 1)) * 0

    ave_ce_hind = np.zeros((int(nyears), int(nmemb), 1)) * 0

    ave_ce_obs = np.zeros((int(nyears), 1)) * 0

    for i in range(int(nmemb)):

        ave_ce_fcst[i, 0] = ce_fcst[i, :, :].mean()

        for j in range(int(nyears)):

            ave_ce_hind[j, i, 0] = ce_hind[j, i, :, :].mean()

    for i in range(int(nyears)):

            ave_ce_obs[i, 0] = ce_obs[i, :, :].mean()

    # print ave_ce_fcst, ave_ce_hind, ave_ce_obs

    print " +++ CALCULANDO SINAL DA PREVISÃO PARA TODOS OS MEMBROS +++\n"

    sig_membs_ce = np.empty((int(nmemb)))

    sig_membs_ce[:] = np.nan

    for i in range(nmemb):
        below_ce, normal_ce, above_ce, sig_membs_ce[i], f_std_ce, \
        o_pad_ce, fcst_sig_anom = compute_probability(ave_ce_fcst[i, 0],
        ave_ce_hind[:, i, 0], ave_ce_obs[:, 0], nyears)

    return sig_membs_ce