盒子参数:中心坐标与尺寸设置不当

盒子参数这关,我见过太多人翻车了。说实话,它就是个"定位问题"——你让程序在一个错误的盒子里找小分子,那结果能对吗?

中心坐标:你放对了吗?

先问个问题:你的盒子中心,到底在哪?

很多新手直接拍脑袋填坐标。或者从文献里抄一段,也不检查。其实盒子中心应该落在你预想的对接位点上。

典型错误:用蛋白质心坐标当盒子中心。蛋白质心通常在分子内部,但你的结合位点可能在表面凹陷处。两者差好几个埃,搜索结果会偏到天涯海角。

我自己习惯这么干:先打开蛋白结构,找到对接位点附近的关键残基。比如某个已知的催化位点残基,或者文献里提过的关键口袋残基。用这些残基的几何中心来定盒子中心,比用整个蛋白质心靠谱得多。

举个例子,你在做CDK2的对接,活性位点是Glu51、Leu83、Phe80这圈残基形成的口袋。那就把这几个残基的alpha碳坐标取平均值。

# 用PyMOL取中心坐标
cdk2 pocket residues: Glu51, Leu83, Phe80, Asp86, Lys89
pymol> select pocket, resi 51+83+80+86+89
pymol> center_of_mass pocket
# 输出: x=12.34 y=-5.67 z=22.10  # 假设值

然后把这三个数填进盒子中心坐标里。

尺寸设置:大一点?小一点?

盒子太大的话,搜索空间指数级膨胀。计算慢是一回事,更关键是假阳性暴增——小分子可能在蛋白表面到处蹭。盒子太小呢?小分子被盒子边缘截断,或者根本塞不进真正的结合位点。

我记得有一次帮同事排查一个对接结果:得分很高但对接姿势完全不合理。我一看盒子尺寸:24×24×24 Å,但配体是个柔性分子,长度将近15 Å。盒子边缘离配体最近的原子只有4.5 Å。这意味着配体稍微旋转就撞到盒子边界,能量打分全乱套。

那怎么定尺寸?我的经验公式是这样:

  1. 先量配体的最大尺寸(用RDKit或PyMOL算一下)。
  2. 在每个方向上至少加5 Å的缓冲空间。
  3. 如果你用格点方法(比如AutoDock),格点必须覆盖整个结合口袋至少向外延伸2-3层溶剂层。

快速检查方法:

把配体手动放在预期位姿上,然后看看配体最外缘原子到盒子边界的最短距离。如果小于2 Å,有较大概率碰到边界效应。我通常要求至少3-4 Å。

常用软件的盒子参数对照

软件 参数名称 常见取值 我的踩坑记录
AutoDock Vina center_x, center_y, center_z; size_x, size_y, size_z 尺寸一般20-30 Å 曾经设成40×40×40找小分子,结果跑了7小时,找出一堆蛋白表面假阳性。
AutoDock 4.2 gridcenter; npts 格点数60-80,间距0.375 Å 有一次npts设成40×40×40,配体都在盒子外,对接根本卡住。
Glide (Schrödinger) Grid box center; inner/outer box inner box覆盖口袋,outer box覆盖配体 我用默认outer box太小,长配体直接报错。
DOCK Center; Box (sphere radius) 半径8-12 Å 半径设了5 Å,小分子和蛋白根本没有有效碰撞,所有打分都是0。

边界效应的真实案例

去年跑一个药物优化项目,目标蛋白有个很深的疏水口袋。我把盒子中心对准了口袋中心,尺寸设成22×22×22 Å。跑完后得分最高的姿势,配体疏水尾巴被逼得翘起来,刚好卡在盒子对角线上。那个姿势给的能量非常低,但化学上根本不可能——尾巴应该平铺在口袋里,但它被盒子墙挤歪了。

我后来把盒子尺寸扩大到28×28×28 Å,再跑,正常了。那个假姿势的得分直接跌出前十。

技巧:如果你发现最好的对接姿势里有原子离盒子边界很近(比如2 Å以内),你就得加盒子尺寸重新跑。不要相信那个姿势。

怎么才算"设置得当"?三个步骤

  1. 目视确认:用小分子或已知配体画个盒子,肉眼看看有没有遮挡。
  2. 数格子:格点间距0.375 Å时,npts=60对应22.5 Å。配体长度+2个原子半径+5 Å缓冲,你大概心里就有数了。
  3. 做个短测试:设置小尺寸,先用2-3个姿态快速跑一圈。如果姿势全往一个方向挤,或者得分异常,八成是盒子问题。

常见错误速查表

