Uni-Dock进行批量分子对接

1、安装好Uni-Dock

https://blog.csdn.net/weixin_43135178/article/details/132116817

2、配置好受体和盒子信息(config.txt)

AutoDockVina安装以及批量分子对接教程 + smiles2pdb2pdbqt_HealthScience的博客-CSDN博客

注意:

最后用于分子对接的受体的pdbqt文件是要去除小分子的,可以使用pymol去除小分子,从而得到没有小分子的配体文件

3、利用gypsum_dl-1.2.0得到很多SMILES的pdbqt文件

完整的代码直接看:D:\Pycharm_workspace\gypsum_dl-1.2.0,这里面问我已经写好了很多功能,包括:

smiles2pdb:(smiles2pdb.py)

cd gypsum_dl-1.2.0/

python smiles2pdb.py --source ./examples/file.smi --output_folder docking_data/EP4_ligand/pdb --max_variants_per_compound 1 --add_html_output --add_pdb_output

pdb2pdbqt:(docking/pdb2pdbqt.py)

python docking/pdb2pdbqt.py --pdb_file docking_data/EP4_ligand/pdb --pdbqt_file docking_data/EP4_ligand/pdbqt

4、使用Uni-Dock进行分子对接

cd example/screening_test

python run_dock_ep4.py

写好的 run_dock_ep4.py 文件作为参考,可以直接用“D:\Pycharm_workspace\DoubleTarget\Uni-Dock”下的文件

import os
import time
import json
import glob

with open("config_5ywy.json", "r") as f:
    config = json.load(f)

cmdlist = []

liglist = []

# 配体文件
if liglist == []:
    liglist = glob.glob("../../dock_data/EP4/5ywy_ligand/*.pdbqt")


with open("{}_ligands.txt".format(config["target"]), "w") as f:
    f.write(" ".join(liglist))
if config["sf"] == 'ad4':
    cmd = "unidock_ad4 --maps {} ".format("./indata/{}".format(config["target"]))
else:
    cmd = "unidock --receptor {} ".format("../../dock_data/EP4/5ywy_receptor/{}.pdbqt".format(config["target"]))
cmd += "--ligand_index {} ".format("{}_ligands.txt".format(config["target"]))
cmd += "--center_x {:.2f} --center_y {:.2f} --center_z {:.2f} ".format(config["center_x"], config["center_y"], config["center_z"])
cmd += "--size_x {:.2f} --size_y {:.2f} --size_z {:.2f} ".format(config["size_x"], config["size_y"], config["size_z"])
cmd += "--dir ./result/{} ".format(config["target"])
cmd += "--exhaustiveness {} ".format(config["nt"])
cmd += "--max_step {} ".format(config["ns"])
cmd += "--num_modes 9  --scoring {} --refine_step {} ".format(config["sf"], config.get("rs", 5))
cmd += "--seed {} ".format(config.get("seed", 42))
cmd += "--search_mode {}".format(config["search_mode"])

os.makedirs("result/{}".format(config["target"]), exist_ok=True)
with open("rundock.sh", "w") as f:
    f.write(cmd)

os.system("echo 'costtime'>> result/costtime.csv")
st = time.time()
os.system("bash rundock.sh")
os.system("echo '{}'>> result/costtime.csv".format(time.time()-st))

for _,_,fns in os.walk("./result/{}".format(config["target"])):
    break

csv_name = "./result/{}_{}_nt{}_ns{}_seed{}_{}.csv".format(config["target"], config["sf"], config["nt"], config["ns"], config["seed"], config.get("gpu_type", 'c12_m92_1 * NVIDIA V100').split()[-1])
with open(csv_name, "w") as f:
    f.write("ligand_name, type, docking_score\n")
for fn in fns:
    with open("result/{}/{}".format(config["target"], fn), "r") as f:
        f.readline()
        score = float(f.readline().split()[3])
        # 将结果写入csv文件
        os.system("echo '{}, {}'>> {}".format(fn, score, csv_name))




笔者有话说:

这个docking听不准确的,因为固定了随机种子,依然固定不住结果,并且与autodock出的结果不太一样

猜你喜欢

转载自blog.csdn.net/weixin_43135178/article/details/132122973