DAY 1 · S3 · 下午 90 分钟

数据格式与标识符:你的主场

这一节全是你的主场——格式、schema、主键、别名冲突

U3.1FASTA:一行描述 + 一段 payload

>WQA35248.1 Sequence 45 from patent US 11753463
QVQLVQSGAEVKKPGASVKVSCKASGYTFTNYYMYWVRQAPGQGLEWMGG
INPSNGGTNFNEKFKNRVTLTTDSSTTTAYMELKSLQFDDTAVYYCARRD

就这么简单。> 开头是描述行(defline),下面是序列, 换行只是排版、不带语义。它是 1985 年的格式,至今没有被取代, 因为它够用——这一点你应该很熟悉。

看出问题了吗?上面这条真实的专利序列,描述行只写了 「来自专利 US 11753463 的第 45 条序列」——完全没说这个抗体抓什么靶点
这就是整个行业最大的瓶颈:序列供给巨大,但靶点标签要读专利全文才有。 一条没有靶点标签的抗体序列,对「从头设计抗体」这个任务来说是没有 label 的样本。 这条线索会在 S5 变成一个具体的商业结论。

U3.2IMGT / Kabat / Chothia:三套并存的 schema 版本

问题是什么:不同抗体的可变区长度不一样。 那「第 52 位氨基酸」在不同抗体之间就没法比较—— 就像两本页数不同的书没法按页码互相对照。

解法是什么:搞一套标准编号,让不同抗体的「同一个结构位置」拿到同一个编号。 长度不同的地方用插入字母(52A、52B)或留空位来对齐。

IMGT / Kabat / Chothia三套编号体系,历史原因并存至今
三个 schema 版本同一份数据,字段边界划法不同

最常见的三套:来历和取向

体系提出年代依据什么划今天的位置
Kabat1970 年代起序列变异度:哪些位置在不同抗体间变化最大 最老,早期文献大量沿用
Chothia1987结构环的起止:真正在空间上凸出来的那一段 做结构建模时常用
IMGT1997统一的结构域编号,跨物种、跨受体类型通用 最系统,目前的主流
先纠正一个常见的简化说法:不止三套。 除了上面这三套,实际在用的还有 Martin(增强 Chothia)、AbM、Contact、AHo、North 等, ANARCI 这类工具支持的就有七八种。
「三套」是入门时够用的简化,但写进合同验收条款时不要这么写—— 要写「明确声明所使用的编号体系」,而不是「须提供三套编号」。

为什么这件事对你重要

因为不同编号会切出不一样的 CDR 边界。同一条真实序列 (AT8 抗体的重链),问「CDR 是什么」,得到的答案取决于你用哪套:

同一条抗体序列在三套编号体系下的 CDR 差异示例
编号体系切出的 CDRH1切出的 CDRH3
IMGTDYSITSGYYTRGSLV
KabatSGYYWNGSLV
ChothiaDYSITSGYGSLV ← 与 Kabat 相同
请特别注意最后一格

Kabat 和 Chothia 对 CDR-H3 的定义是完全相同的 (都是 H95–H102)。它们的差别体现在 CDR-H1 和 CDR-L1 上,不体现在 H3 上

这条本身就是一次判断力训练:「三套编号会切出不同的 CDR」这句话是对的, 但不能推出「任意两套在任意一个 CDR 上都不同」。 把前者当成后者去写代码,你会给 H3 建一套根本不存在的转换逻辑。
(顺带一提:网上流传的一个「Chothia CDR-H3 = SL」的说法, 其实是把极少使用的 Consensus Chothia 定义错标成了 Chothia。这门课第一版也抄错过。)

下游后果具体是什么:假设你按 CDRH3 做序列级去重。 用 IMGT 切出 TRGSLV(6 个字符)、用 Kabat/Chothia 切出 GSLV(4 个字符)—— 更短的键会把本不相同的抗体误判成重复而合并掉。 一次编号体系选错,损失的是数据集的有效样本量,而且不会有任何报错
判定要点

正经数据集必须明确声明用的是哪套编号, 最好多套并给。只给一套还不说是哪套, 那和给你一个日期字段但不说是 UTC 还是本地时间一样——数据无法安全使用
这也是你能问出的第二个专业问题:「CDR 用哪套编号切的?和独立工具比对过吗?」

