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