3、AlphaFold 输出文件结构:JSON、PDB、PAE 等归纳总结
好,咱们直接切入正题。
你跑完一次 AlphaFold,会吐出一堆文件。新手看了容易懵。“我到底该看哪个?”
我记得第一次跑完的时候,盯着文件夹里那十几个文件,确实有点发愣。后来做得多了,发现其实核心的就那么几类。搞清楚它们各自管什么,再用什么工具打开,后续分析就顺了。
输出文件夹长什么样
假设你的目标蛋白质序列叫 test.fasta。跑完后,AlphaFold 会生成一个以 test 命名的文件夹。里面大致包括:
- ranked_0.pdb 到 ranked_4.pdb:5 个预测模型,按 pLDDT 分数排序
- unrelaxed_model_*.pdb:未经能量优化的原始模型
- result_model_*.pkl:Python 序列化文件,存了一堆内部数据
- pae_model_*.json:预测对齐误差(PAE),JSON 格式
- plddt_model_*.json:每个残基的 pLDDT 值,JSON 格式
嗯,看着挺多。但咱们一个一个拆开讲,其实没那么复杂。
ranked_0.pdb 和 pae_model_*.json。这两个基本能告诉你 80% 的信息。
PDB 文件:看得见的结构
PDB 是蛋白质数据银行的通用格式。说白了,就是一个记录原子坐标的文本文件。
你随便打开一个 ranked_0.pdb,看到的会是这样的内容:
ATOM 1 N MET A 1 2.346 1.284 0.000 1.00 0.00 N
ATOM 2 CA MET A 1 2.572 2.738 0.000 1.00 0.00 C
ATOM 3 C MET A 1 3.688 3.218 0.000 1.00 0.00 C
ATOM 4 O MET A 1 4.719 2.523 0.000 1.00 0.00 O
ATOM 5 CB MET A 1 1.349 3.528 0.000 1.00 0.00 C
...
END
每一行代表一个原子。列的含义依次是:记录类型、原子序号、原子名称、残基名称、链 ID、残基序号、X/Y/Z 坐标、占有率、温度因子(B-factor)、元素符号。
这里有一个关键点:AlphaFold 把 pLDDT 值塞到了 B-factor 那一列。你看上面代码里那个“1.00”就是 B-factor 项。正常情况下它表示原子振动幅度,但在这里它被替换成了 pLDDT 分数。
JSON 文件:藏在结构背后的数字
先说说 plddt_model_*.json。这玩意结构很简单,就是一个键值对:
{
"plddt": [0.95, 0.93, 0.91, 0.88, 0.85, ...]
}
一个数组,每个元素对应一个残基的 pLDDT 分数。0 到 1 之间的浮点数。数字越大表示模型对这个残基的预测越自信。
那 pae_model_*.json 就更有意思了。它记录的是预测对齐误差(PAE),本质是一个矩阵:
{
"predicted_aligned_error": [
[0.0, 1.2, 3.5, 5.1, ...],
[1.2, 0.0, 2.8, 4.3, ...],
[3.5, 2.8, 0.0, 1.9, ...],
...
],
"max_predicted_aligned_error": 31.8
}
这个矩阵的尺寸是 N×N,N 是残基总数。第 i 行第 j 列的值,表示如果以第 i 个残基为基准做结构对齐,第 j 个残基的位置偏差期望值(单位是 Ångström)。
为什么会这样?因为 PAE 能告诉你两个结构域之间的相对位置是否可靠。如果你看到一个区域内部 PAE 很低(比如小于 5),但跨区域的 PAE 很高(大于 15),说明 域内结构可靠,域间相对位置不可靠。这在多结构域蛋白分析中尤其重要。
知识结构表:一目了然
我习惯把这几种输出文件做个对比,用起来心里踏实:
| 文件类型 | 核心内容 | 维度 | 用途 | 我一般怎么用 |
|---|---|---|---|---|
| ranked_0.pdb | 原子坐标 + B-factor(pLDDT) | 三维坐标,L 个残基 | 可视化和结构分析 | 直接扔进 PyMOL,按 B-factor 上色 |
| plddt_model_*.json | 每个残基的 pLDDT 分数 | L 维向量 | 定量评估局部可信度 | 画线图看整体趋势,找低分区域 |
| pae_model_*.json | 残基对之间的预测对齐误差 | L×L 矩阵 | 判断域间相对位置可靠性 | 画热力图,看棋盘格纹理 |
| result_model_*.pkl | Python 对象的完整转储 | 复杂嵌套结构 | 高级编程分析或可视化 | 用 Python 直接读取,做批量统计 |
核心逻辑图
下面这个 SVG 图,把 AlphaFold 输出文件的组织方式和核心分析路径画清楚了。你看懂了它,以后处理结果就不迷路。
避坑指南
- PKL 文件怎么读? 用 Python 的
pickle模块。但我提醒你,跨版本可能不兼容。如果你在 Colab 上跑的结果,下载到本机可能打不开。这时候用 AlphaFold 自带的relaxation.py或者干脆忽略 PKL,只看 JSON 和 PDB。 - 别被文件名误导。
ranked_0.pdb不一定是“最好”的模型——它只是 pLDDT 最高的那个。实际上 ranking 是基于 pLDDT 和 PAE 的某种加权。我见过一个多结构域蛋白,ranked_0 的 PAE 反而比 ranked_1 高不少,域间定位错误。 - PAE 值不是可互换的。 不同模型之间的 PAE 矩阵不能直接取平均。它们是基于不同构象空间做的估算。
一个小实操
如果你有 Python 环境,跑下面几行代码,就能把 PAE 矩阵画成热力图:
import json
import matplotlib.pyplot as plt
import numpy as np
with open('pae_model_0.json', 'r') as f:
data = json.load(f)
pae_matrix = np.array(data['predicted_aligned_error'])
plt.imshow(pae_matrix, cmap='viridis', vmin=0, vmax=data['max_predicted_aligned_error'])
plt.colorbar(label='Predicted Aligned Error (Å)')
plt.xlabel('Residue index')
plt.ylabel('Residue index')
plt.title('PAE Heatmap')
plt.show()
嗯,运行完你会看到一个热力图。如果图里面有清晰的“棋盘格”纹理,说明你的蛋白有多个结构域,而且域间的相对位置可能不太确定。如果整张图都是深紫色(低 PAE),那恭喜你,整个模型都挺靠谱的。
好了,AlphaFold 的输出文件就这些。你只要记住:PDB 管看,JSON 管算,PAE 管信。后面的章节里,我们会深入看每一类数据的具体用法。