Molegro Virtual Docker(MVD)利用接口进行批量对接

Molegro Virtual Docker(MVD)利用接口进行批量对接

MVD是一款优秀的分子对接软件,对接精度高,操作简单,不免费。
当你需要对同一个蛋白进行批量的配体对接的时候,你会感觉到如果用纯界面去完成会十分的吃力。那么你可以按照下面的例子来通过文本脚本去完成这些重复工作。现有以下方式进行批量化处理

利用MVD自有的文本插件直接对接

  • 准备一个蛋白PDB文件,如命名为protein.pdb
  • 准备一系列你需要的配体,命名为lig1.mol2, lig2.mol2, lig3.mol2
  • 准备一个MVD软件能够读取的文本插件,命名为docking.mvdscript,比如内容如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    // Initial parameter Setting
    DOCKSETTINGS maxIterations=1500;runs=10;ignoreSimilarPoses=true;IgnoreSimilarPosesThreshold=1;MaxPoses=5

    EVALUATORTYPE MolDockGrid
    EVALUATOR cropdistance=0;gridresolution=0.30;ligandes=false;sp2sp2bond=false;internalhbond=false;hbond90=true;DisplaceWater=false

    OPTIMIZERTYPE MSE
    OPTIMIZER populationsize=50;cavity=true;creationEnergyThreshold=100;poseGenerator=10,10,30;recombine=true;maxsimplex=750;simplexsteps=300;simplexdistancefactor=1;clusterthreshold=1.00;keepmaxposes=5

    // Import protein, ligand and run each molecular docking
    FOR $LIG IN lig1,lig2
    IMPORT Ligands FROM $LIG.mol2
    IMPORT Proteins FROM protein.pdb
    SAVE $LIG
    RMSD ligand[0]
    DOCK
    NEW
    ENDFOR

其中//为注释,并设置初始以及对接的各个参数,详见手册。批量对接最重要的部分是FOR ,,, ENDFOR部分。写法和bash类似,但远不及bash灵活。表明依次进行lig1lig2(注意配体mol2文件中的分子名<第二行>不要用相同的名称,除非你分别设置了每个工作目录)与蛋白(这里只导入了蛋白,原配体自动识别去除)的对接,每次对接以后会重新打开软件进行下一个对接。当然你也可以进行相应的修改,用来研究同一配体与不同的多种蛋白进行对接研究。

  • 运行插件。首先需要设置MVD的环境变量,使得能够在CMD下调用。然后运行:
    1
    mvd docking.mvdscript -nogui

即可进行没有任何图形界面的对接。当然如果你想看到进程,你可以去掉-nogui。每次对接完成以后会将对接结果(配体姿态)保存到DockingResults*.mvdresults文件。最后你只需要导入打分最好的姿态即为最佳对接结果。

Python插件

对于前面提供的方法,实际上并不够灵活。比如对于诸多配体你可能想在特定文件夹下进行分开对接,而上面的方式并不能提供自建工作目录的命令。因此,利用Python作为接口就大大增加了其灵活性。本人对于Python知识有限,因此只做简单讲述。官方提供了两个脚本作为接口测试。为Python2脚本,然后需要安装对应的pywin32

  • 比如简单的对接脚本如下
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-

    # Example script for starting MVD from a Python script.
    import os
    import MvdWrapper

    # First we will create an output dir
    outputPath = 'C:\Users\liuyujie714\Desktop\mvd_docking\outputData'
    protein = 'protein'
    ligand = 'lig1'

    if (not os.path.exists( outputPath )):
    os.mkdir( outputPath )

    if os.path.exists( outputPath ) and os.path.isdir( outputPath ):
    print 'Created outputPath: ' + outputPath
    else:
    raise IOError, 'could not create path' + outputPath

    # Now start the wrapper...
    mvd = MvdWrapper.MvdWrapper("E:/User-software/Molegro-2008/MVD/bin/mvdconsole.exe", gui=True)
    mvd.waitUntilReady()
    mvd.info("Docking")
    mvd.random(123232) # set the seed (normally you would not set this!)

    # set initial parameters
    mvd.docksettings("maxIterations=1500;runs=10;ignoreSimilarPoses=true;IgnoreSimilarPosesThreshold=1;MaxPoses=5")

    # set evaluator parameters
    mvd.evaluatortype("MolDockGrid")
    mvd.evaluator("cropdistance=0;gridresolution=0.30;ligandes=false;sp2sp2bond=false;internalhbond=false;hbond90=true;DisplaceWater=false")

    # set optimizer parameters
    mvd.optimizertype("MSE")
    mvd.optimizer("populationsize=50;cavity=true;creationEnergyThreshold=100;poseGenerator=10,10,30;recombine=true;maxsimplex=750;simplexsteps=300;simplexdistancefactor=1;clusterthreshold=1.00;keepmaxposes=5")

    # set working path
    mvd.cd(outputPath) # change to output path

    # set protein and ligands
    # mvd.download(complex, complex + ".pdb") # download from pdb.org, not work, you need download pdb file by yourself
    mvd.importFrom("Proteins", protein + ".pdb") # import only protein into workspace
    mvd.importFrom("Ligands", ligand + ".mol2") # import ligands

    # save workspace
    mvd.save(ligand)

    mvd.rmsd("ligand[0]") # set a ligand as a rmsd reference
    mvd.dock("") # start the docking
    # mvd.exit()

