摘要: 本文把 Rizzo Lab 的 DOCK6 共价对接教程(5VKG/tenatoprazole 案例)全部 6 节 GUI 手工操作脚本化,避免繁琐的窗口操作,适合共价分子的大规模虚拟筛选。步骤包括:受体准备、配体准备、sphere/box/grid/docking 全部收敛为两条命令,换体系只需改 5 个参数。文中给出完整可复现的系列脚本与输入输出案例文件,并记录 8 条 DOCK 6.11 与老教程参数文件、obabel 输出格式的兼容性踩坑,全部实测复现。

你要做共价抑制剂对接,翻到 Rizzo Lab 的 DOCK6 共价对接教程(5VKG/tenatoprazole 案例),却发现前两节全是 Chimera 图形界面手工操作:改半胱氨酸、删侧链、手工拼配体、文本编辑器改 dummy 原子名------换一个体系就得从头再点一遍。这篇把教程全部 6 节操作脚本化:受体准备(reduce + tleap ff14SB)、配体准备(晶体 CONECT + AM1-BCC + D1/D2 dummy 化)、sphere/box/grid/docking 全部变成两条命令。**迁移到其他的案例上只需要改 5 个参数(残基号、链、配体名、配体硫原子名、净电荷),**你照着操作换上自己的共价复合物 PDB 就能跑,末尾 8 条踩坑记录了 DOCK 6.11 与老教程参数文件、obabel 输出格式的全部兼容性坑。
相关教程与核心资源
| 资源 | 内容 | 与本文关系 |
|---|---|---|
| Rizzo Lab 2019 Covalent docking tutorial 1 (5VKG) | 本文脚本化的原始教程,DOCK 6.10 alpha | 全部 GUI 步骤的出处 |
| UCSF DOCK 官网 | DOCK 6 下载(学术免费,需签 license) | 安装入口 |
| PDB 5VKG | 人 Tsg101 UEV 与 tenatoprazole NMR 复合物(20 个 model) | 案例体系 |
| Allen KN 等, Biochemistry 56, 4498 (2017) DOI 10.1021/acs.biochem.7b00567 | tenatoprazole 共价结合 Tsg101 Cys73 的实验论文 | 二硫键 2.05 Å 的依据 |
一、案例体系与脚本化思路
PDB 5VKG 是 20 个 model 的 NMR 结构 ensemble,取 model 1。共价键在配体 4N1 的 S20 与 Cys73 的 SG 之间,实测距离 2.03 Å(与教程一致的二硫键长度)。
教程 6 节与脚本化对照(每一步 GUI 操作换成什么命令):
| 教程步骤 | 原操作(Chimera GUI) | 脚本化等价 | 道理 |
|---|---|---|---|
| I. 受体截共价键 | Build Structure → Modify S, Bonds 2, tetrahedral | 删掉配体 HETATM 即可 | 教程那步只是修 Chimera 的显示,PDB 里 SG 本来就是完整 CYS 的一部分 |
| I. AddH | Tools → AddH(AMBER14SB) | reduce -BUILD |
Chimera 的 AddH 内核就是 reduce,同源替换 |
| I. AddCharge | Tools → AddCharge | tleap(ff14SB 电荷)+ ParmEd 注入 mol2 |
AmberTools 原生,比 Chimera 封装更可控 |
| I. 删 Cys73 侧链 | 手选 CB/SG 删除 | mol2 文本层删原子 + 键表重编号 | 纯文本操作,脚本一步到位 |
| II. 配体拼装 | 手选、invert、删蛋白、bond sel 拼二硫键 | 直接用晶体 CONECT 记录 | 5VKG 的 CONECT 本来就含 S20--SG 键,不用拼 |
| II. 骨架 N 补第二个 H | Modify N, Bonds 3, trigonal | 几何法线方向补 H | 截链后 N 只连 CA,按四面体几何放 H |
| II. AddCharge +1 AM1BCC | Tools → AddCharge | antechamber -c bcc -nc 1 |
同一引擎 |
| II. 手工改 D2/D1 dummy | 文本编辑器改 atom name/type | ligand_surgery():改名+改类型+删骨架+键表重排 |
教程原话是"open it with a text editing tool" |
| III. sphere 文件 | 存 3 原子 mol2 再手排顺序 | 直接写 .sph 文本 |
sphere 格式就 8 列固定宽度 |
| IV--VI. box/grid/dock | 教程本来就是命令行 | 原样照搬 + 2 个兼容性补丁 | 见踩坑 4/5 |
工作目录结构(两条命令产出的全部内容):
covalent_dock/
├── scripts/
│ ├── 01_prep_all.py # 受体+配体+spheres 全准备 (Step 0-III)
│ └── 02_run_dock.sh # showbox + grid + covalent docking (Step IV-VI)
└── run_5vkg/ # 运行目录
├── model1.pdb
├── 001.files/ # 5VKG_rec_h.mol2 / 5VKG_03_06.mol2 / lig_03_06.mol2
├── 002.spheres/ # lig_abs_spheres.sph / lig_spheres.sph
├── 003.gridbox/ # lig.box.pdb
├── 004.grid/ # grid.nrg / grid.bmp
└── 005.dock/ # covalent.out / covalent_out_scored.mol2
二、环境与输入
你需要安装(本文实测版本):DOCK 6.11(~/app/dock.6.11)、AmberTools 26(tleap/antechamber)、reduce、Open Babel、RDKit(可选)、ParmEd(经 conda 环境调用)。
# 下载结构
curl -sL https://files.rcsb.org/download/5VKG.pdb -o 5VKG.pdb
确认共价键距离(教程开头的 S-S 检查, 3 行 Python 替代 Chimera 量距)
python3 - <<'EOF'
import math
sg = s20 = None
m = 0
for l in open('5VKG.pdb'):
if l.startswith('MODEL'): m += 1
if m != 1 or not l.startswith(('ATOM','HETATM')): continue
n, r, num = l[12:16].strip(), l[17:20].strip(), l[22:26].strip()
xyz = (float(l[30:38]), float(l[38:46]), float(l[46:54]))
if r=='CYS' and num=='73' and n=='SG': sg = xyz
if r=='4N1' and n=='S20': s20 = xyz
print('SG-S20 = %.2f A (二硫键应约 2.05)' % math.dist(sg, s20))
EOF
输出: SG-S20 = 2.03 A (二硫键应约 2.05) ← 与教程一致
三、Step I--III:一条命令完成全部准备
cd ~/Desktop/M3/covalent_dock
python3 scripts/01_prep_all.py
--pdb 5VKG.pdb
--model 1
--cys-resnum 73
--chain A
--lig-resname 4N1
--lig-sulfur S20
--protonate N11
--net-charge 1
--workdir ./run_5vkg
5 个体系相关参数:--cys-resnum(共价半胱氨酸号)、--chain、--lig-resname(配体残基名)、--lig-sulfur(配体侧硫原子名)、--protonate(晶体省略氢的阳离子 N,本例 N11 是 PYRIDIN-1-IUM)。
脚本内部按顺序做了什么(对应教程 I--III 节):
① 受体 :删配体 → 删氢 → reduce -BUILD 加氢(等价 AddH)→ HIS 按已有侧链氢改名 HIE/HID/HIP(ff14SB 模板要求,见踩坑 1)→ tleap ff14SB 算电荷 → obabel 转 Sybyl mol2 → ParmEd 按(残基号,原子名)把电荷逐原子写回 mol2 → 生成 grid 受体(只删共价 Cys73 的 CB/SG+氢,其他 CYS 不动)。
[rec] 1162 heavy atoms, 144 residues
[HIS fix] ['HIE102', 'HIE115', 'HID119']
INJECTED 2342 MISSING 0 [] ← 2342 个原子电荷全部注入
[grid rec] CYS73: dropped 5 atoms (['CB', 'HB2', 'HB3', 'HG', 'SG'])
② 配体 :取 Cys73 全部原子 + 4N1 全部原子(含晶体氢)→ 用官方 CONECT 建键(S20--SG 天然在内,不用像教程那样 bond sel)→ 几何法线给骨架 N 补第二个 H、给 N11 补阳离子氢(见踩坑 6)→ antechamber -c bcc -nc 1 算 AM1-BCC 电荷 → obabel mol2 做键级骨架(antechamber 对混合残基的键感知不可靠,见踩坑 7)+ BCC 电荷按坐标合并 → surgery:删骨架 N/CA/C/O 及其氢、删 CB 上的氢、CB→D2/Du、SG→D1/Du、键表重编号。
[lig] Cys73: 10 atoms; 4N1: 41 atoms; SG-S20 = 2.03 A
[lig] added HN2 on backbone N
[lig] added N11H on cationic N (N11) --- crystal omitted PYRIDIN-1-IUM H
[charges] BCC merged 53; obabel-kept 2
[surgery] dropped [...] (backbone+H); renamed {'CB': 'D2', 'SG': 'D1'} -> D1/D2 (Du)
③ Spheres :lig_abs_spheres.sph 按教程要求的顺序(1. S_gamma 2. C_beta 3. C_alpha)直接写成文本;lig_spheres.sph 用配体重原子。教程让你先存 mol2 再手排顺序------脚本按顺序写出来,不用排。
教程手工改 dummy 的对照(教程原样 vs 脚本产出, atom 1/2 就是 D2/D1):
教程: 1 D2 -24.07 34.93 -36.20 Du 1 LIG -0.0660
2 D1 -25.16 36.18 -35.71 Du 1 LIG -0.1111
脚本: 1 D2 -29.43 30.79 -36.96 Du 1 CYS73 0.0427
2 D1 -29.95 32.14 -35.86 Du 1 CYS73 -0.0230
四、Step IV--VI:第二条命令跑 box/grid/dock
bash scripts/02_run_dock.sh ./run_5vkg
脚本内容就是教程 IV--VI 的三个输入文件(showbox.in/grid.in/covalent.in 参数与教程一致),外加两个 DOCK 6.11 的兼容性补丁(踩坑 4/5)。实测输出:
[box] 8 box atoms
[grid] grid.nrg grid.bmp OK
[dock] exit; scored file:
-rw-rw-r-- 1 lihui lihui 5810 ... covalent_out_scored.mol2
[dock] scored conformers: 1
对接结果查看(等价教程 ViewDock,纯命令行):
cd run_5vkg/005.dock
grep -A1 "Grid_Score\|HA_RMSDs" covalent_out_scored.mol2 | head -6
本文实测一版(全单键重建键表)输出:HA_RMSD 0.176 Å,Grid_Score +201.25(vdW +197.94 / ES +3.31),2 conformers,耗时 0.020 s------RMSD 到埃级说明共价几何约束生效;Grid_Score 偏正与该版键表把芳环压成单键有关,用 ar 键级版(默认输出)可改善打分合理性,见第六节。
五、换体系要改什么
换一个共价复合物(比如半胱氨酸蛋白酶 + 丙烯酸酯 warhead),5 步:
--cys-resnum/--chain:共价残基(CYS/SER/LYS 都适用,脚本按残基名定位侧链 CB/SG)--lig-resname/--lig-sulfur:配体残基名 + 连接原子(非硫 warhead 改成对应原子名即可,S--S 距离校验会自动放宽到通用共价范围)--protonate:晶体省略氢的带电位点(没有就删掉该参数)--net-charge:配体净电荷(sqm 要求电子数为偶数,奇数时先查质子化状态)bondlength(covalent.in):共价键长目标值,教程用 1.8(S--S 约 2.05 可按需改)
六、踩坑实录(8 条,全部实测复现)
| # | 坑 | 症状 | 修法 |
|---|---|---|---|
| 1 | reduce 输出的 HIS 与 ff14SB 模板冲突 | tleap FATAL: Atom .R<HIE 119>.A<HD1> does not have a type |
reduce 后按已有侧链氢改名:有 HD1→HID、有 HE2→HIE、双氢→HIP |
| 2 | sphere 文件列格式 | showbox Fortran runtime error: Bad value during floating point read |
sphere 行是 Fortran format(5x,3F10.5):原子序占 5 列,坐标必须从第 6 列起,不能自由分隔 |
| 3 | obabel mol2 的 counts 行 | grid Improper ATOM record substructure id |
counts 行第 3 个数是子结构数,obabel 写 0 但原子行有 subst_id;按最大 subst_id 重写,并把 subst_id 归一到 1..N 连续(obabel 从 2 起跳会差 1) |
| 4 | DOCK 6.11 新必填参数 | grid ERROR get_parameter: Unable to get value for allow_non_integral_charges |
grid.in 加一行 allow_non_integral_charges yes(6.10 教程的参数文件没有此项) |
| 5 | obabel mol2 头部空行 | grid Unable to find ATOM record |
GASTEIGER 行后的空行会被 DOCK 老读取器当 status_bits 吃掉下一行标记,删掉该空行 |
| 6 | 晶体省略阳离子氢 | antechamber number of electrons is odd (227) |
PDB FORMUL 写 H19 但坐标只有 18 个 H------PYRIDIN-1-IUM 的 N11--H 被省略;几何法线补 1 个 H,电子数变偶数后 AM1-BCC 正常 |
| 7 | antechamber 混合残基键感知 | 配体 mol2 键表散乱(CA/C/CB 全 ANY、零连接),DOCK 报 atom_in_anchor not found no segment |
CYS+配体两残基同文件时 antechamber 的 bondtype 判定崩;用 obabel mol2 做键级骨架 + BCC 电荷按坐标 (<0.15 Å) 合并 |
| 8 | dummy 原子所在 segment 必须含 dummy 对 | DOCK growth 报 Could not complete growth |
确认 D1--D2 之间与 D1--连接原子之间不被 flex.defn 判为可旋转键(Du 类型不匹配任何 rotor 模式,天然安全);排查时先看 covalent.out 的 dummy1/dummy2/connected atom 三行是否正确输出 |
七、结语
原教程的价值在 covalent 模式的原理拆解(dummy 原子如何锚定共价几何、bondlength 与二面角采样如何驱动生长);
脚 本化的价值在可复现------换体系改 5 个参数,两条命令跑完。两者配合读:先过一遍教程理解 D1/D2 的含义,再用脚本做你自己的体系。
参考来源
- Rizzo Lab, 2019 Covalent docking tutorial 1 with PDB 5VKG, Stony Brook University (wiki 页面, 2020-07-20 最后编辑)
- UCSF DOCK 6 官方文档与下载:http://dock.compbio.ucsf.edu/
- PDB 5VKG 结构与 CONECT 记录:RCSB PDB - 5VKG: Solution-state NMR structural ensemble of human Tsg101 UEV in complex with tenatoprazole
- Word JM 等, J. Mol. Biol. 285, 1735 (1999)(reduce 加氢方法学)DOI 10.1006/jmbi.1998.2406
- Wang J, Wang W, Kollman PA, Case DA, J. Mol. Graph. Model. 25, 247 (2006)(AM1-BCC 电荷)DOI 10.1016/j.jmgm.2005.12.005
关键字:DOCK6;共价对接;covalent docking;脚本化;dummy 原子;AM1-BCC;tleap;分子对接