Пример #1
0
def nameTag(basename):
    name = basename[:-3]
    name_split = name.split("_")
    year = name_split[1][0:4]
    doy = name_split[1][4:8]
    hms = name_split[2]
    month = ymd(int(year), int(doy))[1]
    day = ymd(int(year), int(doy))[2]

    str_day = str(day).zfill(2)
    str_month = str(month).zfill(2)
    str_hm = hms[0:2] + ":" + hms[2:4]
    str_chnl = bandTag(getExt(basename))

    return str_chnl + " " + str_day + "-" + str_month + "-" + year + " " + str_hm + " UTC"
Пример #2
0
def lastReceived():

    path = "/sat/raw-sat/"

    years = sorted(os.listdir(path))

    if len(years) > 0:
        path += years[-1] + "/"
        months = sorted(os.listdir(path))

        if len(months) > 0:
            path += months[-1] + "/"
            files = sorted(os.listdir(path))

            if len(files) > 0:

                file = files[-1]
                name_split = file.split(".")
                name_split = name_split[1:4]
                month = ymd(int(name_split[0]), int(name_split[1]))
                name_split.insert(1, str(month[1]).zfill(2))

                # genero los paths para los directorios base
                data_path = "/sat/PRS/libs/PRS-auto/PRSpng/data/"
                abs_file_path = os.path.abspath(data_path)

                # declaro los paths para los dos archivos
                rcv_path = os.path.join(abs_file_path, 'last-image-rcv')

                # abro el archivo
                ultima_recibida = open(rcv_path, 'w')
                ultima_recibida.write(name_split[0] + '.' + name_split[1] +
                                      '.' + name_split[2] + '.' +
                                      name_split[3] + '\n')
Пример #3
0
def getDateArray():
    #########################################
    #########################################
    # Defino las rutas a los archivos para poder trabajar con ellos
    #########################################

    # genero los paths para los directorios base
    data_path = "/sat/PRS/libs/PRS-auto/PRSpng/data/"
    abs_file_path = os.path.abspath(data_path)

    # declaro los paths para los dos archivos
    prs_path = os.path.join(abs_file_path, 'last-image-prs')
    rcv_path = os.path.join(abs_file_path, 'last-image-rcv')

    # abro los dos archivos para trabajar con ellos
    # el primero es de solo lectura, y el segundo es de lectura escritura
    ultima_procesada = open(prs_path, 'r')
    ultima_recibida = open(rcv_path, 'r+')

    #########################################
    #########################################
    # Recorro las lineas de los documentos y las imprimo
    #########################################

    # para cada linea del archivo, la imprimo
    for line in ultima_procesada:
        # tomo la linea y genero un arreglo con sus palabras
        prs_split = line.split(".")
    # for

    # para cada linea del archivo, la imprimo
    for line in ultima_recibida:
        # tomo la linea y genero un arreglo con sus palabras
        rcv_split = line.split(".")
    # for

    ultima_procesada.close()
    ultima_recibida.close()

    #########################################
    #########################################
    # Realizo operaciones de impresion en pantalla para ver los parametros
    #########################################

    prs_year = int(prs_split[0])  # la primer palabra del arreglo es el ano
    prs_month = int(prs_split[1])  # la segunda palabra del arreglo es el mes
    prs_doy = int(prs_split[2])  # la tercera palabra del arreglo es el doy
    prs_hms = prs_split[
        3]  # la cuarta palabra del arreglo es la hora-minuto-segundo

    st_hour = int(prs_hms[0:2])
    st_min = int(prs_hms[2:4])
    st_scnd = int(prs_hms[4:6])

    rcv_year = int(rcv_split[0])  # la primer palabra del arreglo es el ano
    rcv_month = int(rcv_split[1])  # la segunda palabra del arreglo es el mes
    rcv_doy = int(rcv_split[2])  # la tercera palabra del arreglo es el doy
    rcv_hms = rcv_split[
        3]  # la cuarta palabra del arreglo es la hora-minuto-segundo

    en_hour = int(rcv_hms[0:2])
    en_min = int(rcv_hms[2:4])
    en_scnd = int(rcv_hms[4:6])

    #########################################
    #########################################
    # Genero los datatypes date para iterar entre ellos y leo las carpetas
    #########################################

    # genero los numeros enteros para realizar el chequeo de archivos que quiero
    #                 ano                mes            doy            hora+minuto+segundo
    start_timestamp = int(prs_split[0] + prs_split[1] + prs_split[2] + prs_hms)
    end_timestamp = int(rcv_split[0] + rcv_split[1] + rcv_split[2] + rcv_hms)

    path_list = []

    # hago un doble for de anos y meses
    # los anos iteran desde el primero hasta el ultimo
    # range no considera el ultimo elemento en el rango, por eso para incluirlo usamos el +1
    for year in range(prs_year, rcv_year + 1):

        primer_mes = 1
        ultimo_mes = 12

        # para el primer ano solo debo iterar desde el mes del archivo
        # y para el ultimo ano solo debo iterar hasta el mes del archivo
        if year == prs_year:
            primer_mes = prs_month
        # if

        if year == rcv_year:
            ultimo_mes = rcv_month
        # if

        # range no considera el ultimo elemento en el rango, por eso para incluirlo usamos el +1
        for month in range(primer_mes, ultimo_mes + 1):

            # Path a los raw: day[0] = year, day[1] = month (completado con ceros hasta tener dos char)
            path_string = "/sat/raw-sat/" + str(year) + "/" + str(month).zfill(
                2) + "/"
            data_path = os.path.abspath(path_string)

            # day[0] = year, day[2] = doy
            # el patron queda .*year\.doy.*\.nc
            string_patron = ".*" + str(year) + "\." + ".*" + "\.nc$"
            pattern = re.compile(string_patron)

            for f in listdir(data_path):
                if isfile(join(data_path, f)) and pattern.match(f):
                    nombre = f.split(
                        "."
                    )  # separo el nombre del archivo en palabras separadas
                    ano = nombre[1]
                    doy = nombre[2]
                    hms = nombre[3]

                    mes = ymd(
                        int(ano), int(doy)
                    )[1]  # convierto ano y doy a ano mes y dia, y me quedo con el mes
                    mes_str = str(mes).zfill(
                        2
                    )  # lo convierto a string y lo relleno de ceros en el frente

                    # genero su timestamp a partir de su nombre
                    timestamp = int(ano + mes_str + doy + hms)

                    # si el timestamp esta dentro de los rangos definidos por los archivos lo agrego a la lista
                    if timestamp > start_timestamp and timestamp <= end_timestamp:
                        path_list.extend([data_path + "/" + f])
                    # if

                # if
            # for

        # for month

    # for year

    lista_retorno = sorted(path_list)

    # escribo en archivo rcv_path la fecha de la ultima imagen recibida
    if len(lista_retorno) > 0:
        ultimo_elem = lista_retorno[-1]
        elemen_split = ultimo_elem.split(".")[1:4]
        month = ymd(int(elemen_split[0]), int(elemen_split[1]))
        elemen_split.insert(1, str(month[1]).zfill(2))
        ultima_recibida = open(rcv_path, 'w')
        ultima_recibida.write(elemen_split[0] + '.' + elemen_split[1] + '.' +
                              elemen_split[2] + '.' + elemen_split[3] + '\n')
        ultima_recibida.close()

    return lista_retorno
