打开一份双链蛋白的预测结构,链 A 和链 B 都折得像模像样。按置信度着色后,大部分区域又是深蓝色,很容易顺手截张图,写下“两种蛋白形成稳定复合物”。但做突变实验的人还要知道一个更具体的问题。把链 A 固定在这里,链 B 真有把握落在图上这一面吗?两条链各自折得好,与它们彼此的位置可不可靠,需要看不同的输出。
先把查看器切换到按 pLDDT 着色并看清图例。有些软件用不同颜色区分链,或按二级结构着色,屏幕上的蓝色本身没有固定含义。以下讨论的是两条普通蛋白链。若研究的是含小分子或修饰基团的复合物,模型使用的 token 与氨基酸残基不总是一一对应,不能直接照搬残基编号。
打开同一个预测样本的三个文件
在本地 AlphaFold 3 的输出里,先选定一个种子和采样编号,打开对应目录中的 *_model.cif、*_summary_confidences.json 和 *_confidences.json。第一个给三维坐标,第二个给整套结构及链对的汇总分数,第三个含逐原子的局部置信度及逐 token 的误差矩阵。根目录放的是整套预测中排名最高的样本。如果在查看器里打开了另一个样本,就要连同它的两个 JSON 一起换过去,否则可能会拿一个姿势解释另一个姿势的分数。AlphaFold 3 官方输出说明
| 想回答的问题 | 去哪里看 | 读数时要记住 |
|---|---|---|
| 某段主链或附近原子的位置有多可靠 | 按 pLDDT 着色的结构,或详细 JSON 的 atom_plddts |
局部评分高,支持该处局部几何。另一条链的摆放要单独检查 |
| A、B 的相对摆放有多可靠 | 汇总 JSON 的 chain_pair_iptm |
按链顺序找 A、B 对应的非对角元素。对角元素反映各链自身的 pTM |
| 哪些片段之间的相对位置较确定 | 详细 JSON 的 pae 和 token_chain_ids |
误差以埃为单位,数值较小表示相对位置更有把握,要标出链边界 |
pLDDT 的取值范围是零到一百。在两链都折叠良好、但它们之间没有足够信息限定方向的情况下,大部分原子仍然可以获得高的局部评分。ipTM 关注亚基间相对位置的可信度。在多链体系里,整体 ipTM 可能掩盖某一对链的弱证据,所以研究指定的两个蛋白时应读链对分数。查看器若把这个分数显示成小数,也不要把它换算成“两种蛋白有百分之多少概率结合”。EMBL-EBI 的复合物结果读图教程
在 PAE 图上找到链与链之间的格子
把 A 放在坐标轴前半段、B 放在后半段,整张图便分成四块。左上和右下对应各链内部,另外两块才描述跨链的相对位置。PAE 的直观意思是,用某一个位置作为对齐参照后,模型估计另一个位置可能偏离多少。调换参照点,估计误差未必相同,所以要把上下两个跨链区域都看一眼。不同画图程序也会换色,先读色条上标的数值,别记死“深色才好”。
读者可以先在结构中选中自己关心的接触面,再回图里看相关片段。一整条长链的柔性尾部可能有很高的误差,不宜据此否定另一端折叠结构域上的界面。反过来,跨链区域偶然出现一个低误差格子,也不足以圈定整片界面。比较有解释力的是一组相邻残基都给出较低的跨链误差,而且这些残基在三维模型里确实位于两条链靠近的表面。PAE 的单位虽然是埃,格子里的数字指预测位置的误差。实际接触距离应回到坐标中测量。

