信息速览
同一个位点的氨基酸替换,序列层面的注释往往只写一句「错义变异」。这句话在解读时几乎不提供信息:它既没说这个位置在蛋白里做什么,也没说换掉的这个残基是不是撑住折叠的那几根柱子之一。VarSite 的全部价值,就是把这句话换成一幅可以看的图——这个残基在三维结构里是埋在疏水核心、贴在界面上、还是裸露在溶剂里。
VarSite 由 EMBL-EBI 桑顿课题组开发,2020 年 1 月发表于《Protein Science》,DOI 10.1002/pro.3746。它把 UniProt 与 ClinVar 的疾病变异、gnomAD 的自然变异经 VarMap 换算到规范异构体位置,再借序列比对落到 PDB 同源结构,输出以图像化报告为主;论文开放获取。
先说明一个现实处境:官网地址目前返回「服务已退役」提示,交互页面已不可用。下文因此分两半——前半讲字段语义与结构注释逻辑,这些对复现与借鉴仍成立;后半给出现役接口的替代取值路径。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 正式名称 | VarSite: Disease variants and protein structure |
| 维护机构 | EMBL-EBI 桑顿课题组,与 UCL 结构分子生物学研究所合著 |
| 首发形式 | 网页服务器(web server),非批量数据包 |
| 论文出处 | Protein Science, 2020, 29:111-119;DOI 10.1002/pro.3746 |
| 变异来源 | UniProt 疾病变异、ClinVar(专业版与公开版)、gnomAD 自然变异 |
| 结构来源 | PDB 实验结构,经 PDBsum 汇总;同源结构而非仅人蛋白本身 |
| 坐标换算 | VarMap(Ensembl VEP + BioMart + UniProt) |
| 域体系 | Pfam 序列域与 CATH 功能家族(FunFam)双轨 |
| 变异规模 | 论文称截至 2019 年 6 月超过四十四万条 |
| 覆盖边界 | 仅规范异构体、仅编码区、仅能映射到 PDB 同源结构的蛋白 |
| 交互组件 | 3dmol.js 三维视图,可导出 RasMol 与 PyMOL 脚本 |
| 检索入口 | 按变异查、按基因组坐标批量查(三种提交方式) |
| 数据许可 | 站点未单列;底层沿用 UniProt、ClinVar、PDB 原始许可 |
| 当前状态 | 官网标注服务退役,原 URL 不再提供交互分析 |
| 现役替代 | EBI Proteins 变异接口、PDBe 变异接口、ProtVar |
| 核心用途 | 错义变异的结构语境解释,而非致病性自动判读 |
§1 它要解决的具体麻烦
1.1 序列注释到「错义」就停了,而解读需要知道这个位置撑不撑得住
一份外显子测序报告里,某个基因出现杂合错义变异,注释列写着「p.Cys83Trp,错义」。这句话准确也无用:接下来的判断取决于一串序列层面看不到的事实——这个半胱氨酸是否在配位锌离子、是否参与二硫键、侧链朝内还是朝外、这个位置在几十个物种里是否从没变过。
传统做法是换一套预测工具——SIFT、PolyPhen、CADD 各给一个分数看是否一致。这类工具主要吃序列与进化信息,能说「这个替换不寻常」,却说不出不寻常在哪里。临床分歧恰恰常发生在多个「不寻常」之间:两条都被判有害的错义,一条真的毁了配位,另一条只是柔性环上换了个体积相近的残基。
VarSite 补的就是这一段:它不产出新分数,而是把每个位置的三维语境摊开:二级结构、相互作用、保守性、是否埋藏、替换是否破坏电荷或二硫键。关键设计在「去哪儿找结构」:多数工具只在人蛋白自身有结构时才注释,它按同源性把注释「借」过来,论文称覆盖大得多,代价是跨物种错位风险。
1.2 三条常见的错误期待
最常见的三条误读分别是:把它当成可批量下载的变异注释数据库(它的定位是网页服务器,输出图像化报告);把它当成覆盖全部人类蛋白的资源(映射终点是 PDB 实验结构,没有可对齐结构的蛋白即为空缺);以为四十四万条变异各自都有独立的结构结论(变异按蛋白质组织成页面,同一位置的多条变异共享同一套结构语境,§4.3 的案例里一个位置就并列四条)。
1.3 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 判断错义变异是否落在疏水核心 | 给出位置的结构埋藏程度与相互作用类型 | 够,是它的核心能力 |
| 判断替换是否破坏金属配位 | 标出该残基是否与金属离子配位,并给出配位结构图 | 够,案例中直接可读 |
| 判断替换是否破坏二硫键 | 相互作用行中高亮二硫键,可看出该 Cys 是否参与 | 够,但需人工对照序列 |
| 给出致病的最终结论 | 不给结论,只给证据片段 | 不够,须自行按 ACMG 组合证据 |
| 覆盖非编码区与内含子变异 | 不覆盖,只纳入编码区 | 不够,属明确排除项 |
| 覆盖所有转录本 | 不覆盖,只纳入规范异构体 | 不够,其他异构体需另找工具 |
| 覆盖全部人类蛋白 | 只覆盖能映射到 PDB 同源结构的蛋白 | 不够,是最大边界 |
| 拿到可直接入库的批量表 | 不给,只有页面与图像报告 | 不够,需自行抓取或改走接口 |
| 看变异在三维结构里的落点 | 3dmol.js 交互视图,可导出脚本再渲染 | 曾经够,服务退役后已不可用 |
| 按基因组坐标批量查一批变异 | 支持坐标批量提交,超二十条后台计算后邮件回 | 曾经够,现须自建 |
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 手里有一批外显子测序的错义变异,想先按结构风险粗筛 | 把「落在核心或配位位点」的一批变异单独挑出来 | 按 §5 的路径取结构语境字段,与 CADD 分数交叉,双高的先送人工 |
| 报告里两条错义都被判有害,但临床表型只对得上一条 | 用同一位置或邻近位置的变异对照,看哪条真的动了结构骨架 | 回到蛋白质页面看残基的相互作用与保守性,再决定要不要做功能实验 |
| 做变异注释流水线,需要在 CADD 之外加一路结构证据 | 提供字段语义与映射链路,可照此自建 | 以 VarSite 的字段设计为蓝本,用 EBI Proteins 与 PDBe 接口现取 |
| 研究某个结构域的致病热点 | 按 Pfam 域或 CATH 功能家族聚合跨蛋白变异 | 聚合结果在论文以图呈现,服务退役后需自建聚合 |
| 需要向同行解释为什么某个变异「看起来可怕其实无害」 | 提供埋藏程度、保守性与相互作用三类反向证据 | 用具体位点的结构图配合序列比对讲,比只报分数有说服力 |
| 手上的基因在 PDB 里根本没有可用结构 | 帮不上,该基因在库内是结构性空缺 | 转向 AlphaFold DB 看预测模型,或走同源建模路线 |
| 想复现一篇用 VarSite 做过分析的老论文 | 论文提供完整的字段语义与案例链路 | 按原文的字段口径 reinterpret,结果数字不可复现 |
| 只想知道本站点还开着没有 | 官网返回退役提示,这一条本身就是答案 | 直接走 EBI Proteins 与 PDBe 的现役接口 |
1.5 一句话判断
当一个问题从「这个变异常不常见」升级为「这个位置撑不撑得住」,才轮到 VarSite 出场;它在服务退役之后的价值,主要是把它那套结构注释的字段设计与映射链路借过来用,而不是去取它的原始结果。
1.6 不适合谁:四条边界
第一条,如果你的变异不在编码区。 论文说得很直白:只纳入编码区变异,因为只有这类变异能先映射到蛋白序列再映射到结构。启动子、增强子、深层内含子的变异一律不在范围内。
第二条,如果你需要的是今天的变异池。 论文的规模数字截止于 2019 年 6 月,此后 ClinVar 条目数增长数倍,gnomAD 也已迭代。拿旧快照讨论今天的注释完整度,会系统性低估缺口。
第三条,如果你要的是可直接入库的结构化表。 它的输出是页面与图像,不是带 schema 的表格;字段需从报告语义反推,或改走 EBI Proteins 与 PDBe 的 JSON 接口自行组装。
第四条,如果你期待它替你做致病性判定。 结构语境只是证据的一类。落在核心的替换仍可能是良性多态,裸露在表面的替换仍可能经剪接或降解致病。把它当充分条件,是这类工具最常见的误用。
§2 数据构成与规格
2.1 三层数据叠在一个页面上
理解它的构成,最省力是看成「三层叠加」的页面结构。
底层是变异来源层。 三类:UniProt 的疾病相关变异(源自 Humsavar 一类整理)、ClinVar 的临床提交(分专业版与公开版)、gnomAD 的自然变异(人群中的「正常」参照)。共同点是都带基因组坐标,都需要换算。
中层是坐标与序列层。 基因组坐标经 Ensembl VEP 与 BioMart 换算到规范异构体的蛋白序列位置,由 VarMap 完成,ClinVar 与 gnomAD 的数据都先过一遍再纳入。
表层是结构注释层。 拿到蛋白位置后用序列比对对齐到 PDB 同源结构的残基,再由 PDBsum 汇总出二级结构、相互作用与位点处境。产物就是页面上那条彩色示意图。
三层是单向的:变异层提供「谁变了」,序列层提供「变在第几个残基」,结构层提供「那个残基在三维里做什么」。任何一层断了页面就出现空缺,这解释了为什么很多蛋白的结构注释行是稀疏的。
2.2 字段与记录的完整字典
下表按页面语义整理 VarSite 报告里出现的字段,分来源、坐标、变异、结构、评估五组。左列是字段语义,中列说明其口径,右列注明它属于哪一层、在服务退役后从哪条现役路径能拿到相近内容。
| 字段组 | 字段语义 | 口径与取值说明 | 所属层 | 退役后相近来源 |
|---|---|---|---|---|
| 来源 | UniProt 登录号 | 规范异构体的登录号,页面以它组织 | 变异层 | EBI Proteins 接口主键 |
| 来源 | 蛋白名称与基因名 | 取自 UniProt,含推荐名与别名 | 变异层 | EBI Proteins 返回体 |
| 来源 | 序列长度 | 规范异构体的氨基酸数 | 序列层 | 接口返回的 sequence 长度 |
| 来源 | 功能与组织特异性描述 | 直接引用 UniProt 的注释文本 | 变异层 | 接口注释块 |
| 来源 | 关联疾病列表 | 引用 UniProt 与 OMIM 的疾病条目 | 变异层 | 接口 diseases 字段 |
| 坐标 | 基因组坐标 | 染色体、位置与碱基改变三元组 | 坐标层 | 接口的 genomicLocation |
| 坐标 | 参考基因组版本 | 需显式指定,组装版本不同结果不同 | 坐标层 | 接口版本字段 |
| 坐标 | 序列位置 | 换算后的规范异构体残基序号 | 序列层 | 接口的 position 字段 |
| 坐标 | 异构体标记 | 仅规范异构体,其他异构体被排除 | 坐标层 | 接口 isoform 字段 |
| 变异 | 野生型残基 | 规范异构体该位置的氨基酸单字母码 | 变异层 | 接口 wildType |
| 变异 | 突变型残基 | 替换后的氨基酸单字母码 | 变异层 | 接口 mutantType |
| 变异 | 变异来源标签 | 疾病(UniProt)、ClinVar、自然(gnomAD)三类 | 变异层 | 接口 consequenceType 与来源 |
| 变异 | 编码区标记 | 是否落在编码区,非编码被剔除 | 变异层 | 接口 consequenceType |
| 变异 | 同位置变异计数 | 该残基位置上的变异条数 | 变异层 | 需自行按位置聚合 |
| 变异 | 疾病倾向分数 | 某类氨基酸替换在疾病与自然数据中的比值 | 评估层 | 接口无直接对应,需自算 |
| 结构 | 二级结构归属 | 螺旋、折叠、转角或无规卷曲 | 结构层 | PDBe 接口的 secondary structure |
| 结构 | 配体相互作用 | 该残基是否接触小分子配体 | 结构层 | PDBe 结构注释 |
| 结构 | 金属相互作用 | 是否配位金属离子,颜色为蓝 | 结构层 | PDBe 结构注释 |
| 结构 | 核酸相互作用 | 是否接触 DNA 或 RNA,颜色为绿 | 结构层 | PDBe 结构注释 |
| 结构 | 蛋白间相互作用 | 是否位于蛋白-蛋白接触面,颜色为灰 | 结构层 | PDBe 界面注释 |
| 结构 | 相互作用色块大小 | 表示该相互作用在同源结构中出现的比例 | 结构层 | 需自行统计同源集 |
| 结构 | 可映射序列比例 | 该蛋白有多少比例的序列能落到结构上 | 结构层 | 接口 coverage 概念相近 |
| 结构 | 最近 PDB 条目 | 论文案例给出条目号与链号 | 结构层 | PDBe 检索 |
| 结构 | PDB 残基编号 | 与 UniProt 编号常常不同 | 结构层 | 接口的 PDB 映射 |
| 结构 | 埋藏程度 | 该位点在结构中是否埋藏、是否可及溶剂 | 结构层 | 需借结构计算工具 |
| 结构 | 二硫键参与 | 该 Cys 是否在二硫键中 | 结构层 | PDBe 键连注释 |
| 结构 | 催化残基标记 | 是否为已知催化位点 | 结构层 | 接口注释 |
| 评估 | 保守性分数 | 由 ScoreCons 方法在 UniProt 全库比对上计算 | 评估层 | 需重算 |
| 评估 | 序列标识 | 以该位置为中心的四十残基标识图 | 评估层 | 需重算 |
| 评估 | CADD 归一化分数 | 该替换的 CADD 分数,红点表示高 | 评估层 | CADD 官方预计算 |
| 评估 | 氨基酸性质改变幅度 | 体积、电荷、疏水性等变化的方向与大小 | 评估层 | 需自算 |
| 评估 | Pfam 域归属 | 该位置落在哪个序列域内 | 评估层 | 接口的 domain 字段 |
| 评估 | CATH 功能家族归属 | 该位置落在哪个结构功能家族内 | 评估层 | 需查 CATH 映射 |
即便页面不在了,这张表仍是一份可执行的规格。右列标「需自算」「需重算」的几项——疾病倾向分数、相互作用色块大小、埋藏程度、保守性分数——恰是相对现役接口的增值部分。### 2.3 一条记录的完整解剖
把一条记录拆到底,最能看出它的信息密度。用论文的贯穿示例来解剖:UniProt O60663,第 83 位半胱氨酸替换为色氨酸。
#-- 以下为按论文字段语义还原的记录结构,字段名沿用论文的描述口径
记录锚点
uniprot_accession : O60663
protein_name : LIM homeobox transcription factor 1-beta
canonical_length : 402
pfam_domain : PF00412 (LIM domain, 约 52-114 位)
变异本体
variant_source : UniProt 疾病变异 (同位置另有 3 条)
wild_type : C
mutant_type : W
position : 83
coding_flag : true
坐标链路
genomic_coord : 由 VarMap 从基因组坐标换算得到
isoform : canonical only
结构语境
nearest_pdb : 1rut (链 X),另 3mmk 亦覆盖该位点
pdb_residue_no : 该 Cys 在 1rut 中编号为 57
pdb_residue_type : Cys(同源结构上核验一致)
secondary_struct : 锌指结构内的配位残基
interactions : metal (锌离子,蓝色色块)
partner_residues : 与另外三个 Cys/His 共同配位一个锌
conserved : 高度保守,四十残基标识图中该位点几乎无替换
评估
cadd_normalized : 按论文口径由 CADD 预计算分数归一化
aa_change : 小体积含硫侧链 -> 大体积芳香侧链
disease_propensity: C->W 约 2 倍(论文给出的同类型替换比值)
这条记录说明 VarSite 的意图不是给「变异-分数」对照表,而是给一条可顺藤摸瓜的链路:从基因组坐标出发,经序列位置、结构残基、配位关系,落到「这个半胱氨酸撑着一个锌指」这个结论上。
pdb_residue_no 这一行值得盯住:同一个残基在 UniProt 里是第 83 位,在 1rut 里是第 57 位。论文专门提醒,PDB 编号与 UniProt 常常不同,极端情况下该位点在 PDB 里甚至是另一种氨基酸。拿结构坐标做下游分析前必须先做编号对齐,否则后面全错。
2.4 变异来源的构成
VarSite 的变异来自三个池子,三者的性质完全不同,混着用会出问题。
| 来源 | 论文口径的规模 | 性质 | 在分析中的角色 | 使用时的注意事项 |
|---|---|---|---|---|
| UniProt 疾病变异 | 随 UniProt 发布更新 | 文献整理的致病或疑似致病变异 | 疾病侧的主干 | 收录标准由 UniProt 决定,含部分历史遗留条目 |
| ClinVar 专业版 | 超过二十五万条 | 具专业审核记录的提交 | 疾病侧的补充,质量较高 | 与公开版存在重叠,直接相加会重复计数 |
| ClinVar 公开版 | 超过十七万条 | 所有公开提交,含未审核 | 疾病侧的广度来源 | 与专业版为包含关系而非并列关系 |
| gnomAD 自然变异 | 池子超过一千五百万条 | 人群中观察到的变异 | 自然侧的参照 | 是参照不是对照,不能用来算频率分层 |
| 三类合计 | 超过四十四万条 | 含疾病与自然两类 | 页面展示的全集 | 合计口径由论文给出,未逐类说明差额构成 |
两个 ClinVar 数字不应相加——专业版是公开版的严格子集。总计与各分项的关系官方未逐项说明,本文只照录口径,不做换算。
gnomAD 这一行还有一个易被忽略的细节:它扮演的是分母。论文用某类替换在疾病数据中的次数除以在自然数据中的次数,得到归一化的疾病倾向分数,其意义完全依赖 gnomAD 作为「正常人群基线」的代表性,而它本身有祖源构成偏向(见 §7.3)。
2.5 与同类资源的字段差异
把 VarSite 放在同类资源里比,差异不在「有没有结构」,而在结构的来源与粒度。
| 资源 | 结构信息来源 | 变异覆盖 | 与人蛋白自身结构的绑定 | VarSite 的相对优势 |
|---|---|---|---|---|
| VarSite | PDB 实验结构,含同源结构 | 疾病变异加自然变异 | 不绑定,同源即可 | 覆盖更宽,相互作用信息来自多结构汇总 |
| HuVarBase | 人蛋白自身结构 | 致病变异 | 强绑定 | VarSite 在无自身结构的蛋白上仍有输出 |
| PhyreRisk | Phyre2 同源建模 | 变异加相互作用 | 不绑定,用模型 | VarSite 用实验结构,PhyreRisk 用模型补缺 |
| ProtVar | 结构映射加功能注释 | 错义变异 | 混合 | VarSite 的同源聚合更早、更偏图像 |
| ClinVar | 无结构字段 | 临床提交 | 不涉及 | VarSite 补的是结构维度 |
| UniProt | 有结构交叉引用 | 蛋白层面注释 | 交叉引用 | VarSite 把变异落到具体残基位置 |
第四列是一个自觉的取舍:宁可引入同源对齐的误差,也要把覆盖撑起来;HuVarBase 走相反的路,只在人自身结构可得时给三维视图。ProtVar 比 VarSite 晚四年,赶上 AlphaFold DB 普及,结构来源更宽。两者并读能看出演进线:从「以实验结构为准、以同源借注释」到「以预测结构补覆盖、以统一坐标换算为骨架」。
§3 它靠「借结构」把覆盖撑起来
3.1 一个蛋白有没有结构,决定了这个页面有没有下半截
页面结构本身就暴露了依赖。每个蛋白质页面从上到下是:蛋白信息与变异计数、序列示意图、保守性曲线、自然变异条带、结构注释行、三维视图入口、变异清单。从「结构注释行」往下全部依赖一件事:这个蛋白能不能映射到 PDB 结构。
没有结构,就没有二级结构、相互作用、埋藏程度与三维视图。页面还在、变异还在,但下半截是空的。只看上半截,会得到「这个基因有多少条变异」的印象,却得不到最需要回答的问题——它们落在结构的什么位置。
判断一个蛋白在 VarSite 里「有没有用」,先看的不是变异条数,而是可映射序列比例。论文提到页面里有一张图专门表示这个比例。比例低说明结构覆盖只到某一两个结构域,其余部分的结构注释不可信或缺席。
3.2 「同源」这两个字怎么定义
同源不是随手找的。论文给出具体阈值:FASTA 序列检索中 E 值低于 10 的负三次方、且 z 分数高于 4 的序列才算同源,既要求统计上显著,也要求比对分数明显高于随机命中。
这个阈值解释了注释密度的差异:进化上保守的蛋白在 PDB 里有几十个跨物种同源结构,每个位置都能汇总出相互作用;快速演化或只有人类自身结构的新近进化蛋白,可用同源结构极少,注释就显得单薄。
色块大小本身带信息:论文说它表示该相互作用在同源结构中出现的比例。一个残基若在二十个独立结构里都在配位金属,这个结论就比单结构所见可靠得多;只在个别结构里出现的小色块,可能只是特定构象或特定配体的偶发现象。
3.3 双轨域体系:Pfam 与 CATH 各管一段
VarSite 用两套域定义来组织跨蛋白的聚合分析:Pfam 的序列域,与 CATH 的功能家族(FunFam)。这两套体系回答的问题不同。
Pfam 从序列相似性出发,给的是「这个域在哪些蛋白里出现」,聚合变异能回答序列层面的热点在哪里。
CATH 从三维结构出发,能回答更进一步的问题:同一折叠里,不同蛋白的致病变异是不是落在空间上对应的位置。这只有结构视角看得出来——序列相似度不高的两个蛋白,折叠相同、关键残基在空间上重合。
按域聚合的价值在于:单个蛋白的变异太少、看不出热点,把带同一域的几十上百个蛋白放在一起模式才浮现。§4.3 的案例里,聚合后才看得出四个配位残基在所有 LIM 域蛋白里都是热点。
3.4 三维视图、可导出脚本与三种检索入口
结构注释的最后一环是看。论文说变异的三维位置可用 3dmol.js 交互查看,也可导出成 RasMol 与 PyMOL 脚本——真要出图或测量仍得回本地工具重现同一视角。它不试图把分析都做进网页,而是做完「找到位置」,把「深入看」交还专业工具。
检索给了三条路:按具体变异查,临床解读最常用;按基因组坐标批量查,对应流水线场景;提交制表符分隔的列表文件,超过二十条时自动判断组装版本,且批量计算在后台跑完后邮件回结果链接。共同前提是坐标与版本正确——版本不同,同一位置指向的碱基完全不同。
3.5 三种检索入口
检索层面,论文给了三条路,分别对应三种使用习惯。
第一条是按具体变异查:知道基因与氨基酸改变,直接定位到该变异在蛋白上的位置。这是临床解读人员最常用的入口。
第二条是按基因组坐标批量查:提交一批「染色体-位置-碱基改变」的三元组,工具会把每条都换算并定位。这一条对应的是流水线场景——手上有一份变异清单,想一次性看它们在结构上的落点。
第三条是提交带制表符分隔的坐标列表文件。论文提到,超过二十条时脚本会自动判断更合适的组装版本,并且批量计算不是实时完成,而是后台跑完后把结果链接邮件发给提交者。这个细节很重要:它说明 VarSite 在设计上就承认自己是「提交-等待-取回」的模式,而不是即点即回的查询接口。
三条入口的共同前提是坐标的正确性。参考基因组组装版本不同,同一个位置指向的碱基完全不同,这是这类工具最经典的事故来源。论文对版本的处理是「超过二十条时自动判断」,但这个自动判断在边界情况下未必可靠,提交者仍应显式核对。
§4 结构注释能说到哪一步
4.1 它不是「第二个 CADD」,它回答的是另一个问题
把 VarSite 与 CADD 并排看,最容易犯的错是把它当成竞品。两者在回答不同的问题。
CADD 回答「这个替换在基因组尺度上有多不寻常」,用六十多个特征训练模型输出归一化分数,对任何位置都算得出来,不依赖结构。VarSite 回答「这个位置在三维结构里承担什么职能」,输出的是二级结构、相互作用、埋藏程度、保守性这组语境,本身不含好坏的判断。
互补性在于:CADD 高但结构裸露的变异,可能经别的机制致病(剪接、稳定性调控);CADD 中等却落在核心配位位点的变异,可能靠破坏折叠致病。只看一类会漏。
论文案例里就做了这件事:Cys83Trp 一边有结构语境(配位锌、高度保守),一边有 CADD 归一化分数(论文称 28,属高分),两边同向。说明作者的用法是多路证据互证,而非用结构取代分数。
4.2 三类结构证据的读法
彩色示意图上,蓝色是金属、红色是配体、绿色是核酸、灰色是蛋白-蛋白。四种颜色要分开读。
蓝色块是硬约束。 金属配位几何极苛刻:一个锌要四个配位基团,方向与距离都有讲究。改动配位残基,尤其把 Cys 换成不能配位的残基,几乎必然破坏金属结合并毁掉锌指折叠。
红色块是语境。 配体接触面是个口袋,换体积相近的残基口袋几乎不变,换带电残基可能排斥配体。
绿色块是定位。 核酸结合面上的变异往往不破坏折叠,而是破坏识别特异性。
灰色块是网络。 界面残基的替换可能破坏复合物组装而不动单体折叠,更易被单纯的结构稳定性预测漏掉。
4.3 案例:LIM 域里的第 83 位半胱氨酸
论文用一条蛋白贯穿全文:UniProt 登录号 O60663,LIM 同源盒转录因子 1-beta,全长 402 个残基,含两个 LIM 域,关联指甲-髌骨综合征(NPS,OMIM 161200)。它在同一位点上凑齐了要讲的要素,故在此当贯穿案例。
先看位置。第 83 位是一个半胱氨酸,落在第一个 LIM 域内(该域大致覆盖 52 到 114 位)。LIM 域在 Pfam 里的定义(PF00412)是两个相邻锌指之间由一个两残基疏水接头连起来的结构。锌指的核心是一个锌离子被四个侧链配位,通常是 Cys 或 His,从而稳定整个折叠。
这个位置上有四条疾病相关变异,是这条蛋白上最密集的位置之一。论文取其中一条深入分析:半胱氨酸换色氨酸。
结构上,最近条目是 1rut 链 X,对应残基编号为 57 的 Cys;3mmk 也覆盖该位点,论文用它的配位示意图展示与锌离子的关系。注释显示该残基的相互作用类型是金属(蓝色),与另外三个配位基团共同固定一个锌。
后果上,半胱氨酸的小体积巯基正是配位能力的来源;换成色氨酸后侧链变成大体积芳香环,既丢了巯基又带来空间冲突。论文的说法很直接:丢失这样的侧链会破坏折叠,很可能使生物功能失效或受损。
它的教学价值在于多层证据叠合:序列上只是一条错义,保守性上该位置近乎不变,结构上它撑着一个配位位点,聚合上四个配位残基都是域内热点——只有后两层是 VarSite 带来的。
它还暴露一个必须警惕的细节:UniProt 83 与 PDB 57 的错位。拿 PDB 里的第 83 位去分析,得到的是完全不同的残基。§4.3 的案例在本文反复被引用,正因为它同时演示了读对有多有用、读错有多危险。
4.4 它与保守性、CADD 三者的分工
结构语境、保守性、CADD 的分工,放在一张表里最清楚。
| 证据类型 | 回答的问题 | 依赖的信息 | 失效场景 | 在 VarSite 中的位置 |
|---|---|---|---|---|
| 保守性 | 这个位置在进化上允许变化吗 | 多序列比对 | 快速演化或新近进化的蛋白 | 页面独立一行,四十残基标识图 |
| CADD | 这个替换在基因组尺度上有多异常 | 六十余项基因组特征 | 训练分布外的人群或区域 | 作为点的颜色编码 |
| 结构语境 | 这个位置在三维里做什么 | PDB 同源结构的实验数据 | PDB 里无可对齐结构 | 相互作用行与埋藏程度 |
| 疾病倾向 | 这类替换在疾病与自然数据中的比值 | 疾病库与自然库的比值 | 自然库祖源偏倚 | 论文给出的聚合统计 |
| 结构域热点 | 同类域中哪些位置反复致病 | Pfam 或 CATH 域聚合 | 域定义边界不清 | 按域聚合的图 |
第四列是自检清单:任何证据在对应失效场景里都不可信,而三类证据的失效场景互不重叠,这正是多路证据的价值。
4.5 「疾病倾向分数」是什么,不是什么
论文里有一个容易被过度解读的字段:疾病倾向分数。它的定义很朴素——某类氨基酸替换在疾病数据里出现的次数,除以在自然变异数据里出现的次数,再归一化。论文举例说 Cys 换 Arg 的疾病倾向是 2 多一点,意思是这类替换在疾病数据里出现的频率是自然数据里的三倍多;Cys 换 Trp 约 2 倍。
这个分数容易被误读成「致病概率」。它不是。它描述的是某类替换在两类数据中的相对富集,是一个群体层面的比值,不能落到单个变异上。一个 Cys 换 Trp 的变异,即便这类替换整体上富集于疾病,这一个具体变异仍然可能是良性的。
正确用法是当先验:两个变异难以取舍时,替换类型在疾病数据里更富集的那个可作方向性参考。它是排序用的,不是判读用的。
分数最低为 0,意味着有些替换类型只在自然变异里出现,方向上更偏良性,但同样不是充分条件。
4.6 案例之后的延伸:同一位置四条变异怎么读
回到 §4.3 的案例。第 83 位上有四条疾病相关变异,这是一个很好的练习场。
读法不是把四条并列看谁「更严重」,而是看它们破坏的是不是同一件事。四条都发生在同一个半胱氨酸上,因此四条都至少破坏了同一个配位位点——这个结论是先从位置得出、再看变异得出的,顺序很重要。如果先看变异再找位置,容易陷入「哪条更严重」的无意义比较。
接着看替换后的残基。如果四条里有一条是换成另一个能配位的残基(例如换成 His),那它的后果可能比换成完全不能配位的残基轻,但几何上的改变仍然可能破坏锌指。如果四条都是换成不能配位的残基,那么在这个位点上,「换什么」的差别不如「换了」这个事实重要。
最后看同位置的自然变异。若该位置在 gnomAD 里也有记录,问题就变成「为什么同一位置的变异,有的在人群里、有的在患者里」。§4.3 的案例给出反向提示:高度保守又参与核心配位的位置,自然变异通常极少,若真出现值得单独查证。
§5 取数路径与接口
5.1 先说清楚:主入口已经关闭
VarSite 的官方入口是论文给出的那个 Thornton 组数据库地址。当前访问该地址,返回的是一句「所请求的服务已退役,不再可用」。同一个域名下的其他路径也返回同样的退役提示。这意味着 VarSite 的原交互查询、原结果表、原三维视图,都不再能从这里取到。
这一节因此分成两条线:一条是把 VarSite 的坐标换算链路本身讲清楚,这条链路以 VarMap 的形式有独立实现,可以复用;另一条是给出服务退役之后,从现役接口取「变异加结构语境」的可运行路径。两条线合起来,才是「现在还能怎么用」。
#-- 第一步:确认原入口状态(返回退役提示即说明主入口已关闭)
curl -sL -m 20 "https://www.ebi.ac.uk/thornton-srv/databases/VarSite/" \
| sed -e 's/<[^>]*>/ /g' | tr -s ' ' | head -c 300
这条命令不取数据,只把「主入口已关闭」留成可复核的记录。
5.2 坐标换算链路:VarMap 做的三件事
VarSite 里所有来自 ClinVar 与 gnomAD 的变异,都要先过一遍 VarMap 才能落到蛋白序列上。这条链路分三步。
第一步,基因组坐标到转录本坐标:输入染色体、位置、碱基改变三元组与组装版本,由 Ensembl VEP 给出落在哪个转录本、第几个编码碱基。第二步,转录本坐标到蛋白坐标:算它落在第几个密码子、密码子第几位,得到氨基酸位置与替换类型,依赖正确的阅读框与转录本选择。第三步,蛋白坐标到结构坐标:给定规范异构体残基序号,通过序列比对找到 PDB 同源结构里的对应残基。这一步是它与普通注释工具的分水岭,大多数工具止步于第二步。
第三步的误差来源最多:比对中的插入缺失会致残基错位;PDB 条目可能只覆盖部分序列;某些结构里该位置可能是另一种氨基酸。论文对最后一点说得很清楚,这是必须人工核对的地方。
5.3 现役路径一:EBI Proteins 变异接口
UniProt 的变异注释在 EBI 有一路现役接口,直接返回某个登录号下的全部变异记录,字段里含位置、野生型与突变型残基、变异类型、以及相关的疾病与表型信息。这是 VarSite 变异层内容的最直接来源。
#-- 从 EBI Proteins 接口取某个蛋白的全部变异注释
import requests
ACC = "O60663" #-- 贯穿案例的蛋白
url = f"https://www.ebi.ac.uk/proteins/api/variation/{ACC}"
r = requests.get(url, headers={"Accept": "application/json"}, timeout=120)
r.raise_for_status()
feats = r.json()["features"]
print("变异条数:", len(feats))
#-- 只看错义替换,并按位置排序
missense = [f for f in feats if f.get("alternativeSequence")]
missense.sort(key=lambda f: f["begin"])
for f in missense[:5]:
print(f['begin'], f['wildType'], '->', f['alternativeSequence'],
f.get('consequenceType'), len(f.get('evidences', [])), '条证据')
这段代码把变异层原样拿到:位置、替换、后果类型、证据条数。它给不出结构语境,但给了结构语境所需的锚点。
5.4 现役路径二:PDBe 的结构注释接口
结构语境需要从结构侧取。PDBe 的接口按 UniProt 登录号返回该蛋白关联的结构条目,以及序列到结构的映射。把上一步的蛋白位置拿到这里,就能落到具体条目与残基。
#-- 从 PDBe 取某蛋白的结构条目与序列覆盖
import requests
ACC = "O60663"
base = "https://www.ebi.ac.uk/pdbe/api"
#-- 该登录号关联的 PDB 条目
r1 = requests.get(f"{base}/mappings/uniprot/{ACC}", timeout=60)
r1.raise_for_status()
entries = r1.json().get(ACC, {}).get("PDB", {})
print("关联结构条目数:", len(entries))
for pdb_id in list(entries)[:5]:
m = entries[pdb_id].get("mappings", [{}])[0]
print(pdb_id, "覆盖残基",
m.get("unp_start"), "-", m.get("unp_end"),
"链", m.get("chain_id"))
两步串起来就复现了映射链路的前两环:变异位置与结构覆盖都有了,接下来只需判断目标位置是否落在覆盖区间内。区间内可继续取二级结构与相互作用;区间外的就是「无可映射结构」,也是自建流水线必须显式处理的分支。
5.5 现役路径三:ProtVar 作为整体替代
如果要的是一个「输入变异、输出结构映射与功能注释」的成品服务,ProtVar 是 VarSite 之后最贴近的替代。它的论文明确处理四种坐标之间的换算——基因组、编码、蛋白、结构——这正是 VarSite 用 VarMap 解决的那个问题。
#-- ProtVar 的编码区变异查询端点(以案例蛋白的 C83W 为例)
#-- 端点语义: 按染色体位置查该位点的变异与结构映射
curl -s -m 30 "https://www.ebi.ac.uk/ProtVar/api/v1/variant/17:38151750" \
-H "Accept: application/json" \
| python3 -c "import sys,json;d=json.load(sys.stdin);print(json.dumps(d,ensure_ascii=False)[:600])"
这条命令演示「按坐标查」入口。返回的字段结构与 VarSite 不同,但目的一致:把坐标换算到蛋白再映射到结构。使用前应先核对端点是否有效,接口路径可能随版本调整。
5.6 三个资源的分工与选择
| 需求 | VarSite(已退役) | EBI Proteins | PDBe 接口 | ProtVar |
|---|---|---|---|---|
| 变异位置与替换类型 | 有 | 有 | 无 | 有 |
| 结构条目覆盖区间 | 有 | 无 | 有 | 有 |
| 二级结构与相互作用 | 有,同源汇总 | 无 | 有,需自行归纳 | 部分 |
| 埋藏程度 | 有 | 无 | 无,需自算 | 部分 |
| 保守性分数 | 有 | 无 | 无 | 部分 |
| 批量提交 | 有,邮件回 | 单登录号 | 单登录号 | 单变异 |
| 现役可用 | 否 | 是 | 是 | 是 |
| 适合的场景 | 方法与字段参考 | 变异层取数 | 结构层取数 | 端到端替代 |
实践结论是:不要找「一个 VarSite 的平替」,而是按层找——变异层走 EBI Proteins,结构层走 PDBe,端到端走 ProtVar。它留下的最大遗产不是数据,是把这三层串起来的字段设计。
§6 与库内其他基因组条目的关系
6.1 关系图谱
VarSite 在库内的位置要放在基因组与变异一类条目里看。它不是独立数据集,而是一个「交叉层」:上游接变异资源,下游接结构资源。
| 关系类型 | 相关条目类型 | 关系说明 | 数据流向 |
|---|---|---|---|
| 上游供给 | UniProt Humsavar | 提供疾病相关变异与蛋白注释 | 单向流入 VarSite |
| 上游供给 | ClinVar | 提供临床提交变异,分专业与公开两版 | 单向流入 |
| 上游供给 | gnomAD | 提供自然变异作为分母 | 单向流入 |
| 换算依赖 | Ensembl VEP | 基因组坐标到转录本坐标 | 调用,非数据流入 |
| 换算依赖 | BioMart | 跨库标识符对照 | 调用 |
| 结构供给 | PDB | 提供实验结构 | 单向流入 |
| 结构汇总 | PDBsum | 把 PDB 条目汇总成残基级注释 | 中间处理层 |
| 域定义 | Pfam | 提供序列域边界 | 引用 |
| 域定义 | CATH FunFam | 提供结构功能家族归属 | 引用 |
| 平行资源 | HuVarBase | 同类,但只用自身结构 | 互补 |
| 平行资源 | PhyreRisk | 同类,用同源建模补缺 | 互补 |
| 后继资源 | ProtVar | 处理四坐标换算的新一代 | 替代 |
| 结构覆盖补充 | AlphaFold DB | 提供几乎全蛋白组的预测模型 | 补 VarSite 的结构空缺 |
关键是「单向流入」那一列。它不产生变异、不产生结构,只做换算与汇总,所以退役后损失的主要是「汇总」这一步:原始数据都还在上游库里,只是需要自己重新串一遍。
6.2 检索路径
在库内找相关条目有三条路。按变异找:从 ClinVar 或 UniProt 类条目出发,看结构维度是否被覆盖——多数只讲频率与临床意义。按结构找:从 PDB 或 AlphaFold 类条目出发,看变异注释能力——结构类条目通常不讲变异落在哪里。按基因找:从具体疾病基因出发,这类条目同时需要频率与结构语境。
§7 质量评估与局限性
7.0 阅读本节前的一个前置校正
评估 VarSite 最常见的一类误判,是拿「今天的变异池」去衡量「2019 年的快照」。论文的规模数字有明确时点,而 UniProt、ClinVar、gnomAD 都在持续增长。不做校正会得出两个相反的错误结论:低估缺口(以为它覆盖了今天的变异),或高估过时程度(以为方法也一起过时了)。
正确的理解分两层:方法上,映射链路与字段设计至今成立,可作自建流水线的蓝本;数据上,具体条目与规模数字只对应 2019 年 6 月,此后的一切变化都不在其中。方法可借,数字不可引用为现状。
第二类误判是把「判断力」当成「覆盖度」。它的强项是知道该给哪些证据——相互作用、埋藏程度、保守性、疾病倾向——而不是覆盖了多少蛋白。混着谈,会把结构可得性问题误判成数据量问题。
7.1 DAIMS 五维评分
按下表五个维度评估,评分对象是「把它当作一类结构语境注释资源来用」这件事,而非「它今天能否直接取数」。
| 维度 | 评分 | 判断依据 | 主要扣分项 |
|---|---|---|---|
| 可信度(Credibility) | 4 / 5 | 论文发表于同行评审期刊,方法链路逐步可查,阈值显式给出 | 结构来自同源蛋白,跨物种对齐存在错位风险 |
| 可及性(Accessibility) | 1 / 5 | 主入口已退役,无批量下载,无公开 API 文档 | 服务关闭后无法取原结果 |
| 互操作性(Interoperability) | 3 / 5 | 以 UniProt 登录号与 PDB 条目为锚,标识符体系规范 | 输出为页面与图像,非结构化表 |
| 可维护性(Maintainability) | 2 / 5 | 论文一次性发布,未见后续版本说明 | 退役后无继任者承接同一形态 |
| 可持续性(Sustainability) | 2 / 5 | 上游数据仍在增长,方法可复现 | 服务本体未续,依赖上游重构 |
五维分布本身就是结论:可信度与互操作性不差,可及性与可持续性很差。它是「方法论遗产型」资源,不是「持续运营型」资源。
7.3 已知的、可枚举的偏差
| 偏差类型 | 具体表现 | 来源 | 影响方向 | 缓解办法 |
|---|---|---|---|---|
| 结构可得性偏差 | 只有能映射到 PDB 同源结构的蛋白才有注释 | 设计前提 | 结构研究充分的蛋白被过度代表 | 按可映射序列比例分层使用 |
| 物种同源偏差 | 注释借自其他物种的同源蛋白 | 同源映射 | 跨物种残基类型可能不同 | 对照 PDB 该位点的实际残基类型 |
| 异构体偏差 | 只纳入规范异构体 | 明确排除 | 非规范异构体上的变异被遗漏 | 另找全转录本注释工具 |
| 编码区偏差 | 只纳入编码区变异 | 明确排除 | 调控与剪接变异缺失 | 另找调控注释资源 |
| 人群祖源偏差 | 自然变异基线来自 gnomAD 的人群构成 | 上游数据 | 非欧洲祖源的变异可能被误判为罕见 | 用对应人群的频率库交叉核对 |
| 收录标准偏差 | 疾病变异来自 UniProt 与 ClinVar 的既有收录 | 上游数据 | 已被大量研究的基因被过度代表 | 与文献计量交叉看 |
| 时点偏差 | 规模数字截至 2019 年 6 月 | 发布快照 | 今天使用会系统性低估覆盖 | 只引方法不引规模 |
| 编号错位偏差 | PDB 残基编号与 UniProt 不同 | 两套体系差异 | 直接拿 PDB 编号分析会全错 | 先做编号对齐再分析 |
最后一行是操作层面最容易出事的一条。§4.3 的案例里 UniProt 第 83 位在 1rut 里是第 57 位,差二十六位;更极端的情况是同源结构在该位置干脆是另一种氨基酸,连「同一个位置」的前提都不成立。
7.4 外部验证矩阵
VarSite 的关键论断可以被几条独立路径交叉检验。这张表不是「我们核对过」,而是「要验证时应去哪里核对」。
| 论断 | 验证路径 | 可核对的公开来源 | 验证方式 | 结论性质 |
|---|---|---|---|---|
| 变异映射到 PDB 同源结构 | 取同一蛋白的变异位置与结构覆盖区间比对 | EBI Proteins 与 PDBe 接口 | 判断位置是否落在覆盖区间内 | 可机械复核 |
| 同源判定阈值 E 值与 z 分数 | 重跑 FASTA 检索 | 本地 FASTA 实现 | 用同一阈值复现同源集 | 可复现 |
| Cys83 配位锌 | 查看对应 PDB 条目的金属配位 | PDB 与 PDBe 结构注释 | 检查配位距离与几何 | 可目视复核 |
| CADD 分数口径 | 查 CADD 官方预计算 | CADD 官方下载 | 用同一替换类型对照分数 | 可对照 |
| 保守性由 ScoreCons 计算 | 查 ScoreCons 方法说明 | 方法学原文 | 按方法描述复现分数 | 需重算 |
| 疾病倾向分数定义 | 论文正文的比值定义 | 论文方法段 | 按定义重算比值 | 需原始计数 |
| 规模数字时点 | 论文的日期标注 | 论文正文 | 核对「2019 年 6 月」字样 | 直接引用 |
| 服务退役状态 | 访问原入口 | Thornton 组站点 | 看返回的退役提示 | 可现场确认 |
第三行是唯一不需要跑代码就能验的论断:拿到 3mmk 的人都能看到那个锌被四个侧链围住,其中一个正是对应第 83 位的半胱氨酸。这种可目视复核,是结构证据相对分数证据的优势。
7.5 它为何能持续:因为它是结构注释这一层最早把「变异」和「残基职能」接起来的一批工作
服务本体没有持续,但思路持续下来了。它解决的是一个结构性空白:序列注释工具很多,结构注释工具也很多,但把两者在残基级别对接、并用同源结构撑开覆盖的工具,在它出现时是少的。这个空白不因站点关闭而消失。
这条思路后来被不同形态继承:Pfam 与 CATH 双轨聚合、把埋藏与相互作用写进变异注释、以同源汇总提高稳健性,在后续工具里反复出现。准确地说,「能持续」的是它提出的问题与答案框架,而不是它自己的页面。
§8 生态位与历史
8.1 历史沿革
VarSite 的时间线不复杂。2019 年 7 月投稿,10 月修订接收,2020 年 1 月正式发表,而论文的规模数字标注时点是 2019 年 6 月——描述的是投出去前一个月的状态。其余三个节点值得单独记:
| 节点 | 发生了什么 | 对使用者的含义 |
|---|---|---|
| 2020-01 | 论文发表,服务上线 | 入口是 Thornton 组数据库路径,不是 PDBe |
| 2020 之后 | AlphaFold DB 逐步铺开 | 结构可得性不再是唯一紧约束 |
| 2024 | ProtVar 出现,处理四坐标换算 | 端到端替代成型 |
| 未注明 | 服务退役,只返回提示 | 无公告、无日期、无归档说明 |
入口这一行需要强调:很多二手资料把 VarSite 写成 PDBe 的子项目,但论文原文给出的地址是组内数据库,PDBe 下的对应路径在核实中返回错误而非服务页面。退役一行则说明服务结束没有对应的公告可查,官网只返回退役提示,不给日期与原因;本文对此不做推断,只记录状态。
8.2 它在结构生物信息学谱系里的位置
把它放进桑顿组的工具谱系,位置就清楚了。
| 工具 | 与 VarSite 的关系 | 主要解决的问题 | 时间位置 |
|---|---|---|---|
| PDBsum | 结构注释的汇总来源 | 把 PDB 条目压缩成残基级摘要 | 更早,是 VarSite 的底座 |
| VarMap | 坐标换算组件 | 基因组坐标到蛋白与结构坐标 | 同一时期,被 VarSite 调用 |
| VarSite | 本体 | 把变异落到结构语境 | 2020 |
| PhyreRisk | 平行路线 | 用同源建模补结构空缺 | 相近时期 |
| HuVarBase | 平行路线 | 只用自身结构做三维视图 | 相近时期 |
| ProtVar | 后继形态 | 四坐标换算加功能注释 | 2024 |
VarSite 站在 PDBsum 这个底座上,用 VarMap 做换算,把两条已有能力拼成新用途。它是组装式创新——组件都还在,缺的只是那段组装逻辑。
8.3 与 AlphaFold 时代的关系
AlphaFold DB 的出现改变了 VarSite 的处境,却没有让它的核心问题消失。改变的部分是结构可得性:过去一个蛋白若在 PDB 里没有可对齐的同源结构,就无从注释;现在几乎任何人类蛋白都有预测模型,「覆盖不到」这条边界在理论上被大幅后移。没有改变的是结构注释的可靠性:预测模型给坐标,不给实验观察到的配位、结合与构象变化,同源汇总得来的稳健性证据仍是预测模型给不了的,这也是 ProtVar 把两者都纳进来而非简单替换的原因。
| 能力 | 实验结构(VarSite 的路线) | 预测模型(AlphaFold 的路线) | 两者如何互补 |
|---|---|---|---|
| 覆盖率 | 仅 PDB 有可对齐结构的蛋白 | 几乎全部人类蛋白 | 预测模型补覆盖缺口 |
| 坐标来源 | 实验解析,附分辨率 | 预测,附逐残基置信度 | 高置信区可互证 |
| 金属配位 | 直接观察配位几何 | 不保证金属存在 | 配位问题必须回实验结构 |
| 配体结合 | 直接观察口袋与接触 | 通常为空载 | 口袋判定需实验证据 |
| 构象变化 | 可有多构象条目 | 单一模型 | 构象问题需实验结构 |
| 跨物种同源 | 天然具备 | 按物种分别预测 | 同源比较以实验结构为主 |
| 适合的分析 | 相互作用、配位、界面 | 折叠域边界、整体形态 | 分工使用,勿混层 |
实践含义是:要覆盖走预测模型,要实验证据走实验结构,两者都有缺口时明确标注证据层级。§4.3 的案例里那个锌配位就是典型的「只有实验结构才说得清」。
§9 使用指引
9.1 三种角色的路径
临床遗传解读人员。 先确认变异位置与替换(含转录本与组装版本),再判断该蛋白在 PDB 有没有可对齐结构,然后取该位置的相互作用与埋藏程度,最后把结构证据与保守性、人群频率、表型一起权衡。
结构生物信息学研究者。 先读方法段,把 VarMap 的三步换算、FASTA 的同源阈值、ScoreCons 的保守性算法拆清楚;再用现役接口把三层数据重新组装;最后对照论文案例,检查你的链路在同一位点上是否给出一致结论。
变异注释流水线工程师。 按 §2.2 的字段字典把五组字段落地;变异层与结构层分开接两个接口;重点处理「无结构覆盖」这个分支——它在真实数据里占比不低,也最需要向调用方说明清楚。
9.2 一条最短的可用流程
把上面三种角色共用的最小步骤写成一段可运行的代码:给一个 UniProt 登录号与一个残基位置,判断该位置是否有结构覆盖,若有则输出覆盖它的条目。
#-- 最小可用流程: 给定登录号与位置,判断结构覆盖情况
import requests
ACC = "O60663" #-- 案例蛋白
POS = 83 #-- UniProt 规范异构体上的位置
#-- 1) 取变异注释,确认该位置确有变异记录
rv = requests.get(f"https://www.ebi.ac.uk/proteins/api/variation/{ACC}",
headers={"Accept": "application/json"}, timeout=120)
rv.raise_for_status()
hits = [f for f in rv.json()["features"] if f["begin"] == POS]
print(f"位置 {POS} 的变异条数:", len(hits))
for f in hits:
print(" ", f["wildType"], "->", f.get("alternativeSequence"),
f.get("consequenceType"))
#-- 2) 取结构覆盖,判断该位置落在哪些条目里
rm = requests.get(f"https://www.ebi.ac.uk/pdbe/api/mappings/uniprot/{ACC}", timeout=60)
rm.raise_for_status()
entries = rm.json().get(ACC, {}).get("PDB", {})
covered = []
for pdb_id, v in entries.items():
for m in v.get("mappings", []):
lo, hi = m.get("unp_start"), m.get("unp_end")
if lo is not None and hi is not None and lo <= POS <= hi:
covered.append((pdb_id, m.get("chain_id"), lo, hi))
#-- 3) 输出结论
if not covered:
print("该位置无结构覆盖: 结构语境缺失,需转向预测模型")
else:
print(f"该位置被 {len(covered)} 个条目覆盖:")
for c in covered[:5]:
print(" PDB", c[0], "链", c[1], "覆盖", c[2], "-", c[3])
第三段是重点:无覆盖时明确输出「结构语境缺失」而不静默跳过。在流水线里,静默跳过最危险——调用方会以为「没输出就是没问题」,实际是没有证据。
同一流程若跑一批蛋白,还需要把结果落成表再判断,否则「查过但没有覆盖」与「根本没查」会混在一起。下面这段在上一步基础上做批量汇总,输入是登录号与位置对照表,输出按覆盖状态分三类的统计。
#-- 批量汇总: 按覆盖状态分组,区分「有覆盖」「无覆盖」「查询失败」
import csv
import requests
rows = list(csv.DictReader(open("batch.tsv"), delimiter="\t")) #-- 列: acc, pos
summary = {"covered": 0, "no_structure": 0, "error": 0}
detail = []
for r in rows:
acc, pos = r["acc"], int(r["pos"])
try:
rm = requests.get(
f"https://www.ebi.ac.uk/pdbe/api/mappings/uniprot/{acc}", timeout=60)
rm.raise_for_status()
except Exception as exc:
summary["error"] += 1
detail.append((acc, pos, "error", str(exc)[:40]))
continue
entries = rm.json().get(acc, {}).get("PDB", {})
hit = None
for pdb_id, v in entries.items():
for m in v.get("mappings", []):
lo, hi = m.get("unp_start"), m.get("unp_end")
if lo is not None and hi is not None and lo <= pos <= hi:
hit = pdb_id
break
if hit:
break
if hit:
summary["covered"] += 1
detail.append((acc, pos, "covered", hit))
else:
summary["no_structure"] += 1
detail.append((acc, pos, "no_structure", ""))
print(summary)
for d in detail[:10]:
print(d)
error 这一档是刻意单列的。真实数据里最常见的错误不是「无覆盖」,而是网络失败或登录号失效被当成了「无覆盖」——这两者在下游决策上相反:前者该重试,后者该换资源,混为一谈会让整批结论失真。
9.3 引用方式
引用 VarSite 应引论文而非站点,因为站点已退役,引用它会让后来者无从核对。
原始论文:Laskowski RA, Stephenson JD, Sillitoe I, Orengo CA, Thornton JM. VarSite: Disease variants and protein structure. Protein Science. 2020;29(1):111-119. DOI: 10.1002/pro.3746. PMID: 31606900.
若引用了本文的字段字典或映射链路描述,还应同时引用 VarMap 与 PDBsum 的方法学原文,因为这三者的边界在论文里是分开交代的。若引用的是服务退役后的替代取数路径,应引 EBI Proteins 与 PDBe 各自的接口文档版本,并注明取数日期——接口路径会随版本变化。
§10 AI 使用声明
| 项目 | 说明 |
|---|---|
| 本篇的写作方式 | 由 AI 辅助撰写,人工设定章节骨架、事实边界与编辑纪律 |
| 事实核验范围 | 官方入口状态、论文摘要与全文方法段、两个现役接口的可用性 |
| 未核验内容 | 服务的退役日期与原因、退役后的数据是否另有归档、四十四万条的内部构成 |
| 数字口径 | 规模数字一律标注论文的时点(2019 年 6 月),不表述为现状 |
| 代码状态 | §5 与 §9 的代码按公开接口编写,接口路径可能随版本调整 |
| 引用建议 | 以论文 DOI 为准,不以站点 URL 为准 |
| 内容边界 | 不含临床建议,不含个体层面的判读结论 |
| 更新责任 | 若接口路径变更,应优先修订 §5.3 至 §5.5 的端点 |
§11 一页决策树
把全文的判断顺序压缩成一张表,遇到具体问题时按行对照即可。这张表不替代前述各章的细节,只负责把「先问什么、再问什么」的次序固定下来。
| 顺序 | 你要先回答的问题 | 答「是」怎么办 | 答「否」怎么办 | 依据 |
|---|---|---|---|---|
| 1 | 变异是否落在编码区 | 继续第 2 步 | 换调控或剪接注释资源 | §1.6 第一条 |
| 2 | 该蛋白在 PDB 有没有可对齐结构 | 继续第 3 步 | 转预测模型或同源建模,标注证据缺失 | §3.1 |
| 3 | 目标位置是否落在条目覆盖区间内 | 继续第 4 步 | 记为空缺,不可当良性 | §5.4 |
| 4 | PDB 残基编号与 UniProt 是否已对齐 | 继续第 5 步 | 先做编号映射,否则结论作废 | §2.3 |
| 5 | 该残基是否参与金属或二硫键 | 按硬约束处理,优先看配位几何 | 转第 6 步看普通语境 | §4.2 |
| 6 | 是否位于蛋白-蛋白或核酸界面 | 按界面或识别特异性解读 | 按折叠稳定性解读 | §4.2 |
| 7 | 保守性与 CADD 是否同向 | 证据叠合,可信度提高 | 单独核查,不作合并结论 | §4.1 |
| 8 | 同位置是否有自然变异记录 | 查该变异的人群频率与祖源 | 高度保守位置的自然变异极少,值得复核 | §4.6 |
| 9 | 结论要进报告还是只作内部参考 | 只用证据片段,不下判定 | 可作排序与优先级线索 | §1.5 |
这张表的第 2 步和第 4 步是最容易被跳过、也最致命的两个。跳过第 2 步,会把「没有结构所以没有注释」误读成「结构上没问题」;跳过第 4 步,会在错误的残基上看半天。§4.3 的案例同时演示了这两步的必要性。
常见误读(避坑清单)
| 说法 | 实际 | 证据 |
|---|---|---|
| VarSite 是一个可下载的变异注释数据集 | 它是网页服务器,输出页面与图像,无批量下载 | 论文数据可得性声明只写「在网址免费可用」 |
| VarSite 是 PDBe 的子项目 | 论文给出的入口是 Thornton 组数据库路径,PDBe 下未见对应服务页 | 论文正文与数据可得性段 |
| VarSite 现在还能查 | 主入口返回服务退役提示 | 访问原 URL 的返回内容 |
| 它的变异覆盖全部转录本 | 只纳入 UniProt 规范异构体 | 论文明确写「目前只纳入规范异构体」 |
| 它覆盖全基因组变异 | 只纳入编码区变异 | 论文明确写只有编码区能被映射 |
| 它覆盖全部人类蛋白 | 只覆盖能映射到 PDB 同源结构的蛋白 | 结构来源限定为 PDB |
| 结构注释来自患者蛋白自身的结构 | 主要来自同源蛋白的实验结构 | 论文强调同源借注释以提高覆盖 |
| PDB 残基编号可以直接当 UniProt 位置用 | 两套编号常不同,案例中是 83 与 57 之差 | 论文在案例里专门提醒 |
| 疾病倾向分数等于致病概率 | 它是某类替换在疾病与自然数据中的比值 | 论文给出的定义与例子 |
| 四十四万条是今天的规模 | 那是 2019 年 6 月的快照 | 论文正文的时点标注 |
FAQ
Q1:VarSite 现在还能访问吗?
不能。官方入口返回「服务已退役」提示,交互查询与三维视图都不再提供。论文的方法与字段语义仍然可读,但取数需要转向 EBI Proteins、PDBe 与 ProtVar。
Q2:VarSite 覆盖多少变异?
论文称截至 2019 年 6 月超过四十四万条。其中 ClinVar 专业版超过二十五万条、公开版超过十七万条,两者是包含关系,不应相加。自然变异侧来自 gnomAD,池子超过一千五百万条。
Q3:它能替我做致病性判定吗?
不能。它给的是结构语境的证据片段,说明某个替换是否落在核心、是否破坏配位或二硫键,但不输出致病结论。判定仍需按 ACMG 的证据组合流程来做。
Q4:为什么有的基因在 VarSite 里完全没有结构注释?
因为映射的终点是 PDB 实验结构。一个蛋白若既没有自身结构、也找不到可对齐的同源结构,结构注释就是空的。§4.3 的案例属于反面:它在 PDB 里有多个可用条目。
Q5:它和 CADD 是什么关系?
互补而非替代。CADD 回答「这个替换在基因组尺度上有多异常」,VarSite 回答「这个位置在三维结构里做什么」。两类信息合起来看,才有分辨力。
Q6:它和 AlphaFold DB 是什么关系?
互补。AlphaFold 给预测模型,覆盖广但无实验细节;VarSite 给实验结构上的相互作用与配位信息,覆盖窄但可靠。两者都有缺口时应标注证据层级。
Q7:同一个位置有多条变异时怎么读?
先看位置,再看变异。同一个残基位置的多条变异共享同一套结构语境,差别在于替换后的残基性质。§4.3 的案例里第 83 位有四条疾病变异,正是这个读法的练习场。
Q8:PDB 残基编号和 UniProt 编号不一样怎么办?
这是常态,必须显式对齐。VarSite 在页面里给出两套编号的对应关系,自建流水线时应先做编号映射再分析,否则结论全错。
Q9:它的疾病倾向分数能当致病概率用吗?
不能。它是某类氨基酸替换在疾病数据与自然数据中的频次比值,是群体层面的相对富集,不能落到单个变异上。它的正确用法是排序时的先验分量。
Q10:Pfam 域和 CATH 功能家族有什么区别,为什么要两套都用?
Pfam 从序列相似性定义域,回答「这个序列域在哪些蛋白里出现」;CATH FunFam 从三维结构定义,回答「这些蛋白是不是同一类折叠」。前者看序列热点,后者看结构热点,两者不重合。
Q11:服务退役了,它的方法还有用吗?
有用。它的字段设计与映射链路至今可作蓝本,尤其是同源汇总提高稳健性、把埋藏程度与二硫键写进注释、Pfam 与 CATH 双轨聚合这三处。缺的是那一段组装逻辑的现成实现。
Q12:如果只想做一件事,应该做什么?
先确认目标蛋白在 PDB 里有没有可对齐的结构。有,就走结构语境这条路;没有,就诚实标注证据缺失,转向预测模型或同源建模,而不是拿序列分数冒充结构结论。
术语表
| 术语 | 英文 | 在本篇中的含义 |
|---|---|---|
| 错义变异 | missense variant | 导致一个氨基酸被另一个替换的编码区变异 |
| 规范异构体 | canonical isoform | UniProt 为每个蛋白指定的代表性序列 |
| 同源结构 | homologous structure | 来自其他蛋白(常为其他物种)但可序列对齐的结构 |
| 同源判定阈值 | homology threshold | 论文采用的 E 值低于 10 的负三次方、z 分数高于 4 |
| 配位 | coordination | 金属离子被若干侧链按特定几何固定 |
| 锌指 | zinc finger | 由锌离子配位稳定的小型折叠模体 |
| LIM 域 | LIM domain | 由两个相邻锌指加疏水接头构成的结构域 |
| 埋藏程度 | burial | 残基在结构中埋于内部还是暴露于溶剂 |
| 溶剂可及性 | solvent accessibility | 残基侧链被溶剂接触的程度 |
| 二级结构 | secondary structure | 螺旋、折叠、转角与无规卷曲的归属 |
| 二硫键 | disulphide bond | 两个半胱氨酸之间形成的共价键 |
| 功能家族 | FunFam | CATH 中按功能细分的结构家族 |
| 序列标识 | sequence logo | 以某位置为中心的保守性可视化 |
| 保护分数 | scorecons | 论文采用的保守性计算方法 |
| 疾病倾向 | disease propensity | 某类替换在疾病与自然数据中的频次比值 |
| 归一化 CADD | normalized CADD | 把原始 CADD 分数映射到统一区间 |
| 坐标换算 | coordinate mapping | 基因组到转录本到蛋白到结构的逐级转换 |
| 参考基因组版本 | assembly | 决定同一坐标指向哪个碱基的组装版本 |
| 可映射比例 | coverage | 蛋白有多大比例的序列能落到结构上 |
| 三维视图 | 3D viewer | 论文采用的 3dmol.js 交互视图 |
| 图像化报告 | image-based report | 以示意图而非数据表为主的输出形态 |
| 网页服务器 | web server | 一类只提供在线查询、不提供批量下载的服务形态 |
| 结构语境 | structural context | 一个残基在三维结构中的职能与处境 |
| 证据层级 | evidence tier | 证据来自实验结构还是预测模型 |
附录 A:核心数字核对表
| 项 | 值 | 来源 | 来源层级 |
|---|---|---|---|
| 变异总量 | 超过四十四万条(2019 年 6 月) | 论文正文 | 论文摘要与正文 |
| ClinVar 专业版 | 超过二十五万条 | 论文正文 | 论文正文 |
| ClinVar 公开版 | 超过十七万条 | 论文正文 | 论文正文 |
| gnomAD 池子 | 超过一千五百万条 | 论文正文 | 论文正文 |
| gnomAD 个体数 | 超过十四万 | 论文正文 | 论文正文 |
| 案例蛋白长度 | 402 个残基 | 论文图注 | 论文正文 |
| 案例 LIM 域范围 | 约 52 至 114 位 | 论文图注 | 论文正文 |
| 案例位置变异条数 | 4 条 | 论文正文 | 论文正文 |
| 案例位置 PDB 编号 | 57(对应 UniProt 83) | 论文正文 | 论文正文 |
| 同源判定 E 值 | 低于 10 的负三次方 | 论文正文 | 论文正文 |
| 同源判定 z 分数 | 高于 4 | 论文正文 | 论文正文 |
| CADD 特征数 | 六十余项 | 论文正文 | 论文正文 |
| 案例 CADD 归一分 | 28 | 论文正文 | 论文正文 |
| 批量查询阈值 | 超过二十条转后台 | 论文正文 | 论文正文 |
| 论文卷期页 | 29 卷 1 期 111 至 119 页 | 期刊记录 | 论文元数据 |
| 服务状态 | 已退役 | 官方入口返回内容 | 官方页面 |
附录 B:数字的来源分层
第一层,官方页面。 这一层只有一项:服务退役状态。这一项通过访问论文给出的原入口获得,返回内容为一句退役提示。除此之外,官方入口不提供任何规模数字或结构说明,因此本篇的其余数字都不来自官方页面。
第二层,论文摘要与正文。 本篇的绝大多数数字属于这一层:变异总量、ClinVar 两个版本的规模、gnomAD 的池子与个体数、案例蛋白与位置细节、同源判定阈值、CADD 特征数、批量查询阈值。这些数字的可靠性受限于两点:论文的时点是 2019 年 6 月;论文的规模描述多为「超过」形式,不给精确值,因此不能用于精确比较。
第三层,未核实。 以下三项本篇明确标注未核实:服务的退役日期与原因;退役后是否有数据归档或继任站点;四十四万条总数与三个分项之间的差额构成。论文未说明差额,官方页面也不提供,故本文只照录各口径,不做换算。
附录 C:完整参考文献
- Laskowski RA, Stephenson JD, Sillitoe I, Orengo CA, Thornton JM. VarSite: Disease variants and protein structure. Protein Science. 2020;29(1):111-119. doi:10.1002/pro.3746. PMID:31606900. PMCID:PMC6933866.
- Laskowski RA, Stephenson JD, Sillitoe I, Orengo CA, Thornton JM. VarMap: A web tool for mapping genomic coordinates to protein sequence and structure and retrieving protein structural annotations. (作为坐标换算组件被 VarSite 调用,方法学细节以其原文为准)
- Laskowski RA. PDBsum: Structural summaries of PDB entries. Protein Science. (作为结构注释的汇总来源被 VarSite 使用)
- The UniProt Consortium. UniProt: the universal protein knowledgebase. Nucleic Acids Research. (Humsavar 疾病变异注释的上游)
- Landrum MJ, et al. ClinVar: improving access to variant interpretations and supporting evidence. Nucleic Acids Research. (临床变异提交的上游)
- Karczewski KJ, et al. The mutational constraint spectrum quantified from variation in 141,456 humans. Nature. 2020. (gnomAD 自然变异的上游)
- Rentzsch P, Witten D, Cooper GM, Shendure J, Kircher M. CADD: predicting the deleteriousness of variants throughout the human genome. Nucleic Acids Research. (CADD 分数来源)
- El-Gebali S, et al. The Pfam protein families database. Nucleic Acids Research. (序列域定义来源)
- Sillitoe I, et al. CATH: expanding the horizons of structure-based functional annotations for genome sequences. Nucleic Acids Research. (结构功能家族定义来源)
- Berman HM, et al. The Protein Data Bank. Nucleic Acids Research. (实验结构来源)
- Jumper J, et al. Highly accurate protein structure prediction with AlphaFold. Nature. 2021. (预测结构补充路径的背景)
- Gough J, et al. PhyreRisk: heterogeneous multi-omic data with structural context. (同源建模补缺的平行路线)
- Portelli S, et al. ProtVar: mapping and contextualizing human missense variation. Nucleic Acids Research. 2024. doi:10.1093/nar/gkae413. (四坐标换算与变异注释的后继形态)
附录 D:VAR 任务代码
这一节把 §5 与 §9 的代码串成一个可以直接运行的脚本,任务是:给定一个 UniProt 登录号与一个残基位置,输出该位置的变异记录、结构覆盖情况、以及需要人工核对的提醒。
#-- VAR-1: 一次跑完变异层与结构层的对接检查
python3 - "$@" <<'PY'
import json
import requests
ACC = "O60663"
POS = 83
variation_url = f"https://www.ebi.ac.uk/proteins/api/variation/{ACC}"
mapping_url = f"https://www.ebi.ac.uk/pdbe/api/mappings/uniprot/{ACC}"
out = {"accession": ACC, "position": POS, "variants": [], "coverage": []}
rv = requests.get(variation_url, headers={"Accept": "application/json"}, timeout=120)
rv.raise_for_status()
for f in rv.json().get("features", []):
if f.get("begin") == POS:
out["variants"].append({
"wt": f.get("wildType"),
"mut": f.get("alternativeSequence"),
"consequence": f.get("consequenceType"),
"evidences": len(f.get("evidences", [])),
})
rm = requests.get(mapping_url, timeout=60)
rm.raise_for_status()
for pdb_id, v in rm.json().get(ACC, {}).get("PDB", {}).items():
for m in v.get("mappings", []):
lo, hi = m.get("unp_start"), m.get("unp_end")
if lo is not None and hi is not None and lo <= POS <= hi:
out["coverage"].append({
"pdb_id": pdb_id,
"chain": m.get("chain_id"),
"unp_start": lo,
"unp_end": hi,
})
if not out["coverage"]:
out["warning"] = "该位置无结构覆盖,结构语境缺失"
else:
out["warning"] = "分析前须核对 PDB 残基编号与 UniProt 编号的对应关系"
print(json.dumps(out, ensure_ascii=False, indent=2))
PY
这段脚本对应 VarSite 映射链路的前两环,输出了一个可核对的中间产物。它的最后一行提醒是刻意设计的:无论有没有覆盖,编号对齐这件事都必须做,因为这是结构类分析里最容易出错、也最不容易被自动检查出来的一步。
附录 F:三种角色的动作对照
这一节把 §9.1 的三种角色压缩成一张可查阅的动作表,便于在具体任务里快速定位「我现在该做哪一步」。
| 角色 | 起点 | 必须先确认的一件事 | 主要依赖 | 可接受的产出 | 常见返工点 |
|---|---|---|---|---|---|
| 临床遗传解读 | 一条错义变异 | 转录本与参考基因组版本 | 变异位置、结构覆盖、相互作用 | 结构语境证据片段 | 拿 PDB 编号当 UniProt 位置 |
| 结构生物信息学 | 要复现映射链路 | 同源判定阈值与比对口径 | VarMap 三步换算、PDBe 结构覆盖 | 可复现的位点级结论 | 忽略插入缺失导致的错位 |
| 流水线工程 | 要加一路结构证据 | 无覆盖分支怎么表达 | 两个接口、字段字典 | 带状态标记的表 | 把查询失败当成无覆盖 |
| 三者共同 | 任何蛋白 | 该蛋白在 PDB 有没有可对齐结构 | 结构可得性 | 明确的「有」或「没有」 | 用序列分数冒充结构结论 |
这张表的第三列是共同门槛。三种角色在第三步之后分岔,但第三步本身谁都不能跳过:结构可得性决定了后面有没有结构语境可谈,而不是「能谈多少」的问题。
附录 E:如果只记五件事
第一件,它的价值在结构视角,不在数据量。 VarSite 把错义变异从「一句话」变成「一组可读的结构语境」。方法是借同源结构、汇总多结构证据,这个思路比它自己的服务寿命更长。
第二件,它的规模数字有明确时点。 论文称截至 2019 年 6 月超过四十四万条。这个数字用于理解它的位置可以,用于描述今天不行。
第三件,它的边界是结构可得性。 只覆盖能映射到 PDB 同源结构的蛋白,只覆盖规范异构体,只覆盖编码区。三条边界叠起来,决定了它不是一个全基因组资源。
第四件,它的主入口已经关闭。 官网返回退役提示。要取同类证据,变异层走 EBI Proteins,结构层走 PDBe,端到端走 ProtVar。
第五件,编号对齐是操作层面的生死线。 UniProt 第 83 位在 PDB 里是第 57 位。任何跳过这一步的分析,结论都不可信。
编辑说明
本篇为百科式词条,写作时遵守数据集的「Wikipedia 语法」:先讲清它要解决的麻烦,再讲构成与规格,再讲怎么取,最后讲质量与边界。
事实核验的时间窗口内,共核实三件事:论文的标题、作者、卷期页与 DOI;论文摘要与全文方法段的规模数字与案例细节;论文给出的原入口当前返回的退役提示。核验未覆盖的包括服务的退役日期与原因、退役后是否有归档、以及四十四万条总数与分项的差额构成——这三项在正文对应位置均已注明。
本篇对「VarSite 与 PDBe 的关系」这一常见说法做了更正:论文给出的入口是 Thornton 组的数据库路径,核实中 PDBe 下的对应路径返回错误而非服务页面,因此正文不以 PDBe 子项目描述它。
代码块中的接口路径按公开文档编写,未附带鉴权示例,因为涉及的接口均为公开只读。版本变更时,端点可能调整,使用前应先做一次连通性检查。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- eggnog — 共享标签:基因组学与多组学 / 变异与注释 / 蛋白质组学
- vdjdb — 共享标签:基因组学与多组学 / 变异与注释 / 蛋白质组学
- imgt — 共享标签:基因组学与多组学 / 变异与注释 / 蛋白质组学
- dbcan-hgm — 共享标签:基因组学与多组学 / 变异与注释 / 蛋白质组学
- jpostdb — 共享标签:基因组学与多组学 / 变异与注释 / 蛋白质组学
- proteingym — 共享标签:基因组学与多组学 / 变异与注释 / 蛋白质组学
- pfam — 共享标签:基因组学与多组学 / 变异与注释 / 蛋白质组学
- interpro — 共享标签:基因组学与多组学 / 变异与注释 / 蛋白质组学
- cath — 共享标签:基因组学与多组学 / 变异与注释 / 蛋白质组学
- igvf-catalog — 共享标签:基因组学与多组学 / 变异与注释
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

