Scripts de Python 3 para analizar los datos de RMSD de muchas simulaciones de dinámica molecular con YASARA structure, generando un fichero de texto tabulado, con tantas columnas como el número de simulaciones analizadas.

Tendrás que editar el script y cambiar la ruta de la carpeta raíz que deseas analizar, en mi caso "/LUSTRE/home/CTS164/jant.encinar.umh.es/py-linux/06_analysis-tab/tab/".

En esta ruta el script encuentra los archivos cuyo nombre termina en "_bindenergy.tab", elimina saltos de línea y divide por espacios en blanco, creando un fichero con el mismo nombre pero con extensión TXT, y dejando los datos en columnas separadas por tabuladores.

import os

# Directorio donde se encuentran los archivos de entrada que terminan en "_bindenergy.tab"
# este script elimina saltos de línea y divide por espacios en blanco, creando un fichero
# con el mismo nobre pero extensión TXT, y dejando columnas separadas por tabuladores.
# El script se llama "07_tab-to-txt.py"
input_dir = '/LUSTRE/home/CTS164/jant.encinar.umh.es/py-linux/06_analysis-tab/tab/'

# Obtener lista de archivos que terminan en "_analysis.tab"
input_files = [f for f in os.listdir(input_dir) if f.endswith('_analysis.tab')]

# Recorrer cada archivo de entrada
for input_file in input_files:
    # Abrir archivo de entrada y archivo de salida
    with open(os.path.join(input_dir, input_file), 'r') as f_in, \
            open(os.path.join(input_dir, input_file.replace('.tab', '.txt')), 'w') as f_out:
        
        # Recorrer cada línea del archivo de entrada
        for line in f_in:
            # Eliminar saltos de línea y dividir por espacios en blanco
            values = line.strip().split()
            # Escribir los valores separados por tabuladores en el archivo de salida
            f_out.write('\t'.join(values) + '\n')

El siguiente script usa como información de entrada los ficheros "_analysis.txt", que hemos hecho con el script anterior, y nos devuelve dos ficheros de texto: "007-glue-like-FAS_ana.txt" y "007-glue-like-FAS_ana-reves.txt". Este último tiene la información con los valores de RMSD en columnas para todas las simulaciones analizadas. Se importa con facilidad en un fichero Excel.

import os

directory = "/LUSTRE/home/CTS164/jant.encinar.umh.es/py-linux/06_analysis-tab/tab/"
output_file_path = "/LUSTRE/home/CTS164/jant.encinar.umh.es/py-linux/06_analysis-tab/007-glue-like-FAS_ana.txt"

files = [f for f in os.listdir(directory) if f.endswith("_analysis.txt")]
files.sort()  # Ordenar por orden alfabético

with open(output_file_path, "w") as output_file:
    for filename in files:
        file_path = os.path.join(directory, filename)
        with open(file_path, "r") as input_file:
            lines = input_file.readlines()
            if len(lines) < 2:
                print(f"El archivo {filename} está vacío.")
                continue
            columns = [line.strip().split("\t")[-2] for line in lines[1:] if len(line.strip().split("\t")) >= 2]
            if len(columns) == 0:
                print(f"El archivo {filename} no tiene la columna adecuada.")
                continue
            output_file.write("{}\t{}\n".format(filename, '\t'.join(columns)))


# segunda parte...
import os

# Ruta del archivo de entrada y salida
input_file = '/LUSTRE/home/CTS164/jant.encinar.umh.es/py-linux/06_analysis-tab/007-glue-like-FAS_ana.txt'
output_file = '/LUSTRE/home/CTS164/jant.encinar.umh.es/py-linux/06_analysis-tab/007-glue-like-FAS_ana-reves.txt'

# Abre el archivo de entrada y lee todas las líneas
with open(input_file, 'r') as f_in:
    lines = f_in.readlines()

# Trasponer las líneas
transpose_lines = []
for i in range(len(lines[0].split())):
    row = []
    for line in lines:
        row.append(line.split()[i])
    transpose_lines.append('\t'.join(row) + '\n')

# Escribe las líneas transpuestas en el archivo de salida
with open(output_file, 'w') as f_out:
    f_out.writelines(transpose_lines)

# Imprime mensaje de éxito
print(f"Archivo {output_file} generado exitosamente.")