信息速览
JoGo 1.0 是日本九州大学等机构联合发布的人类单倍型数据库,2026 年 1 月随《核酸研究》数据库专刊以 Breakthrough 文章身份见刊,DOI 为 10.1093/nar/gkaf1232。它用 258 个全球采样的长读长基因组,为一万九千余个 MANE 标准蛋白编码基因重建了单倍型分辨的局部组装,并按氨基酸、编码、转录本、基因体四个层次,给每一条不同的序列发一个永久编号,编号从 1 开始、越小表示全球越常见。这套编号的灵感来自 HLA 的等位基因命名。
它真正要说清的问题,是同一段 DNA 在不同参考版本下被读成两个答案。线性参考把高度多态的区段压成一条人为的嵌合序列,同一个人对着 GRCh38 和对着 CHM13v2 算出来的基因型可以不一样;泛基因组图保留了变异结构,却把「这是哪一条」变成了「这是图里的哪段路径」,而路径编号换一张图就失效。JoGo 选了第三条路:不发图,发名字——把两个参考版本和所有样本序列放进同一个频次排序,让 a1 在 GRCh38 和 CHM13v2 上指的是同一条序列。
这里必须先纠正一个极易发生的前提错位:JoGo 不是图泛基因组,它没有 GFA 文件、没有节点、没有边,也没有任何与 vg、odgi、PanGenie 对接的接口。它提供的是一本字典加一堆预比对好的 BAM。理解了这一点,后面所有的能力判断和边界判断都会跟着改变。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 中文名 | JoGo 1.0(联合开放基因组与组学平台) |
| 英文全称 | Joint Open Genome and Omics Platform 1.0 |
| 发布 | 2026 年 1 月,《核酸研究》第 54 卷 D1 期,D1159–D1173 |
| DOI | 10.1093/nar/gkaf1232 |
| 主研机构 | 九州大学医学研究院高深度组学研究中心 |
| 数据形态 | 单倍型编号字典 + 预比对 BAM 轨道 |
| 基因组数 | 258 例(本次测序 108 例) |
| 人群构成 | 东亚 130、非洲 50、美洲 44、南亚 25、欧洲 9 |
| 基因覆盖 | 一万九千余个 MANE v1.2 蛋白编码基因 |
| 命名层次 | 四级:A 氨基酸 / C 编码 / T 转录本 / G 基因体 |
| 单倍型总量 | 四百六十余万条(四级合计) |
| 参考版本 | GRCh38 与 CHM13v2 并入同一排序 |
| 外部注释 | ClinVar、GWAS Catalog、GTEx、灵长类 T2T |
| 表达关联 | 1,280 份 HapMap 淋巴母细胞系 RNA-seq |
| 访问方式 | 免登录网页 + 本机 IGV 加载 |
| 许可 | 库与标识符 ODbL 1.0;门户文图 CC BY-SA 4.0 |
§1 它要解决的具体麻烦
1.1 编号不稳定,比序列不准更麻烦
基因组学里有一类错误不容易被当成错误:单个变异的位置和碱基完全正确,解读却因为「挂在哪条参考上」而改变。参考序列是一条嵌合线,它把不同个体的片段缝在一起,缝得越刻意,越偏离任何真实个体。在高度多态区域,这种偏离不是噪声而是系统偏差。同一个样本,用 GRCh38 打点得到一套结果,换成 CHM13v2 打点得到另一套,两次都对,两次不一样。
泛基因组原本是解药。把一群人的序列组织成图,每个变异成为一个分叉,任何个体都是图上的一条路径。问题在于图没有户籍制度:同一个分叉,在不同项目构建的图里编号不同;图更新一版,旧路径号作废;跨研究想把两份结果并起来,先得做一次图对齐,而对齐本身又是一门手艺。使用者拿到一张结构正确的图,却拿不到一个可以写进论文、五年后还能查回来的名字。
JoGo 的赌注是:与其给结构发编号,不如给序列发编号。把每条观察到的序列在某一层级上聚成一类,按全球频次排序,第 1 名就叫 1 号。这个做法丢掉一部分结构关系,换来一个稳定的、可被引用的、可以跨参考版本对齐的字符串。用一句话概括:它想让「ALDH2:a1c1t1g1」这串东西,像 HLA 的星号命名一样,成为写进报告不会被质疑的写法。
这个诉求有多大价值,取决于一个前提:编号必须真的稳定。而它按频次排,频次依赖样本池,这是整个设计的软肋,§4.4 的案例会用具体基因说明它在真实数据上的样子。
1.2 三条常见的错误期待
第一条期待是「这是一份可以直接 align 的参考」。多数人听到「单倍型参考」四个字,第一反应是找一个 FASTA,把测序读段比对上去。JoGo 不提供这样的 FASTA,它给的是每个基因一份 BAM,BAM 里每一条「读」是一条完整的单倍型序列,附带一堆自定义标签。这份文件是给 IGV 看的,不是给比对器看的。
第二条期待是「它会让 HLA 分型变准」。这个期待最自然也最容易落空。JoGo 的论文确实从 HLA 讲起,也确实反复拿 IPD-IMGT/HLA 做对照,但它做的是把 HLA 的命名哲学推广到全基因组,不是去做 HLA 分型。HLA 分型的标准答案仍然在 IPD-IMGT/HLA 里,临床报告的格式仍然是星号数字,移植配型的判定标准也不由 JoGo 提供。
第三条期待是「跨参考比较从此免费」。JoGo 确实把 GRCh38 和 CHM13v2 放进了同一个排序,但它做的是「给两个参考各自的那条序列也编号」,而不是「把任意坐标自动换算」。你想比较的如果是一个自己算出来的变异集合,仍然要自己把它归到某个层级编号上,而这项归类能力在发布时还写在「正在开发」里。
1.3 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 查某个基因有哪些常见单倍型 | 按频次排序的完整编号表,含各层级 | 够,这是设计目标 |
| 判断某条序列在全球常见还是稀有 | 编号数值本身即排名,附人群频次 | 够,且比查图快 |
| 在 GRCh38 与 CHM13v2 之间比较同一基因 | 两个参考都并入同一排序,可直接对照 | 够,但只到基因层级 |
| 拿到 FASTA 做常规比对 | 不提供,只提供预比对 BAM | 不够,需自行转换 |
| 用 vg / odgi 做图结构分析 | 无 GFA、无节点边 | 不够,方向不兼容 |
| 直接从短读长推断 ACTG 编号 | 发布时未提供 | 不够,功能在规划中 |
| 替代 HLA 分型报告 | 明确不承担该职能 | 不够,应继续用 IPD-IMGT/HLA |
| 找某个临床变异的注释 | ClinVar 映射到编号 | 够,但注释随 ClinVar 更新 |
| 做单倍型与表达的关联 | 1,280 份淋巴母细胞系 RNA-seq 的 QTL | 够,限于该细胞系 |
| 涉密样本的本地分析 | 本机 IGV 加载,无需上传 | 够,前提是有 IGV |
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 手上有一批变异,要判断哪条在东亚人群里其实很常见 | 用编号大小快速区分常见与稀有,不必自己算频率 | 先按基因把变异归到 A 或 C 级,再查编号 |
| 换参考版本后,旧结果和新结果的基因型对不上 | 同一编号在两个参考上指向同一条序列,差异立刻显形 | 把两版结果分别映射到编号,比较编号而不是坐标 |
| 做 HLA 相关课题,被审稿问「你的参考是哪一版」 | 可以把版本依赖本身作为变量呈现 | 保留 IPD-IMGT/HLA 作为分型标准,JoGo 只做频次参照 |
| 手里有不能上云的样本,又想对照公共单倍型 | 本机 IGV 并排加载,数据不出内网 | 装好 IGV 桌面版,开 60151 端口供浏览器调用 |
| 想复现一篇基于泛基因组的旧结果,却发现图版本已变 | JoGo 的编号字符串可长期引用 | 记录版本号,并核对是否为同一次全局排序 |
| 想把单倍型信息接进自己的流程 | ClinVar、GWAS、GTEx 已映射,省去自己连 | 从 BAM 标签里读编号,自己建索引表 |
| 要写一份跨人群的基因多样性比较 | 五个人群的频次直接可比 | 注意欧洲仅 9 例,不要把人群差异读成结论 |
| 已经有成熟的 HLA 分型流水线 | 帮不上,两边不互通 | 不要替换,只把 JoGo 当旁证 |
1.5 一句话判断
它解决的是「名字」问题,不是「结构」问题;如果你要的是图,它给不了;如果你要的是一串五年后还能查回来的编号,它给得很干净。
1.6 不适合谁:四条边界
第一条边界:手上有成熟的图分析流程。vg、odgi、Minigraph-Cactus、GraphAligner 这些工具链吃的是 GFA 或 GBZ,JoGo 一个都不产。把 JoGo 的 BAM 塞进这套流程,等于用字典去解方程。
第二条边界:需要临床级 HLA 分型。HLA 的报告体系、质控标准、室间质评都围绕 IPD-IMGT/HLA 的命名运转。JoGo 的编号不进这个体系,也不能进。
第三条边界:只做 SNP 级别、不需要单倍型的分析。如果你的问题是「这个位点在这群人里频率多少」,gnomAD、千人基因组这类资源更直接,样本量也大得多。JoGo 的二百多例在单点频率估计上并不占优,它的优势只在「组合」。
第四条边界:需要从短读长或芯片直接得到结果。JoGo 1.0 没有提供这样的推断工具,论文里把它列为在研方向。想在临床常见的芯片数据上跑出 ACTG 编号,目前没有官方路径。
§2 数据构成与规格
| 规格项 | 数值或形态 | 口径说明 |
|---|---|---|
| 基因组数 | 258 | 含本次测序 108 例 |
| 样本来源 | HapMap 与公开长读长数据 | 门户自述 |
| 测序平台 | PacBio HiFi 长读长 | 单读可跨越整个基因 |
| 参考锚定 | GRCh38 排除 ALT contig | 组装与坐标均以此为准 |
| 对照参考 | CHM13v2 | 仅用于跨参考编号排序 |
| 区域定义 | MANE v1.2,转录起止外扩 5 kb | 窗口固定,跨版本需重建 |
| 合格基因 | 19,194 | 通过覆盖与质量双过滤 |
| 命名层级 | 四级,A/C/T/G | 各自独立编号空间 |
| 单倍型分发 | 每基因一份预比对 BAM | 读即单倍型,非原始读段 |
| 外部注释 | ClinVar、GWAS Catalog、GTEx | 映射时点未标注 |
| 进化注释 | 四种灵长类 T2T | 上下游各 7 kb 锚定 |
| 许可 | ODbL 1.0 | 门户文图 CC BY-SA 4.0 |
2.1 三层数据:序号、序列、注释
JoGo 1.0 的内容可以拆成三层,三层之间靠编号串起来。最底层是序列:258 个基因组的局部单倍型组装,加两个参考版本各自的序列。中间层是编号:把序列按层级聚类后,用整数标记每一个不同的类。最上层是注释:ClinVar 的临床意义、GWAS Catalog 的关联性状、GTEx 的表达关联、灵长类 T2T 的进化线索,都挂在编号上。
使用者的动作通常只发生在中间层:查的是「这条序列被叫作几号」,引用的是编号而不是序列。接口因此偏向检索而非计算,搜索框接受基因名、RefSeq 编号、Ensembl 编号、rsID 与 ACTG 写法,都是在找一个编号。
顶层注释的时效性是个隐藏问题。ClinVar 每天更新,GWAS Catalog 每季扩容,JoGo 的映射却做在某个时间点上,查到的临床意义是快照而非实时查询。论文没有给出映射截止日期,门户也未标注。
2.2 字段与记录的完整字典
JoGo 的「记录」不是一个宽表行,而是一个基因在某一层级上的一条序列。下面这张表把能确定取到的字段列全,来源分两类:论文正文明确描述的,以及门户界面可见的。
| 字段 | 所属层 | 含义 | 取值形态 | 来源 |
|---|---|---|---|---|
| gene_symbol | 标识 | HGNC 基因符号 | 字母数字,如 ALDH2 | 论文与门户 |
| region_id | 标识 | 带坐标的区域编号 | 基因名加 chr 加起止,如 ALDH2_chr12_111761933_111822532 | 论文 |
| a_id | 编号 | 氨基酸层次的编号 | 整数,0 表示该段缺失 | 论文 |
| c_id | 编号 | 编码序列层次的编号 | 整数,0 表示该段缺失 | 论文 |
| t_id | 编号 | 转录本非编码外显子层次编号 | 整数,0 表示该段缺失 | 论文 |
| g_id | 编号 | 基因体内含子层次编号 | 整数,0 表示该段缺失 | 论文 |
| actg_code | 组合 | 四级编号按序拼接 | 如 a1c1t1g1 | 论文与门户 |
| ac_code | 组合 | 前两级拼接 | 如 a1c1 | 论文与门户 |
| act_code | 组合 | 前三级拼接 | 如 a1c1t1 | 论文与门户 |
| hap_frequency | 频次 | 该编号在全体样本中的占比 | 小数,门户示例给出百分比 | 门户 |
| population | 人群 | 超级人群标签 | EAS / AFR / AMR / SAS / EUR | 论文 |
| sample_label | 样本 | 承载该单倍型的样本标识 | 样本级字符串 | 门户 |
| variant_list | 变异 | 构成该单倍型的变异集合 | 位点与类型 | 论文 |
| variant_class | 变异 | 变异类型与长度区间 | SNV、短插入缺失、长插入缺失 | 门户 |
| clinvar_sig | 注释 | ClinVar 临床意义 | 分类标签 | 论文 |
| gwas_trait | 注释 | GWAS Catalog 关联性状 | 性状字符串 | 论文 |
| gtex_assoc | 注释 | GTEx 表达关联 | 组织与统计量 | 论文 |
| primate_homolog | 注释 | 灵长类同源比对结果 | 物种与比对状态 | 论文 |
| bam_track | 分发 | 该基因的预比对轨道 | BAM 文件路径 | 门户 |
| igv_session | 分发 | IGV 会话 URI | 可在 IGV 中打开 | 门户 |
这张表有一个必须提醒的地方:0 在编号体系里不是「零号单倍型」,而是「这一段不存在」。编码区被提前终止密码子打断的序列,或者注释里本来就没有两端 UTR 的基因,对应层级会被赋 0。看到 0 就去查频次,会查到一个无意义的结果。
2.3 一条记录的完整解剖
拿论文里反复用的 ALDH2 举例,可以看出编号是怎么长出来的。ALDH2 是东亚人群里最出名的酒精代谢基因之一,它的 rs671 位点在东亚有很高的携带率,正好是「同一条序列在不同人群里冷热颠倒」的典型。
#-- JoGo 门户中一条 ACTG 记录的形状(字段名按论文与门户描述还原,非逐字抓取)
gene_symbol ALDH2
region_id ALDH2_chr12_111761933_111822532
reference_build GRCh38
a_id a1
c_id c1
t_id t1
g_id g1
actg_code ALDH2:a1c1t1g1
ac_code ALDH2:a1c1
act_code ALDH2:a1c1t1
hap_frequency a1 在全体样本中占比最高,门户示例给出 60% 一档的示意
population_counts EAS / AFR / AMR / SAS / EUR 各自的出现次数
variant_list rs671 等位基因状态,加上同基因内的其他位点组合
bam_track ALDH2 的预比对 BAM 轨道,可在 IGV 中打开
clinvar_sig 该单倍型所携变异的临床意义映射
从这条记录能读出四件事。第一,a1c1t1g1 不是四个独立的事实,而是同一段序列在四个不同分辨率下的写法,越往后越细。第二,编号是字符串而不是数值,不能做加减,a1 与 a10 之间没有排序关系,别看错成十比一大。第三,频次信息挂在编号上,所以「这条序列常见吗」可以在不加载序列的情况下回答。第四,BAM 轨道是唯一能拿到实际碱基的入口,其他字段全是描述。
这里有个实操细节值得提前说明:字符串比较会出事。a10 按字典序排在 a2 前面,按数值序排在后面。任何要按频次排序的脚本,都必须把编号里的数字部分抽出来转成整数再排,否则前十条一定是 1、10、100、1000、10000 这类结果。
2.4 四级层级的规模对照
四级不是均匀切分的,它按序列的生物学含义划分:A 级只看蛋白变了没有,C 级看编码序列变了没有(含同义变异),T 级看非编码外显子,G 级看内含子。越往内层走,可变的位点越多,能形成的不同序列也越多。
| 层级 | 覆盖区间 | 判据 | 单倍型数 | 过滤阈值 | 备注 |
|---|---|---|---|---|---|
| A 级 | 蛋白产物 | 错义、框内插入缺失 | 174,376 | VQV ≥ 100 | 与临床解释最直接相关 |
| C 级 | 编码序列 | 含同义变异的编码区差异 | 300,610 | VQV ≥ 100 | 比 A 级多出同义层面 |
| T 级 | 非编码外显子 | 5′ 与 3′ UTR | 486,288 | VQV ≥ 50 | 调控区变异集中于此 |
| G 级 | 基因体 | 内含子差异 | 3,695,204 | VQV ≥ 50 | 数量最大,完整性最弱 |
| 合计 | 全基因 | 四级之和 | 四百六十余万 | 见上 | 官方另有口径,见下 |
表的最后一行需要单独说明,因为官方自己给了两个数。论文正文与摘要写的是四级合计 4,656,478;门户的项目概述页给出的是另一个合计,原文口径为「一万九千余个基因组区域中共计 4,651,897 条单倍型」。两者相差 4,581 条,官方未说明差额构成。遇到这种内部不一致,正确做法是同时记录两个口径并注明各自出处,而不是替它选一个。凡是需要引用总量的场合,建议两个数并列写出,或者干脆写「四百六十余万」避开争议。
2.5 变异目录与外部注释的挂接
编号之下的变异也有自己的账。门户给出的目录分三类:单核苷酸变异一千三百余万条,短插入一千六百余万条、短缺失一千三百余万条(阈值五十碱基),长插入三十二万余条、长缺失近七万条。长变异比短变异小两个数量级,说明长读长的价值主要体现为能看见它们,而不是它们很多。
外部注释的挂接方式是逐条映射:ClinVar 的每一条记录找到它落在哪个基因的哪个层级编号上,GWAS Catalog 的每一个关联位点同理,GTEx 的表达关联则先按组织聚合再挂到编号。这个映射让原本只能按位点查的注释,变成了可以按单倍型查的注释——同一个位点落在不同的单倍型背景上,可能被赋予不同的上下文。
灵长类 T2T 注释是这一层最特别的一条。JoGo 把 MANE 转录本序列比对到 CHM13v2 与黑猩猩、倭黑猩猩、大猩猩、猩猩四个端粒到端粒的灵长类参考上,取上下游各 7 kb 作同源锚点再映回 GRCh38,于是可以问「这个变异在灵长类里有没有对应物」,从而区分古老变异与新近变异。
2.6 与同类资源的字段对照
| 资源 | 组织单位 | 命名稳定性 | 跨参考能力 | 覆盖范围 | 本地分析 |
|---|---|---|---|---|---|
| JoGo 1.0 | 基因内的层级序列 | 按频次一次性分配 | 双参考并入同一排序 | 一万九千余个编码基因 | IGV 加载 BAM |
| IPD-IMGT/HLA | HLA 等位基因 | 官方登记,长期稳定 | 不涉及多参考 | HLA 系统 | 下载序列比对 |
| PharmVar | 药物基因星号等位 | 专家委员会审定 | 不涉及多参考 | 药物代谢基因 | 下载序列 |
| 泛基因组图项目 | 图的节点与路径 | 随图版本变动 | 需图对齐 | 全基因组 | 图工具链 |
| 千人基因组 | 个体基因型 | 按样本与位点 | 单参考为主 | 全基因组常见变异 | VCF 分析 |
这张对照要读出的结论不是「谁更好」,而是「它们各自把钱花在哪」。前两者的稳定性来自人工审定,JoGo 的稳定性来自排序规则,两条路的成本结构完全不同,也决定了 §7.5 要讨论的可持续性。
§3 核心层 A:编号如何成为一个可引用的身份
3.1 从频次排序到身份的四步
JoGo 给序列发编号的过程可以拆成四步,每一步都有一个容易被忽略的设计决定。
第一步是窗口界定。取 MANE v1.2 注释的基因区域,从转录起始位点上游 5 kb 到终止位点下游 5 kb。这个范围要装下启动子与部分远端调控,又不能大到把相邻基因拖进来;代价是边界处的变异归属敏感,同一个变异可能在两个基因的窗口里各算一次。
第二步是组装与筛选。只有双端完整跨越的成对 contig 才会被保留,常染色体与女性 X 染色体要求两条都完整,男性 X 与 Y 允许单条。这条规则保证了单倍型是对的,代价是长基因的样本覆盖会显著下降——论文自己给了相关系数,基因越长,能完整跨越的样本越少。
第三步是层级拆分。一条组装好的 contig 同时翻译成四级:只看蛋白的 A、看编码序列的 C、看非编码外显子的 T、看内含子的 G。一个样本在一个基因上因此有四套编号,彼此不是包含关系,而是不同分辨率的切片。
第四步是全局编号。相同序列在层级内聚类,按全球频次降序从 1 起编号,参考序列也参与排序。这是整个体系的核心,也是唯一一次「定名」动作;定完之后编号不再变动,除非版本升级重新排序。
3.2 为什么参考序列必须一起编号
这是 JoGo 与所有前作最本质的区别。多数单倍型目录把参考序列当作原点,其他序列描述为「相对参考有哪些差异」,隐含假设是参考中性且有代表性。在高度多态区域这个假设直接崩掉——参考本身可能就是人群里几乎不存在的一条序列。
JoGo 把参考也降格成普通成员:GRCh38 与 CHM13v2 的那两条序列与 258 个样本一起排序,谁常见谁拿小号,「参考版本的编号」因此成了可观测的量。EMILIN3 在 GRCh38 上是 a1、在 CHM13v2 上掉到 a10;ADAMTS19 反过来。两例说明同一件事:参考版本的选择不是技术细节,它直接决定你以为的「主等位基因」是哪一个。
这个设计把偏差从隐性变成显性,§4.4 的案例走的就是这一步的完整推理。
代价也要说清楚:参考序列的编号会随样本池变化。如果 JoGo 2.0 把样本扩到几千例,某条参考序列的排名完全可能下滑,届时「GRCh38 是 a1」不再成立,而引用它的论文不会自动更新。
3.3 编号字符串的语法
编号的书写有严格的拼接规则。单级编号是小写字母加整数,字母即层级首字母;组合编号按 A、C、T、G 顺序相接、不带分隔符。a1c1t1g1 读作「A 级 1 号、C 级 1 号、T 级 1 号、G 级 1 号」,不是一个独立的实体名。
这个语法带来一个副作用:不支持跳跃。想要第三级的信息,必须把前两级也写出来。ALDH2:a1c1t1 是合法的,ALDH2:a1t1 不是。查询接口接受任意前缀,所以实际使用中,C 级查询写成 ALDH2:a1c1,T 级查询写成 ALDH2:a1c1t1,逐级加长。
还有一处容易误解:组合编号看起来像在描述「一条完整的单倍型」,其实它描述的是「四个独立切片在同一样本上的组合」。两个样本可能 A 级编号相同而 C 级编号不同,这在语法上是允许的,在生物学上也常见——同义变异不影响蛋白,但会改变编码序列。做连锁分析时这一点要想清楚,否则会把不同分辨率的切片混在一起统计。
3.4 编号与坐标的对应关系
JoGo 的编号不携带坐标,坐标是另一套东西。门户用「基因名加染色体加起止」的形式给区域一个标识,例如 ALDH2_chr12_111761933_111822532。这个标识绑定在 GRCh38 上,是定位用的,不是身份用的。
两套标识分工清晰:区域标识回答「在哪里」,ACTG 编号回答「是哪一条」。前者换参考就失效,后者跨参考仍有效——位置是相对的,身份是绝对的。
但「绝对」有前提。编号的绝对性只在同一次全局排序内成立。跨版本不成立,跨物种不成立,跨到别的数据库更不成立。使用时的正确心态是:把它当成一个带版本号的主键,而不是一个永恒的名字。
3.5 门户支持的检索键
| 检索键 | 示例形态 | 适用场景 | 命中粒度 |
|---|---|---|---|
| 基因符号 | ALDH2 | 初次探索某个基因 | 基因级 |
| RefSeq 转录本 | NM_000690 | 从既有注释出发 | 转录本级 |
| RefSeq 蛋白 | NP_000681 | 从蛋白出发 | 蛋白级 |
| Ensembl 基因 | ENSG00000111275 | 从 Ensembl 体系迁移 | 基因级 |
| Ensembl 转录本 | ENST00000261733 | 精确到转录本 | 转录本级 |
| Ensembl 蛋白 | ENSP00000261733 | 精确到蛋白 | 蛋白级 |
| dbSNP rsID | rs671 | 从已知位点反查单倍型 | 位点级 |
| 区域标识 | ALDH2_chr12_111761933_111822532 | 已知坐标时 | 区域级 |
| ACTG 编号 | ALDH2:a1c1t1g1 | 已持有编号时 | 单倍型级 |
这张表反映了一个设计取向:JoGo 假设使用者是从别的体系过来的,所以把 RefSeq、Ensembl、dbSNP 三大体系的常见标识都做成了入口。这个假设在实践中有用——大部分人的起点确实是一个 rsID 或者一个 Ensembl ID。
反过来,出口就不那么丰富了。查完之后能拿到的是一张描述表和一个 BAM 轨道,没有一个「把结果导成 VCF」的按钮。
§4 核心层 B:稳定性与可复现性
4.1 「稳定」在这个体系里的确切含义
「稳定标识」这个词很容易被读成「永不改变」。JoGo 的稳定性要弱一些,也更诚实:在同一次全局排序内,编号与序列一一对应,不会重复、不会空缺、不会因为查询方式不同而变化。这个强度足以支撑论文引用和跨研究对照。
但跨版本就不成立了。编号是按频次排的,频次是样本池的函数。样本池变了,排序变了,编号的含义就变了。JoGo 的门户明确说了后续会有 1.x 的小版本和 2.0 的大版本,2.0 会扩大样本量。这句话翻译过来就是:编号会变。
所以正确的用法是把它当成带版本的主键:JoGo 1.0 / ALDH2:a1c1t1g1。少了版本号,引用就不完整。这个要求在数据库领域是常识,在生物信息学里却常被忽略,因为多数人习惯了 rsID 那种号称永不改变的标识。
4.2 覆盖完整性:四级之间的巨大落差
一套命名体系有没有用,取决于它命中的序列是否真的代表了人群。JoGo 用两个统计量回答:覆盖比(Good-Turing,衡量新抽样命中已有编号的概率)和完整性比(Chao1,衡量已登记编号占预测总数的比例)。两者测的不是同一件事。
| 层级 | 覆盖比达 90% 的基因比例 | 完整性达 50% 的基因比例 | 读法 |
|---|---|---|---|
| A 级 | 99.1% | 74.2% | 常见变异基本收齐 |
| C 级 | 97.3% | 64.0% | 同义层面也已较全 |
| T 级 | 91.3% | 66.4% | UTR 层面开始出现缺口 |
| G 级 | 22.2% | 16.1% | 内含子大量稀有序列未收录 |
这张表读出的结论很重要:A、C、T 三级的编号可以当作「常见单倍型的名单」,G 级不行。G 级覆盖比只有两成出头,意味着随手抽一条内含子序列,八成概率对不上任何已有编号。这不是质量缺陷,而是样本量的物理限制——内含子长、变异密、稀有变异多。
使用上的推论:如果研究目标是蛋白层面的功能判断,A 级足够;如果要做调控或剪接分析,T 级能用但要留神;如果做的是内含子变异的精细定位,JoGo 只能当补充,主力还得靠别的资源。
4.3 基因间的覆盖不均
覆盖不均不只在层级之间,也在基因之间。论文给了中位数:常染色体基因中能完整跨越的样本数中位数是一百八十余例,众数两百一十例,一个典型基因只有七成左右的样本可用。这种排除还不是随机的——覆盖特别差的位点集中在高度重复或结构复杂的基因家族,例如 USP17L、FAM90A、DEFB 簇、TP53TG3、TSPY,论文判断这些缺口与 GRCh38 参考本身的塌缩表示有关,而非组装方法。Y 染色体更特殊:男性样本只有一百三十二例,Y 连锁基因的覆盖率只有一半。
4.4 案例:ADAMTS19 的编号翻转
用一个具体基因走一遍,能看清编号体系到底在解决什么。ADAMTS19 是论文给的两个对照例子之一:它的主单倍型在 GRCh38 上是次要的,在 CHM13v2 上反而是主要的。也就是说,如果你以 GRCh38 为参考做变异注释,你会把这条序列当成「非参考变异」;换成 CHM13v2,同一条序列变成「参考本身」。
这个翻转不是数据错误,是两个参考版本的构造历史造成的。参考是人拼的,拼的人不同、样本不同,拼出来的序列就不同。在多数基因上这种差异无关紧要,但在多态性高的基因上,它足以改变你对「什么是正常」的判断。
JoGo 的处理方式是:把两个参考的序列都编上号,让编号出来说话。ADAMTS19 在 CHM13v2 上是 a1、在 GRCh38 上是 a10,这一对数字放在一起,任何看报告的人立刻知道——「你用的参考在这条序列上属于少数派」。这个信息在一份只写「参考基因组:GRCh38」的报告里是完全看不到的。
这个案例把「参考版本」从背景参数变成了可讨论的变量。做变异解读的人常要回答「这个变异罕见吗」,而罕见的参照系通常是「参考序列」而非「人群」。JoGo 的编号把参照系换成人群,同时标出参考版本的位置,两个问题一次回答。
4.5 可复现性靠什么托底
托底的是 BAM 轨道。每个基因的 BAM 都带自定义标签,编码了 A、C、T、G 与 AC、ACT、ACTG 各级编号,还有人群标签。即使门户改版、接口变动,拿到手的 BAM 仍然能自解释;再加上编号字符串本身可以脱离任何接口独立引用,两层合起来,重查一次的成本远低于重新跑一遍组装。
4.6 稳定性代价的清单
| 代价 | 表现 | 影响对象 | 缓解办法 |
|---|---|---|---|
| 频次依赖样本池 | 样本扩充后编号可能重排 | 全部编号 | 引用时写死版本号 |
| 参考并入排序 | 参考序列的编号会浮动 | 双参考比较结论 | 记录两个版本的编号对 |
| 层级独立编号 | 同一序列在四级号码不同 | 跨层级统计 | 明确分析用哪一级 |
| 无人工复核 | 编号不做生物学合理性审查 | 临床解释 | 回查 ClinVar 与文献 |
| 窗口固定 | 边界变异归属敏感 | 启动子区分析 | 注意边界重复计数 |
| 零值语义特殊 | 0 表示缺失而非零号 | 数据清洗 | 先过滤再统计 |
§5 核心层 C:取数与本地分析
5.1 三种取数方式及其适用面
JoGo 的取数路径有三条,能力差别很大,混用会出错。
第一条是网页查询。打开门户,用搜索框输入基因名、rsID 或 ACTG 编号,得到一张描述表。适合一次性查证与快速核对,局限是只能一条一条来,没有批量导出。
第二条是网页里的在线浏览器。它把单倍型按两两差异呈现,适合看一个基因内部的多样性结构,局限是只能看它画出来的那几种视图。
第三条是本地浏览器。下载某个基因的 BAM,用本机 IGV 加载,与自己的数据并排。这条路径适合处理敏感数据,也适合需要精确查看碱基的人。局限是需要装 IGV,且 BAM 是「读等于单倍型」的非标准语义,第一次看会困惑。
5.2 走通网页查询的完整动作
下面的脚本演示了如何用命令行确认站点可达、以及如何从门户取一个基因的页面。
#-- 确认站点可达,并查看返回的 HTTP 状态
curl -s -o /dev/null -w "%{http_code}\n" https://jogo.csml.org
#-- 取某个基因的门户页面,存成本地文件以便查看
curl -sL "https://jogo.csml.org/gene?keyword=ALDH2" -o aldh2_page.html
#-- 确认页面里确实含有该基因符号,而不是空壳页面
grep -c "ALDH2" aldh2_page.html
这段脚本只做一件事:确认你能拿到页面。它不解析页面内容,因为门户结构可能随版本调整,写死解析规则很快失效。要批量提取,更稳的做法是走 BAM 路径。
5.3 从 BAM 里读出编号
这是最可靠的路径。每个基因的 BAM 里,一条「读」就是一条单倍型,编号藏在自定义标签里。samtools 能看标签,pysam 能批量提取。
#-- 建立工作目录
mkdir -p jogo_work && cd jogo_work
#-- 从门户取得 ALDH2 的预比对 BAM(文件名以门户实际提供为准)
curl -sL "https://jogo.csml.org/faq" -o faq_page.html
#-- 检查 BAM 是否可读,并打印头部信息
samtools view -H ALDH2.bam | head -20
#-- 取前三条记录,查看自定义标签
samtools view ALDH2.bam | head -3
#-- 用 pysam 批量提取每条单倍型读上的 ACTG 标签
import pysam
bam_path = "ALDH2.bam"
records = []
with pysam.AlignmentFile(bam_path, "rb") as bam:
for read in bam.fetch(until_eof=True):
#-- 自定义标签名以门户/bam 头部声明为准,这里按论文描述示意
tag_names = [t[0] for t in read.get_tags()]
row = {"read_name": read.query_name, "tags": dict(read.get_tags())}
row["has_actg"] = any(k.startswith("actg") for k in tag_names)
records.append(row)
print(len(records), "条单倍型读")
print(records[0])
自定义标签的确切命名论文未逐字给出,需以 BAM 头部声明为准。上面的脚本用前缀判断而非写死全名,就是为了避免标签名不一致时整段失效。
5.4 在本机 IGV 里并排查看
本地浏览器的核心价值是隐私:数据不出本机。门户的按钮会尝试连接本机 IGV 的 60151 端口,因此使用前必须先启动 IGV 桌面版。
#-- 启动 IGV 桌面版(需先安装,路径按本机实际情况调整)
igv &
#-- 确认 60151 端口已在监听,这是门户按钮连接用的端口
ss -lntp | grep 60151
#-- 验证端口能接受 HTTP 请求
curl -s "http://localhost:60151/version"
端口通则门户的按钮会生效。不通的三个常见原因是:IGV 没启动、版本过旧不支持端口控制、防火墙拦了回环连接。这三种情况门户上没有提示。
5.5 把 BAM 转成可用的 FASTA
JoGo 不给 FASTA,但需要 FASTA 的场合很多。最直接的办法是把每条读的序列导出来,按编号命名。这一步必须自己做,而且要注意方向与坐标。
#-- 把单倍型 BAM 导出为按编号命名的 FASTA
import pysam
bam_path = "ALDH2.bam"
out_path = "ALDH2_haplotypes.fa"
seen = set()
n_written = 0
with pysam.AlignmentFile(bam_path, "rb") as bam, open(out_path, "w") as out:
for read in bam.fetch(until_eof=True):
if read.is_unmapped:
continue
seq = read.query_sequence
if seq is None or seq in seen:
continue
seen.add(seq)
name = read.query_name.replace(" ", "_")
out.write(f">{name}\n")
for i in range(0, len(seq), 60):
out.write(seq[i:i + 60] + "\n")
n_written += 1
print("写出", n_written, "条唯一序列")
这段脚本做了去重,因为不同样本可能共享同一条单倍型序列。去重之后得到的才是「不同序列」的集合,与编号的语义一致。不做去重直接拿去建索引,会得到一堆重复项。
5.6 接口能力的边界
JoGo 没有发布 REST API 文档。主页的导航里有「API」一项,但该页面的内容由前端脚本渲染,直接取回的是空壳。论文正文对接口的描述也只到「门户支持按基因名、变异 ID、ACTG 编号检索」这一层,没有给出端点、参数与返回格式。
这意味着三件事。第一,不要把 JoGo 接进自动化流水线,除非接受以 HTML 抓取实现,而结构会随版本变化。第二,批量需求应走 BAM 路线,那条路依赖文件格式而非网页结构。第三,确实需要接口时,门户的「Contact」页是官方给出的入口。
| 能力 | 网页 | 在线浏览器 | 本地 IGV | 备注 |
|---|---|---|---|---|
| 按基因名检索 | 支持 | 支持 | 不支持 | 网页最快 |
| 按 rsID 检索 | 支持 | 部分 | 不支持 | 需先定位基因 |
| 按 ACTG 编号检索 | 支持 | 支持 | 通过标签 | 编号需完整前缀 |
| 批量导出 | 不支持 | 不支持 | 支持 | 走 BAM |
| 取实际碱基 | 不支持 | 不支持 | 支持 | BAM 是唯一入口 |
| 涉密数据并排 | 不支持 | 不支持 | 支持 | 数据不出本机 |
| 程序化调用 | 未提供 | 未提供 | 需自行封装 | API 页为空壳 |
| 会话分享 | 不支持 | 不支持 | 支持 | IGV XML |
§6 与库内词条的关系
6.1 关系图谱
在千方医数集的词条库里,JoGo 的位置比较特殊:它不属于影像类,也不属于典型的「样本队列」类,而是一个以「命名体系」为核心贡献的参考资源。它的相邻词条大致分三圈。
第一圈是同属人类基因组参考体系的词条。它们与 JoGo 共享参考版本问题,区别是大多只提供一个版本下的坐标,不处理跨版本身份,JoGo 在这圈里补的是身份层。
第二圈是变异注释类资源。ClinVar、GWAS Catalog、GTEx 在 JoGo 里是上游,在库里也各有词条。JoGo 与它们是聚合而非替代的关系:不产生新的临床判定,只把已有判定挂到单倍型上。
第三圈是泛基因组类资源,与 JoGo 目标最近、路径最远。图项目产出 GFA 或 GBZ,JoGo 产出 BAM 与编号表,两者互补但目前没有现成的桥。
6.2 检索路径
从 JoGo 出发能找到的相邻词条,主要靠三类线索。
线索一是基因。JoGo 覆盖一万九千余个编码基因,几乎任何一个疾病相关基因都能在里面找到编号。如果想找某个疾病的全基因组关联资源,可以从该疾病的已知基因出发,反查库里有没有覆盖这些基因的队列资源。
线索二是注释来源。JoGo 映射了 ClinVar、GWAS Catalog、GTEx 三家,这三家在库里都有独立词条。顺着注释来源找,能连到变异解读与表达调控两条线。
线索三是方法学。JoGo 的组装走的是 hifiasm、pbmm2、Minimap2、SnpEff 这条标准长读长工具链。库里凡是使用同一套工具链的资源,在数据形态上都有相似性,可以放在一起比较。
| 关联方向 | 关联依据 | 找什么 | 注意 |
|---|---|---|---|
| 参考基因组 | 同一套 GRCh38 / CHM13v2 坐标 | 提供参考序列的词条 | 注意版本号是否一致 |
| 泛基因组 | 同属「保留变异组合」目标 | 图结构类资源 | 格式不互通 |
| 变异注释 | ClinVar、GWAS、GTEx | 临床与关联注释词条 | 注释时效不同 |
| 长读长队列 | 同一工具链 | 长读长测序资源 | 样本量不可直接比 |
| HLA 专题 | 命名灵感来源 | HLA 相关数据集 | 命名不可互换 |
| 表达 QTL | 淋巴母细胞系 | eQTL 类资源 | 细胞系单一 |
§7 质量评估与局限性
7.0 阅读本节前的一个前置校正
在给这个资源打分之前,需要先校正一个判断框架上的错位。多数人看到一个被称为「泛基因组参考」的东西,会默认拿它和图泛基因组项目比结构完整性、比节点覆盖、比工具生态;按这个标尺量,JoGo 会全线不合格,因为它压根没有图。
这个比较本身是误判。JoGo 的贡献不在结构层,而在身份层。它要回答的问题是「这条序列叫什么」,而不是「这条序列在图上怎么走」。正确的比较对象是 IPD-IMGT/HLA 这类命名登记体系,而不是 vg 这类图工具。一旦把标尺换过来,评价的维度也随之改变:比的是编号的稳定性和覆盖的完整性,而不是图的连通性和路径的丰富度。
下面的评分按「命名体系」这个定位来打,五维各自给了理由。如果按「图资源」来打,结构维度会低到 1 分,但那样的分数没有决策价值,只会误导选型。
7.1 五维评分
| 维度 | 分数 | 理由 |
|---|---|---|
| 覆盖广度 | 4 / 5 | 一万九千余个编码基因,全基因组尺度,超出所有位点级命名体系 |
| 命名稳定性 | 3 / 5 | 单次排序内稳定,跨版本会漂移,且无人工审定环节 |
| 层级完整性 | 3 / 5 | A、C、T 级可用,G 级覆盖比仅两成,内含子层面明显不足 |
| 工具兼容性 | 2 / 5 | 只有 IGV 一条成熟路径,无图工具、无 API、无短读长推断 |
| 可复现性 | 4 / 5 | BAM 自解释、编号可长期引用、会话可分享,版本号需自行记录 |
五维加总 16 分,属于「定位独特、生态尚薄」的一类资源。它的高分项都在「有没有一个好名字」上,低分项都在「能不能嵌进别人的管道」上。这个分布本身就说明了该怎么用它:当参照,不当底座。
7.1b DAIMS 维度对照
DAIMS 框架关注的是一份数据集能否被机器消费,与上面的五维评分不重复:五维问「好不好用」,DAIMS 问「接得进去吗」。
| DAIMS 维度 | 状态 | 说明 |
|---|---|---|
| 可发现性 | 中 | 有 DOI 与门户,但无数据集注册号,搜索引擎可见性一般 |
| 可访问性 | 高 | 免登录,网页与 BAM 均可直接取,无申请流程 |
| 可理解性 | 中 | 命名规则论文讲清了,但门户无字段级说明文档 |
| 互操作性 | 低 | BAM 语义非标准,无 GFA、无 VCF、无 API 文档 |
| 可复用性 | 中高 | ODbL 允许商用与再分发,需保留署名与同源开放 |
| 可引用性 | 高 | DOI 与版本号齐全,编号字符串可嵌入引用 |
| 可追溯性 | 中 | 注释映射的时点未标注,差额口径未说明 |
| 质量声明 | 中 | 质控阈值有论文,但无逐条记录级质量分 |
7.2 与其他命名体系的横向比较
把 JoGo 和 IPD-IMGT/HLA、PharmVar 放在一起看,能看到命名体系的两条不同路线。IPD-IMGT/HLA 走的是登记制:提交、审核、命名,由专门的委员会背书。这条路最稳,但扩展性最差,几十年才覆盖一个基因家族,PharmVar 类似。JoGo 走的是排序制:不审核,只按频次排队,谁常见谁拿小号。扩展性极好,一次能覆盖全基因组,但缺少人工把关。
| 体系 | 命名机制 | 覆盖范围 | 权威来源 | 主要风险 |
|---|---|---|---|---|
| JoGo | 全局频次排序 | 全基因组编码区 | 项目自身 | 编号随样本池漂移 |
| IPD-IMGT/HLA | 委员会审定登记 | HLA 系统 | 国际免疫遗传学数据库 | 扩展慢,覆盖窄 |
| PharmVar | 专家委员会审定 | 药物基因 | 药物基因组学知识库 | 覆盖窄 |
| 千人基因组 | 位点坐标 | 常见变异 | 联盟 | 不是命名体系 |
| 泛基因组图 | 节点与路径 | 全基因组 | 各图项目 | 路径号随图版本变 |
这张表说明 JoGo 是在扩展性和稳定性之间找第三条路,代价是两头都不极致:做探索性研究可以接受,做临床报告不能。
7.3 已知的、可枚举的偏差
第一,人群构成严重倾斜。东亚一百三十例、非洲五十例、美洲四十四例、南亚二十五例、欧洲九例。欧洲样本只有九例,这个数字在解读欧洲人群的稀有单倍型时几乎没有统计效力。反过来,东亚样本占了一半,这让 JoGo 在东亚人群的常见单倍型上特别准。这个偏向与项目的日本背景一致,但使用者容易忽略——编号是「全球频次」,而全球频次的背后是一个极不平衡的池子。
第二,长基因覆盖不足。论文给了基因长度与样本覆盖的负相关,相关系数零点四一四。长基因在人群里的完整跨越本来就难,加上窗口还要求双端完整,这个偏差会累积。
第三,重复基因家族系统性缺失。USP17L、FAM90A、DEFB 簇这些家族,缺口来自 GRCh38 本身的塌缩表示。这不是 JoGo 的错,但它意味着这些基因的编号覆盖率天然偏低,做相关分析时要单独标注。
第四,Y 连锁覆盖只有一半。男性样本一百三十二例,做 Y 染色体分析时样本量要重新算。
第五,内含子层面收口最晚。G 级的覆盖比只有两成,稀有内含子变异大量缺失。任何涉及深层内含子调控的分析,都不能假设 JoGo 的编号表是完整的。
第六,亚采样分析的口径限制。那些关于单倍型多样性的统计,都限制在「至少两百条可用单倍型」的基因上,并统一抽到两百条做重复。这意味着基因之间的原始样本量并不相等,比较时要意识到这是重采样后的结果。
7.4 外部验证矩阵
| 验证项 | 验证方式 | 结论 | 可信度 |
|---|---|---|---|
| 编号与序列一一对应 | 论文方法描述与门户示例 | 成立,层级内序列聚类后编号 | 高 |
| 双参考排序一致 | 论文 EMILIN3、ADAMTS19 对照 | 成立,编号跨参考可比 | 高 |
| A 级覆盖充分 | Good-Turing 覆盖比 | 99.1% 的基因达 90% 阈值 | 高 |
| G 级覆盖不足 | Good-Turing 与 Chao1 | 仅 22.2% 达覆盖阈值 | 高 |
| 长变异可见性 | 论文变异目录 | 长插入与长缺失均有收录 | 中 |
| 与图工具兼容 | 官方未提供 GFA | 不兼容 | 高 |
| 短读长推断可行 | 论文列为在研 | 1.0 版不可行 | 高 |
| 门户 API 可用 | 逐个访问页面 | API 页为空壳 | 中 |
| 总单倍型数口径 | 论文与门户比对 | 存在两个数,差四千五百八十一 | 高 |
「中」可信度的两项值得说明。长变异给中,是目录只给了数量、没有逐条验证数据,可靠性依赖组装与质控;API 给中,是空壳只说明「直接抓不到内容」,不代表没有内部接口,只是官方没有文档化。
7.5 它为何能持续:靠一个便宜的命名规则活下去
这类命名体系能不能活,不取决于它多聪明,取决于维护成本能不能被单个实验室承担。
IPD-IMGT/HLA 的维护成本极高,因为每一条新等位基因都要人工审核、比对、命名,需要委员会和长期经费。JoGo 的维护成本低得多:编号规则是排序,没有人工判断环节,新样本进来只需要重新跑一遍聚类与排序。这套流程全部在标准工具链上完成,hifiasm、pbmm2、SnpEff 都是开源的,不需要自研。
更重要的是,它的价值随样本量单调增长。样本越多,频次估计越准,编号越有意义。这意味着它有明确的升级路径:加样本,重排序,发新版本。项目自己给出的路线也是这样,1.x 小版本补注释,2.0 扩样本。
但这套逻辑也有一个致命的自我否定点:如果编号会随版本变化,那它作为「稳定标识」的价值就在被自己的升级削弱。这不是技术问题,是一个设计上的取舍——它把稳定性定义在「版本内」而不是「跨版本」。这个取舍能不能被社区接受,取决于后续版本是否提供新旧编号的对照表。截至目前,官方没有承诺提供。
§8 生态位与历史
8.1 从 HLA 到全基因组:一条走了三十年的路
单倍型分析在很长时间里只服务于少数几个位点。HLA 是最早也最成功的例子:因为它在移植配型中是决定性的,几十年积累了极完整的等位基因目录与成熟命名规则。KIR 和细胞色素 P450 家族走了类似的路。
这条路走不出这几个家族,卡在技术上。短读长做统计定相,在长片段和结构复杂区域会出现大量切换错误,重建出的「单倍型」常是拼接错误的产物。所以过去只能对结构相对清楚的位点做目录。
长读长改变了这个前提。HiFi 的单条读能跨越整个基因,加上 hifiasm 这类能利用相位信息的工具,从单个分子重建完整基因成为可能。JoGo 踩在这个时间点上,不需要发明新技术,只需把已有技术推到全基因组尺度。
8.2 命名思路的直接来源
JoGo 的命名思路在论文里说得很清楚:受 HLA 等位基因命名约定的启发,推广到全基因组。这句话需要拆开读。
继承下来的是形式感:小写字母加数字、按层次递进、小的数字更常见。这套形式在 HLA 里用了很久,做免疫遗传的人一看就懂。
没有被继承的是审定机制。HLA 的星号命名背后有命名委员会,新等位基因要提交、核对、获准才能用。JoGo 没有这一环,它的编号是算法直接产出的。这个差别决定了扩展性的上限——没有人工审核,才能一次覆盖一万九千个基因。
所以「受 HLA 启发」指的是形式而不是制度。理解这一点,就不会误以为 JoGo 的编号有与 HLA 同等的权威性。
8.3 与泛基因组运动的关系
人类泛基因组联盟在 2023 年发布了首份草图,把参考基因组从单一序列推进到多序列集合。这个运动解决的是「参考不够多样」的问题,JoGo 解决的是「多样了之后怎么称呼」的问题。
两者是一条链上的两段:泛基因组项目产出序列集合与图结构,JoGo 产出序列的命名表。理论上可以串联——先建图,再给图上每条路径命名。实际上没发生,因为 JoGo 直接从局部组装得到序列再聚类。
这个选择有得有失。得在简单:不需要处理图的拓扑结构,不需要图对齐,工具链全是标准件。失在信息:图能表达的断点、倒位、拷贝数变化等结构关系,在「序列聚类」的框架里全部丢失了,只剩下「这条序列和那条序列是不是同一类」这个二值判断。
论文也承认这点:长读长全长的组装能覆盖 Alu、LINE 这类插入的结构变异,但它们在中编号体系里的呈现方式是「导致序列不同的原因之一」,而不是「可被单独查询的结构事件」。
8.4 时间线上的位置
| 时间 | 事件 | 对 JoGo 的意义 |
|---|---|---|
| 1990 年代起 | HLA 命名体系逐步成型 | 提供形式模板 |
| 2010 年代 | 短读长定相的局限被反复证实 | 说明为什么必须等长读长 |
| 2021 | hifiasm 等分相组装工具成熟 | 提供技术前提 |
| 2022 | 端粒到端粒人类基因组发布 | 提供第二个参考版本 |
| 2023 | 人类泛基因组首份草图发布 | 确立问题背景 |
| 2023-07 | MANE v1.2 发布 | 提供基因区域定义 |
| 2025-11 | 论文上线,进入索引 | 成果公开 |
| 2026-01 | 随数据库专刊正式见刊 | 成为该期两篇 Breakthrough 之一 |
这张表里最值得注意的一行是 MANE v1.2。JoGo 的整个基因界定依赖于这个注释版本,注释一变,窗口就变,编号体系也得跟着重建。这是一个隐蔽的耦合:使用者以为自己在引用一个独立的命名体系,实际上它绑死在一个注释版本上。
§9 使用指引
9.1 三种角色的路径
第一类角色是变异解读人员。起点通常是一个具体变异,终点是「这个变异常见吗」。最短路径:用 rsID 在门户搜索,找到它落在哪个基因的哪个层级,看该编号的频次。频次高说明该单倍型背景在人群里常见,支持良性判断;频次低则需结合 ClinVar 与文献再判。这一步只能当旁证。
第二类角色是群体遗传研究者。起点是一个基因或一组基因,终点是多样性描述。最短路径:从门户取编号表与频次,按层级统计不同编号的数量与分布。注意编号数不等于单倍型多样性,样本量在基因间不均,需先做重采样对齐。
第三类角色是流程开发者。起点是把 JoGo 接进现有管道。最短路径:放弃网页抓取,走 BAM 路线,把标签解析成表并自建索引。额外功课是确认标签命名,并把版本号写进索引元数据。
9.2 一条最短的可用流程
下面这条流程从零开始,做到「查到一个基因的编号表并本地查看」。
#-- 第一步:确认站点可达
curl -s -o /dev/null -w "HTTP %{http_code}\n" https://jogo.csml.org
#-- 第二步:为某个基因建立工作目录
mkdir -p ~/jogo/HBB && cd ~/jogo/HBB
#-- 第三步:从门户取得该基因的页面,作为编号表的参照
curl -sL "https://jogo.csml.org/gene?keyword=HBB" -o HBB_portal.html
#-- 第四步:取出该基因的 BAM(文件名以门户下载链接为准)
#-- 门户的本地浏览器入口会给出对应下载地址
curl -sL "https://jogo.csml.org/faq" -o faq.html
#-- 第五步:确认 BAM 完整可用
samtools quickcheck -v HBB.bam && echo "BAM 完整"
#-- 第六步:统计读的数量,一条读对应一条单倍型
samtools view -c HBB.bam
#-- 第七步:把编号与人群标签整理成一张表
import pysam
import csv
rows = []
with pysam.AlignmentFile("HBB.bam", "rb") as bam:
for read in bam.fetch(until_eof=True):
if read.is_unmapped or read.query_sequence is None:
continue
tags = dict(read.get_tags())
rows.append({
"read": read.query_name,
"length": read.query_length,
"tags": str(tags),
})
with open("HBB_haplotypes.csv", "w", newline="") as fh:
writer = csv.DictWriter(fh, fieldnames=["read", "length", "tags"])
writer.writeheader()
writer.writerows(rows)
print("共", len(rows), "条")
#-- 第八步:按编号去重,得到不同序列的数量
import pysam
seqs = {}
with pysam.AlignmentFile("HBB.bam", "rb") as bam:
for read in bam.fetch(until_eof=True):
if read.query_sequence is None:
continue
seqs.setdefault(read.query_sequence, []).append(read.query_name)
print("不同序列数", len(seqs))
print("承载样本数", sum(len(v) for v in seqs.values()))
关键在第五步与第八步。quickcheck 是廉价有效的完整性检查,能挡掉大半下载不全的情况。去重决定了拿到的是「序列集合」还是「样本集合」,后面的统计要基于哪个得先想清楚。
9.3 引用方式
引用 JoGo 时有三样东西必须写进去:版本号、论文 DOI、以及你实际使用的编号所属的层级。
版本号最关键,因为编号按版本定义。写「JoGo 1.0」而不是「JoGo」,避免后续升级后引用失效。论文 DOI 是 10.1093/nar/gkaf1232,见刊于《核酸研究》第 54 卷 D1 期 D1159 至 D1173。
层级也要写。同一条序列在 A 级叫 a1、在 G 级可能叫 g7,只说「编号 a1」而不说层级,别人无法确定你用的是哪一级。规范写法应当带上完整组合,例如 HBB:a1c1t1g1,这样层级自明。
如果引用的是数据本身而不只是方法,还应该注明许可:库与标识符是 ODbL 1.0,门户文字与图表是 CC BY-SA 4.0,原始 HiFi 数据在 DDBJ 的 PRJDB18487 项目下。这三者许可不同,二次使用时的义务也不同。
9.4 三类人群的最短路径
三类人最常用到 JoGo,但他们的动作完全不同,混着做会浪费时间。
第一类是刚听说这个资源、想判断值不值得投入的人。最短路径是打开门户搜一个熟悉的基因,比如 HBB 或者 ALDH2,看一眼编号表与频次分布,以及 A 级和 G 级的编号数量差多少。五分钟能完成,得到的判断是「它的粒度是否符合我的问题」。
第二类是要写方法学章节的人。最短路径是读论文方法段,把三件事抄准:质控阈值(A、C 级 VQV 不低于一百,T、G 级不低于五十)、窗口外扩(转录起止外扩五千碱基)、参考版本(GRCh38 排除 ALT contig)。写错任何一件,别人都复现不出你的编号。
第三类是要在自己的流程里长期引用编号的人。最短路径是先在「两个参考编号不一致」的情形上试算一次,确认脚本在编号顺序、层级前缀、零值处理三处都不出错,这正是 §4.4 的案例演示过的情形。
9.5 常见误用的止损办法
第一种误用是把编号当等位基因名。止损办法:在任何报告里,凡出现 JoGo 编号,旁边必须注明「JoGo 1.0 编号,非 HLA 等位基因名」。这一句能挡掉大部分误解。
第二种误用是把编号当坐标。需要坐标时用区域标识,编号里没有位置信息。
第三种误用是跨版本拼接。止损办法:数据表里加一列 jogo_version,合表前先按这一列过滤。
第四种误用是把 G 级编号当完整名单。止损办法:涉及 G 级的分析,在方法学里明确写出覆盖比,并说明稀有变异可能缺失。
第五种误用是拿欧洲样本做人群结论。止损办法:报告人群构成时把九例写出来。
§10 AI 使用声明
| 项目 | 说明 |
|---|---|
| 本页性质 | 面向数据集选型的中文百科说明,非论文翻译,非官方文档 |
| 事实来源 | 论文摘要与正文(Europe PMC 全文 XML)、JoGo 官方门户页面 |
| 数字口径 | 规模与结构类数字取自上述两处,凡两处冲突一并列出 |
| 未核实项 | 单倍型总量存在两个官方口径;REST API 未文档化 |
| 未覆盖内容 | 未下载全量 BAM;未逐基因核对编号分布;未测试门户全部页面 |
| 推断部分 | 评分为编辑判断,依据在 §7.1 逐条给出理由 |
| 更新责任 | 版本升级或编号重排后,本页的编号示例需重新核对 |
| 使用建议 | 临床决策请以原始文献与官方数据库为准,本页不构成医学建议 |
常见误读(避坑清单)
| 常见说法 | 实际 | 证据 |
|---|---|---|
| JoGo 是一个图泛基因组 | 没有 GFA、没有节点与边,发布物是编号字典与预比对 BAM | 论文方法段与门户下载项均无图格式 |
| 它可以替代 HLA 分型 | 只借用 HLA 的命名形式,不承担分型职能 | 论文自述为「受 HLA 命名启发后推广到全基因组」 |
| a1 就是参考等位基因 | a1 只是全局频次第一的那条序列,参考序列另行编号 | 参考序列并入同一排序,编号由频次决定 |
| 编号是永久不变的 | 单次排序内不变,样本池扩充后重排 | 门户明示 2.0 将扩大样本量 |
| 它可以当参考基因组做比对 | 不提供 FASTA,只提供「读等于单倍型」的 BAM | 论文描述 BAM 兼容 IGV,未提比对用途 |
| 覆盖了所有人类基因 | 只覆盖 MANE v1.2 的一万九千余个蛋白编码基因 | 论文限定为 MANE 标准蛋白编码基因 |
| 四级编号是包含关系 | 四级是同一序列的不同分辨率切片,独立编号 | 一级只看蛋白,四级看到内含子 |
| 编号里的 0 表示零号单倍型 | 0 表示该层级片段缺失 | 论文方法段说明缺失时赋 0 |
| G 级和 A 级一样全 | G 级覆盖比仅两成出头,稀有内含子大量缺失 | Good-Turing 覆盖比按层级分别报告 |
| 有 REST API 可以批量调 | 门户 API 页由脚本渲染,直接访问为空壳,无文档 | 逐个访问官方页面确认 |
FAQ
Q1:JoGo 和泛基因组图项目的根本差别在哪?
差别在「给什么发编号」。图项目给节点和路径发编号,编号绑定图的版本;JoGo 给序列类别发编号,编号绑定一次全局排序。前者能表达结构关系,后者能表达「是不是同一类」。两者解决的是不同层面的问题,不能互相替代。
Q2:编号会不会重复?
在同一层级、同一版本内不会。相同序列会被聚成一类,只拿一个号。不同层级之间号码可以相同,因为它们属于不同的编号空间,所以在任何场合都必须带层级前缀,否则会出现「a1 和 c1 都是 1 号」这种看似冲突实则正常的情况。
Q3:能不能用编号直接写临床报告?
不建议。JoGo 的定位是研究资源,编号没有经过临床审定,也没有与任何诊断标准对接。如果报告里确实需要引用,应当作为研究性参照单独标注,不能替代 IPD-IMGT/HLA 的等位基因命名。
Q4:为什么欧洲样本只有九例?
官方未说明原因。从样本来源看,这批基因组主要来自 HapMap 项目与本次自测,构成反映了项目的采样条件。九例这个数字对欧洲人群的稀有单倍型几乎没有统计效力,做人群比较时必须把这一点写进限制。
Q5:我手上的芯片数据能不能算出 ACTG 编号?
不能直接算。JoGo 1.0 没有提供从短读长或芯片推断编号的工具,论文把这项工作列为在研方向。目前的编号只能从长读长组装得到,或者从门户直接查询已有的编号。
Q6:为什么总单倍型数有两个不同的数字?
论文的合计与门户的合计相差四千五百八十一。官方没有解释差额构成。引用时建议同时给出两个口径与各自出处,或使用「四百六十余万」这类概数。
Q7:本地查看需要上传我的数据吗?
不需要。本地浏览器把 JoGo 的 BAM 加载到本机 IGV,你的数据也留在本机,两边按同一坐标并排。这个设计就是为敏感数据准备的,论文明确强调不需要上传到云端。
Q8:BAM 里的「读」和测序读段是一回事吗?
不是。JoGo 的 BAM 里每条「读」代表一条完整的单倍型序列,不是原始测序读段。这是为了借用 IGV 的显示能力而做的格式套用,理解这一点才能正确解读你在 IGV 里看到的东西。
Q9:编号变了以后,旧论文怎么办?
旧论文里的编号不会自动失效,但它的含义会随版本漂移。规避办法是凡引用必带版本号,并且在新版本发布后核对编号。如果官方后续提供新旧对照表,这个问题会大幅缓解;截至目前官方没有承诺。
Q10:能不能批量下载所有基因的 BAM?
门户没有提供打包下载入口,逐个基因取是目前唯一路径。论文与门户都没有给出总数据量的说明。如果要做全基因组分析,建议先估算再动手,从少数几个基因开始验证流程。
Q11:这个资源还会更新吗?
会。门户明确说有 1.x 小版本和 2.0 大版本的计划,1.x 补注释,2.0 扩样本。由于编号依赖排序,2.0 发布时必然会触发一次大范围的编号重排,这一点在规划长期项目时必须考虑。
Q12:我应该把它当成主数据源还是辅助工具?
取决于你的问题形态。如果你的问题是「这条序列叫什么、常见吗」,它可以当主数据源。如果你的问题是「这段基因组结构怎么变」,它只能当辅助,主力应该是泛基因组图或其他结构变异资源。
术语表
| 术语 | 解释 |
|---|---|
| ACTG 命名 | JoGo 的四级单倍型编号体系,A 氨基酸、C 编码、T 转录本、G 基因体 |
| 单倍型 | 同一条染色体上共同遗传的一组变异组合 |
| 单倍型分辨组装 | 把二倍体样本的两套染色体分别组装出来,而不是混在一起 |
| HiFi | 高保真长读长测序,单条读准确率高,适合跨越重复区 |
| MANE | NCBI 与 EMBL-EBI 联合维护的人类转录本标准集 |
| G 级 | 基因体层级,只看内含子差异 |
| 覆盖比 | Good-Turing 估计,衡量新抽一条序列命中已有编号的概率 |
| 完整性比 | Chao1 估计,衡量已登记编号占预测总数的比例 |
| 均聚物 | 同一碱基连续重复的区段,长读长测序的主要错误来源 |
| VQV | 变异级质量值,JoGo 用于过滤假阳性插入缺失 |
| 相位 | 判断两个变异是否在同一条染色体上 |
| 切换错误 | 统计定相时把两条染色体的片段搞混 |
| 超级人群 | 千人基因组体系里的五大人群分组 |
| 淋巴母细胞系 | 由 B 细胞永生化而来的细胞系,eQTL 研究的常用材料 |
| 端粒到端粒 | 组装到染色体两端,没有缺口 |
| 泛基因组 | 一个物种内所有基因组序列的集合,而非单一参考 |
| 图泛基因组 | 用图结构表示泛基因组,节点是序列片段,边是连接关系 |
| 预比对 | 已经把序列放到参考坐标上的文件,不需要再比对 |
| 会话 URI | IGV 保存的视图配置,指向远程数据 |
| ODbL | 开放数据库许可,要求衍生数据库同样开放 |
| 编码序列 | 真正翻译成蛋白的那部分外显子 |
| 非编码外显子 | 转录出来但不翻译的部分,主要是两端非翻译区 |
| 同义变异 | 改变碱基但不改变氨基酸的变异 |
| 旁系同源 | 同一基因组内由复制产生的相似基因 |
| 塌缩表示 | 参考序列把多个相似拷贝压成一条 |
附录 A:核心数字核对表
| 项 | 值 | 来源 | 来源层级 |
|---|---|---|---|
| 基因组数 | 258 | 论文摘要、门户 | 官方双源 |
| 本次测序数 | 108 | 论文摘要、门户 | 官方双源 |
| 东亚样本 | 130 | 门户 | 官方页面 |
| 非洲样本 | 50 | 门户 | 官方页面 |
| 美洲样本 | 44 | 门户 | 官方页面 |
| 南亚样本 | 25 | 门户 | 官方页面 |
| 欧洲样本 | 9 | 门户 | 官方页面 |
| 男性样本 | 132 | 论文正文 | 论文摘要外 |
| 基因数 | 19,194 | 论文摘要、门户 | 官方双源 |
| 常染色体基因 | 18,319 | 论文正文 | 论文摘要外 |
| X 连锁基因 | 831 | 论文正文 | 论文摘要外 |
| Y 连锁基因 | 44 | 论文正文 | 论文摘要外 |
| A 级单倍型 | 174,376 | 论文摘要、门户 | 官方双源 |
| C 级单倍型 | 300,610 | 论文摘要、门户 | 官方双源 |
| T 级单倍型 | 486,288 | 论文摘要、门户 | 官方双源 |
| G 级单倍型 | 3,695,204 | 论文摘要、门户 | 官方双源 |
| 总量(论文口径) | 4,656,478 | 论文摘要 | 单一来源 |
| 总量(门户口径) | 4,651,897 | 门户 | 单一来源 |
| 表达样本 | 1,280 | 论文摘要 | 单一来源 |
| A 级覆盖阈值比例 | 99.1% | 论文正文 | 论文摘要外 |
| G 级覆盖阈值比例 | 22.2% | 论文正文 | 论文摘要外 |
| A 级 VQV 阈值 | 100 | 论文正文 | 论文摘要外 |
| T 级 VQV 阈值 | 50 | 论文正文 | 论文摘要外 |
| 窗口外扩 | 5 kb | 论文正文 | 论文摘要外 |
| 论文 DOI | 10.1093/nar/gkaf1232 | Europe PMC | 官方 |
附录 B:数字的来源分层
第一层是官方页面。门户项目概述页给出的样本构成、基因数、四级单倍型数、变异目录、总量口径属于这一层。它能直接看到,但页面会改版,要记下访问日期。
第二层是论文摘要与正文。Europe PMC 的全文 XML 给出的方法细节——VQV 阈值、窗口大小、覆盖比与完整性比、男女样本数——属于这一层。摘要里的数字最稳,正文里的方法参数可信度也高,但正文的某些统计是重采样后的结果,解读时要带上那个限制。
第三层是未核实项。这一层包括:REST API 的实际能力、BAM 自定义标签的确切命名、门户各地区页面的稳定 URL、后续版本的时间表。这些内容有的能推测,有的完全无法确认。本页凡涉及这一层,全部标明「未提供」或「未核实」,不做猜测性补全。
三层的使用原则是:做结论用第一、二层,做规划时对第三层留出余量。
附录 C:完整参考文献
-
Nagasaki M, Katayama T, Moriya Y, et al. JoGo 1.0: the ACTG hierarchical nomenclature and database covering 4.7 million haplotypes across 19,194 human genes. Nucleic Acids Research. 2026;54(D1):D1159–D1173. doi:10.1093/nar/gkaf1232
-
2026 Nucleic Acids Research database issue and the online molecular biology database collection. Nucleic Acids Research. 2026;54(D1):D1. 该期将 JoGo 列为人类、模式生物与比较基因组学区两篇 Breakthrough 之一。
-
JoGo 项目门户. Joint Open Genome and Omics Platform. https://jogo.csml.org 访问日期 2026-10-26。
-
JoGo 本地单倍型浏览器说明与常见问题. https://jogo.csml.org/faq 访问日期 2026-10-26。
-
Europe PMC 全文记录. PMCID: PMC12807767. https://europepmc.org/articles/PMC12807767
-
Rhie A, Nurk S, Cechova M, et al. The complete sequence of a human genome. Science. 2022. CHM13v2 参考序列来源。
-
Guan P, et al. Identifying and removing haplotypic duplication in primary genome assemblies. Bioinformatics. 2020. hifiasm 的早期方法基础。
-
Cheng H, Concepcion GT, Feng X, et al. Haplotype-resolved de novo assembly using phased assembly graphs with hifiasm. Nature Methods. 2021;18:170–175.
-
Morales J, Pujar S, Loveland JE, et al. A joint NCBI and EMBL-EBI transcript set for clinical genomics and research. Nature. 2022. MANE 标准集来源。
-
Cingolani P, et al. A program for annotating and predicting the effects of single nucleotide polymorphisms, SnpEff. Fly. 2012. 变异注释工具。
-
Li H, Durbin R. Fast and accurate short read alignment with Burrows-Wheeler transform. Bioinformatics. 2009. 比对工具谱系。
-
Robinson J, Barker DJ, Georgiou X, et al. IPD-IMGT/HLA Database. Nucleic Acids Research. 2020. HLA 官方等位基因库,JoGo 命名的形式参照。
附录 D:任务代码
如果你要把 JoGo 的编号接进一个批处理任务,下面这段脚本给出最小骨架:给定基因列表,逐个取 BAM、导出序列、写出编号与频次表的占位骨架。
#-- 批量处理基因列表的骨架,运行前需先准备好各基因的 BAM
import os
import subprocess
import pysam
GENES = ["HBB", "ALDH2", "HLA-A", "TP53"]
WORKDIR = "jogo_work"
os.makedirs(WORKDIR, exist_ok=True)
summary = []
for gene in GENES:
bam_path = os.path.join(WORKDIR, f"{gene}.bam")
if not os.path.exists(bam_path):
summary.append({"gene": gene, "status": "缺文件", "n_hap": 0})
continue
#-- 廉价完整性检查,挡掉下载不全的 BAM
check = subprocess.run(["samtools", "quickcheck", "-v", bam_path],
capture_output=True, text=True)
if check.returncode != 0:
summary.append({"gene": gene, "status": "文件损坏", "n_hap": 0})
continue
n_hap = 0
unique_seq = set()
with pysam.AlignmentFile(bam_path, "rb") as bam:
for read in bam.fetch(until_eof=True):
if read.query_sequence is None:
continue
n_hap += 1
unique_seq.add(read.query_sequence)
summary.append({
"gene": gene,
"status": "ok",
"n_hap": n_hap,
"n_unique": len(unique_seq),
"jogo_version": "1.0",
})
for row in summary:
print(row)
这段骨架有两条纪律要守住。第一,jogo_version 必须写进每一条输出,这是 §4.1 讨论的版本绑定在代码层的落地。第二,n_hap 与 n_unique 是两件事,前者是样本数,后者是不同序列数,统计口径不一样,混用会得到相反的结论。
附录 E:如果只记五件事
第一,JoGo 不是图泛基因组。没有 GFA,没有节点和边,发布物是编号字典加预比对 BAM。这一条决定了它能接什么工具、不能接什么工具。
第二,它解决的是身份问题。同一条序列在不同参考版本下叫什么,它给了一个跨版本可比的答案,做法是把两个参考也编进同一套频次排序。
第三,编号是版本内的稳定,不是永恒的稳定。引用必须带 JoGo 1.0,样本池扩大后编号会重排。
第四,A、C、T 三级可用,G 级不行。内含子层级的覆盖比只有两成出头,稀有变异大量缺失,别把 G 级当完整名单。
第五,样本严重偏东亚。欧洲只有九例,做人群结论前先把这个人种构成摆出来,看的人自然知道该信几分。
编辑说明
本页为千方医数集「AI-Ready 数据集百科」的 JoGo 篇。核验时间为 2026 年 10 月 26 日,核验方式是逐个访问 jogo.csml.org 的门户首页、FAQ、API、License 与更新页,并读取 Europe PMC 上的论文全文 XML(PMC12807767)。
DOI 的核准过程需要说明一句:任务初始给到的线索指向 gkaf988 附近,经 Europe PMC 检索与牛津学术页面比对,确认 JoGo 的实际 DOI 为 10.1093/nar/gkaf1232,见刊于《核酸研究》第 54 卷 D1 期,页码 D1159 至 D1173。任务描述里提到的 So3D 站点属于另一个项目,与本文无关。
未覆盖的内容有三处。其一,没有下载任何一个基因的 BAM,因此 BAM 内自定义标签的确切命名、以及每条读的实际长度分布,本页未给结论,相关脚本均以「标签名以头部声明为准」的方式写,避免写死。其二,门户的 API、FAQ、License 三页由前端脚本渲染,直接取回的是空壳,本页对这三页的描述只来自首页导航与论文正文,未做页面内容的逐项确认。其三,没有逐个基因核对 HLA 各席位是否在收录范围内,任务初始假设中的「HLA 区域命名」线索最终被判定为命名哲学层面的借用,而非在 HLA 座位的逐等位基因覆盖。
数字口径上有一处需要并列记录:单倍型总量在论文与门户中给出两个不同的合计,差额四千五百八十一条,官方未说明。本页两处均列出,未替官方择一。
本页的评分为编辑判断,不来自任何第三方评审;五维评分的理由逐条写在 §7.1,可以逐条质疑。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- geneasso — 共享标签:基因组学与多组学 / 变异与注释 / GWAS
- hgdp — 共享标签:基因组学与多组学 / 变异与注释 / GWAS
- sgdp — 共享标签:基因组学与多组学 / 变异与注释 / GWAS
- igvf-catalog — 共享标签:基因组学与多组学 / 变异与注释
- clinmave — 共享标签:基因组学与多组学 / 变异与注释
- gnomad — 共享标签:基因组学与多组学 / 变异与注释 / GWAS
- 1000-genomes — 共享标签:基因组学与多组学 / GWAS
- cosmic — 共享标签:基因组学与多组学 / 变异与注释
- clinvar — 共享标签:基因组学与多组学 / 变异与注释
- dbsnp — 共享标签:基因组学与多组学 / 变异与注释
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

