import os, numpy, h5py from shutil import copyfile def isNumber(str): try: float(str) return True except: return False def getfirstFilefromPath(path, meta, ext): validFilelist = [] fileList = os.listdir(path) if len(fileList) < 1: return None # meta 1234 567 8-18 BCDE # H,D,PE YYYY DDD EPOC .ext for thisFile in fileList: if meta == "PE": try: number = int(thisFile[len(meta) + 7:len(meta) + 17]) except: print("There is a file or folder with different format") if meta == "D": try: number = int(thisFile[8:11]) except: print("There is a file or folder with different format") if not isNumber(str=number): continue if (os.path.splitext(thisFile)[-1].lower() != ext.lower()): continue validFilelist.sort() validFilelist.append(thisFile) if len(validFilelist) > 0: validFilelist = sorted(validFilelist, key=str.lower) return validFilelist return None def gettimeutcfromDirFilename(path, file): dir_file = path + "/" + file fp = h5py.File(dir_file, 'r') epoc = fp['Metadata'].get('utctimeInit')[()] fp.close() return epoc def getDatavaluefromDirFilename(path, file, value): dir_file = path + "/" + file fp = h5py.File(dir_file, 'r') array = fp['Data'].get(value)[()] fp.close() return array # ·········· Velocidad de Pedestal················· w = input ("Ingresa velocidad de Pedestal: ") w = 4 w = float(w) # ·········· Resolucion minimo en grados··········· alfa = input ("Ingresa resolucion minima en grados: ") alfa = 1 alfa = float(alfa) # ·········· IPP del Experimento ·················· IPP = input ("Ingresa el IPP del experimento: ") IPP = 0.0004 IPP = float(IPP) # ·········· MODE ·················· mode = input ("Ingresa el MODO del experimento T or F: ") mode = "T" mode = str(mode) # ·········· Tiempo en generar la resolucion min··· # ············ MCU ·· var_ang = w * (var_tiempo)··· var_tiempo = alfa / w # ·········· Tiempo Equivalente en perfiles········ # ·········· var_tiempo = IPP * ( num_perfiles )· num_perfiles = int(var_tiempo / IPP) # ··········DATA PEDESTAL·························· dir_pedestal = "/home/alex/Downloads/pedestal" # ·········· DATA ADQ······························ if mode == "T": dir_adq = "/home/alex/Downloads/hdf5_testPP/d2020194" # Time domain else: dir_adq = "/home/alex/Downloads/hdf5_test/d2020194" # Frequency domain print("Velocidad angular :", w) print("Resolucion minima en grados :", alfa) print("Numero de perfiles equivalente:", num_perfiles) print("Mode :", mode) # ············ First File············· list_pedestal = getfirstFilefromPath(path=dir_pedestal, meta="PE", ext=".hdf5") list_adq = getfirstFilefromPath(path=dir_adq , meta="D", ext=".hdf5") # ············ utc time ·············· utc_pedestal = gettimeutcfromDirFilename(path=dir_pedestal, file=list_pedestal[0]) utc_adq = gettimeutcfromDirFilename(path=dir_adq , file=list_adq[0]) print("utc_pedestal :", utc_pedestal) print("utc_adq :", utc_adq) # ·············Relacion: utc_adq (+/-) var_tiempo*nro_file= utc_pedestal time_Interval_p = 0.01 n_perfiles_p = 100 if utc_adq > utc_pedestal: nro_file = int((int(utc_adq) - int(utc_pedestal)) / (time_Interval_p * n_perfiles_p)) ff_pedestal = list_pedestal[nro_file] utc_pedestal = gettimeutcfromDirFilename(path=dir_pedestal, file=ff_pedestal) nro_key_p = int((utc_adq - utc_pedestal) / time_Interval_p) if utc_adq > utc_pedestal: ff_pedestal = ff_pedestal else: nro_file = nro_file - 1 ff_pedestal = list_pedestal[nro_file] angulo = getDatavaluefromDirFilename(path=dir_pedestal, file=ff_pedestal, value="azimuth") nro_key_p = int((utc_adq - utc_pedestal) / time_Interval_p) print("nro_file :", nro_file) print("name_file :", ff_pedestal) print("utc_pedestal_file :", utc_pedestal) print("nro_key_p :", nro_key_p) print("utc_pedestal_init :", utc_pedestal + nro_key_p * time_Interval_p) print("angulo_array :", angulo[nro_key_p]) # 4+25+25+25+21 # while True: list_pedestal = getfirstFilefromPath(path=dir_pedestal, meta="PE", ext=".hdf5") list_adq = getfirstFilefromPath(path=dir_adq , meta="D", ext=".hdf5") nro_file = nro_file # 10 nro_key_perfil = nro_key_p blocksPerFile = 100 wr_path = "/home/alex/Downloads/hdf5_wr/" # Lectura de archivos de adquisicion para adicion de azimuth for thisFile in range(len(list_adq)): print("thisFileAdq", thisFile) angulo_adq = numpy.zeros(blocksPerFile) tmp = 0 for j in range(blocksPerFile): iterador = nro_key_perfil + 25 * (j - tmp) if iterador < n_perfiles_p: nro_file = nro_file else: nro_file = nro_file + 1 tmp = j iterador = nro_key_perfil ff_pedestal = list_pedestal[nro_file] angulo = getDatavaluefromDirFilename(path=dir_pedestal, file=ff_pedestal, value="azimuth") angulo_adq[j] = angulo[iterador] copyfile(dir_adq + "/" + list_adq[thisFile], wr_path + list_adq[thisFile]) fp = h5py.File(wr_path + list_adq[thisFile], 'a') grp = fp.create_group("Pedestal") dset = grp.create_dataset("azimuth" , data=angulo_adq) fp.close() print("Angulo", angulo_adq) print("Angulo", len(angulo_adq)) nro_key_perfil = iterador + 25 if nro_key_perfil < n_perfiles_p: nro_file = nro_file else: nro_file = nro_file + 1 nro_key_perfil = nro_key_p