Пример #4
0
# lastReceived

lastReceived()
arreglo = getDateArray()

for file in arreglo:

    print file
    netcdf2png(file, '/sat/PRS/libs/PRS-auto/PRSpng/png/')

    if file == arreglo[-1]:
        filename = basename(file)
        name_split = filename.split(".")
        name_split = name_split[1:4]
        # print name_split
        month = ymd(int(name_split[0]), int(name_split[1]))
        name_split.insert(1, str(month[1]).zfill(2))
        # print name_split[0]+'.'+name_split[1]+'.'+name_split[2]+'.'+name_split[3]+'\n'

        # genero los paths para los directorios base
        data_path = "/sat/PRS/libs/PRS-auto/PRSpng/data/"
        abs_file_path = os.path.abspath(data_path)

        # declaro los paths para los dos archivos
        prs_path = os.path.join(abs_file_path, 'last-image-prs')

        # abro los dos archivos para trabajar con ellos
        # el primero es de solo lectura, y el segundo es de lectura escritura
        ultima_procesada = open(prs_path, 'w')
        ultima_procesada.write(name_split[0] + '.' + name_split[1] + '.' +
                               name_split[2] + '.' + name_split[3] + '\n')
Пример #5
0
    file04 = PATHpng + 'B04/'    + year + '/' + rootname + '.png'
    file06 = PATHpng + 'B06/'    + year + '/' + rootname + '.png'

    copyfile(fileFR, PATHpng + "BAND_01-FR.png")
    copyfile(fileRP, PATHpng + "BAND_01-RP.png")
    copyfile(file02, PATHpng + "BAND_02.png")
    copyfile(file03, PATHpng + "BAND_03.png")
    copyfile(file04, PATHpng + "BAND_04.png")
    copyfile(file06, PATHpng + "BAND_06.png")

    subprocess.call("/sat/PRS/libs/PRS-sat/PRSpost/rmframes.sh", shell=True)

    # copio los frames
    copiar_frames(PATHpng + 'B04/'    + year, PATHpng + 'B04/mp4')
    copiar_frames(PATHpng + 'B01-FR/' + year, PATHpng + 'B01-FR/mp4')
    copiar_frames(PATHpng + 'B01-RP/' + year, PATHpng + 'B01-RP/mp4')

    # genero el timestamp
    doy   = rootname[8:11]                  # obtengo el doy del rootname
    hms   = rootname[12:18]                 # obtengo la hora minuto y segundo del rootname
    month = ymd(int(year), int(doy))[1]     # obtengo el mes usando la funcion ymd
    timestamp  = year + '.' + str(month).zfill(2) + '.' + str(doy).zfill(3) + '.' + hms

    timestamp_html = open(PATHpng + 'timestamp.html', 'w')
    timestamp_html.write(timestamp)
    timestamp_html.close()

    subprocess.call("/sat/PRS/libs/PRS-sat/PRSpost/videoandcopy.sh", shell=True)
  # if

