AlphaFold 结果怎么用:PDB 与 MMCIF 解析实战指南 📅 发布时间:2026/9/11 15:16:28 👁 浏览次数: AlphaFold 结果怎么用PDB 与 MMCIF 解析实战指南【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold跑完 run_alphafold.py 之后--output_dir下会留下十几个文件其中真正要反复打交道的是两类结构文件PDBProtein Data Bank蛋白质数据银行格式的固定列宽文本和 MMCIFMacromolecular Crystallographic Information File大分子晶体学信息文件的键值对格式。它们存的是 AlphaFold 结构预测的坐标本体而同一目录里的 JSON 文件则存着 pLDDT 和 PAE 这些质量分数。这篇教程不逐行讲文件格式规范而是按你拿到结果后的真实使用顺序展开先做三分钟的快速验证再读懂输出目录然后动手解析坐标、评估可信度最后落到对接准备、模型对比、突变分析这类具体任务上。1. 拿到预测结果后你真正想解决的三件事拿到一个输出目录绝大多数场景可以归成三个问题快速验证这次运行有没有正常产出结构长什么样先肉眼过一遍读懂质量哪些区域可以当真实结构用哪些只是低置信度堆砌pLDDT 与 PAE 各回答哪一部分问题投入使用把结构文件交给下游工作流——对接软件、叠加分子、写进论文方法部分——之前还要做哪些准备和取舍。后文每一节都对应其中一个问题。需要的前置知识只有一项会读 Python 字典和数组用到的第三方库是 Biopython仓库的 requirements.txt 已锁定 1.79 版本装环境时会一并装好。2. 3 分钟快速上手定位关键文件 第一眼看 pLDDT这一步解决的问题是不读任何文档先确认结果可用。# 3 分钟自检确认关键文件在位并打印前 10 个残基的 Cα 坐标 from Bio.PDB import PDBParser import numpy as np parser PDBParser(QUIETTrue) struc parser.get_structure(m, ranked_0.pdb) ca_list [a for a in struc.get_atoms() if a.get_name() CA] print(len(ca_list)) print(np.array([a.get_coord() for a in ca_list[:10]]))输出残基数等于输入序列长度、坐标是合理的 Å 数值基本就可以放心进入下一步。第一眼看 pLDDT 不需要写代码PyMOL 两行命令就够pLDDT 存在 PDB 的 B 因子列里详见第 8 节load ranked_0.pdb spectrum b, cyan_orange_red按 B 因子着色后深蓝区段是模型不确定的地方橙红区段可以放心引用。多链体系记得加and chain A之类选择器逐链查看。3. 读懂输出目录每个文件是什么、什么时候看单条序列的输出按 FASTA 文件名分目录存放里面每个文件各管一件事。下表按使用频率排序而不是按字母序方便你按需取用文件内容什么时候需要看ranked_0.pdb/ranked_0.cif按置信度排第一的模型若开启了松弛内容来自 relaxed 版几乎所有下游任务的默认入口unrelaxed_model_*.pdb未做能量优化的原始预测对比松弛前后差异、排查几何异常relaxed_model_*.pdbAmber 弛豫后的结构对接、动力学等需要更合理键角键长的场景confidence_model_*.json逐残基 pLDDT0–100做置信度统计、画图、筛选区域pae_model_*.jsonPAEPredicted Aligned Error预测对齐误差矩阵多结构域、多链体系的取向可信度判断result_model_*.pkl模型输出的原始张量字典二次开发、重新计算衍生指标features.pkl喂给模型的全部输入特征复现、调试数据管线时timings.json各阶段耗时排查某一步异常慢ranking_debug.json各模型排名分与最终顺序解释为什么 0 号是这个模型relax_metrics.json松弛后剩余几何冲突计数检查松弛是否收敛干净msas/多序列比对的原始命中怀疑输入数据库或 MSA 环节时一个容易混淆的命名关系ranked_N里的 N 不是模型编号而是按ranking_confidence从高到低排出的名次每个ranked_N还同时有一对.pdb和.cif两者坐标等价选哪种取决于下游软件。4. 两种格式的底层逻辑固定列宽 vs 键值对这节解决两个文件看着内容差不多到底差在哪的问题。PDB 是纯列对齐的格式一条ATOM记录里信息放在约定死的列位置上解析器靠第几列取数而不是靠分隔符。几个和本文相关的关键列位列位含义1–6记录名ATOM/HETATM13–16原子名N、CA、CB……18–20残基三字母代码22 / 23–26链标识符 / 残基序号31–54x、y、z 坐标Å61–66各向同性 B 因子MMCIF 则是一整张长表_atom_site类下面每个项目占一列行按原子排布。上面 PDB 的列位在这里对应成项目名坐标是_atom_site.Cartn_x/y/z链与残基号是_atom_site.label_asym_id与label_seq_id而最关键的——pLDDT 落在_atom_site.B_iso_or_equiv里和 PDB 一样被塞进了温度因子列。仓库里生成这两份文件的是同一份内存结构入口函数 from_prediction / to_pdb / to_mmcif所以两边坐标严格一致差别只在怎么排版。实际影响PDB 文件手写可读、改起来直观但列宽约定意味着原子号超过 5 位数之类的情况会出怪事MMCIF 字段命名自解释、可扩展性强是 PDB 库现行标准但手工编辑不友好。对日常解析工作而言选哪个文件只取决于下游软件认哪种格式。5. 动手解析用 Biopython 读 PDB/MMCIF 并提取 pLDDT 与坐标上一步验证通过后这一段代码可以长期复用解决把结构变成数组的问题。Biopython 会把文件读成 结构 → 链 → 残基 → 原子 的对象树遍历一次就能同时拿到 pLDDT 和 Cα 坐标。# 通用解析任意 ranked_*.pdb 或 .cif提取 pLDDT 与 Cα 坐标 from Bio.PDB import PDBParser, MMCIFParser import numpy as np def parse_structure(path): parser MMCIFParser(QUIETTrue) if path.endswith(.cif) else PDBParser(QUIETTrue) return parser.get_structure(m, path) def residue_scores(path): st parse_structure(path) seq, plddt, ca [], [], [] for res in st.get_list(): if CA not in res: # 缺 CA 的残基直接跳过 continue seq.append(res.get_id()[1]) plddt.append(res[CA].get_bfactor()) # B 因子列 pLDDT ca.append(res[CA].get_coord()) return np.array(seq), np.array(plddt), np.array(ca) seq, scores, coords residue_scores(ranked_0.pdb) print(len(seq), coords.shape)两个使用细节get_list()返回的是所有链的残基顺序拼接多链结果想按链分组时改为先st.get_chains()再逐链get_residues()get_bfactor()拿到的是浮点数直接就是 0–100 的 pLDDT不需要缩放。6. 判断预测可不可信pLDDT 与 PAE 分别回答什么pLDDT 是逐残基的 0–100 分值衡量这一段的坐标离真结构有多近它不能告诉你 A 域和 B 域的相对位置对不对后者是 PAE 的活。两者互补缺一不可pLDDT 高的模型PAE 上跨域格子照样可能整片飘红。可直接套用的判断阈值pLDDT 区间含义怎么用90骨干与侧链均可信骨干误差通常 1 Å直接用于对接、展示、功能注释70–90骨干基本可靠个别残基侧链取向可能偏关键位点活性中心、结合界面需结合上下文再确认50–70该区域不稳定与文献、实验数据或同系物比对后再下结论50大概率无序区或低置信区不要当真实结构引用做可视化时也建议单独处理PAE 矩阵的行是残基 i、列是残基 j取值单位 Å。实操上按域块读而不是逐格读# 从 pae_*.json 取 PAE 矩阵计算两个残基区间的平均/最大误差 import json, numpy as np def pae_block(path, i0, i1, j0, j1): with open(path) as f: m np.asarray(json.load(f)[0][predicted_aligned_error]) blk m[i0:i1, j0:j1] return blk.mean(), blk.max() print(pae_block(pae_model_1.json, 0, 80, 80, 160))经验阈值块均值 10 Å 时两个结构域的相对取向一般可信10–15 Å 处于灰色地带取决于下游用途刚性对接勉强可用柔性计算慎用15 Å 说明取向本身就不确定多聚体建模时要换策略比如固定一个域再单独预测。画图留档用一行就够import matplotlib matplotlib.use(Agg); import matplotlib.pyplot as plt fig, ax plt.subplots(figsize(5, 4)); ax.imshow(m, cmapviridis_r) fig.savefig(pae.png, dpi150, bbox_inchestight)7. 实战场景对接准备、多模型一致性对比、突变位点分析这节解决把结构真正用起来的问题给三个最小可用流程。对接前的结构准备。这步要保证结构文件干净、带氢、无多余的染色干扰。AlphaFold 输出不含显式氢PyMOL 现场补齐load relaxed_0.pdb remove hetero and name WAT h_add save prepared.pdb优先用 relaxed 版弛豫修正过键长键角力场类软件读起来更舒服。注意 relaxed 文件的 B 因子列已被弛豫流程覆盖pLDDT 要看 unrelaxed 版或confidence_*.json。多模型一致性对比。单跑默认只有一个模型但--model_preset选到多模型配置如 CASP 预设时会输出多个unrelaxed_model_*。用 Cα 叠合算 RMSD是判断预测结果稳不稳的硬指标# 两个 Cα 坐标集叠合后逐残基位移 整体 RMSD from Bio.PDB import Superimposer s Superimposer() s.set_atoms(m1_ca_atoms, m2_ca_atoms) s.apply(m2_ca_atoms) shift np.linalg.norm(m1_ca_coords - m2_ca_coords, axis1) print(RMSD %.2f A, max shift %.2f A % (s.rms, shift.max()))两个独立模型的 Cα RMSD 落在 1 Å 以内通常说明该区域的预测相当稳定显著偏大的残基恰好是需要重点检查的位点。突变位点影响分析。把野生型与突变型各自预测后叠合重点看突变点邻域±5 残基的位移而不是全局 RMSD# 突变点邻域 Cα 位移取残基 idx 附近 11 个残基 window slice(max(0, idx - 5), idx 6) local_shift shift[window].max() print(local max shift %.2f A % local_shift)若局部位移超过 1–2 Å说明该突变可能引起局部重构值得结合功能位点判断若整体 RMSD 大而局部很小大概率只是无序尾段在晃不影响结论。8. 常见坑与排查B 因子复用、编号错位、松弛差异最后集中处理四个高频踩坑点按现象 → 原因 → 对策排现象原因对策把 B 因子当真实温度因子用AlphaFold 用该列存 pLDDT见 from_prediction 与run_alphafold.py中注释需要真实热运动数据时改用其他来源解析代码里命名就用plddt避免误导松弛前后同一个模型结构对不上relaxed 版被弛豫算法移动过原子且 B 因子列被覆盖对比实验明确说明用的是哪一版pLDDT 统计一律从 unrelaxed 或 JSON 取叠合时报残基数不一致两次运行的链命名、残基编号可能不同直接按序号对齐会错位按残基名 序号 链 ID 三字段对齐或先做序列比对再映射.pdb与.cif解析出的原子数不同个别软件对 HETATM 的处理不一致以 ATOM 记录为准做统计HETATM 单独列出另外提醒一句命名ranked_N是名次、model_*是原始模型名引用结果时写清楚ranked_0对应 model_2比只写一个下标更不容易出事故。9. 小结与延伸阅读三句话收束全文ranked_0.pdb/.cif是默认入口坐标与 pLDDT 用 Biopython 一遍遍历即可全部取出pLDDT 管这一段靠不靠谱PAE 管这两段相对位置靠不靠谱判断时直接对照第 6 节的阈值表投入下游之前先过一遍第 8 节的四个坑。延伸阅读docs/technical_note_v2.3.0.mdpLDDT、PAE 等指标的定义与阈值说明出处alphafold/common/protein.pyProtein对象及to_pdb/to_mmcif/from_prediction的实现run_alphafold.py输出文件的生成顺序与命名逻辑Jumper et al.,Highly accurate protein structure prediction with AlphaFold, Nature 596, 583–589 (2021)Varadi et al.,AlphaFold Protein Structure Database, Nucleic Acids Res. 50, D439–D444 (2022)【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考