这样就可以通过python去调用MVD进行对接了。当然也可以设置自定义的批量对接。

  • 比如批量对接脚本如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-

    # 用于MVD同一蛋白与许多配体一一批量对接
    import os
    import MvdWrapper

    # 启动MVD程序
    mvd = MvdWrapper.MvdWrapper("E:/User-software/Molegro-2008/MVD/bin/mvdconsole.exe", gui=True)
    mvd.waitUntilReady()

    # 设置当前路径为工作目录,该目录必须包含一个蛋白pdb文件和所有需要对接的配体mol2文件
    path = os.getcwd()
    dirs = os.listdir(path)

    # 手动设置你的蛋白pdb文件名
    protein = '1gyc'

    # 循环遍历所有配体
    for i in dirs:
    if os.path.splitext(i)[1] == ".mol2":
    ligname = os.path.splitext(i)[0]

    # 判断工作文件夹是否已经存在,如果没有则创建,如果已经存在则需要手动删除
    if (not os.path.exists( ligname + "_" + protein )):
    os.mkdir( ligname + "_" + protein )
    else:
    print "\n" + ligname + "_" + protein + " folder has exist"
    print "Please delete it first!\n"
    exit ()

    # 本次对接相关信息
    mvd.info("Docking" +"_" + ligname + "_" + protein)

    # 导入蛋白和相应的配体文件
    mvd.importFrom("Proteins", protein + ".pdb")
    mvd.importFrom("Ligands", ligname + ".mol2")

    # 设置对接参数,具体可以参考手册进行相关修改
    mvd.docksettings("maxIterations=1500;runs=10;ignoreSimilarPoses=true;IgnoreSimilarPosesThreshold=1;MaxPoses=5")
    mvd.evaluatortype("MolDockGrid")
    mvd.evaluator("cropdistance=0;gridresolution=0.30;ligandes=false;sp2sp2bond=false;internalhbond=false;hbond90=true;DisplaceWater=false")
    mvd.optimizertype("MSE")
    mvd.optimizer("populationsize=50;cavity=true;creationEnergyThreshold=100;poseGenerator=10,10,30;recombine=true;maxsimplex=750;simplexsteps=300;simplexdistancefactor=1;clusterthreshold=1.00;keepmaxposes=5")

    # 进入到目标配体-蛋白工作文件目录下
    mvd.cd(ligname + "_" + protein)
    mvd.save(ligname + "_" + protein)
    mvd.rmsd("ligand[0]")

    # 开始对接
    mvd.dock("")

    # 切换到原来工作目录到当前目录,为了下一次对接
    mvd.cd(path)

    # 清除本次工作空间,以便启动下一次对接任务
    mvd.new()

    # 所有对接结束以后,退出对接界面
    mvd.exit()

当然可以让Python自动下载蛋白pdb文件,因为MVD自带的那个下载无法使用了,你可以在protein = '1gyc'下面添加以下代码:

1
2
3
4
5
import requests
url = 'https://files.rcsb.org/download/' + protein + '.pdb'
r = requests.get(url)
with open(protein + ".pdb", "wb") as code:
code.write(r.content)