2025-08-02 22:13:12 +08:00
2025-08-02 22:13:12 +08:00
2025-08-02 22:13:12 +08:00
2025-08-02 21:54:31 +08:00
2025-08-02 21:54:31 +08:00
2025-08-02 21:54:31 +08:00
2025-08-02 21:54:31 +08:00
2025-08-02 21:54:31 +08:00
2025-08-02 21:54:31 +08:00
2025-08-02 21:54:31 +08:00
2025-08-02 21:54:31 +08:00
2025-08-02 21:54:31 +08:00
2025-08-02 21:54:31 +08:00
2025-08-02 21:54:31 +08:00
2025-08-02 21:54:31 +08:00
2025-08-02 21:54:31 +08:00

目录结构

project_root/  
├── input/  
│   ├── receptors/  
│   │   ├── TrpE_entry_1.pdb  
│   │   └── TrpE_entry_1.pdbqt  
│   ├── ligands/  
│   │   ├── sdf/  
│   │   │   ├── ligand_001.sdf  
│   │   │   ├── ligand_002.sdf  
│   │   │   └── ...  
│   │   └── pdbqt/  
│   │       ├── ligand_001.pdbqt  
│   │       ├── ligand_002.pdbqt  
│   │       └── ...  
│   └── configs/  
│       ├── TrpE_entry_1.box.txt  
│       └── TrpE_entry_1.box.pdb  
├── results/  
│   ├── poses/  
│   │   ├── ligand_001_out.pdbqt  
│   │   ├── ligand_002_out.pdbqt  
│   │   └── ...  
│   └── scores/  
│       ├── docking_scores.csv  
│       └── summary_report.txt  
└── scripts/  
    ├── batch_prepare_ligands.sh  
    ├── batch_docking.sh  
    └── analyze_results.py  

小分子 3D 构象准备

需要给小分子一个初始化的 3d 构象存放到ligand/sdf

python sdf2to3d.py --src_dir ./2d_sdf_dir --out_dir ./3d_sdf_dir --n_jobs 8

小分子格式转化

使用 meeko 将 ligand/sdf 转为 ligand/pdbqt

micromamba run -n vina ./scripts/batch_prepare_ligands.sh ligands/sdf ligands/pdbqt/ batch_prepare_ligands.log 128

小分子批量提交对接

分割小分子文件将 ligand 目录里面的 pdbqt 文件夹拆分 n 个子文件夹(pdbqt1,pdbqt2,pdbqt3...pdbqtn)

micromamba run -n vina python vina_split_and_submit.py <split_number_n>

执行完成后会自动使用 dsub 命令将对接任务提交给华为多瑙调度系统

需要注意有时候提交执行速度过快可能有批次遗漏,可以在合并时候检查

对接结果合并

在对接完成之后会在 result 文件夹里面创建 n 个对接结果文件夹poses1poses2poses3...posesn

每个文件夹中都有对应的*_out.pdbqt文件与*_converted.sdf文件,调用

micromamba run -n vina python vina_merge_and_check.py --n_splits <split_number_n> --out_dir ./result --output_prefix poses --poses_dir ./result/poses_all

会将所有的n 个对接结果文件夹中*_converted.sdf文件存放到 ./result/poses_all 目录,同时会检测是否有提交时候过快导致遗漏某个批次没有对接,需要注意查看。

分析对接结果

*_converted.sdf文件中存在20个对接构象,取决于scripts/batch_docking.shNUM_MODES 设置多少数目,默认设置为 20。

其中每个 sdf 构象存在下面的<meeko>字段 用于获取对接打分等属性用于后续筛选分子。

>  <meeko>  (20) 
{"is_sidechain": [false], "free_energy": -6.38, "intermolecular_energy": -15.695, "internal_energy": -2.912}

batch 模式对接

vina=1.2.7可以使用batch 模式进行批量对接。