Antibody Numbering Schemes YouTube · NaturalAntibody · 5:56 · 全网几乎唯一专讲这个话题的视频,冷门但极对口

U3.3UniProt 登录号 = 主键;名字 = 会撞的别名

每个蛋白在 UniProt 里有一个全球唯一的 登录号(accession),比如人 PD-1 是 Q15116

为什么必须用它:靶点的名字非常乱。PD-1 又叫 PDCD1、CD279、 programmed cell death protein 1——都是同一个东西。只有登录号唯一且稳定。

UniProt 登录号Q15116
主键 / UUID唯一、稳定、跨系统可引用
蛋白名 / 别名 / CD 号PD-1、PDCD1、CD279…
display name可读、会变、会撞
真实翻车案例(这是本课最重要的一个陷阱):
最初把 CCR4 归一到了 NOCT(登录号 Q9UK39)这个基因上。 而真正的 CCR4(趋化因子受体 CC motif receptor 4,一个真实的药物靶点)是完全另一个基因

同类的还有几个:4-1BB、CD166、OX40 ——全都是主流免疫肿瘤靶点, 全都因为名字解析走错了路由而被归到了错误的条目上。

而且从数据表面完全看不出来:字段齐全、格式正确、条数够、每条都有登录号。
Lab 4 会让你亲手把这个 bug 跑出来。
根因,以及为什么它比看上去更难防

直觉上的解释是「NOCT 的废弃旧名叫 CCR4」——但这个解释是错的,值得你注意

HGNC 查 NOCT, 它记录的 previous symbol 是 CCRN4L不是 CCR4。 「CCR4」出现在 UniProt 的 Q9UK39 里,作为一个 gene name synonym

后果很具体:如果你的防御措施是「把 HGNC 里所有废弃符号拉黑」, 这个坑照样会踩——因为它根本不在那张表里。 两个权威库对「什么算这个基因的别名」本来就不完全一致, 而冲突恰好发生在它们不一致的地方。

修法

三条,按重要性排:
现用符号优先路由:先查现用基因符号,再查别名和旧名, 命中别名时降低置信度并标记待复核。
不要只用一个源的别名表——因为它们互相不一致。
用另一个独立源复核归一化结果,两边不一致的一律人工看。
翻译成你的语言:外键解析不能用可能冲突的 alias 当第一路由, 而且别名表本身也需要交叉验证。

U3.4PDB:三维坐标数据

PDB 是全球蛋白质三维结构的公共库, 每个结构一个 4 位编号(如 5B8C)。文件里逐个原子记录 (x, y, z) 坐标。

一个抗体-抗原复合物结构里会有多条,每条一个字母标识。 数据表里常见的 Hchain / Lchain / Antigen_chain 三列, 记录的就是「哪条链是重链、哪条是轻链、哪条是抗原」。

这里有一个几乎人人都会犯的错: 以为 PDB 里的链 ID 有语义——H 就是重链、L 就是轻链、A 就是抗原。

没有这个约定。链 ID 完全由结构的沉积者自己起名。

反例就是本课一直在用的 5B8C(PD-1 与 pembrolizumab 的复合物): 它的轻链是 A/D/G/J,重链是 B/E/H/K,抗原是 C/F/I/L。 按「H=重链、L=轻链、A=抗原」这条规则去解析, 你会把轻链当成抗原,然后算出一份完全错误的表位。

所以 Hchain / Lchain / Antigen_chain 这三列是别人替你判定过的结果 (SAbDab 这类策展库会做这件事),不是从 PDB 文件里直接读出来的。 它们是加工过的字段,你有权追问它是怎么判定的。
这一条的通用版本

看到一个字段叫 Hchain, 不要假设它等于「PDB 里那条叫 H 的链」。 字段名的含义来自生成它的那个管线,不来自它长得像什么。
这也是为什么 Lab 5 那个例子里, 抗原链是 P ——硬编码 chain == "A" 会直接算错。

为什么结构数据最值钱

有了三维结构,「这个抗体抓这个抗原」就不是别人说的, 而是看得见的物理事实——两个分子在坐标里真的贴在一起。 所以这类记录被定为最高证据等级。
代价是稀少:结构测定昂贵,抗体-抗原复合物结构全球只有数千个量级。 这个天花板本身就是一件判定武器,见 S8 的红旗清单

当堂自测

六道题,本节内容最多,题也最多。

S3 · 格式与标识符