news 2026/9/11 22:55:41

AlphaFold PDB/MMCIF 输出文件解读指南:3 步从 ranked_0.pdb 拿到坐标、pLDDT 并交付下游

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AlphaFold PDB/MMCIF 输出文件解读指南:3 步从 ranked_0.pdb 拿到坐标、pLDDT 并交付下游

AlphaFold PDB/MMCIF 输出文件解读指南:3 步从 ranked_0.pdb 拿到坐标、pLDDT 并交付下游

【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold

蛋白质结构预测任务跑完,输出目录里躺着十几个名字相近的文件:哪个才是最终结构,哪个该交给对接软件,置信度又写在哪?这篇指南基于 AlphaFold 开源仓库的真实代码,带你解读并处理它的 PDB/MMCIF 输出文件——先判断预测可不可信,再提取坐标与 pLDDT,最后把结构文件交给下游工具。

📁 先看哪个文件:输出目录速查

预测完成后,每条序列的结果存放在--output_dir下以 FASTA 文件名命名的子目录里。单体预设会跑 5 个模型(model_1 到 model_5),多聚体预设的模型名会带上_multimer_v3_pred_i后缀。不管落在哪种情况,对着这张表选文件就行:

文件什么时候打开它
ranked_0.pdb/ranked_0.cif绝大多数场景的最终答案:置信度最高的模型,坐标加 pLDDT 直接可用
ranked_1~4.pdb想看不同模型之间是否一致、稳不稳
relaxed_model_X.pdb/.cif想要某个指定模型经 Amber 最小化并加氢后的版本
unrelaxed_model_X.pdb/.cif想看模型直接输出的"原始"结构
confidence_model_X.json要按残基取 pLDDT 数值时
pae_model_X.json多聚体、判断结构域间关系稳定与否时
ranking_debug.json想知道 ranked_0 为什么排第一
features.pkl/result_model_X.pkl要复用中间特征、复算或重跑下游
timings.json/relax_metrics.json排查各步骤耗时和最小化质量

有个细节会影响你后续的选择:ranked_*ranking_confidence排序,多聚体预设下这个值由 iPTM 和 pTM 组成,单体预设下则是 pLDDT。默认参数下只有排名第一的模型会做 Amber 最小化(--models_to_relax=best),所以ranked_0.pdb正是它的最小化版本,ranked_1~4则是未松弛的。打开任何一个文件前,先记住一件事:pLDDT 分数就藏在"温度因子(B 因子)"那一列里。

🎯 预测结果能不能用:pLDDT 与 PAE 质量门禁

上图是 AlphaFold 在 CASP14 中的预测与实验结构对比——任何预测的终极目标就是这种吻合度,而你跑完任务要做的第一件事,是快速判断这次离它有多远。

pLDDT 是逐残基的置信度分数,范围 0–100。仓库在 confidence.py 里把它分成四档:低于 50 为 very low,50–70 为 low,70–90 为 confident,90 以上为 very confident。PDB 文件里,这个分数被重复写到该残基每个重原子的 B 因子列中,所以可视化时"按 B 因子着色"其实就是在按 pLDDT 着色。PAE 是一个残基 × 残基的矩阵,给出对齐后的期望距离误差(Å),只有带 PAE 头的模型才会写出它(多聚体预设是典型情况):看对角块能判断结构域内部的可靠程度,多聚体的话,非对角块就是链间关系的置信度。

检查顺序建议"先看图、再取数":用 PyMOL 打开ranked_0.pdb按 B 因子着色,整体偏红黄说明整体质量不错,出现大片蓝色就说明要重点审视那段低置信区。视觉上过了关,再用 json 把数字落到报告里:

import json, numpy as np conf = json.load(open('model_1/confidence_model_1.json')) scores = np.array(conf['confidenceScore']) print(f"平均 pLDDT {scores.mean():.1f},≥90 占比 {(scores >= 90).mean():.0%}") for cat in ('very low', 'low', 'confident', 'very confident'): print(f" {cat}: {sum(c == cat for c in conf['confidenceCategory'])}") pae = np.array(json.load(open('model_1/pae_model_1.json'))[0]['predicted_aligned_error']) print(f"PAE 整体均值 {pae.mean():.1f} Å,对角(域内)均值 {np.diagonal(pae).mean():.1f} Å")

