JoGo 长读长人类单倍型字典 — 4.7M 条名字,0 个图节点

258 个基因组 / 一万九千余个基因 / ACTG 四层命名

来源 https://jogo.csml.org发布时间: 2026-10-26最后更新: 2026-10-26 阅读 21
JoGo 长读长人类单倍型字典 — 4.7M 条名字,0 个图节点

信息速览

数据集名称JoGo 长读长人类单倍型字典 — 4.7M 条名字,0 个图节点
数据类型元数据,原始数据链接,本体映射
规模258 个基因组(108 例本次测序,150 例来自公开数据)
接入方式https://jogo.csml.org
AI 就绪度

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:完整参考文献

  1. 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

  2. 2026 Nucleic Acids Research database issue and the online molecular biology database collection. Nucleic Acids Research. 2026;54(D1):D1. 该期将 JoGo 列为人类、模式生物与比较基因组学区两篇 Breakthrough 之一。

  3. JoGo 项目门户. Joint Open Genome and Omics Platform. https://jogo.csml.org 访问日期 2026-10-26。

  4. JoGo 本地单倍型浏览器说明与常见问题. https://jogo.csml.org/faq 访问日期 2026-10-26。

  5. Europe PMC 全文记录. PMCID: PMC12807767. https://europepmc.org/articles/PMC12807767

  6. Rhie A, Nurk S, Cechova M, et al. The complete sequence of a human genome. Science. 2022. CHM13v2 参考序列来源。

  7. Guan P, et al. Identifying and removing haplotypic duplication in primary genome assemblies. Bioinformatics. 2020. hifiasm 的早期方法基础。

  8. 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.

  9. Morales J, Pujar S, Loveland JE, et al. A joint NCBI and EMBL-EBI transcript set for clinical genomics and research. Nature. 2022. MANE 标准集来源。

  10. Cingolani P, et al. A program for annotating and predicting the effects of single nucleotide polymorphisms, SnpEff. Fly. 2012. 变异注释工具。

  11. Li H, Durbin R. Fast and accurate short read alignment with Burrows-Wheeler transform. Bioinformatics. 2009. 比对工具谱系。

  12. 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 — 共享标签:基因组学与多组学 / 变异与注释

导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

返回 AI-Ready 数据集