From ed4ecafd3d250ee21c3fa984adbe5fd1eb44c978 Mon Sep 17 00:00:00 2001 From: Gabriel Quispe Date: Thu, 15 May 2025 20:33:28 +0200 Subject: [PATCH] Agregar lectorsimulaciones.py desde TFG-DatosExpMayo --- lectorsimulaciones.py | 83 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 lectorsimulaciones.py diff --git a/lectorsimulaciones.py b/lectorsimulaciones.py new file mode 100644 index 0000000..153175e --- /dev/null +++ b/lectorsimulaciones.py @@ -0,0 +1,83 @@ +import numpy as np +import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d import Axes3D +import orthopoly + +def c2s(posicionescart): + ''' + De cartesianas a esfericas + ''' + x,y,z = posicionescart.T + r,theta,phi = orthopoly.spherical_harmonic.cart2sph(-x,-y,z) #Bug in library + return np.asarray([r,theta,phi]).T + +def fromdata_tomatrix(file_path): + + ''' + Lee los archivos y los convierte a matriz + El formato de los arhcivos es: + 5124 + 20 20 20 0 + M -0.0928612 12.2444 6.01067 0 + Cuando barre todas las particulas vuelve a generar: + # numero de particulas + # 20 20 20 0 + # M (tipo de particula) x,y,z 0 + + --> Admite archivos txt,xyz,... + ''' + + filtered_data = [] + + # Leer el archivo línea por línea + with open(file_path, 'r') as file: + lines = file.readlines() + + # Procesar cada línea + for line in lines: + if line.startswith('M'): + parts = line.split() + if len(parts) > 4: # Asegurar que tiene suficientes columnas + filtered_data.append([float(parts[1]), float(parts[2]), float(parts[3])]) + + return np.array(filtered_data) + +def calculo_cm(data): + ''' + Para calcular el centro de masas + ''' + + if data.shape[0] % 5124 != 0: + cociente = data.shape[0] // 5124 + data = data[0:int(cociente*5124)] + print("La trayectoria no se cargo COMPLETAMENTE, se calcula cm hasta el tiempo mas proximo") + + + v1 = int(data.shape[0]/2) # Numero de puntos + matrixcm = np.empty((v1,3)) + + matrixcm[0,:] = (data[0,:]+data[1,:])/2 + + for i in range(1,v1,1): + matrixcm[i,:] = (data[2*i,:]+data[2*i +1])/2 + + matrixcm_sph = c2s(matrixcm) + + datos_cart = matrixcm.reshape(int(v1/2562),-1,3) + datos_esf = matrixcm_sph.reshape(int(v1/2562),-1,3) + + return datos_cart,datos_esf + +# Se tiene que poner esto para cargar las trayectorias: + +file1 = "trajd_xi2_t06.xyz" +# file1 = "traj_0_00001_2.xyz" +# file1 = "trayectoriabase.xyz" +matriz = fromdata_tomatrix(file1) + +dcart,desf = calculo_cm(matriz) + +np.save('matrizcartd_xi2_t06', dcart) +# np.save('matrizcart_xi2_t0',dcart) +# np.save('trayectoria_base',dcart) +