其中confidenceScore就是逐残基 pLDDT(残基号从 1 开始);输出目录里没有 PAE json 时,说明当前预设的模型不带 PAE 头,属于正常现象而不是出错。

🔬 怎么取坐标和 pLDDT:PDB 与 MMCIF 两个最小示例

两种格式装的是同一份结构,差别只在容器:PDB 是定宽列,ATOM 记录里依次有原子名、残基三字母码、链 ID、残基序号、xyz 坐标、占有率、B 因子;MMCIF 是键值对,原子信息集中在_atom_site类别,label_asym_id是链、label_seq_id是残基序号、B_iso_or_equiv是 B 因子(在 AlphaFold 输出里即 pLDDT)。抓住这几个字段,文件就能读,用代码解析更省事。

这段代码用 Biopython 从 PDB 里抽出 Cα 轨迹和 pLDDT,一次循环同时拿坐标和分数:

from Bio.PDB import PDBParser import numpy as np struct = PDBParser(QUIET=True).get_structure('af', 'model_1/ranked_0.pdb') ca, plddt = [], [] for res in struct.get_residues(): if 'CA' in res: ca.append(res['CA'].get_coord()) plddt.append(res['CA'].get_bfactor()) # B 因子列即 pLDDT print('Chains:', sorted({ch.id for ch in struct})) np.savez('af_model.npz', ca=np.array(ca), plddt=np.array(plddt))

get_bfactor()取到的正是藏在温度因子列里的 pLDDT,ca按残基顺序排列,和 plddt 一一对应。换 MMCIF 只是换个解析器:

from Bio.PDB import MMCIFParser import numpy as np struct = MMCIFParser(QUIET=True).get_structure('af', 'model_1/ranked_0.cif') ca, plddt = [], [] for res in struct.get_residues(): if 'CA' in res: ca.append(res['CA'].get_coord()) plddt.append(res['CA'].get_bfactor()) # 对应 B_iso_or_equiv 列 print('Chains:', sorted({ch.id for ch in struct})) print('Mean pLDDT', float(np.mean(plddt)))

两种格式取出的结果完全一致,下游工具喜欢哪个就给哪个;QUIET=True只是关掉解析器的告警刷屏。

🚀 下一步要干什么:交付下游的三条路

需要 MMCIF?用仓库自己的代码三行转换

有些下游流程或数据库提交只认 mmCIF,不必自己逐列拼,仓库的 protein.py 已经实现了 PDB 文本 → Protein 对象 → MMCIF 的完整回路:

from alphafold.common import protein pdb_str = open('model_1/ranked_0.pdb').read() prot = protein.from_pdb_string(pdb_str) open('model_1/ranked_0.cif', 'w').write( protein.to_mmcif(prot, file_id='ranked_0', model_type='Monomer'))

file_id会被写进 CIF 的数据块名(正式场合传 PDB ID 或自定义编号),model_typeMonomerMultimer,影响写入的实体信息;转换过程中 B 因子列里的 pLDDT 也会原样带过去。

想看看结构?PyMOL 加载并按 pLDDT 着色

from pymol import cmd cmd.load('model_1/ranked_0.pdb', 'af') cmd.show('cartoon', 'af') cmd.spectrum('b', 'rainbow', 'af', minimum=0, maximum=100) cmd.zoom('af', 10)

spectrum('b', ...)里的b表示按 B 因子通道取色,也就是 pLDDT:蓝是低置信、红是高置信,minimummaximum锁死色标范围,避免不同文件间颜色漂移。

准备对接?先把结构收拾干净

结构交给对接程序前通常要三样东西:有氢、几何干净、只留目标链。默认做过的ranked_0.pdb已经由 Amber 最小化补上氢原子;如果你是--models_to_relax=none跑的,文件里没有氢,得先用 PyMOL 的h_add或 pdb2pqr 补上。多聚体时记得用chain A之类的选择器挑出要对接的子基,把其余链删掉,避免把整个复合物塞进盒子;文件里还剩多少几何问题,查relax_metrics.jsonremaining_violations_count,非零的话可以顺藤摸瓜看是哪些残基在闹脾气。

