commit
						ed4ecafd3d
					
				| @ -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) | ||||
| 
 | ||||
					Loading…
					
					
				
		Reference in new issue