win10下使用Autodock Vina 1.2.X版本

Autodock Vina 在2021年年底更新了1.2.X版本,目前Windows平台最新版本为1.2.3。(点击看文章源代码说明文档)。

比较吸引我的更新是增加了多个配体对接至一个受体的功能,以及可以选择AutoDock4、Vina、 Vinardo三种不同力场进行对接。

但缺点也有,比如官方推荐的使用prepare_receptor命令把受体转换成pdbqt文件时,加氢的操作会加出水来,导致无法完成对接。还不如直接使用mgtools。对接结果的pdbqt文件只有一个构象,1.1版本还可以出9个呢。而且不输出log.txt文件了。感觉只是对接功能上进行了优化,而用户的友好方面则是进行了负优化。

本博能力所限,只能解决不输出log文件的问题。其他的暂时没办法。

Vina 1.2.3版本已经上传百度云(提取码:buds)。把这个exe文件下载到工作目录当中即可使用cmd运行。

以下对批量对接的批处理代码和热图代码进行了更新,其余操作同多对多的批量对接。

批处理代码vina 1.2.3版

@echo
if not exist results mkdir results
for %%a in (receptor\*.pdbqt) do (
	for %%i in (ligand\*.pdbqt) do (
		vina_1.2.3 --receptor %%a --ligand %%i --config receptor\%%~na.txt --exhaustiveness 32 --out results\%%~ni_2_%%~na.pdbqt >> results\%%~na_2_%%~ni.txt
		timeout 10))
exit

热图代码vina 1.2.3版

import pandas as pd
import numpy as np
import os
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns

f = input('请输入对接结果存放路径:')

def getmaxaffinity(fpath):
    m = []
    try:
        with open (fpath, encoding = "utf-8") as f:
            for i in f.readlines()[-9]:
                if i!= ' ' and i != '\n':
                    m.append(i)
        return ''.join(m[1:5])  
    except:
        return ''
receptors = []
ligands = []
affinity = []
for root,dirs,files in os.walk(f):
    for file in files:
        if os.path.splitext(file)[1]== '.txt':
            fn = os.path.splitext(file)[0]
            try:
                receptor,ligand = fn.split('_2_')
                receptors.append(receptor)
                ligands.append(ligand)
                fpath = os.path.join(f,file)
                affinity.append(getmaxaffinity(fpath))
            except:
                continue
df = pd.DataFrame()   
df['receptor'] = receptors
df['ligand'] = ligands
df['affinity'] = affinity
df['ligand'] = df['ligand'].str.split('_',expand = True)[0]
df = df.replace('', np.nan)
df = df.dropna(axis = 0)
df['affinity'] = df['affinity'].astype(float)
df = df.loc[df['affinity'] < -7.0]
df = df.pivot(index = 'ligand', columns = 'receptor', values = 'affinity')
ax = sns.heatmap (df,cmap = 'OrRd_r',annot = True)
ax.tick_params(top=True, bottom=False,labeltop=True, labelbottom=False)
heatmap = ax.get_figure()
heatmap.savefig("heatmap.png",dpi = 300)

猜你喜欢

转载自blog.csdn.net/weixin_55842556/article/details/124794063