用十几行 Python 亲自核对方向
下面是四个 token 的教学矩阵,每条链只有两个位置。这个极简例子不代表任何真实蛋白,只用来检查行列方向和单位。按官方本地输出定义,第一个下标是用于对齐的参照 token,第二个下标是被评价位置。两次取块只交换行和列的链名,代码只用 Python 标准库即可运行。
from statistics import median
d = {"token_chain_ids": ["A", "A", "B", "B"],
"pae": [[0, 1, 9, 11], [1, 0, 10, 12],
[12, 10, 0, 1], [14, 12, 1, 0]]}
ids = d["token_chain_ids"]
for ref, target in [("A", "B"), ("B", "A")]:
block = [d["pae"][i][j]
for i, a in enumerate(ids) if a == ref
for j, b in enumerate(ids) if b == target]
print(ref, "->", target, median(block))
固定 A 评价 B,四个数是 9、11、10、12,中位数 10.5 埃。固定 B 评价 A,中位数是 12 埃。对自己的模型,可以用 json.load 读取详细置信度文件并替换代码中的 d,再把 A、B 改为文件中的实际链名。若目的是定位接触面,还应只选结构中接触片段对应的行列,保留残基编号。整条链对的中位数适合做方向检查,长链上大量远离界面的位点会淹没一个小界面,不能拿这个中位数做统一的筛选阈值。
实跑经验|坐标结构里的短肽叫 U,置信度矩阵却叫 B
我们在 Python 3.12.14 中安装 Gemmi 0.7.5,配合 NumPy 2.5.4 复算了 af_analysis 作者公开的 7adt 蛋白–肽预测。该样例的排名表有二十五个采样,最高分落在种子二、样本零。对齐该排名对应的根目录汇总、详细置信度、输入和坐标文件后,链对 ipTM 是 0.88。PAE 矩阵的长链有 148 个 token,短链有 28 个。固定长链评价短链,全部跨链元素的中位数为 3.1 埃,交换参考方向为 4.1 埃,两个方向的最小值却都是 0.8 埃。只抄最小值会漏掉跨链分布的方向差别。这份样例的链对汇总文件
最初直接比对链名,检查没有通过。坐标文件和输入序列写的是 A、U,详细文件的原子链标识也是 A、U,唯独标记误差矩阵行列的 token 链是 A、B。我们用 Gemmi 读回两条结构序列,与输入逐个残基核对,再检查矩阵中两段连续编号分别为一至一百四十八和一至二十八,使这份特定样例的对应关系明确。若按结构名 U 去切 JSON,会选中零个元素。碰到同长度、多拷贝或缺失残基的复合物,还须核对可用的聚合物序列、残基映射和链来源。本次实跑从已有的预测输出开始,验证了读图和链映射,没有重新运行结构预测模型。
三条链的结果,怎样挑出真正关心的那一对
假设你关心抗体和抗原,把重链、轻链和抗原依次记成甲、乙、丙。即使抗原相对于抗体的位置一直在变,重链和轻链彼此之间也可能维持一致的相对摆放。此时只抄整套复合物的一个分数,就会把两类性质不同的界面混在一起。先确认文件里的链标识和你使用的构建体逐一对应,再把重链与抗原、轻链与抗原的链对分数分别记入表中。抗体内部的链对可以单列,不能拿它代替抗原界面的读数。
比较多个采样时,把三条链排成相同顺序,同时记录哪段可变区在坐标里靠近抗原。若一份模型让重链接触同一表位,另一份则把整条抗原转到了轻链外侧,即使两者全局排名接近,也应把它们记为两个候选姿势。下一步安排突变时,优先考虑能区分这两种姿势、并且不容易破坏单体折叠的表面位点。若突变后结合信号消失,还需检查突变体本身的表达与折叠,才知道变化是否来自界面。
准备挑突变位点时,再比较一次姿势
取同一输入的几份采样结构,只用链 A 同一段折叠稳定的结构域做叠合,再显示各自的链 B。如果把两条链一起用于叠合,得到的是兼顾两条链的折中位置,你想观察的相对转动可能被削弱。先看 B 是否反复落在 A 的同一面,再看接触的是不是同一段序列。最好记录采样编号、链对分数、接触残基和不一致的位置。这样同事能直接回到原结构检查,而不必从不同角度的截图猜测。
若链内结构稳定,B 在多个样本中却落到不同表面,图注可以诚实地写成“两个单体的局部结构置信度较高,跨链摆放尚不确定”。若多个样本收敛到相似接触面,且那一片的跨链误差和链对分数也支持它,这块表面就更值得安排互作或突变验证。几份样本出自同一个预测模型,姿势重复不等于获得了几份独立的实验证据。结合亲和力和细胞内是否发生相互作用,仍须用相应实验回答。
已经有结构和置信度文件,以上检查就可以直接做。等到要为多个构建体补跑独立种子、比较界面是否重现时,再考虑批量计算。需要自用计算环境的团队可了解云生信的 GPU 生物信息分析服务器。