mkdir -p results/poses
vina --receptor input/receptors/TrpE_entry_1.pdbqt \  
     --batch input/ligands/test \  
     --config ./configs/TrpE_entry_1.box.txt \  
     --dir results/poses \  
     --exhaustiveness=32

# 使用脚本对接
./scripts/batch_docking.sh ./receptors/TrpE_entry_1.pdbqt ./config/TrpE_entry_1.box.txt ligands/test output test.log /share/home/lyzeng24/rdkit_script/vina/vina

环境安装

conda install -c conda-forge vina meeko rdkit joblib rich ipython parallel -y

准备小分子pdbqt

# 单个配体准备  
mk_prepare_ligand.py -i molecule.sdf -o molecule.pdbqt  
  
# 批量准备
micromamba run -n vina ./scripts/batch_prepare_ligands.sh ligands/sdf ligands/pdbqt/ batch_prepare_ligands.log 128

#监控文件
watch -n 1 "ls -l pdbqt/*.pdbqt 2>/dev/null | wc -l"

准备受体pdbqt

# 受体准备(带柔性侧链)
mk_prepare_receptor.py -i nucleic_acid.cif -o my_receptor -j -p -f A:42

batch对接模式

./scripts/batch_docking.sh input/receptors/TrpE_entry_1.pdbqt \  
                          input/configs/TrpE_entry_1.box.txt \  
                          input/ligands/pdbqt \  
                          results/poses \  
                          results/batch_docking.log

监控对接结果

watch -n 1 'for i in {1..12}; do printf "poses$i: "; ls results/poses$i/*.pdbqt 2>/dev/null | wc -l; done'

将对接结果还原为sdf文件

mk_export.py 命令行工具的各个参数选项。

cd output
mk_export.py ./*_out.pdbqt --suffix _converted

分析vina对接结果

# 结果导出
mk_export.py vina_results.pdbqt -j my_receptor.json -s lig_docked.sdf -p rec_docked.pdb

djob 运行时间耗时长的批次任务

24562323     vina_job15   RUNNING    lyzeng24     default      default      2025/07/31 23:16:30  -                    agent-ARM-17         
24562322     vina_job14   RUNNING    lyzeng24     default      default      2025/07/31 23:16:30  -                    agent-ARM-17         
24562321     vina_job13   RUNNING    lyzeng24     default      default      2025/07/31 23:16:30  -                    agent-ARM-17         
24562320     vina_job12   RUNNING    lyzeng24     default      default      2025/07/31 23:16:29  -                    agent-ARM-21         
24562319     vina_job11   RUNNING    lyzeng24     default      default      2025/07/31 23:16:29  -                    agent-ARM-21         
24562318     vina_job10   RUNNING    lyzeng24     default      default      2025/07/31 23:16:29  -                    agent-ARM-21         
24562317     vina_job9    RUNNING    lyzeng24     default      default      2025/07/31 23:16:28  -                    agent-ARM-21         
24562316     vina_job8    RUNNING    lyzeng24     default      default      2025/07/31 23:16:28  -                    agent-ARM-16         
24562315     vina_job7    RUNNING    lyzeng24     default      default      2025/07/31 23:16:28  -                    agent-ARM-16         
24562314     vina_job6    RUNNING    lyzeng24     default      default      2025/07/31 23:16:27  -                    agent-ARM-16         
24562313     vina_job5    RUNNING    lyzeng24     default      default      2025/07/31 23:16:27  -                    agent-ARM-19         
24562312     vina_job4    RUNNING    lyzeng24     default      default      2025/07/31 23:16:27  -                    agent-ARM-19         
24562311     vina_job3    RUNNING    lyzeng24     default      default      2025/07/31 23:16:27  -                    agent-ARM-19
Description
面向自动化批量对接的 autodock vina 批处理脚本,易于集群或本地大规模筛选。
Readme 16 MiB
Languages
Python 86.1%
Shell 8.8%
Jupyter Notebook 5.1%