Descarga bajo licencia FoldX 5.0 de http://foldxsuite.crg.eu/
Descarga la versión de estos scripts de Python para trabajar en Linux. Revisa las rutas según tus necesidades.
Run REPAIRPDB
It is highly recommended to repair your structures before you do any modelling with FoldX. RepairPDB identify those residues which have bad torsion angles, or VanderWaals' clashes, or total energy, and repairs them.
It can be run using the command line:
start foldx5.exe --command=RepairPDB --pdb=name-file.pdb
Python script for repair big number of PDBs, inside the same folder that foldx.exe and all PDB files.
import os
import subprocess
# Definir la ruta del directorio donde se encuentran todos los ficheros PBD,
# copiar también en ese directorio Foldx.exe y rotabase.txt
directory = r'C:\aaa'
# Definir el nombre del ejecutable
foldx_exe = os.path.join(directory, 'foldx_20241231.exe')
# Recorrer todos los archivos del directorio
for filename in os.listdir(directory):
if filename.endswith('.pdb'):
# Obtener el nombre del archivo sin extensión
pdb_name = os.path.splitext(filename)[0]
# Definir el comando a ejecutar
command = f'{foldx_exe} --command=RepairPDB --pdb={pdb_name}.pdb'
# Ejecutar el comando en la consola
try:
print(f"Ejecutando: {command}")
subprocess.run(command, shell=True, check=True, cwd=directory)
except subprocess.CalledProcessError as e:
print(f"Error al ejecutar el comando para {pdb_name}: {e}")
Run ANALYSECOMPLEX
It determines the interaction energy between 2 molecules (chain A and B of one pdb) or 2 groups of molecules. The way it operates is by unfolding the selected targets and determining the stability of the remaining molecules and then subtracting the sum of the individual energies from the global energy. In case there is a metal bound between the two molecules it will assign it to the one which makes the stronger interactions with the metal.
It can be run using the command line:
start foldx5.exe --command=AnalyseComplex --pdb=name-file.pdb --analyseComplexChains=A,B
Python script for calculate the interaction energy on big number of PDBs, inside the same folder that foldx.exe and all PDB files.
import os
import subprocess
# Definir la ruta del directorio donde se encuentran todos los ficheros PBD,
# copiar también en ese directorio Foldx.exe y rotabase.txt
directory = r'C:\aaa'
# Definir el nombre del ejecutable
foldx_exe = os.path.join(directory, 'foldx_20241231.exe')
# Recorrer todos los archivos del directorio
for filename in os.listdir(directory):
if filename.endswith('.pdb'):
# Obtener el nombre del archivo sin extensión
pdb_name = os.path.splitext(filename)[0]
# Definir el comando a ejecutar, cambiar el nombre de las cadenas de la estructura
# proteica, en este ejemplo son A y B.
command = f'{foldx_exe} --command=AnalyseComplex --pdb={pdb_name}.pdb --analyseComplexChains=A,B'
# Ejecutar el comando en la consola
try:
print(f"Ejecutando: {command}")
subprocess.run(command, shell=True, check=True, cwd=directory)
except subprocess.CalledProcessError as e:
print(f"Error al ejecutar el comando para {pdb_name}: {e}")
Para facilitar el análisis de los resultados, el siguiente script lee todos los archivos en el directorio C:\bbb cuyo nombre comience con "Summary_" y termine con ".fxout", luego copia la línea que está justo debajo de la palabra "StabilityGroup2", y guarda esa información en un archivo de salida llamado C:\bbb\_resultados-BINDING-ENERGY.txt.
import os
# Definir la ruta del directorio
directory = r'C:\bbb'
# Definir el archivo de salida
output_file = os.path.join(directory, '_resultados-BINDING-ENERGY.txt')
# Definir la cabecera con los títulos separados por tabuladores
header = "Summary-file\tPdb\tGroup1\tGroup2\tIntraclashesGroup1\tIntraclashesGroup2\tInteraction Energy\tStabilityGroup1\tStabilityGroup2"
# Abrir el archivo de salida para escribir
with open(output_file, 'w') as outfile:
# Escribir la cabecera en la primera línea
outfile.write(header + '\n')
# Recorrer todos los archivos del directorio
for filename in os.listdir(directory):
if filename.startswith("Summary_") and filename.endswith(".fxout"):
file_path = os.path.join(directory, filename)
# Leer el archivo
with open(file_path, 'r') as infile:
lines = infile.readlines()
# Buscar la línea que contiene 'StabilityGroup2'
for i, line in enumerate(lines):
if 'StabilityGroup2' in line:
# Si se encuentra 'StabilityGroup2', copiar la línea siguiente
if i + 1 < len(lines):
binding_energy = lines[i + 1].strip()
# Escribir el resultado en el archivo con el nombre del archivo y la línea de energía
outfile.write(f"{filename}\t{binding_energy}\n")
print(f"{filename}: {binding_energy}")
break
print(f"Resultado guardado en {output_file}")
El siguiente sbatch ejecuta Foldx en array en un cluster de Linux con SLURN. Guárdalo en un fichero "_foldx_MD25.sbatch" y ejecuta sbatch _foldx_MD25.sbatch desde la ruta donde se encuentre ese fichero. ¡Maravilloso esto de los arrays !
#!/bin/bash
#SBATCH --job-name=foldx_25 # Nombre del trabajo lanzado a cola o ejecutándose
#SBATCH --output=logs/output_%A_%a.out # Archivo de salida para cada trabajo
#SBATCH --error=logs/error_%A_%a.err # Archivo de error para cada trabajo
#SBATCH --array=0-999 # Rango de trabajos (ajusta según el número de valores en la lista)
#SBATCH --time=07:00:00 # Tiempo máximo por trabajo
#SBATCH --cpus-per-task=4 # Número de CPUs por trabajo
#SBATCH --mem=12G # Memoria por trabajo
# Definir la ruta del ejecutable FoldX y el directorio donde están los archivos pdb
FOLDX_EXE="/home/jant.encinar/foldx-2024/foldx_20241231"
PDB_DIR="/home/jant.encinar/foldx-2024/MD25"
# Cambiar al directorio donde están los archivos .pdb
cd "$PDB_DIR" || { echo "Error: No se pudo cambiar al directorio $PDB_DIR"; exit 1; }
# Obtener el valor específico de la lista de variables y eliminar caracteres '\r'
VARIABLE=$(sed -n "$((SLURM_ARRAY_TASK_ID + 1))p" /home/jant.encinar/py-linux/34_foldx-array/_lista-foldx-MD25.txt | tr -d '\r')
# Definir el nombre del archivo pdb para la trabajo actual
PDB_FILE="${VARIABLE}.pdb"
# Verificar si el archivo pdb existe antes de ejecutar FoldX
if [[ -f "$PDB_FILE" ]]; then
echo "Ejecutando FoldX para $PDB_FILE"
"$FOLDX_EXE" --command=RepairPDB --pdb="$PDB_FILE"
else
echo "Error: No se encontró el archivo $PDB_FILE en $PDB_DIR"
fi