现象 可能原因 排查方向
所有对接姿势都挤在盒子角落 盒子中心远离结合位点 重新计算口袋中心,检查坐标单位是Å还是nm
得分异常高但姿势不合理 盒子太小,配体被边界排斥 加大盒子尺寸或换个结合位点定义
对接耗时莫名增加 盒子过大,格点数太多 缩小盒子至合理范围,用配体尺寸+5 Å的原则
配体原子和蛋白原子有严重重叠(steric clash) 中心坐标偏移,盒子没覆盖正确口袋 检查坐标读取是否错了残基名称

避坑指南:我曾经……

我曾经因为单位问题抓狂了一整天。一个合作方给的坐标是nm,我当成Å填进去了。结果盒子中心偏了10倍,所有对接全废。所以每次拿到坐标,一定要确认单位。一般pdb文件里的坐标是Å,但有些软件内部用nm,你得换算好。

# 典型错误配置(nm当Å用)
# 实际口袋中心在2.5, 1.2, -0.3 nm → 25, 12, -3 Å
# 但我误填了:
center_x = 2.5
center_y = 1.2
center_z = -0.3
# 实际跑出来的格点覆盖的是蛋白左上角一片空气

还有一次,我把centre拼成了center。听着可笑,但AutoDock读参数文件,拼错了就默认用(0,0,0)。然后盒子原点落在(0,0,0),离蛋白几百埃远。那次浪费了三个节点的计算资源。现在我写配置前都会用grep检查一下关键词拼写。

快速验证方法:跑一个短对接(exhaustiveness=1),把输出的姿势保存为pdb,和蛋白一起在PyMOL里打开。盒子边界用网格线画出来,肉眼检查配体是否在合理位置。两步就能发现问题。

# PyMOL中显示格点范围(假设Vina盒子中心12, -5, 20,尺寸24, 24, 24)
pymol> pseudoatom box_center, pos=[12,-5,20]
pymol> show spheres, box_center
pymol> set grid_mode, 1
# 然后手动检查配体是否有原子超出或紧贴边界

盒子参数与搜参效率的关系

你想想看,格点数量是三维乘积。尺寸从24→30 Å,在0.375 Å间距下,格点数从64³增加到80³,体积直接翻倍。计算时间也翻倍。所以不是越大越好。精准定位盒子中心和合理尺寸,比盲目扩盒子有效一百倍。

我自己有个"两轮法":第一轮用小盒子(覆盖口袋+5 Å)和低exhaustiveness,快速找top 10姿势。第二轮把盒子中心对准第一轮最好姿势的质心,尺寸稍微放大一点(+4 Å),用高exhaustiveness精跑。这样又准又快。

# 第一轮:快速粗筛
center_x = 12.0 center_y = -5.0 center_z = 20.0
size_x = 24 size_y = 24 size_z = 24
exhaustiveness = 4

# 分析第一轮结果,发现最好姿势中心在 12.8, -4.2, 19.5
# 第二轮:精跑
center_x = 12.8 center_y = -4.2 center_z = 19.5
size_x = 28 size_y = 28 size_z = 28
exhaustiveness = 16

硬件上的小提醒

如果你用GPU加速(比如vina-gpu或gnina),盒子尺寸太大会把显存撑爆。我有一块6GB的卡,设成40×40×40的格点,间距0.375,直接out of memory。后来减到30×30×30才跑起来。所以显存不够时别硬来,先缩小盒子或者增大间距。

# 显存不够时的妥协方案
# 保持盒子尺寸不变,增大格点间距
# 从0.375 Å 改为 0.5 Å,格点数量减少一半
# 精度稍有下降但还能接受
center_x = 12.0 center_y = -5.0 center_z = 20.0
size_x = 30 size_y = 30 size_z = 30
spacing = 0.5   # 默认0.375,觉得可以改到0.5
盒子参数设置流程——中心坐标与尺寸 1. 获取结合位点 已知活性残基 / 叠合已知配体 2. 定盒子中心坐标 计算关键残基质心 / 口袋质心 3. 量配体最大尺寸 PyMOL/RDKit 测量最远两原子距离 4. 定盒子尺寸 配体尺寸 + 5~6 Å 缓冲 5. 验证 & 试跑 PyMOL目视 + 低exhaustiveness试跑 常见陷阱 用整体蛋白质心代替口袋中心 盒子尺寸设太大导致计算爆炸 单位混淆(nm vs Å) 拼写错误(center 写成 centre) 检查边界效应 配体最远原子距盒子边界 > 2 Å 建议 ≥ 3~4 Å

最后说一句:盒子参数看着简单,但它是对接流程的第一道坎。迈不对,后面的活全白干。我每次启动一个新项目,第一件事就是花10分钟确认盒子。这10分钟往往能省下后面好几天的弯路。