# if
Пример #6
0
def netcdf2png(url, dirDest):

    # Dataset is the class behavior to open the file
    # and create an instance of the ncCDF4 class
    nc_fid = netCDF4.Dataset(url, 'r')

    # extract/copy the data
    lats = nc_fid.variables['lat'][:]
    lons = nc_fid.variables['lon'][:]
    data = nc_fid.variables['data'][:]
    band = nc_fid.variables['bands'][:]

    nc_fid.close()

    lon_0 = lons.mean()
    lat_0 = lats.mean()

    ax1 = Basemap(projection='merc',lon_0=lon_0,lat_0=lat_0,\
                  llcrnrlat=-42.866693,urcrnrlat=-22.039758,\
                  llcrnrlon=-66.800000,urcrnrlon=-44.968092,\
                  resolution='l')

    data = data[0]  # me quedo con el primer elemento de data
    shape = numpy.shape(data)  # guardo el shape original de data
    data_vector = numpy.reshape(data, numpy.size(
        data))  # genero un vector de data usando su size (largo*ancho)
    data_vector = calibrarData(
        band, data_vector)  # invoco la funcion sobre el vector
    img = numpy.reshape(
        data_vector,
        shape)  # paso el vector a matriz usando shape como largo y ancho

    print numpy.amin(img)
    print numpy.amax(img)

    # if band == 4:
    #   plt.plot(data_vector[0:1000])
    #   plt.show()
    #   plt.savefig("./test/img0_1000.png", bbox_inches='tight', dpi=200)

    # dadas las lat y lon del archivo, obtengo las coordenadas x y para
    # la ventana seleccionada como proyeccion
    x, y = ax1(lons, lats)

    if band == 1:
        vmin = 0.
        vmax = 100.
    elif band == 2:
        vmin = -68.
        vmax = 47.
    elif band == 3:
        vmin = -68.
        vmax = -8.
    elif band == 4:
        vmin = -80.
        vmax = 50.
    elif band == 6:
        vmin = -68.
        vmax = 7.

    # dibujo img en las coordenadas x e y calculadas
    # cs = ax1.pcolormesh(x, y, img, vmin=0., vmax=vmax, cmap='jet')
    if band == 1:
        cs = ax1.pcolormesh(x, y, img, vmin=vmin, vmax=vmax, cmap='jet')
    else:
        inumet = _get_inumet(1024)
        cs = ax1.pcolormesh(x, y, img, vmin=vmin, vmax=vmax, cmap=inumet)

    # agrego los vectores de las costas, departamentos/estados/provincias y paises
    ax1.drawcoastlines()
    ax1.drawstates()
    ax1.drawcountries()

    # dibujo los valores de latitudes y longitudes
    ax1.drawparallels(numpy.arange(-45, -20, 5),
                      labels=[1, 0, 0, 0],
                      linewidth=0.0,
                      fontsize=10)
    ax1.drawmeridians(numpy.arange(-70, -45, 5),
                      labels=[0, 0, 1, 0],
                      linewidth=0.0,
                      fontsize=10)

    # agrego el colorbar
    cbar = ax1.colorbar(cs, location='bottom', pad='3%', ticks=[vmin, vmax])
    cbar.ax.set_xticklabels([vmin, vmax], fontsize=10)

    # agrego el logo en el documento
    logo = plt.imread('/sat/PRS/libs/PRS-sat/PRSpng/imgs/les_151.png')
    plt.figimage(logo, 5, 5)

    # genero los datos para escribir el pie de pagina
    name = basename(url)  # obtengo el nombre base del archivo
    destFile = dirDest + name + '.png'  # determino el nombre del archivo a escribir

    name_split = name.split(".")[1:4]
    year = name_split[0]
    doy = name_split[1]
    hms = name_split[2]
    month = ymd(int(year), int(doy))[1]
    day = ymd(int(year), int(doy))[2]

    str_day = str(day).zfill(2)
    str_month = str(month).zfill(2)
    str_hm = hms[0:2] + ":" + hms[2:4]
    str_chnl = bandTag(band)

    tag = str_chnl + " " + str_day + "-" + str_month + "-" + year + " " + str_hm + " UTC"

    # agego el pie de pagina usando annotate
    plt.annotate(tag, (0, 0), (100, -50),
                 xycoords='axes fraction',
                 textcoords='offset points',
                 va='top',
                 fontsize=14,
                 family='monospace')
    plt.savefig(destFile, bbox_inches='tight', dpi=200, transparent=True)
    plt.close()