AutoDock Vina¶
Popis¶
AutoDock Vina je jedným z najrýchlejších a najpoužívanejších open-source programov na molekulové dokovanie. Je to kompletný program na výpočtové molekulové dokovanie založený na jednoduchej skórovacej funkcii a rýchlom vyhľadávaní konformácií pomocou gradientnej optimalizácie. Pôvodne ho navrhol a implementoval Dr. Oleg Trott v Molecular Graphics Lab. V súčasnosti ho udržiava a vyvíja Forli Lab v The Scripps Research Institute. Zdrojový kód je dostupný na GitHub.
Oficiálna dokumentácia¶
Dokumentáciu softvéru a používateľskú príručku nájdete na oficiálnom webe AutoDock Vina.
Dostupné verzie¶
V súčasnosti je dostupná nasledujúca verzia AutoDock Vina:
- Spúšťacie závislosti:
- Žiadne, požadované knižnice a závislosti sa načítajú automaticky spolu s modulom
Vina/1.2.7.
- Žiadne, požadované knižnice a závislosti sa načítajú automaticky spolu s modulom
Modul Vina môžete načítať pomocou nasledujúceho príkazu:
module load Vina/1.2.7
- Spúšťacie závislosti:
- Žiadne, požadované knižnice a závislosti sa načítajú automaticky spolu s modulom
Vina/2.1-CUDA.
- Žiadne, požadované knižnice a závislosti sa načítajú automaticky spolu s modulom
Modul Vina môžete načítať pomocou nasledujúceho príkazu:
module load Vina/2.1-CUDA
Príklad spúšťacieho skriptu¶
Tento skript si môžete skopírovať a upraviť ako autodock_vina.sh a úlohu odoslať na výpočtový uzol pomocou príkazu `sbatch autodock_vina.sh. Počet CPU pre jednu úlohu bol testovaný a optimalizovaný na clustri Devana. Skript spúšťa jednu inštanciu Vina s 8 OpenMP vláknami na úlohu.
#!/bin/bash
#SBATCH -J "AD_Vina" # name of job in SLURM
#SBATCH --account=<project> # project number
#SBATCH --partition= # selected partition (short, medium, long)
#SBATCH --ntasks= # number of parallel tasks
#SBATCH --cpus-per-task=8 # number of CPUs per task
#SBATCH --time=hh:mm:ss # time limit for a job
#SBATCH -o stdout.%J.out # standard output
#SBATCH -e stderr.%J.out # error output
# Modules
module purge
module load Vina/1.2.7
# Home
HOME_DIR=`pwd`
# Compounds
ligand=<ligand>.pdbqt
protein=<protein>.pdbqt
# Target location
export WORK_DIR=/work/$SLURM_JOB_ID
rm -rf $WORK_DIR
mkdir -p $WORK_DIR
# Copy desired compounds
cp $HOME_DIR/$ligand $WORK_DIR/
cp $HOME_DIR/$protein $WORK_DIR/
cd $WORK_DIR
# Exhaustiveness - docking parameter describing robustness of the search.
# Required CPU time increases linearly, while the chance of missing certain
# poses decreases exponentially.
exht=
# Run AutoDock Vina
# This step requires a config.txt file; see $vina/vina --help for the list
# of necessary and optional parameters.
vina --verbosity 2 --exhaustiveness $exht \
--cpu $SLURM_CPUS_PER_TASK --ligand $ligand --receptor $protein \
--config $HOME_DIR/config.txt \
--out ${ligand}_${protein}.pdbqt \
>> ${ligand}_${protein}_log.txt
# Copy files back
rm -rf $HOME_DIR/${ligand}_${protein}
mkdir -p $HOME_DIR/${ligand}_${protein}
cp ${ligand}_${protein}.pdbqt $HOME_DIR/${ligand}_${protein}
cp ${ligand}_${protein}_log.txt $HOME_DIR/${ligand}_${protein}
# Cleanup
cd $HOME_DIR
rm -rf $WORK_DIR
Keďže však AutoDock Vina vyžaduje relatívne málo CPU času a často sa používa na dokovanie tisícov zlúčenín, je výhodné použiť Slurm array job, v ktorom každá array úloha prechádza zoznamom zlúčenín určených na dokovanie. Ďalšími potrebnými súbormi (okrem štruktúr proteínu a ligandov) sú zoznamy ligandov, ktoré sa majú dokovať v jednotlivých array úlohách, a skript vina_loop.sh, ktorý v každej array úlohe prechádza príslušný zoznam.
Tento skript si môžete skopírovať a upraviť ako
autodock_vina_loop.sh a úlohu odoslať na výpočtový uzol pomocou príkazu
sbatch autodock_vina_loop.sh.
#!/bin/bash
#SBATCH -J "AD_vina" # name of job in SLURM
#SBATCH -o stdout.%J.out # standard output
#SBATCH -e stderr.%J.out # error output
#SBATCH --partition= # selected partition (short, medium, long)
#SBATCH --nodes=1 # number of used nodes
#SBATCH --exclusive # exclusive run on node
#SBATCH --account=<project> # project number
#SBATCH --time=72:00:00 # time limit for a job
#SBATCH --array=1-8 # spawns 8 array jobs
#SBATCH --cpus-per-task=8 # each using 8 CPUs (8x8=64=1 node)
#SBATCH --mem-per-cpu=2G # required memory; not needed for whole node
# Modules
module purge
module load Vina/1.2.7
# Home
HOME_DIR=`pwd`
# Compounds
ligands_loc=/ligands/location
protein_loc=/protein/location
# Target location
export WORK_DIR=/work/$SLURM_JOB_ID/$SLURM_ARRAY_TASK_ID
rm -rf $WORK_DIR
mkdir -p $WORK_DIR
cd $WORK_DIR
# Each array job starts vina_loop.sh, which loops over the given list
# of ligands.
$HOME_DIR/vina_loop.sh $HOME_DIR $protein_loc $ligands_loc \
$SLURM_ARRAY_TASK_ID $SLURM_CPUS_PER_TASK
Druhý skript, vina_loop.sh, spúšťa slučku výpočtov, ktorá prechádza
zoznam ligandov. Počet paralelne spustených skriptov je rovnaký ako počet
array úloh a každý skript využíva počet CPU jadier určený parametrom
cpus-per-task v autodock_vina_loop.sh.
#!/bin/bash
# Modules
module purge
module load Vina/1.2.7
# Accepted variables from the Slurm batch script
init_dir=$1
protein_loc=$2
ligands_loc=$3
job_number=$4
cpu=$5
# Shortcuts
work_dir=`pwd`
vina=/storage-apps/software/AutoDock-Vina/build/linux/release
# Exhaustiveness - docking parameter describing robustness of the search.
# Required CPU time increases linearly, while the chance of missing certain
# poses decreases exponentially.
exht=
# Define protein
protein=
# Copy protein
cp $protein_loc/${protein}.pdbqt $work_dir/.
# Define list of ligands. This points to ligands_1.txt for the first
# array job, ligands_2.txt for the second array job, etc.
ligands=$ligands_loc/ligands_${job_number}.txt
# Content of ligands_1.txt:
# Ligand_00001
# Ligand_00002
# etc.
# Ligand_10000
# Content of ligands_2.txt:
# Ligand_10001
# Ligand_10002
# etc.
# etc.
# Loop over the list of ligands
while IFS= read -r line; do
# Get ligand
ligand=$line
# Copy ligand to working directory
cp $ligands_loc/${ligand}.pdbqt $work_dir/.
# Run Vina
vina --verbosity 2 --exhaustiveness $exht --cpu $cpu \
--ligand ${ligand}.pdbqt --receptor $protein \
--out ${ligand}_${protein}.pdbqt \
>> ${ligand}_${protein}_log.txt
# Copy files back
rm -rf $init_dir/${ligand}_${protein}
mkdir -p $init_dir/${ligand}_${protein}
cp ${ligand}_${protein}.pdbqt $init_dir/${ligand}_${protein}
cp ${ligand}_${protein}_log.txt $init_dir/${ligand}_${protein}
done < $ligands
# Cleanup
cd $init_dir
rm -rf $work_dir