4. 输入输出:准备PDB文件,理解MolProbity输出报告
说到MolProbity批量校验,第一步就是准备PDB文件。你可能会想,PDB文件不都有现成的吗?有什么好准备的?我以前也这么觉得,直到有一次跑了整整一夜的批量校验,第二天一看日志——全部失败。原因呢?一个PDB文件里少了个TER记录,格式不对,MolProbity直接拒了。嗯,从那以后,我每次都会专门花时间做文件预处理。
这一章我们就来聊两件事:怎么把PDB文件收拾利索,以及MolProbity吐出来的报告到底该怎么看。
4.1 PDB文件准备——别让细节坏了大事
MolProbity对输入文件的要求说严格也严格,说宽松也宽松。它严格在格式必须规范,宽松在只要格式对了,基本上什么结构的PDB它都能吃。我建议你在跑批量之前,先过一遍下面这四道关。
4.1.1 格式规范检查
PDB文件有固定的列宽标准。ATOM和HETATM记录的列位不能错,原子名、残基名、链标识、坐标、occupancy、B-factor,一个萝卜一个坑。MolProbity的解析器是严格按列位读的,一旦错位,轻则跳过部分原子,重则直接报错。
我个人习惯用这个命令快速检查文件行数是否完整:
grep -c "^ATOM " your_structure.pdb
grep -c "^HETATM" your_structure.pdb
如果ATOM记录的行数跟你预期差太多,那就要小心了。我曾经遇到过一个结构,看上去没问题,结果一查发现链B的Cα原子全被截断了,原因是文件保存时发生了截断。那批校验结果我花了两天才排查出来,亏大了。
4.1.2 原子与残基完整性
MolProbity会检查每个残基的原子是否齐全。主链原子(N、Cα、C、O)缺一不可,侧链原子按照标准命名规范也必须完整。缺失原子会被标记为"incomplete",影响整体评分。
这里有个常见问题:备选构象(alternate conformation)。一个残基如果有A、B两种构象,MolProbity默认只处理占据率高的那个。如果你的结构里alternate conformation标记没有正确清理,MolProbity可能会误判原子缺失。我建议在提交前用以下方式统一处理:
# 保留occupancy最高的构象,删除altloc标记
pdb_selaltloc -1 your_structure.pdb > clean_structure.pdb
4.1.3 水分子与配体处理
水分子要不要保留?我的建议是:保留,但要注意两点。第一,水分子必须用HOH残基名,第二,水分子不能有异常高的B-factor(通常>80就值得怀疑)。MolProbity会单独计算水分子的碰撞分数,保留合理的水分子有助于获得真实的Clashscore。
配体处理则要更谨慎。MolProbity内置了一个配体字典库,只有库里的配体才会被正确识别和校验。如果你的结构含有特殊配体,比如某个课题组自己合成的抑制剂,那必须先确保配体的化学参数(键序、成键原子)在PDB文件中定义完整。
我常用的做法是给每个配体单独做一个checksum验证:
# 提取配体并检查连接信息
grep "^HETATM" your_structure.pdb | grep "LIG" | head -5
grep "^LINK" your_structure.pdb
如果LINK记录缺失,MolProbity就不会把配体当作一个整体来校验,而是当成一堆碎片原子,结果自然不准。
4.1.4 文件编码与换行符
这听起来很基础,但我在项目中真的遇到过。从Windows传到Linux服务器的PDB文件,换行符是CRLF,而不是Unix标准的LF。MolProbity在Linux下解析时,偶尔会因此读错行。建议统一转一下:
dos2unix your_structure.pdb
4.2 MolProbity输出报告——读懂这张成绩单
MolProbity校验完成后会生成一份综合报告。报告是HTML格式的,也可以用文本模式输出。我一般看文本版,因为批量处理后方便grep汇总。但不管哪种格式,核心指标就那几个。
4.2.1 报告结构概览
一份标准的MolProbity报告包含以下几个模块:
| 模块 | 内容 | 优先级 |
|---|---|---|
| 整体统计 | Clashscore、MolProbity Score、RMSD等 | ★★★★★ |
| Ramachandran分析 | 青睐区、允许区、异常值比例 | ★★★★★ |
| Rotamer分析 | 旋转异构体优劣分布 | ★★★★☆ |
| 原子碰撞详情 | 每对碰撞原子的距离和VDW重叠 | ★★★★☆ |
| 键长键角偏差 | 与理想值的RMSD | ★★★☆☆ |
| C-beta偏差 | Cβ原子位置异常 | ★★★☆☆ |
你看这张表,最核心的就是前三个模块。我一般先看整体统计,如果Clashscore和MolProbity Score都在绿色区间,再往下看具体的Ramachandran和Rotamer细节。如果分数本身就很差,那后面的细节就是用来定位问题的。
4.2.2 核心指标解读
Clashscore(碰撞分数)——这个指标衡量的是原子之间的非键合冲突。说白了,就是两个原子靠得太近了,在空间上"打架"了。
MolProbity会计算每1000个原子中发生严重碰撞的对数。分数越低越好。通常Clashscore < 5算是优秀,5-10算中等,>10就需要认真审视了。报告的百分位排名会告诉你这个分数在同类分辨率结构中的位置。
Ramachandran分析——二面角ϕ和ψ的分布。青睐区比例>98%可以认为结构很合理,95%-98%还算可以,低于95%那说明不少残基的骨架构象有问题。异常值残基一般会在报告里单独列出来,我建议逐个检查是否与配体结合或处于柔性loop区。
Rotamer分析——侧链旋转异构体与已知库的匹配程度。优良比例>95%算不错,低于90%就值得每个残基去排查了。
MolProbity综合评分——这是把Clashscore、Ramachandran和Rotamer等指标综合起来的加权分数。通常<1.0是非常好的,1.0-2.0可以接受,>2.0意味着结构质量有提升空间。
下面是一份实际输出报告的片段:
--- MolProbity Summary ---
Clashscore: 3.2 (98th percentile)
MolProbity Score: 1.15 (99th percentile)
RMSD for bond lengths: 0.008 Å
RMSD for bond angles: 1.23°
Ramachandran Plot:
Favored: 97.8%
Allowed: 1.9%
Outliers: 0.3%
Rotamer Analysis:
Favored: 95.2%
Acceptable: 3.7%
Poor: 1.1%
C-beta deviations: 2 outliers / 245 residues
这份报告显示结构质量相当不错。Clashscore 3.2在同分辨率结构中排98百分位,说明比98%的同类结构都要好。MolProbity Score 1.15也是很不错的成绩。Ramachandran青睐区97.8%,接近98%。唯一需要留意的是那0.3%的异常值残基和1.1%的poor rotamer。
4.2.3 常见问题标记
MolProbity报告会用特殊标记提醒你注意某些问题。常见的有:
- ❗碰撞标记——两个原子之间的VDW重叠超过0.4Å,会在报告中用红色高亮
- ⚠️ C-beta偏差——Cβ原子的位置偏离理想值超过0.25Å,提示侧链构象可能出错
- ❌ cis肽键异常——非脯氨酸残基出现cis肽键,一般会被标为异常
- 🔴 键长键角剧烈偏离——如果某处RMSD局部特别高,报告里会单独列出来
我个人经验是,批量校验时尤其要注意碰撞标记分布是否均匀。如果所有碰撞都集中在某个配体周围,那说明配体的位置可能没优化好;如果分散在整个蛋白里,那可能是分辨率本就不高,或者精修参数有问题。
grep "^Clashscore" *.txt | sort -k2 -n 来排。
4.3 从输入到输出——全流程可视化
说了这么多,我把整个输入输出流程梳理成一张图。你拿着这张图去准备文件、解读报告,心里会更有底。
你看这张图的流向——从左边原始PDB文件出发,经过格式检查和水分子配体处理,进入MolProbity校验引擎,最后输出综合评分和分项报告,再落到问题定位与修正。整个链条只要有一个环节没做好,后面的结果就会失真。
我每次做批量校验,都会先跑一个测试集(5-10个结构),快速验证输入文件没问题,再全量跑。这一步能省下大把排查时间。你想想看,如果300个结构跑了一整夜,第二天发现全是因为换行符不对——那得多冤。
• PDB文件准备:格式规范 → 原子完整性 → 水分子与配体处理 → 换行符检查
• 输出报告解读:Clashscore优先 → Ramachandran次之 → Rotamer跟进 → 综合评分定档
• 批量场景:先用测试集验证,再全量运行,最后用脚本汇总报告做质量排序
嗯,准备好输入文件、看懂输出报告,MolProbity批量校验的两只脚就算是站稳了。接下来你就可以放心地往 pipeline 里塞数据,跑出来的结果自己心里有数,不会一头雾水。