拿到 AlphaFold 预测结果后,PDB / MMCIF 文件到底怎么打开和用?(完整入门教程)
【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold
跑完run_alphafold.py之后,输出目录里堆着 PDB、CIF、JSON、pkl 一堆文件,不知从哪个下手?这套 AlphaFold 结果分析的起点其实只有四样东西:ranked_0.pdb(最佳结构)、对应的.cif(mmCIF 版本)、pae_*.json(链间误差),以及藏在 PDB 里的那根"置信度颜色条"(pLDDT)。本文带你完成三件事:10 秒看懂目录里哪些文件值得打开、用 PyMOL 和 Biopython 把结构可视化出来、再跑一遍自动质量报告。全文只做蛋白质结构预测结果的判读与加工,不涉及重跑模型。
你的输出目录里到底有什么
不用被文件数量吓到,真正日常会打开的就这几个(以单机版model_ranked_0为例,网络版命名略有不同):
| 文件 | 干什么用 | 打开频率 |
|---|---|---|
unrelaxed_*.pdb/relaxed_*.pdb | 原始预测 / 经 Amber 弛豫后的坐标;ranked_0即置信度第一的模型 | 最高 |
unrelaxed_*.cif | 同一结构的 mmCIF 版本,带完整元数据 | 偶尔 |
pae_*.json | PAE 矩阵,判多链相对方位是否靠谱 | 多聚体必查 |
confidence_*.json | 单链 pLDDT / ipLDDT / ptm 数值汇总 | 出报告时 |
其余features.pkl、result_*.pkl、timings.json是输入特征和中间结果,判读阶段用不上,先无视。记住一句口诀:看置信度找 pLDDT,看结构找 ranked_0,看多链关系找 PAE。
pLDDT:结构上的那根颜色条 🎨
AlphaFold 把每个残基的置信度分数直接写进了 PDB 的 B 因子(温度因子)列——不是热运动参数,别按传统 X 射线结构去理解它。PyMOL 里一句spectrum b就能把它渲染成蓝→白→红的渐变色条,一眼看出哪段可信。低分区域通常意味着 MSA 证据不足或序列保守性弱,不能直接当结论扔掉,但必须标注"该区域未经验证"。
按 pLDDT 分数着色的 AlphaFold 结构
pLDDT 三档快速判读:
| 分数区间 | 含义 | 怎么用 |
|---|---|---|
| 90–100 | 高置信,可放心做功能分析 | 直接用作对接/设计输入 |
| 70–90 | 可用但谨慎 | 结论里注明置信度 |
| 50–70 | 结构可能出错 | 单独验证后再下结论 |
| < 50 | 基本不可靠 | 只当序列信息用 |
PDB 还是 MMCIF?30 秒决策
| 维度 | PDB | MMCIF |
|---|---|---|
| 可读性 | 肉眼可扫,定宽列好编辑 | 表状长行,不适合手改 |
| 扩展性 | 弱,塞不下新元数据 | 强,支持任意新增项目 |
| 下游工具 | 对接/MD 软件几乎只认它 | 数据库提交、新版可视化工具首选 |
| 体积 | 偏大 | 更紧凑 |
推荐:给人看和跑对接用 PDB,要提交数据库或留元数据用 mmCIF。两者信息等价,Biopython 几行就能互转:
from Bio.PDB import PDBParser, MMCIFParser, PDBIO from Bio.PDB.mmcifio import MMCIFIO def pdb_to_cif(pdb, cif): s = PDBParser(QUIET=True).get_structure('x', pdb) MMCIFIO().set_structure(s) and MMCIFIO().save(cif) def cif_to_pdb(cif, pdb): s = MMCIFParser(QUIET=True).get_structure('x', cif) io = PDBIO(); io.set_structure(s); io.save(pdb)最小可运行示例:用 Biopython 打开结构
下面这段直接敲就能跑,覆盖"解析→数链→取 CA 坐标→算 pLDDT 均值":
from Bio.PDB import PDBParser import numpy as np st = PDBParser(QUIET=True).get_structure('af', 'ranked_0.pdb') for ch in st[0]: ca = [a for r in ch for a in r if a.get_name() == 'CA'] print(f"chain {ch.get_id()}: {len(ca)} residues, " f"pLDDT mean {np.mean([a.get_bfactor() for a in ca]):.1f}") xyz = np.array([a.get_coord() for a in ca]) print('CA shape:', xyz.shape)常见报错先自查:
PDBParser报"no atoms"或坐标缺失:确认文件路径没指错、文件确实是ATOM记录(head看一眼),别把.cif塞给 PDBParser。IndexError或链 ID 变成A/B/C…的乱序:多聚体输出里链 ID 由输入顺序决定,用ch.get_id()按名字取链,别假设"第一条就是 query"。- Biopython 版本过老读不了新版 mmCIF:先
pip install -U biopython再试。
三条最常用的下游工作流
a) PyMOL 快速可视化
把这段粘进 PyMOL 命令行,旋转、缩放、png out.png导出即可进报告:
load ranked_0.pdb show cartoon spectrum b, blue_white_red, minimum=0, maximum=100 bg white小技巧:spectrum b的上下限就对应 pLDDT 0–100,所以颜色条天然就是置信度图;想看"骨架干净版",把show sticks换掉即可。
b) 多模型叠加看 RMSD
想确认预测稳不稳,把 ranked_0 和 ranked_1 叠起来算 RMSD。这一步很多人会卡住:Superimposer要求两边原子数一致,所以先都只取 CA。
from Bio.PDB import PDBParser, Superimposer import numpy as np p = PDBParser(QUIET=True) a = p.get_structure('a', 'ranked_0.pdb').get_atoms() b = p.get_structure('b', 'ranked_1.pdb').get_atoms() ca_a = [x for x in a if x.get_name() == 'CA'] ca_b = [x for x in b if x.get_name() == 'CA'] si = Superimposer(); si.set_atoms(ca_a, ca_b) print('RMSD =', round(si.rms, 2), 'A')RMSD 小于 1.5 Å 基本可认为结构收敛;若只有 C 端飘走,回头查那段的 pLDDT,多半是低置信区在摆。
c) 批量质量报告(pLDDT + PAE 出图)
写进脚本套在for model in ranked_0..3循环里,一次产出全套图:
import json import matplotlib.pyplot as plt pae = json.load(open('pae_ranked_0.json'))['pae'] plt.figure(figsize=(8, 6)) plt.imshow(pae, cmap='viridis', vmin=0, vmax=30) plt.colorbar(label='PAE (A)') plt.title('PAE of ranked_0') plt.savefig('pae_ranked_0.png', dpi=150)pLDDT 那条线直接用前面 Biopython 拿到的 B 因子列表绑在第二个子图里即可;两张图加一句"平均 pLDDT / ipLDDT"就是一份能贴进 group meeting 的蛋白质结构可视化报告。
容易踩的 4 个坑
- relaxed vs unrelaxed 混用:relaxed 是 Amber 弛豫后的"美化版",坐标更光滑;unrelaxed 才是模型原始输出。发表和对接用 relaxed,做方法学对比时别拿 relaxed 去比 unrelaxed,解法:文件名前缀锁死,一个分析里只用一种。
- 多 MODEL 记录解析报错:个别输出里带
MODEL/ENDMDL,Biopython 默认会把多模型全读进来、残基数直接翻倍。解法:get_structure('x', path, model=0)只取第一个,或先删掉 MODEL 行。 - 链 ID 缺失/乱序:老版本或单链手动编辑的 PDB 链 ID 列是空格,
get_id()拿到''导致字典 key 撞车。解法:ch.get_id() or '?'兜底,或解析前用sed补上链列。 - pLDDT 阈值误读:把"全链均值 85"当"每个残基都可靠"。解法:阈值判断永远在逐残基 B 因子上做,均值只写进摘要。
下一步
- 想改 B 因子写入逻辑或 PDB 生成细节,翻 protein.py 的
from_prediction和to_pdb。 - 想知道每个输出文件是谁写出来的,看 run_alphafold.py 里
_save_*系列函数。 - Biopython 解析细节查官方文档的 PDB 模块页;提交数据库前对照 PDB 官网的 mmCIF 数据字典自查一遍。
先把你目录里的ranked_0.pdb拖进 PyMOL,敲spectrum b——看到颜色条的那一刻,这篇就算白读了。
【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考