
AlphaFold 结果怎么读PDB/MMCIF 文件到 pLDDT 提取的完整实操路径【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold你刚跑完一轮 AlphaFold打开输出文件夹ranked_0.pdb、confidence_*.json、pae_*.json排成一排先打开哪个PDB 的 B 因子里藏着的那份置信度分数怎么抽出来画成图这篇文章带你从这一堆文件出发走过 PDB 与 MMCIF 两种格式把第一次能跑通的结构分析代码跑起来——AlphaFold 结构分析的核心工作其实就在这一条路上。先认路输出目录里该看哪个文件跑完之后目录里东西不少但按管什么事分其实就五类文件管什么事ranked_0.pdb/ranked_0.cif置信度最高的结构PDB 与 MMCIF 是同一份内容的两种写法unrelaxed_*.pdb/relaxed_*.pdb各模型未经松弛 / 经 Amber 松弛后的源文件confidence_*.json逐残基 pLDDT拿来直接画图pae_*.jsonPAE 矩阵残基对之间的预测对齐误差timings.json/relax_metrics.json各步骤耗时、松弛前后能量排障用features.pkl/result_*.pkl输入特征与模型输出中间产物重跑或调试才用命名逻辑一句话点透文件名中间那段model_XXXXX是随机模型 ID而ranked_N是按置信度从高到低的排名ranked_0永远是最佳模型——拿不准就先打开它。PDB 与 MMCIF同一份数据的两种方言这两种格式存的是完全相同的东西哪些原子、属于哪个残基、在哪条链、坐标是多少。区别只在语法PDB 是固定列宽靠列位置读字段MMCIF 是键值对循环首行列出列名后面每行按序填值。并排看就明白了# PDBATOM 记录第 61-66 列是 B 因子 ATOM 1 N ALA A 1 11.204 -5.120 2.914 1.00 87.32 N# MMCIF_atom_site 循环首行是列名每行一个原子 _atom_site.group_PDB _atom_site.label_comp_id _atom_site.label_asym_id _atom_site.Cartn_x _atom_site.B_iso_or_equiv ATOM ALA A 11.204 87.32真正解析时你会反复碰到的字段只有六个原子名、残基三字母码label_comp_id、链标识、残基序号、x/y/z 三个坐标外加最后一个——B 因子。 全文最重要的一个信息点AlphaFold 把 pLDDT 塞进了 B 因子列。run_alphafold.py里先做plddt_b_factors np.repeat(plddt[:, None], atom_type_num)把每个残基的 pLDDT 复制到该残基的每个原子上随后alphafold/common/protein.py的to_pdb()把它写进 PDB 的 61–66 列to_mmcif()写进_atom_site.B_iso_or_equiv。B 因子本来是温度因子预测结构没有实验热运动这一列就被复用为置信度——这也是为什么在 PyMOL 里直接按 B 因子着色就自动得到 pLDDT 分布图。快速记忆坐标列回答长什么样AlphaFold 文件里的 B 因子列回答多可信。读文件时只需要盯住这两组列其余都是元数据。[待插入PDB ATOM 记录与 MMCIF _atom_site 字段并排对照示意图]提取 pLDDT 的最小代码Biopython 解析 PDB 文件是最省事的起点。下面这段遍历ranked_0.pdb统一取每个残基的 CA 原子把坐标和 B 因子也就是 pLDDT装进一张表import pandas as pd from Bio.PDB import PDBParser struct PDBParser(QUIETTrue).get_structure(af, ranked_0.pdb) rows [] for chain in struct[0]: # AlphaFold 的 PDB 包在 MODEL 1 里 for res in chain: if CA in res: rows.append({chain: chain.id, residue: res.get_id()[1], resname: res.get_resname(), x: res[CA].coord[0], y: res[CA].coord[1], z: res[CA].coord[2], plddt: res[CA].get_bfactor()}) df pd.DataFrame(rows) print(df.head())输出是一张chain / residue / resname / x / y / z / plddt的表每残基一行plddt取值 0–100。更重的工作——RMSD 叠加、SASA、二级结构统计——交给 MDAnalysis 或 pymol 就行它们都是一等公民不必手写。接着画置信度曲线三档阈值线一并标出import matplotlib.pyplot as plt plt.figure(figsize(10, 4)) plt.plot(df[residue], df[plddt], lw1) for thr, c in [(90, r), (70, orange), (50, gray)]: plt.axhline(thr, colorc, ls--) plt.xlabel(residue); plt.ylabel(pLDDT); plt.ylim(0, 100) plt.grid(True); plt.show()得到的是置信度沿序列的折线顶到 90 上方的区段可以放心用塌到 50 以下的区段先打问号。注意这条线只反映单残基的绝对置信度残基之间的相对关系还要靠 PAE 补上。[待插入AlphaFold pLDDT 沿序列折线图效果图含 90/70/50 三条阈值线]pLDDT 与 PAE 的三档分界线拿到一个 pLDDT 均值 68 的预测先别慌按这张决策表走档位含义下一步动作 90高置信折叠基本可信直接进对接、功能位点标注70–90中等主体可用标出低置信区段功能推断只用核心结构域 50低可能是无序或预测失手不做结构断言查 PAE 与 MSA 深度决定是否重跑均值 68 时接下来三步第一步看分布形状——是核心高、两端低常见不必紧张还是整条线都趴在 60–70要小心说明整体证据不足第二步打开pae_*.json画热图确认低 pLDDT 区段是否正好对应离对角线的亮块第三步若那个区段非用不可回头检查它在 MSA 里的覆盖深度深度不够才是根因。PAEPredicted Aligned Error是残基 i 与残基 j 之间的预测对齐误差单位 Å。实用判读技巧一句话对角线带平坦、下三角整体偏蓝 结构域内部相对自身稳定、可信哪块离对角线的区域发亮哪对残基的相对位置就不可靠——结构域边界和内在无序区最常这么表现。记住 PAE 描述的是相对不确定性整体折叠可能完全正确只是域与域之间的朝向没把握。⚠️注意pLDDT 高不等于全蛋白都对PAE 低不等于没误差。前者是单残基的置信后者是残基对的置信下结论前两个都要看。PDB 与 MMCIF 互转八行代码的事什么时候需要转对接软件AutoDock、GROMACS 等只吃 PDB而数据库提交要求 CIF。Biopython 读一种格式、写另一种格式八行就够from Bio.PDB import PDBParser, MMCIFParser from Bio.PDB.PDBIO import PDBIO from Bio.PDB.mmcifio import MMCIFIO # PDB - MMCIF s PDBParser(QUIETTrue).get_structure(m, ranked_0.pdb) io MMCIFIO(); io.set_structure(s); io.save(ranked_0.cif) # MMCIF - PDB s2 MMCIFParser(QUIETTrue).get_structure(m, ranked_0.cif) io2 PDBIO(); io2.set_structure(s2); io2.save(out.pdb)转换时 B 因子会原样带过去pLDDT 不丢但 entity 等元数据会被 Biopython 简化正式提交还是优先用 AlphaFold 自己吐出来的ranked_0.cif。快速记忆互转丢的是元数据不是坐标和置信度日常分析随手转提交别手滑。你接下来大概率会碰到的三个真实场景如果你要做蛋白-配体对接先把结构洗干净——去掉结晶水与非蛋白 HETATM、按目标 pH 加氢、存成 PDBPyMOL 里就是remove resn HOH、h_add、save三条命令的事加氢后再核对一下低 pLDDT 区段是否落在口袋附近落在的话对接结果要降权解读。如果你要做突变体对比用 Biopython 的Superimposer把两个结构的 CA 原子叠加set_atoms(ca_wt, ca_mt)整体 RMSD 只是参考真正要看的是突变位点周围 ±10 个残基的局部位移位移大的方向往往就是突变在传递的力学信号。如果你想批量评估多个模型的一致性对ranked_1.pdb、ranked_2.pdb两两算 CA 原子 RMSD 即可前三名模型之间落在 1–2 Å 以内说明预测稳定可以放心引用如果彼此差很远只有高置信核心结构域值得写进正文。踩坑清单这 7 处最容易让你哭别把ranked_0.pdb想当然当成 relaxed。默认--models_to_relax是best只有ranked_0松弛过ranked_1/2是 unrelaxed设成none则全都未松弛。正确做法看同目录下relaxed_*/unrelaxed_*文件名确认ranked_0实际指向哪份。别拿该残基第一条 ATOM 记录的 B 因子当 pLDDT。约定俗成是统一取 CA 原子残基的第一个原子其实是 NAlphaFold 文件里两者数值恰好相同但混解析其他来源的 PDB 时口径就不对了。正确做法写解析时把if CA in res变成肌肉记忆。别假设链列只有一个大写字母。多聚体预测的 PDB 链 ID 按 A、B、C… 顺序填充A–Z、a–z、0–9上限 62 条MMCIF 的label_asym_id则是由实体编号生成的字符串两者不保证一一对应。正确做法交叉引用时按label_asym_id/ 链列对齐别把 A 写死在代码里。别在 MMCIF 里找错列。pLDDT 在_atom_site.B_iso_or_equiv不在_atom_site.occupancy也不在任何名为 B-factor 的列里。正确做法先打印 loop 的列名行再按列名取数。别拿PDBParser硬啃大结构。超过十万原子的文件Biopython 纯 Python 解析会明显变慢。正确做法换MMCIFParser或只按行迭代提取需要的列重计算直接上 OpenMM。别把 relaxed 与 unrelaxed 拿来叠加。同一模型松弛后坐标已经变了跨集合算 RMSD 会虚高。正确做法叠加前核对文件名前缀只比较同一集合都 relaxed 或都 unrelaxed的文件。别忘 MODEL 层。AlphaFold 的 PDB 包在MODEL 1里Biopython 会解析出 Model 对象直接在结构顶层迭代链会得到空循环。正确做法按structure → model → chain → residue四层走或用struct[0]/get_atoms()直接取原子。文件只是入口你要的是藏在里面的结构洞察哪些结构域可信、哪些区段存疑、下一步往哪儿走。接下来把它推去做 MD 模拟、蛋白-配体对接或换 AlphaFold-Multimer 分析复合物本文这条路径都是你的第一步。延伸阅读run_alphafold.py输出文件的全部生成逻辑、alphafold/common/protein.pyfrom_prediction/to_pdb/to_mmcif实现、docs/technical_note_v2.3.0.md蛋白质结构预测的技术细节。【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考