Vina 作为使用最广的对接软件之一,上一版本的 Vina 1.1.2 发布于 2010 年,已经有 10 年没有更新,最近终于更新了新版本,来尝尝鲜。vina 是一个有简单的评分函数和快速梯度优化构象搜索的分子对接程序,由 Dr. Oleg Trott 所创造,目前由 The Scripps Research Institute 的 Forli Lab 所维护。
已知的 vina 系列拓展对接工具 QuickVina,Smina,Vina-Carb,VinaXB,Vinardo
软件准备
安装 vina
使用 conda, 推荐这样省时省力
conda create -n vina python=3
conda activate vina
conda install -c conda-forge -c ccsb-scripps vina
下载 ADFR 套装
https://ccsb.scripps.edu/adfr/downloads/
此套装包含功能:
安装 Meeko
提供 ADFR 所没有的一些工具,如
安装:
conda install -c ccsb-scripps meeko
基础对接流程
受体准备
$ prepare_receptor -r 1iep_receptorH.pdb -o 1iep_receptor.pdbqt
配体准备
mk_prepare_ligand.py -i 1iep_ligand.sdf -o 1iep_ligand.pdbqt --add_hydrogen --pH 7.4
使用 vina 进行对接
vina --ligand 1iep_ligand.pdbqt --maps 1iep_receptor --scoring ad4 --exhaustiveness 32 --out 1iep_ligand_ad4_out.pdbqt
需要先提供 vina 的 config
center_x = 15.190
center_y = 53.903
center_z = 16.917
size_x = 20.0
size_y = 20.0
size_z = 20.0
随后进行对接
vina --receptor 1iep_receptor.pdbqt --ligand 1iep_ligand.pdbqt --config 1iep_receptor_vina_box.txt --exhaustiveness=32 --out 1iep_ligand_vina_out.pdbqt
使用 vina 对接的结果
Scoring function : vina
Rigid receptor: 1iep_receptor.pdbqt
Ligand: 1iep_ligand.pdbqt
Center: X 15.19 Y 53.903 Z 16.917
Size: X 20 Y 20 Z 20
Grid space: 0.375
Exhaustiveness: 32
CPU: 0
Verbosity: 1
Computing Vina grid ... done.
Performing docking (random seed: -131415392) ...
0% 10 20 30 40 50 60 70 80 90 100%
|----|----|----|----|----|----|----|----|----|----|
***************************************************
mode | affinity | dist from best mode
| (kcal/mol) | rmsd l.b.| rmsd u.b.
-----+------------+----------+----------
1 -12.92 0 0
2 -10.97 3.012 12.42
3 -10.79 3.713 12.19
4 -10.69 3.913 12.36
5 -10.32 2.538 12.64
6 -9.464 2.916 12.53
7 -9.204 1.35 2.025
8 -9.137 1.596 2.674
9 -8.637 3.969 12.69
Python binding
#! /usr/bin/env python
# -*- coding: utf-8 -*-
from vina import Vina
# 如果你想用AutoDock4 或者Vinardo,可以换为vina,ad4 或者vinardo
v = Vina(sf_name='vina')
v.set_receptor('1iep_receptor.pdbqt')
v.set_ligand_from_file('1iep_ligand.pdbqt')
v.compute_vina_maps(center=[15.190, 53.903, 16.917], box_size=[20, 20, 20])
# 对pose打分
energy = v.score()
print('Score before minimization: %.3f (kcal/mol)' % energy[0])
# 本地最小化pose
energy_minimized = v.optimize()
print('Score after minimization : %.3f (kcal/mol)' % energy_minimized[0])
v.write_pose('1iep_ligand_minimized.pdbqt', overwrite=True)
# 对接
v.dock(exhaustiveness=32, n_poses=20)
v.write_poses('1iep_ligand_vina_out.pdbqt', n_poses=5, overwrite=True)