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"
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')
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
# 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')
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
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()