⚠️ 卡住了吗:5 个高频问题的踩坑速查

relaxed 和 unrelaxed 到底该选哪个?多数下游直接用ranked_*(默认就是最小化后的最优模型):加了氢、立体化学违规也被压低了。unrelaxed_*留给两个场景——想看模型原始输出,或者你要单独调试最小化这一步。

B 因子列为什么不是温度因子?它真的不是温度因子。AlphaFold 特意复用了这一列存放逐残基 pLDDT,unrelaxed 和 relaxed 文件里的 B 因子同源;做经典分子动力学式的"热运动"分析时别把它当真。

多聚体的多条链怎么区分?FASTA 里各序列的顺序对应 PDB 链 ID A、B、C……(完整字符集是 A–Z、a–z、0–9,最多 62 条链,见 protein.py 中的PDB_CHAIN_IDS),链与链之间用 TER 记录分隔,Biopython 里直接取chain.id即可。

ranked_0.pdb 的 B 因子为什么和 unrelaxed_model_1.pdb 一样?坐标变了、B 因子没变:最小化流程结束后会把 pLDDT 重新写回 B 因子列,见 relax.py 里的overwrite_b_factors调用。

输出目录里为什么没有 pae_*.json?PAE 只在模型输出包含predicted_aligned_error时写出,单体预设(model_1 到 model_5)不带这个头,只有confidence_*.json是正常的。

➡️ 接下来去哪:从仓库模块继续深入

这套流程——pLDDT/PAE 定可信度、按格式取坐标和置信度、把结构文件交给下游——可以作为处理任何 AlphaFold 输出目录的标准动作。想弄清楚文件为什么这样命名、转换在内部是怎么做的,按仓库里的这几处往下读:run_alphafold.py 的输出命名与排序逻辑、alphafold/common/protein.py 的to_pdb/to_mmcif/from_pdb_string实现、alphafold/common/confidence.py 的 pLDDT 与 PAE json 生成,以及 alphafold/relax/relax.py 的 Amber 最小化流程。再往后一步,afdb/README.md 解释了预测结构在数据库层面如何被标注和发布。

【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 22:53:44

基于YOLOv8的游泳动作识别系统:从数据准备到部署的完整实践

简介:一套基于YOLOv8的游泳动作识别系统完整工程包,面向计算机视觉、人工智能等专业的毕业设计与课程设计场景,解决动作识别从模型训练、指标评估到可视化界面展示的全流程需求。压缩包共97个文件,以70个Python脚本(覆…

作者头像 李华
网站建设 2026/9/11 22:52:31

手语动作实时识别:YOLOv5-tiny定制化部署与优化

简介:本资源是一个基于YOLOv5实现的手语识别系统完整工程包,面向人工智能初学者、计算机视觉方向学习者及无障碍交互技术研究者,旨在解决手语图像中手部目标定位与手势类别识别的核心问题,适用于特殊教育辅助、智能手语翻译设备开…

作者头像 李华
网站建设 2026/9/11 22:50:51

800+免费API大全:public-api-lists 开源项目实战入门

800免费API大全:public-api-lists 开源项目实战入门 【免费下载链接】public-api-lists A curated list of free public APIs — searchable, community-maintained, with a free JSON API. 项目地址: https://gitcode.com/GitHub_Trending/pu/public-api-lists …

作者头像 李华
网站建设 2026/9/11 22:50:02

AI生成内容标识新规落地全解:避坑要点与行业平衡实操指南

落地的《人工智能生成合成内容标识办法》及配套强制国标,是国内首个针对性管控AIGC内容乱象的源头性合规规则,核心通过生产、传播双环节强制标识,破解AI造假隐蔽性强、迷惑性高的行业难题。新规摒弃高压管控模式,采用低成本、轻量…

作者头像 李华
网站建设 2026/9/11 22:46:29

Java OPC UA开发实战:基于Eclipse Milo的工业设备对接指南

简介:本资源是一个面向Java开发者与工业自动化初学者的OPC UA实践工具包,聚焦于使用Eclipse Milo开源库(v0.6.11)快速构建OPC UA客户端与服务器,解决Java环境下设备数据安全接入、读写与订阅等核心问题。压缩包共46个文…

作者头像 李华