信息速览
Hi-C 给出的是接触频率:某两个 5 kb 片段在一千万个细胞里被交联到一起的次数。这个数字很硬,也很糊——它把细胞之间的差别全部平均掉了。同一份样本里,有的细胞把增强子折到启动子旁边,有的没有;热图上只剩一个不高不低的灰度。
ChromPolymerDB 想做的是把这张平均图重新拆开。它从五十份人类 Hi-C 样本出发,用聚合物物理模型把接触频率还原成一条条具体的珠链:每个建模区段给出五千条三维构象,每条构象是一串带坐标的珠子,每颗珠子对应 5 kb 的染色质。官方把这个集合的规模写作约 10⁸ 条。
代价也很清楚:这些坐标是推断出来的,不是拍出来的;覆盖的是被挑选过的区段,不是整条染色体;分辨率停在 5 kb,再细就看不清了。它适合回答「空间关系在细胞之间有多不稳定」,不适合回答「这个细胞里这两个位点到底隔多少纳米」。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 全名 | ChromPolymerDB: a high-resolution database of single-cell 3D chromatin structures for functional genomics |
| 维护方 | 伊利诺伊大学芝加哥分校 生物医学工程系 生物信息与定量生物学中心、电子可视化实验室 |
| 通讯作者 | Constantinos Chronis(UIC)、Daniel M. Czajkowsky(上海交通大学) |
| 首次发布 | 2025 年,版本 v1.0 |
| 正式论文 | 核酸研究 2026 年 54 卷 D1 期,D994–D1004,DOI 10.1093/nar/gkaf1233 |
| 预印本 | bioRxiv,DOI 10.1101/2025.09.27.678816 |
| 样本数 | 50 份人类 Hi-C 样本(4D Nucleome 19、ENCODE 18、GEO 13) |
| 细胞类型 | 50 种(36 种正常、14 种疾病相关),覆盖十一大生理系统中的十个 |
| 构象总量 | 官方摘要写作约 10⁸ 条 |
| 基因组区段 | 六万余个 |
| 分辨率 | 5 kb,参考基因组 hg38 |
| 每区段构象 | 5000 条 |
| 接触判据 | 两珠欧氏距离小于 80 nm |
| 导出格式 | CSV(坐标表、距离矩阵),无整库打包 |
| 许可 | 论文 CC BY 4.0;数据库本身未单列数据许可 |
| 官方入口 | https://chrompolymerdb.bme.uic.edu/ |
§1 它要解决的具体麻烦
1.1 群体平均把最要紧的那部分信息抹掉了
一份标准 Hi-C 文库要动用百万量级的细胞。交联、酶切、连接、测序,最后得到的是一个矩阵,矩阵里每个格子是「这两个片段被连在一起」的相对频次。这个过程在设计上就是求平均:它不区分是哪个细胞贡献了这次连接,也无法追溯。于是热图上一条清晰的斜线、一个方正的域、一处亮点,都是统计意义上的结构,不是任何一个真实细胞的素描。
单细胞 Hi-C 想解决这个问题,但它有另一个麻烦:每个细胞能测到的接触太少。一份单细胞文库常常只有几万到几十万个有效接触,摊到全基因组上,5 kb 的格子绝大多数是空的。用它重建三维结构,等于用几十个点去定几千个位置,解不稳定。
sBIF 走的是第三条路:不去测单细胞,而是把群体数据当成一个约束,反推出一批满足这个约束的单细胞构象。逻辑上它更接近「用边缘分布采样联合分布」,代价是这批构象的可信度完全依赖于模型假设——核体积、聚合物行为、接触阈值这三件事一旦定错,出来的链就会系统性偏移。§4.2 的案例展示了这条路能走多远:在 MYC 位点上,它给出的不是一张图,而是一个分布。
1.2 三条常见的错误期待
第一条,期待它是「单细胞级别的观测坐标」。这是最普遍的误解。库里的每一个 x、y、z 都是模型算出来的,官方从未把它包装成显微成像的替代品。真实的三维测量要靠染色质追踪或超分辨成像,一次只能看几十个位点;这里一次给出整段 5 kb 链,但都是推断值。两者能互相印证,不能互相替代。
第二条,期待它能覆盖整个基因组、拿来做全基因组训练。实际情况是:建模单元由最外层拓扑关联域的边界决定,小于 1 Mb 的域会被合并,接触过于稀疏的区段被整体剔除。所以六万余个区段是「被选中的可建模区段」的集合,而不是把三十亿碱基切成 5 kb 之后的连续平铺。
第三条,期待它自带模拟引擎、可以自己改参数重跑。库里给的是结果,不是模型。sBIF 与 CHROMATIX 的代码需要回到原论文的仓库去拿;本库提供的是结构、查询界面和几个离线分析脚本(聚类、多体接触统计、可视化),不含从 Hi-C 重新推断构象的完整流程。
1.3 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 某个位点在单细胞间的构象差异 | 每区段五千条构象,可算两两距离分布 | 够,这是它最核心的能力 |
| 增强子与启动子的空间距离 | 指定珠对的三维距离及全系综分布 | 够,但距离是模型单位,需自行标定 |
| 多增强子协同接触(多体接触) | 可从坐标自行统计,官方给了范例脚本 | 够,口径须与官方一致(§5.6) |
| 跨细胞类型的结构比较 | 五十种细胞同一区段的并排查询 | 够,但样本选择受原始数据限制 |
| 表观遗传与结构的联合查看 | 内嵌 IGV,可挂 ENCODE 轨道或自传文件 | 够,轨道是外链,不是库内数据 |
| 全基因组连续的 5 kb 坐标 | 仅覆盖被建模区段 | 不够,缺的区段没有插值 |
| 实验验证过的单细胞位置 | 无 | 不够,库内无成像对照 |
| 直接训练三维结构预测模型 | 六万余区段乘五千条,体量大且需自行抓取 | 可做,工程成本高于想象(§5.7) |
| 非人类物种的构象 | 仅人类 | 不够,官方把扩展物种列为未来计划 |
| 商用产品内嵌 | 许可未单列 | 不够,须先取得书面确认 |
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 你手上有一份 Hi-C,想说明「这个增强子-启动子接触在细胞间不稳定」 | 提供同细胞类型同区段的构象系综,可算接触频率分布 | 先用同一区段对齐坐标,再用距离阈值复算接触率,别直接引用库里的百分比 |
| 你在做变异致病性解读,怀疑结构变异破坏了某个域内接触 | 给出野生型背景下的距离分布,作为「正常范围」参照 | 记下区段边界与珠序号映射,结构变异需自己改链再重算 |
| 你想比较两种细胞类型的调控结构差异 | 五十种细胞可并排查询,官方给了三细胞对比范例 | 选差异明确的细胞对(如高表达与不表达),先看表观轨道再下结论 |
| 你在搭三维基因组的多模态模型 | 坐标、距离、接触三类张量齐备,可作监督或先验 | 先确认许可与引用要求,再按区段批量导出(§5.7) |
| 你想验证自己的构象推断方法 | 有官方基线,同一区段可直接比对 | 用官方导出的距离矩阵做对齐,别用自己的单位换算 |
| 你只是想知道某个基因周围长什么样 | 网页端输基因名即可出图 | 直接开网页,不必写代码(§5.2) |
| 你要写综述,需要一句话说清它与 Hi-C 浏览器的差别 | 一条明确的分界:二维接触 vs 三维坐标 | 引论文讨论节,那里有它与六个近邻的对比 |
1.5 一句话判断
它不是「更好的 Hi-C 浏览器」,而是「把 Hi-C 的热图翻译成坐标」的一台翻译机:翻出来的句子读得通,但每个词都是译者的选择。
1.6 不适合谁:四条边界
不适合把坐标当测量值的人。 任何需要用纳米级真实距离下结论的研究——比如判断某个增强子在某细胞里是否物理接触——都不能只靠这个库。它的距离是模型内部的欧氏距离,单位与真实核内距离之间只做过整体标定,没做过逐位点校准。
不适合要全基因组覆盖的人。 区段是被挑选的,挑选规则与数据质量绑定:测序深度不够的样本,能建模的区段就少;接触稀疏的区域被整体剔除。要做全基因组扫描式的分析,会撞上大片的空洞,而且空洞不是随机的——它们系统性偏向基因贫瘠区与着丝粒附近。
不适合要跨物种比较的人。 目前只有人类。官方在讨论里把「扩展到其他物种」写成未来计划,说明现在没有。
不适合把五千条构象当五千个细胞的人。 这是一个采样集合,每条构象都是模型在同一组约束下的一次抽样。它们之间的差异反映的是解的分布宽度,不是细胞的真实异质性。把接触频率读成细胞阳性率,是本库最典型的一次误用,也是 json_ld 里专门标注的那一条。
§2 数据构成与规格
2.1 一份样本、一个区段、五千条链
库的组织方式可以拆成三级。最外层是样本:五十份 Hi-C,各自对应一个细胞系或一种实验条件,命名沿用原始数据的细胞系名,例如 Calu3、GM12878、IMR90、CD14 阳性单核细胞。中间层是区段:每份样本按自己的拓扑关联域边界切出若干可建模区段,官方给出的总量是六万余个,跨全部样本累计。最内层是构象:每个区段五千条珠链,每条链上珠子的数量由区段长度除以 5 kb 决定。
三级结构决定了查询方式。你不能「下载 Calu3 的全基因组坐标」,只能「查询 Calu3 在 8 号染色体某个区间的坐标」。网页端要求输入细胞系名与坐标或基因名,后端再判断这个区间是否落在某个已建模区段内;落不进去就返回无覆盖的提示。这个交互不是设计缺陷,而是数据本身的形状:模型是逐区段跑的,没有跨区段的连续解。
珠子的物理含义需要说清。一颗珠子代表 5 kb 染色质,被当作一个球形单元,直径与接触阈值同量级。珠间只有两种关系被显式建模:沿链的相邻连接与空间距离小于阈值的接触。域、隔间、环这些更高阶结构都不是输入,而是从这两条规则里涌现的——所以库里没有「TAD 标签」这一列:域边界是建模的输入(用来切区段),域本身不以标注形式存储。
2.2 字段与记录的完整字典
下表把网页端可见的信息项、接口返回的字段与导出文件的列放在一起。需要提醒的是:官方没有发布字段说明文档,下表依据论文方法节、官方教程仓库的示例脚本与前端代码整理,属于「按可观察行为归纳」,不是官方数据字典。
| 信息项 | 出现位置 | 取值形态 | 含义 | 使用注意 |
|---|---|---|---|---|
| 细胞系名 | 查询表单 | 字符串,如 Calu3 | 样本标识 | 大小写敏感,须与官方列表一致 |
| 染色体 | 查询表单 | 字符串,如 chr8 | 染色体 | 不同接口对前缀要求不一致(§5.3) |
| 区段起点 | 查询表单 | 整数,碱基坐标 | 查询区间左端 | 须落在已建模区段内 |
| 区段终点 | 查询表单 | 整数,碱基坐标 | 查询区间右端 | 超出部分被截断 |
| 基因名 | 查询表单 | 字符串,如 MYC | 按基因定位区段 | 走另一条后端路径 |
| 分辨率 | 论文与界面 | 固定 5 kb | 每颗珠的碱基数 | 全库统一,无多分辨率选项 |
| 参考基因组 | 论文 | hg38 | 坐标体系 | hg19 数据已被转换 |
| 构象编号 | 导出表 | 整数,0 至 4999 | 该区段的第几条链 | 跨区段不唯一,须与区段联合做主键 |
| 珠序号 | 导出表 | 整数,从 0 起 | 沿链的位置 | 与基因坐标的换算靠区段起点 |
| 三维坐标 x | 导出表 | 浮点 | 模型空间横坐标 | 单位未在文档中给出 |
| 三维坐标 y | 导出表 | 浮点 | 模型空间纵坐标 | 同上 |
| 三维坐标 z | 导出表 | 浮点 | 模型空间竖坐标 | 同上 |
| 两两距离 | 距离矩阵导出 | 浮点矩阵 | 构象内珠对欧氏距离 | 每构象一个矩阵 |
| 显著接触对 | 热图上三角 | 区间对列表 | CHROMATIX 判定的折叠重构接触 | 已做多重检验校正 |
| 实验接触频率 | 热图下三角 | 整数或浮点矩阵 | 原始 Hi-C 观测 | 与上三角共用色标 |
| 表观轨道 | 内嵌浏览器 | 外链或本地上传 | ENCODE 的组蛋白与转录因子数据 | 非库内存储 |
| 基因注释 | 热图下方面板 | 基因名与位置 | 区段内基因 | 点击可高亮 |
导出坐标表的确切列数,官方教程没有列全。仓库里的多体接触脚本只取其中四列——珠序号与 x、y、z——其余列在脚本里没有被引用。这意味着如果要做坐标之外的分析(比如按基因组坐标对齐),需要自己确认列的语义,不能照抄脚本的下标。
2.3 一条记录的完整解剖
以官方教程反复使用的那个例子为例:Calu3 细胞,8 号染色体 127,200,000 到 127,750,000,这是 MYC 所在的一段,长约 550 kb。除以 5 kb,得到约 110 颗珠子,正好对上脚本里「每个构象 110 行」的假设。
导出之后,文件是长表,一行一颗珠。结构大致如下:
id,sampleid,...,x,y,z
0,0,...,12.418,-3.207,8.915
1,0,...,13.002,-2.884,9.401
2,0,...,13.551,-2.402,9.877
#-- 同一构象编号下连续 110 行构成一条链
#-- 编号换到 1 之后,重新从链首开始
读这张表有三件事必须记住。第一,sampleid 是构象编号而不是样本编号,同一个区段内取值从 0 到 4999;跨区段不唯一,所以主键必须是「细胞系 + 染色体 + 区段 + 构象编号 + 珠序号」五元组。第二,id 是珠在链上的位置,从 0 开始,左闭右开地对应基因组坐标:第 n 颗珠覆盖区段起点加 n 乘 5000 到加 (n+1) 乘 5000。第三,xyz 是模型空间的坐标,单位在官方文档里没有写明;不同区段、不同样本之间的坐标不能直接相减比较,只有在同一构象内部算距离才有意义。
把这三条落到代码上:
import pandas as pd
import numpy as np
#-- 官方教程给出的导出文件命名规则:细胞系_染色体_起点_终点.csv
path = "Calu3_chr8_127200000_127750000.csv"
df = pd.read_csv(path)
print(df.columns.tolist())
print(df.shape)
#-- 每个构象的珠数,应与 (终点-起点)/5000 相符
per_model = df.groupby("sampleid").size()
print(per_model.head(), per_model.unique())
#-- 取一条链,算首尾距离,作为该构象的回转半径替代量
one = df[df["sampleid"] == 0].sort_values("id")
xyz = one[["x", "y", "z"]].to_numpy()
print(np.linalg.norm(xyz[-1] - xyz[0]))
print(np.linalg.norm(xyz - xyz.mean(axis=0), axis=1).mean())
最后两行给出两个最常用的结构量:端到端距离与平均回转半径。它们本身没有绝对意义,只有放进五千条构象的分布里、或者跨样本对比时,才有解释力。
2.4 五十份样本的来源与构成
样本不是自己测的,是从三个公共门户里挑出来的。官方在方法节给出了明确的三分法与筛选标准。
| 来源 | 样本数 | 补充说明 |
|---|---|---|
| 4D Nucleome 数据门户 | 19 | 美国核小体计划产出的高深度 Hi-C |
| ENCODE 门户 | 18 | 细胞系齐全,配套表观数据完整 |
| 基因表达综合库 | 13 | 零散提交,格式与深度差异较大 |
三条筛选标准是:人类来源、测序深度足以支撑 5 kb 分辨率、细胞群体足够均一。官方还说明,在某些情况下把条件相近的多个数据集合并,以把分辨率推到 5 kb。这条说明值得注意:所谓「五十份样本」中有部分是合并后的产物,一个样本不等于一次实验、一个文库。
构成上,三十六种为正常细胞(含原代与培养细胞),十四种为疾病相关;覆盖十一大生理系统中的十个,缺的是泌尿系统。这个覆盖度是按系统点数的,不是按细胞数加权的——某个系统可能只有一种细胞,另一个系统有七八种。
| 维度 | 官方表述 | 实际含义 |
|---|---|---|
| 正常细胞 | 36 种 | 含原代细胞与永生化培养细胞,二者不可混为一类 |
| 疾病相关 | 14 种 | 以肿瘤细胞系为主,含少量其他疾病模型 |
| 生理系统 | 十一分之十 | 缺泌尿系统,肾脏与膀胱来源的细胞不在库内 |
| 物种 | 仅人类 | 小鼠、果蝇等模式生物不在库内 |
| 合并样本 | 部分 | 为达到 5 kb 而合并条件相近的数据集 |
| 细胞均一性 | 筛选条件之一 | 排除了混合群体与组织切片类样本 |
有几类具体的细胞在论文的案例里被点名:Calu3(肺腺癌)、GM12878(B 淋巴母细胞样)、IMR90(胎肺成纤维)、CD14 阳性单核细胞(原代)。这四个恰好构成一条对照轴——两种高表达 MYC 的细胞、一种低表达的、一种正常原代,官方用它来讲跨样本比较能看出什么(§4.3)。
2.5 与同类资源的字段差异
| 对比项 | ChromPolymerDB | 3D Genome Browser | HiChIPdb | GSDB | Nucleome Browser |
|---|---|---|---|---|---|
| 核心内容 | 三维坐标 | 二维接触矩阵 | 二维接触矩阵 | 三维结构 | 多组学浏览 |
| 数据结构 | 每区段五千条链 | 每条记录一套矩阵 | 每条记录一套峰 | 结构模型 | 异构资源索引 |
| 单细胞分辨率 | 模型系综 | 部分数据集有 | 无 | 部分 | 视资源而定 |
| 分辨率 | 5 kb | 低至 1 kb | 视实验 | 视模型 | 视资源 |
| 数据来源 | 五十份 Hi-C | 八百余套公开数据 | 公开 HiChIP | 已发表模型 | 多门户聚合 |
| 是否含模型推断 | 全部是 | 否 | 否 | 是 | 部分 |
| 导出形态 | CSV 坐标与距离 | 矩阵文件与注释 | 峰表 | 结构文件 | 链接跳转 |
| 覆盖范围 | 六万余区段 | 全基因组 | 全基因组 | 视研究 | 视资源 |
| 许可 | 未单列 | 随来源定 | 随来源定 | 随来源定 | 随来源定 |
这张表想说明的只有一件事:本库在「是否含模型推断」这一列上是唯一全部为「是」的。其余资源的坐标要么来自实验,要么来自各自研究的一次性建模,都不是可批量取用的系综。
2.6 从接触矩阵到坐标的四步预处理
官方把从原始 Hi-C 到可建模区段的过程写成四步,每一步都会在最终数据里留下痕迹。
第一步是取矩阵。有 hg38 版本的 .hic 就直接下载;只有 hg19 版本的,用 HiCLift 转到 hg38;连矩阵都没有的,从原始测序读段重新生成。这一步决定了坐标系的一致性,也解释了为什么库内所有区段都是 hg38。
第二步是调用域边界。用 OnTAD 在 50 kb 尺度上跑,参数放得比较宽松(惩罚项置零、局部差异阈值 0.25、最小与最大域规模分别设为 3 与 80 个 50 kb 单元),目的是尽量多地覆盖基因组。只取最外层(第一层)的域作为建模单元,因为最外层域通常包含完整的结构单元。
第三步是切区段与合并。小于 1 Mb 的域并入邻域,前提是合并后不超过 3.5 Mb。这条规则直接决定了库里的区段长度分布:太短的不要,太长的拆不开就先合并,上限 3.5 Mb。
第四步是剔除稀疏区。一个区段里如果含有任何接触的格子不到百分之一,整段剔除。这条最狠,也最能解释「为什么有些基因查不到」:它在数据里存在,但它的邻域接触太稀疏,模型跑不出可信结构。
| 步骤 | 工具 | 关键参数 | 留下的痕迹 |
|---|---|---|---|
| 取矩阵 | 原始门户、HiCLift | 参考基因组 hg38 | 全库坐标统一 |
| 调边界 | OnTAD | 50 kb 分辨率、宽松参数 | 区段边界与常见 TAD 调用结果不完全一致 |
| 切与并 | 自定规则 | 小于 1 Mb 合并、上限 3.5 Mb | 区段长度集中在 1 至 3.5 Mb |
| 剔稀疏 | 自定规则 | 有接触的格子占比小于百分之一 | 部分基因区域整体缺失 |
第三步与第四步的规则是官方自定的,没有对应的公开工具,也没有在论文里给出实现代码。这意味着别人无法用同样的规则复现出同一套区段边界——这是本库在可复现性上的一处结构性缺口,不是疏漏,而是方法学论文常见的边界。
§3 它是谁的数据库:一个可视化实验室与一个物理模型
3.1 机构与团队
库挂在伊利诺伊大学芝加哥分校的生物医学工程系下,具体是两个单元的联合产物:生物信息与定量生物学中心负责数据与建模,电子可视化实验室负责前端与三维渲染。域名里的 bme 就是生物医学工程系的缩写,这一点常被误读成某个独立机构。
作者列表有十二人,共同一作为 Min Chen 与 Lin Du。通讯作者两位:Constantinos Chronis,UIC 生物化学与分子遗传学系,负责染色质与基因调控方向;Daniel M. Czajkowsky,上海交通大学生物医学工程学院,负责方法学与单分子方向。其余作者覆盖建模(Jie Liang)、可视化(G. Elisabeta Marai、Debaleena Chattopadhyay)、数据(Siyuan Zhao、Bowei Ye、Pourya Delafrouz、Hammad Farooq)与生物学(Zhifeng Shao)。
这个组合解释了两件事:前端比多数生物数据库细,因为有专门的可视化实验室参与,三维用 WebGL 直接渲染而不是塞静态图;方法节比常规数据库论文长,因为模型是主线,数据库是配套。
| 角色 | 人员 | 所属 | 负责 |
|---|---|---|---|
| 共同一作 | Min Chen | UIC 生物医学工程 | 数据构建、分析、初稿 |
| 共同一作 | Lin Du | UIC 生物医学工程 | 建模流程、项目管理 |
| 通讯 | Constantinos Chronis | UIC 生物化学与分子遗传学 | 染色质生物学、课题统筹 |
| 通讯 | Daniel M. Czajkowsky | 上海交通大学 | 方法学、单分子 |
| 建模 | Jie Liang | UIC 生物医学工程 | sBIF 与构象推断 |
| 可视化 | G. Elisabeta Marai | UIC 电子可视化实验室 | 三维界面与交互 |
| 数据 | Siyuan Zhao、Bowei Ye | UIC | 数据处理与软件 |
3.2 模型的谱系:从串珠与结合者到 sBIF
要理解库里那些坐标是怎么来的,得先知道它所处的方法谱系。染色质聚合物模型有两条主线:一条是平衡态的自组装模型,把染色质当成自避链,链上散布能与扩散分子结合的位点,结合之后自动成环;另一条是非平衡的挤出模型,靠马达蛋白主动把环挤出来。前者在文献里通常叫串珠与结合者模型(strings and binders),后者常与黏连蛋白、CTCF 一起讨论。
sBIF 属于前一条线,但做法反了过来。传统用法是先设参数、再算构象、最后与 Hi-C 比;sBIF 是先拿 Hi-C 当目标,用序贯贝叶斯的方式一步步收紧约束,生成一批与目标一致的构象。官方强调它「假设最少、无可调参数」,指的是不需要人工调结合能或浓度这类物理量——约束来自数据本身。
这里必须切开一个容易混淆的地方。串珠与结合者模型的原产地是那不勒斯的一支物理团队,他们围绕 Sox9、Epha4、HoxD 等位点做过大量工作,参数集散落在各篇论文的补充材料里,从未汇总成一个公开参数库。本库不是那套参数集的集合,它收录的是模型跑完之后的结构坐标。名字里的 polymer 指的是建模手段,不是指它存的是参数。
3.3 资金、期刊与收录
论文的资助来源横跨两国:中国国家重点研发计划一项、国家自然科学基金四项、何鸿毅基金会;美国国立卫生研究院六项、国家科学基金会一项、能源部 INCITE 计划的高性能计算机时;另有 UIC 健康数据科学研究所的支持。这套资助结构说明计算资源不是小数目——五十份样本、每份五十万条零模型构象、每个区段五千条推断构象,加起来是千万核时量级的工作。
期刊方面,正式版发表在核酸研究的数据库专刊,2026 年 54 卷 D1 期,页码 D994 到 D1004。时间线是 2025 年 8 月 13 日收稿、9 月 27 日修回、10 月 16 日接受、11 月 18 日上线,随后收入次年一月的专刊。预印本在 2025 年 9 月 29 日挂出,节点正好在收稿与修回之间。
第三方收录方面,国家生物信息中心的 Database Commons 有两条记录(编号 10677 与 10686),字段基本重复,内容略有出入:一条把总量写成 10⁸,另一条在摘要里把上标写丢成「108」。这类小毛病在自动抓取的目录里很常见,引用时应以论文与官网为准。
3.4 它不是什么:先把三个近邻排除
第一个要排除的是「Hi-C 数据仓库」。它不存原始测序数据,也不存接触矩阵的原始文件;热图是查询时从库里取的中间结果,用于和模型对照。要拿原始 .hic,得回 4DN、ENCODE 或 GEO。
第二个要排除的是「三维基因组浏览器」。浏览器类的资源围绕基因组坐标组织注释,核心动作是「沿染色体滑动看轨道」;本库围绕构象组织坐标,核心动作是「取一组链、算距离分布」。两者的检索入口长得像,取出来的东西完全不同。
第三个要排除的是「参数库」。名字里带 polymer,容易让人以为它存的是结合能、浓度、网格间距这类模型参数。实际上这些参数在 sBIF 里被消解掉了——官方明确说无可调参数。库里没有一张参数表,只有坐标表。
§4 质量与特色
4.1 分辨率与区段划分的实际含义
5 kb 是一个需要放在上下文里理解的分辨率。它比常规 Hi-C 的 25 kb 或 40 kb 细,比 Micro-C 的几百碱基粗,比单细胞成像能看到的位点密得多。落到生物学上:一个 5 kb 的珠子大约能装下几个基因的启动子区,但装不下一个完整的增强子簇;能看出「这一带靠近那一带」,看不出「这个碱基贴着那个碱基」。
这个尺度决定了它的适用问题。域级别的重排、隔间切换、大范围的距离变化,都在它的能力范围内;单个转录因子结合位点与启动子之间的精确几何,超出它的能力。用的时候要把问题调到与分辨率匹配的尺度上,否则会得到一堆看起来有差异、实际是噪声的数字。
区段划分带来的限制更实际。因为建模单元是最外层域,库里的区段边界与常见的 TAD 调用结果不会完全一致;因为小于 1 Mb 的域被合并,短域在库里可能根本不存在;因为稀疏区被剔除,着丝粒附近与基因贫瘠区大片缺失。这三点叠加起来,使得「按基因查不到」成为常态而非例外。查不到时先别怀疑拼写,先看该区间是否落在已建模区段内。
4.2 案例:Calu3 细胞里 MYC 位点的六个增强子
官方用 MYC 讲了两遍故事,一遍讲单样本内的异质性,一遍讲跨样本的差异。这个例子值得细看,因为它同时展示了这个库能做什么、以及它的数字该怎么读。
先看单样本。Calu3 是肺腺癌细胞,MYC 高表达。官方先在热图与表观轨道上圈出六个候选增强子,再用 sBIF 为该区段生成五千条构象,然后统计有多少条构象里至少有一个增强子与 MYC 的转录起始位点距离小于阈值。结果是 45.5%,也就是五千条中的二千二百七十五条。再往下拆:其中 37.5%(一千八百七十一条)只有单个增强子接触,14.8%(三百三十六条)有两个增强子同时靠近,3%(六十八条)有三个。
官方由此得出一个判断:约 18% 的增强子-启动子关系发生在多体构型里。这句话的含义是,在这批构象中,多数接触是「一对一」的,但也有相当一部分是几个增强子聚在启动子周围同时接触。官方进一步算了每个增强子的偏好:增强子 I、III、IV 更容易参与多体接触,其中 I 对三增强子组合的富集倍数达到 5;VI 更偏向单增强子接触,富集倍数 1.19。三增强子的具体组合也有偏好,(IV, V, VI) 占 54.4%,(I, IV, VI) 占 20.6%,(I, II, III) 占 8.8%。
这些数字怎么读,是这一节的关键。它们描述的是五千条模型构象的分布,不是五千个细胞的普查。官方自己在方法里写得很清楚:每个数据集生成五千条构象,两条珠距离小于 80 nm 记为接触。所以「45.5%」的准确读法是「在这个模型系综里,45.5% 的采样满足该几何条件」,它可以用来比较不同细胞类型之间的相对高低,不能用来声称「这个肿瘤里近一半细胞如此」。
放到跨样本比较里,这个相对性就更清楚了。官方把 Calu3、GM12878 与 CD14 阳性单核细胞放在一起:前两者 MYC 高表达,后者几乎不表达。三者的增强子 repertoire 不同——Calu3 有六个活跃增强子,GM12878 共享其中两个另有一个独有的,单核细胞的候选增强子与转录起始位点没有接触。GM12878 的增强子-启动子接触只出现在约 10% 的构象里(五千条中的四百四十六条),其中三增强子占 1.8%、双增强子占 10.3%;同样的多体组合在 Calu3 里出现频率高出 9.6 倍。
三个细胞都是「MYC 高表达」,但空间组织方式完全不同:Calu3 靠多增强子协同,GM12878 靠少量稳定接触。这个结论用群体 Hi-C 看不出来,因为平均之后两者的热图都只是一个方块。这正是 §4.2 的案例想说明的价值:不是给了更清楚的热图,而是给了热图背后的分布。
4.3 跨样本比较做出了什么
跨样本比较在实现上是同一套工具的两次调用:选定两个细胞系、同一个区段,界面并排显示两张热图、两组构象。难点不在工具,在可比性。三个前提必须同时成立,比较才有意义:区段边界一致(同一段基因组)、分辨率一致(都是 5 kb)、构象数量一致(都是五千条)。官方在案例里选的三个细胞系恰好满足这三点,因为它们都覆盖了 MYC 所在的同一段。
不满足时会出问题。如果两个细胞系的测序深度不同,能建模的区段就不同,交集可能比想象的小;如果其中一个的区段因为稀疏被剔除,界面上会直接没有数据,而不是给一个低质量的解。这类空结果容易被误读成「该细胞里没有这个结构」,实际是「该细胞里这段没被建模」。两者的区别在写结论时是致命的。
4.4 精度校验:拿什么对齐
官方给的校验方式是自洽性检验:把五千条构象的接触频率汇总,得到一张模拟接触图,再与实验 Hi-C 图比。两张图在同一区段、同一分辨率下应当高度相似,这是模型能成立的最低条件。界面上把实验图放在下三角、模型图放在上三角,就是为了让这种对照一眼可见。
这种校验有一个固有的弱点:它验证的是「模型能复现输入」,不是「模型反映了真实单细胞结构」。因为输入就是群体 Hi-C,模型只要拟合得好,自洽性检验必然通过。真正的独立验证需要单细胞成像或单细胞 Hi-C 的对照,官方在讨论里提到与染色质追踪数据的整合是未来方向,说明现在还没有系统性的外部验证。
这一点不应被读成缺陷。任何从群体数据反推单细胞分布的方法都面临同样的困境:没有金标准。诚实的做法是把校验的层级说清楚——本库通过的是「群体层面自洽」,未通过的是「单细胞层面独立验证」。用的时候按这个层级来用,就不会越界。
4.5 官方未公布的部分
以下几项在论文、官网与教程里都找不到明确说法,只能标为未公布:坐标的物理单位、每个样本的建模区段数、导出文件的确切列定义、单条构象的收敛判据、五千条构象的独立性如何保证、更新频率与版本策略。这些不是细枝末节:单位与列定义决定能否做定量比较,收敛判据决定系综宽度是否可信。
遇到这类空白,正确做法是回到论文方法节与其引用的 sBIF 原文,而不是靠猜——本库对 sBIF 只做了引用性描述。
§5 怎么拿到:界面、接口与离线脚本
5.1 三条取数路径
第一条是网页端。输入细胞系与坐标或基因名,得到热图、三维结构与下载按钮。适合探索与少量取数,不需要写代码。
第二条是后端接口。前端调用的那几个地址可以直接用 HTTP 客户端打,返回 JSON 或文件流。适合脚本化,但官方没有接口文档,参数与返回结构要从前端代码里读。
第三条是离线脚本仓库。仓库里放的是分析脚本,不是数据;它假设你已经从网页端导出了 CSV。适合复现官方的多体接触统计与聚类分析。
三条路径都不提供整库打包。若项目需要全量坐标,工程量按「六万余个区段逐个请求」估算,而不是按下载一个压缩包估算。
5.2 网页端的一次完整查询
打开站点,界面是一个典型的单页应用,首屏需要几秒加载脚本。查询区有两组输入:细胞系下拉框与坐标区间,或者细胞系与基因名。填完点查询,页面下方依次出现三个面板。
上方面板是二维接触图。上三角是模型判定的显著接触,下三角是实验 Hi-C,共用一条色标,可拖动滑块调对比度。右上角按钮依次是:显著接触两两比较、恢复原图、展开大图、下载显著接触、生成三维结构。展开后多出一个内嵌基因组浏览器,可挂 ENCODE 轨道或上传自己的 bed 与 bigwig。
中方面板是热图本体。点任意格子会高亮对应的接触对;拖动可以缩放。
下方面板是该区段内的基因列表。点某个基因,会把它在热图与三维视图里同时标出来。这一步对定位很有用:想知道 MYC 的转录起始位点落在第几颗珠上,点一下就知道了。
三维视图在另一次点击后生成,默认显示「最具代表性」的构象,即与系综平均相关性最高的一条。可在五千条间切换或按编号跳转;视图支持旋转、缩放、按珠上色,选中珠对可算距离并显示其分布。
5.3 后端接口:没文档,但可以读前端
官方没有 API 文档,但前端打包文件里保留了全部调用地址与请求体结构。整理出来大致是九条:
| 接口 | 方法 | 请求体要点 | 用途 |
|---|---|---|---|
/api/getChromosData |
POST | 细胞系、染色体、区段 | 取接触矩阵与显著接触 |
/api/getChromosValidIBPData |
POST | 细胞系、染色体、区段 | 取该区段内有效区间 |
/api/getChromosomeSize |
POST | 细胞系、染色体 | 取染色体上可建模区段列表 |
/api/getChromosomeSizeByGeneName |
POST | 细胞系、基因名 | 按基因反查区段 |
/api/getGeneList |
POST | 染色体、区段 | 取区段内基因 |
/api/geneNamesListSearch |
POST | 关键词 | 基因名联想搜索 |
/api/getChromosome3DData |
POST | 细胞系、染色体、区段、构象号 | 取单条构象坐标 |
/api/downloadFullChromosome3DPositionData |
POST | 细胞系、染色体、区段、是否示例 | 流式下载坐标 CSV |
/api/downloadFullChromosome3DDistanceData |
POST | 同上 | 流式下载距离矩阵 CSV |
一个必须知道的细节:染色体命名在两个接口之间不一致。取基因列表时前端会先 slice(3) 把 chr 前缀去掉再传,取接触矩阵时则原样传。这说明后端对命名的处理没有统一,写脚本时要按接口分别试,先用一个已知可用的区段探通再批量跑。
最小可用的一次调用:
#-- 取一个区段内的基因列表;后端期待不带 chr 前缀
curl -s -X POST "https://chrompolymerdb.bme.uic.edu/api/getGeneList" \
-H "Content-Type: application/json" \
-d '{"chromosome_name":"8","sequences":{"start":127200000,"end":127750000}}'
import requests
BASE = "https://chrompolymerdb.bme.uic.edu"
payload = {
"cell_line": "Calu3",
"chromosome_name": "chr8",
"sequences": {"start": 127200000, "end": 127750000},
"sample_id": 0,
}
r = requests.post(f"{BASE}/api/getChromosome3DData", json=payload, timeout=180)
r.raise_for_status()
data = r.json()
print(sorted(data.keys()))
#-- 返回里通常带一列逐构象的距离向量,键名形如 sample_distance_vector
if "sample_distance_vector" in data:
vec = data["sample_distance_vector"]
print(len(vec), vec[:5])
5.4 导出 CSV 的列与规模
坐标导出走的是流式接口,返回的是文件流,前端把它拼成一个 CSV 交给浏览器下载。命名规则从教程示例可推知为「细胞系_染色体_起点_终点.csv」。
规模要提前算。一个 550 kb 的区段约 110 颗珠,乘五千条构象,是五十五万行;一个 3.5 Mb 的区段约 700 颗珠,乘五千,是三百五十万行。单文件几十到几百兆,五十份样本乘六万余区段,全量在拍字节量级之外——正确说法是:全量远超单机可承受,任何项目都应先划定细胞系与区段子集。
import requests
BASE = "https://chrompolymerdb.bme.uic.edu"
body = {
"cell_line": "Calu3",
"chromosome_name": "chr8",
"sequences": {"start": 127200000, "end": 127750000},
"is_example": False,
}
with requests.post(f"{BASE}/api/downloadFullChromosome3DPositionData",
json=body, stream=True, timeout=600) as r:
r.raise_for_status()
with open("Calu3_chr8_127200000_127750000.csv", "wb") as fh:
for chunk in r.iter_content(chunk_size=1 << 20):
fh.write(chunk)
距离矩阵单独一个接口,体积比坐标表大一个量级(每构象是珠数的平方),只在确实需要两两距离时才下载。多数分析可以只拿坐标,本地算距离。
5.5 离线脚本仓库
仓库在 GitHub 上,账号 ldu3,仓库名 ChromPolymerDB_tutorial。里面四个东西值得看:一份图文教程(就是网页端每个按钮的说明书)、一份样本信息表、一个脚本目录。脚本目录下四个文件:聚类笔记本、基于图像自编码器的聚类脚本、多体接触统计的 R 脚本、坐标可视化笔记本。
它们的定位是「分析示例」,不是「生产工具」。三个具体问题:R 脚本第一行把工作目录硬编码成作者本机的 Windows 路径;脚本假设每个构象固定 110 行,换一个区段就得改;聚类笔记本里的参数是按 MYC 区段调的,换区段不保证合理。
这不是苛责。数据库论文附带的脚本普遍是这个状态,能跑通示例就算达标。使用时的正确姿态是把它当参照实现读,而不是当依赖装。
5.6 自己算多体接触:复现官方口径
多体接触是这套数据里最有信息量的量,也最容易被算错。官方脚本给出了口径,值得逐行拆——§4.2 的案例里那些百分比,正是按这套口径算出来的。
它先按构象编号把珠分组,每组取七个珠:六个增强子加一个转录起始位点。然后对每组算七个点之间的所有两两距离,只保留涉及启动子的那六对。接着用一个阈值筛出「算接触」的对,最后按构象统计有几对同时成立。
关键在于阈值。官方正文写的是 80 nm,脚本里写的是 distance < 80 + 34.3。多出来的 34.3 没有在正文里解释,推测与珠子半径或接触判据的几何修正有关,但官方未说明。这个差异会直接改变多体接触的比例:阈值放宽三成,三增强子同时接触的构象数会明显上升。复现时若要与论文数字对齐,必须用脚本里的阈值;若要按物理定义严格算,用 80。
import itertools
import pandas as pd
df = pd.read_csv("Calu3_chr8_127200000_127750000.csv")
#-- 官方示例的珠序号(0 基):六个增强子 + 一个转录起始位点
beads = [3, 19, 40, 61, 77, 94, 107]
tss = beads[-1]
rows = []
for sid, grp in df[df["id"].isin(beads)].groupby("sampleid"):
pos = grp.set_index("id")[["x", "y", "z"]]
n_close = 0
for b in beads[:-1]:
d = ((pos.loc[b] - pos.loc[tss]) ** 2).sum() ** 0.5
n_close += int(d < 80 + 34.3)
rows.append((sid, n_close))
res = pd.DataFrame(rows, columns=["sample_id", "n_enh"])
print(res["n_enh"].value_counts().sort_index())
print((res["n_enh"] >= 1).mean())
最后一行输出的就是「至少一个增强子接触」的比例。把它与论文的 45.5% 对照,是检验自己是否读对了列、对齐了珠序号的最快办法。对不上,先查珠序号是不是差了 1,再查阈值。
5.7 批量抓取的现实约束
没有整库打包,批量只能逐区段请求。工程上有四件事必须先想清楚。
第一,区段清单从哪来。官方没有发布区段列表文件;可行的办法是先按染色体调 /api/getChromosomeSize 枚举区段,再逐个下载,这一步本身就要几百次请求。
第二,节流。站点是单机 Flask 加 Redis 缓存,没有公开的速率限制说明。稳妥做法是串行加固定间隔;被限流时返回的不是明确的错误码,而是超时。
第三,断点续传。逐区段下载必然中断,至少要记录已完成清单。文件命名里已含细胞系与坐标,可以据此做幂等。
第四,存储估算。单区段几十到一百多兆,一千个区段就是几十到上百吉字节。规划时按区段数乘单区段体积估,不要按「五十份样本」估。
§6 与库内词条的关系
6.1 关系图谱
本库在站内不是孤立词条,它与三类已有词条构成上下游关系:数据来源类、同域不同层类、下游应用类。
| 关系 | 站内词条 | 关系性质 | 具体说明 |
|---|---|---|---|
| 上游数据源 | ENCODE 基因组功能元件百科全书 | 供料 | 十八份样本的 Hi-C 与表观轨道来自该门户 |
| 上游数据源 | Roadmap Epigenomics | 参照 | 表观图谱可作为结构解释的旁证,非直接供料 |
| 同域不同层 | 相隔五十万碱基的两个位点 — 3D Genome Browser | 互补 | 一个存二维接触,一个存三维坐标(§6.3) |
| 下游应用 | CZ CELLxGENE Census — 版本化云端单细胞语料 | 可组合 | 结构系综可与表达谱按细胞类型对齐 |
| 下游应用 | Single Cell Expression Atlas | 可组合 | 提供同一细胞系的表达背景,用于解释构象差异 |
| 方法来源 | sBIF 原始论文 | 前置 | 库不含推断代码,算法须回原文 |
6.2 检索路径
站内的检索习惯是按数据类型找词条。如果你的问题是「这个位点的接触频率有多高」,路径是三维基因组浏览器那条线;如果你的问题是「这个位点在细胞之间隔多远」,路径通向本库。两条路径在中途会交叉,因为都要先确定细胞系与坐标,但取出来的东西不同。
按标签检索时,本库落在基因组学与多组学、表观基因组、单细胞基因组学、测序数据四个标签下。前两个是内容标签,第三个是方法标签(它的单细胞性是模型给的,不是测序给的),第四个是来源标签。第三个标签容易被误读成「单细胞测序数据」,实际不是——库里没有一条单细胞读段。
6.3 与 3D Genome Browser 的区隔
这两个词条最容易被混为一谈,因为名字都带三维基因组,界面都长得像浏览器。区别可以压成三句话。
第一句:一个存矩阵,一个存坐标。3D Genome Browser 的核心资产是实验得到的接触矩阵与在其上算出的注释(隔间、域、环),打开看到的是热图与轨道;ChromPolymerDB 的核心资产是模型算出的三维坐标,打开看到的是珠链。前者的最小查询单位是一个矩阵格子,后者是一条链上的一颗珠。
第二句:一个回答「多频繁」,一个回答「多远」。热图上的数值是接触频次,反映的是群体里两个片段被连在一起的相对次数;坐标里的数值是欧氏距离,反映的是模型里两颗珠的空间间隔。这两个量有关系,但不等价:接触频率高不一定距离近(可能只是片段长),距离近也不一定在热图上显著(可能接触被噪声淹没)。
第三句:一个可回溯到实验,一个不可。前者每套数据能追到一次实验与一个登录号,后者每条构象只能追到一个模型与一组参数。这不是贬低,而是划定边界:要证据链用前者,要结构假设与分布用后者。
§7 质量评估与局限性
7.0 阅读本节前的一个前置校正
在打分之前,要先校正一个默认预期:多数人会把「数据库」默认理解为「数据的集合」,于是用「覆盖多少、多干净、多完整」这把尺子来量。用这把尺子量本库,会得出一个很低的分数,因为它覆盖不全、没有原始数据、坐标还都是算出来的。
正确的尺子是「模型的集合」:它提供的是一批可复现的结构假设,价值在分布宽度与可比较性,不在覆盖率。换尺子之后,评分重心从「有多少」转到「一致性如何、口径是否清楚、能否复现」。误判往往来自尺子拿错,而不是数据本身有诈。
7.1 五维评分
按 DAIMS 框架的五个维度打分,每项十分制。分数是编辑判断,不是官方数据。
| 维度 | 分数 | 判断依据 |
|---|---|---|
| 目的性(Purpose) | 8 | 目标明确:把群体 Hi-C 变成可查询的单细胞结构;边界也写得清 |
| 完整性(Completeness) | 6 | 五十份样本、六万余区段,覆盖十个生理系统;但仅人类、仅区段、缺原始矩阵 |
| 准确性(Accuracy) | 6 | 群体层面自洽性通过;单细胞层面无独立验证;单位与列定义未公布 |
| 一致性(Consistency) | 7 | 全库统一 5 kb 与 hg38;接口命名与导出列有不一致处 |
| 可获得性(Accessibility) | 7 | 免费、无需注册、界面流畅;无整库下载、无接口文档、无数据许可 |
| 综合 | 6.8 | 方法学上扎实,工程上可用,制度上留白 |
7.2 分数背后的理由
目的性扣两分,是因为论文把「能做什么」讲得很足,对「什么不算它的用途」只在方法节一笔带过,误用门槛低。完整性扣在「只有人类」与「只有区段」两处:前者是建模流程要按物种重调的主动取舍,后者是稀疏区跑不出结构的被动结果。
准确性给 6 最需要解释。自洽性检验做得规范——零模型五十万条、多重检验校正、显著接触阈值明确;缺的是外部验证,没有任何一条构象被单细胞成像或单细胞 Hi-C 直接对照过。给及格偏上合适,给高分等于替它背书。
一致性扣在接口对染色体命名处理不统一、导出列无文档、坐标单位未标明,三处都会让第一次接入的人踩坑。可获得性扣在「能看不能搬」:网页端体验在同类资源里属上乘,但整库无法打包、接口无文档、许可未单列,对一个以支持广泛使用为初衷的库是明显落差。
7.3 已知的、可枚举的偏差
| 偏差 | 机制 | 后果 | 缓解办法 |
|---|---|---|---|
| 覆盖偏差 | 稀疏区被剔除,短域被合并 | 基因贫瘠区与着丝粒附近系统性缺失 | 分析前先统计目标区段是否在库内 |
| 样本偏差 | 五十份样本由公共数据可用性决定 | 热门细胞系过度代表,罕见细胞类型缺席 | 按细胞类型查覆盖,别假设均匀 |
| 疾病比例偏差 | 十四种疾病样本对三十六种正常 | 疾病与正常的比较样本量不对等 | 比较时报告每组样本数 |
| 深度偏差 | 不同来源测序深度差异大 | 深样本区段多,浅样本区段少 | 同细胞类型比较时对齐区段交集 |
| 模型偏差 | 核体积、阈值等假设全样本共用 | 系综宽度可能系统性偏窄或偏宽 | 跨样本比较只看相对差异 |
| 阈值偏差 | 接触判据 80 nm,脚本用 80 加 34.3 | 多体接触比例随阈值显著变化 | 固定阈值并写明 |
| 采样偏差 | 五千条构象非独立细胞 | 接触频率不等于细胞阳性率 | 表述改成「系综中占比」 |
其中两条最值得展开。核体积在 sBIF 里逐样本设定,官方在补充材料给了每个样本的核尺寸,但正文没讲这个值怎么来、误差多大;它直接约束链的紧凑程度,定小了链就挤,定大了链就散,两种情况都会改变距离分布的形状。
采样偏差则是解读层面的。五千条构象来自同一约束集,它们之间的差异是「满足约束的解有多少种」,不是「细胞之间有多少种」。这两件事在数学上相关、在生物学上不等价,把前者说成后者是本库最容易被写进讨论段的一句错话。
7.4 外部验证矩阵
| 验证类型 | 是否做过 | 证据 | 可信度影响 |
|---|---|---|---|
| 群体 Hi-C 自洽 | 是 | 模拟接触图与实验图并排对照 | 支持「能复现输入」 |
| 独立 Hi-C 留出 | 未报道 | 论文未见留出集设计 | 无法判断过拟合程度 |
| 单细胞 Hi-C 对照 | 未报道 | 讨论中列为未来方向 | 单细胞层面无外部锚点 |
| 染色质追踪成像 | 未报道 | 仅提到可整合,未做系统对照 | 纳米级距离无标定 |
| 与表达谱一致性 | 部分 | 案例中与 RNA-seq 表达高低定性吻合 | 弱支持,属旁证 |
| 与表观轨道一致性 | 部分 | 增强子活性与接触频率方向一致 | 弱支持,属旁证 |
| 跨方法复现 | 未报道 | 无第二套模型结果可比 | 无法排除方法特异性 |
这张表最该被记住的是第二行与第三行。留出集缺失意味着「模型能多好地泛化到没见过的样本」没有答案;单细胞对照缺失意味着「模型给出的异质性是不是真的」没有答案。两条都不影响它作为假设生成工具的用途,但都影响它作为监督信号的可靠性。
7.5 它为何能持续:一门必须有人兜底的公共品
这类库的生存逻辑与商业数据库不同。它没有订阅收入,没有 API 计费,靠的是资助周期内的机构支持与论文带来的引用。它的存在价值在于:sBIF 的计算成本高到单个实验室难以承受——五十份样本、每份五十万条零模型、每区段五千条推断,累计是千万核时——所以把结果算一次、公开出来,比让每个课题组各算一遍更省。
这个逻辑有一个脆弱点:它依赖持续的计算资源与人力维护。论文的资助列表里,能源部的 INCITE 机时与两家机构的项目经费是主要支撑,这类资源按周期申请,不是长期编制。库能不能活过下一个资助周期,取决于它是否被足够多的论文引用、是否有新的数据进来。官方把「扩展物种、纳入新数据、增加分析算法」写成计划,说明维护方也清楚这一点。
对使用者而言,这意味着两件事:一是现在能用就尽快用,二是关键结果要落成本地副本,别把流程设计成每次运行都去请求远程接口。
§8 生态位与历史
8.1 时间线
| 时间 | 事件 | 意义 |
|---|---|---|
| 2009 年 | 串珠与结合者模型提出 | 聚合物模型解释染色质折叠的起点 |
| 2016 年 | 该模型用于 Sox9 位点,与 Hi-C 定量吻合 | 证明模型能复现真实接触图 |
| 2018 年 | 基于机器学习的模型反演方法出现 | 从「设参数」转向「从数据学」 |
| 2025 年 | sBIF 在 eQTL 位点上的应用发表 | 序贯贝叶斯推断路线成型 |
| 2025 年 9 月 | 本库预印本上线 | 从方法走向资源 |
| 2025 年 11 月 | 核酸研究正式发表 | 进入数据库专刊序列 |
| 2026 年 1 月 | 收入 54 卷 D1 期 | 获得稳定引用标识 |
这条线真正的转折在 2018 年前后:模型从「先定物理参数」转向「从数据学」。前者要先知道结合能与浓度,后者直接从接触矩阵反推结合位点排布,不必逐位点人工调参,这才可能批量跑六万余个区段。
8.2 它填的那个空
在它之前,三维基因组资源大致分三类:二维接触矩阵的仓库、一次性建模的补充材料、少量早期三维结构库。第一类只给热图,第二类无法批量取用,第三类分辨率与样本量都有限。
本库填的是第二类与第三类之间的缝隙:把「一次性建模」变成「批量、统一口径、可查询」。这个空当不大,但确实空着——此前要比较两个细胞类型在同一区段的构象,得自己找两篇论文、统一坐标与阈值,工作量以周计。
8.3 与六个近邻的分工
官方在讨论节明确点了六个近邻,并给出了自己的定位。下表把这段对比整理成可查的形式。
| 资源 | 主存内容 | 单细胞 | 三维 | 与本库的关系 |
|---|---|---|---|---|
| HiChIPdb | HiChIP 接触 | 否 | 否 | 上游类型的实验数据 |
| 3D Genome Browser | 多种接触矩阵 | 部分 | 否 | 最常被混淆的近邻 |
| 3DIV | 接触矩阵与变异 | 否 | 否 | 侧重疾病变异 |
| LoopCatalog | 染色质环 | 否 | 否 | 环层面的统一目录 |
| GSDB | 三维结构模型 | 否 | 是 | 早期结构库,样本少 |
| Nucleome Browser | 多组学聚合 | 部分 | 部分 | 门户型,非结构生产 |
| 3Disease Browser | 疾病相关结构 | 否 | 是 | 疾病视角的浏览 |
官方对这几个资源的评价是「以二维为主、三维覆盖有限」,这句判断基本成立,但要注意语境:它是在为自己的定位做论证,不是在做一个中立的资源评估。真实情况是,这些资源各有不可替代的用途——比如要查某个 loop 的实验证据,LoopCatalog 比本库直接得多。
8.4 维护风险
三个可观察的风险点。
第一,单点依赖。库跑在 UIC 的一台服务器上,域名绑定院系(bme),院系调整、服务器迁移、证书过期,任何一种都会让入口失效。截至核验时站点可正常访问,返回的是单页应用外壳。
第二,无镜像。官方没有在国家生物信息中心或其他平台放置镜像,Database Commons 只是编目,不存副本。一旦源站下线,数据没有第二份公开拷贝。
第三,版本策略不明。官方未公布更新频率与版本号规则,v1.0 之后是否会有 v1.1、旧版本是否保留都没说明,对需要长期复现的项目是实质风险。
§9 使用指引
9.1 三种角色的路径
| 你的角色 | 最短路径 | 需要的准备 | 常见卡点 |
|---|---|---|---|
| 生物学研究者 | 网页端按基因查,看三维与轨道 | 知道目标基因与细胞系 | 查不到区段,误以为基因不存在 |
| 生物信息工程师 | 接口逐区段导出 CSV | 会读前端代码找参数 | 染色体命名不一致、无节流说明 |
| 方法学研究者 | 读论文方法节加 sBIF 原文 | 熟悉贝叶斯推断与聚合物模型 | 库内无推断代码,须自行实现 |
| 教学使用者 | 用官方教程的图文步骤演示 | 一台能开浏览器的机器 | 三维视图需要 WebGL 支持 |
| 数据管理者 | 先确认许可,再规划存储 | 与通讯作者沟通 | 许可未单列,商用需书面确认 |
9.2 一条最短的可用流程
目标:拿到 Calu3 在 MYC 区段的五千条构象,算出「至少一个增强子接触启动子」的比例,并与论文的 45.5% 对照。
#-- 第一步:确认区段可查,返回体里应含区段边界
curl -s -X POST "https://chrompolymerdb.bme.uic.edu/api/getChromosomeSize" \
-H "Content-Type: application/json" \
-d '{"cell_line":"Calu3","chromosome_name":"chr8"}' | head -c 500
import requests
import pandas as pd
BASE = "https://chrompolymerdb.bme.uic.edu"
region = {"start": 127200000, "end": 127750000}
#-- 第二步:流式下载坐标
body = {"cell_line": "Calu3", "chromosome_name": "chr8",
"sequences": region, "is_example": False}
with requests.post(f"{BASE}/api/downloadFullChromosome3DPositionData",
json=body, stream=True, timeout=600) as r:
r.raise_for_status()
with open("Calu3_chr8_127200000_127750000.csv", "wb") as fh:
for chunk in r.iter_content(1 << 20):
fh.write(chunk)
#-- 第三步:读表并核对珠数
df = pd.read_csv("Calu3_chr8_127200000_127750000.csv")
n_bead = df.groupby("sampleid").size().iloc[0]
print("每构象珠数", n_bead, "应为", (region["end"] - region["start"]) // 5000)
#-- 第四步:按官方口径统计多体接触(阈值 80 加 34.3)
beads = [3, 19, 40, 61, 77, 94, 107]
tss = beads[-1]
hits = []
for sid, grp in df[df["id"].isin(beads)].groupby("sampleid"):
pos = grp.set_index("id")[["x", "y", "z"]]
n = sum(int(((pos.loc[b] - pos.loc[tss]) ** 2).sum() ** 0.5 < 80 + 34.3)
for b in beads[:-1])
hits.append(n)
s = pd.Series(hits)
print("至少一个增强子接触的比例", round((s >= 1).mean(), 3))
print("三增强子同时接触的条数", int((s == 3).sum()))
跑完应当看到比例落在 0.45 附近、三增强子条数在六十余条。对不上时按顺序排查:珠序号是否偏移一位、阈值是否用了 80、区段是否被后端截断。
9.3 引用方式
正式引用用期刊版:作者列表、标题、核酸研究 2026 年 54 卷 D1 期、页码 D994 至 D1004、DOI 10.1093/nar/gkaf1233。预印本只在讨论其发表前的状态时引用。
数据本身的引用,官方未给出建议格式,也没有独立的数据 DOI。稳妥做法是在方法节写「数据取自 ChromPolymerDB(https://chrompolymerdb.bme.uic.edu/,访问日期)」,并同时引论文。如果期刊要求数据 DOI,需要联系通讯作者索取。
9.4 复现清单
| 项 | 必须记录 | 原因 |
|---|---|---|
| 访问日期 | 年月日 | 无版本号,日期是唯一的版本锚点 |
| 细胞系名 | 原始拼写 | 大小写与别名会影响查询 |
| 区段坐标 | 起止碱基 | 决定珠数与对齐方式 |
| 参考基因组 | hg38 | 与其他数据对齐的前提 |
| 构象编号范围 | 全量或子集 | 子集会让比例失真 |
| 接触阈值 | 80 或 80 加 34.3 | 直接改变多体比例 |
| 后端口径 | 接口名与请求体 | 无文档,行为可能变 |
| 脚本版本 | 仓库提交号 | 脚本会改 |
§10 AI 使用声明
| 项 | 说明 |
|---|---|
| 数据性质 | 全部坐标为模型推断值,非实验测量值 |
| 可否作为监督信号 | 可作为结构先验或弱监督,不宜作为金标准标签 |
| 可否作为评测基准 | 可以,但须固定区段、构象数与阈值 |
| 训练集划分 | 按细胞系划分,同一细胞系的不同区段不可跨侧 |
| 泄漏风险 | 同一份 Hi-C 派生的区段高度相关,随机按区段切分会泄漏 |
| 生成式使用 | 不得据此外推未建模区段的坐标 |
| 结论表述 | 用「系综中占比」,不用「细胞阳性率」 |
| 商用 | 许可未单列,须先取得书面确认 |
常见误读(避坑清单)
| 说法 | 实际 | 证据 |
|---|---|---|
| 「这是单细胞测序数据」 | 没有一条单细胞读段,全部由群体 Hi-C 反推 | 论文方法节的数据收集段 |
| 「坐标是测出来的」 | 模型推断值,无成像对照 | 论文讨论节与 json_ld 的限制声明 |
| 「五千条构象等于五千个细胞」 | 同一约束下的五千次采样 | 方法节「每个数据集生成五千条构象」 |
| 「45.5% 的细胞存在该接触」 | 45.5% 的构象满足几何条件 | 案例段的原始表述 |
| 「覆盖全基因组」 | 仅覆盖被建模的六万余个区段 | 预处理第三步与第四步的剔除规则 |
| 「分辨率和 Micro-C 差不多」 | 5 kb,比 Micro-C 粗一个量级以上 | 论文与界面均标 5 kb |
| 「可以一次下载整库」 | 无打包下载,只能逐区段导出 | 官方教程的查询流程 |
| 「数据可以随便商用」 | 论文 CC BY 4.0,数据许可未单列 | 论文版权页与站点均无数据许可声明 |
| 「它和 3D Genome Browser 是一回事」 | 一个存坐标,一个存矩阵 | 论文讨论节的近邻对比 |
| 「域名是 chrompolymerdb.org」 | 该域名无解析记录,官方入口在 uic.edu 子域 | 本次核验的 DNS 查询与站点访问 |
FAQ
Q1:ChromPolymerDB 到底解决什么问题?
它解决的是「群体 Hi-C 把细胞间差异平均掉」这个问题。做法是用聚合物物理模型把接触频率反推成一批单细胞构象,让使用者能看到同一区段在五千条链上的距离分布,而不是只看一个灰度格子。
Q2:它和 3D Genome Browser 应该怎么选?
要实验证据、要看热图与注释,选 3D Genome Browser;要结构假设、要算距离分布、要做跨样本构象比较,选本库。两者可以一起用:先用浏览器确认接触是否存在,再用本库看这个接触在系综里的稳定性。
Q3:为什么我按基因名查不到数据?
大概率是该区间没有被建模。区段由最外层拓扑关联域决定,短域会被合并,接触稀疏的区段会被整体剔除。查不到时先换成坐标查,看该位置是否落在某个区段内,而不是反复改基因名的拼写。
Q4:五千条构象之间是什么关系?
它们是同一组约束下的不同解,用来表示构象的分布宽度。彼此之间不独立于数据,也不对应真实的细胞个体。做统计时把它们当采样,不要当样本。
Q5:坐标的单位是什么?
官方未公布。同一构象内部的相对距离可以用,跨样本、跨区段的绝对比较要谨慎,除非先做过标定。这一点在方法节与教程里都没有说明,属于需要向作者确认的空白。
Q6:能不能用它训练三维结构预测模型?
技术上可以,工程上要算清楚。全量在拍字节量级,单区段几十到几百兆,且没有打包下载。合理做法是选十几个细胞系、几百个区段做子集,并固定阈值与构象数。
Q7:多体接触的比例为什么和我算的不一样?
最常见的原因是阈值。官方正文写 80 nm,脚本写 80 加 34.3;其次是对珠序号的偏移理解(0 基与 1 基);再次是区段是否被后端截断。
Q8:它的疾病样本能代表疾病人群吗?
不能。十四种疾病相关样本以肿瘤细胞系为主,是体外模型,不含患者个体、不含临床分期、不含治疗信息。它代表的是「某种细胞系在培养皿里的构象」,不是「某类患者体内的构象」。
Q9:站点会不会关掉?
无法保证。库跑在院系服务器上,无镜像、无独立数据 DOI、版本策略未公布。用它做长期项目时,关键结果要落本地副本,并在方法节写明访问日期。
Q10:引用时引预印本还是期刊版?
引期刊版。预印本与正式版的标题相同,但卷期页码与同行评审状态不同,正式发表后继续引预印本会被视为引用不规范。
Q11:为什么同一条染色体在不同接口里名字不一样?
前端在取基因列表时会把 chr 前缀去掉,取接触矩阵时原样传。后端对两种写法没有统一处理,所以脚本里要按接口分别试,先用已知可用的区段探通。
术语表
| 术语 | 英文 | 含义 |
|---|---|---|
| 染色质构象捕获 | chromosome conformation capture | 用交联与连接把空间邻近的 DNA 片段变成可测序的嵌合分子 |
| Hi-C | Hi-C | 全基因组尺度的构象捕获,产出接触频率矩阵 |
| 接触矩阵 | contact matrix | 行列均为基因组区段、格子为接触频次的方阵 |
| 拓扑关联域 | topologically associating domain | 域内接触多、域间接触少的自相似结构单元 |
| 隔间 | compartment | 染色体上按活性区分的两类大规模区域 |
| 珠子 | bead | 模型中的基本单元,本库为 5 kb 染色质 |
| 串珠与结合者模型 | strings and binders | 自避链加可扩散结合者的平衡态聚合物模型 |
| 序贯贝叶斯推断 | sequential Bayesian inference | 逐步收紧约束、生成与数据一致的构象系综 |
| 系综 | ensemble | 同一约束下的一批构象,本库为五千条 |
| 折叠重构接触 | folding reconstitutive contact | 经零模型检验后判定为显著的接触 |
| 零模型 | null model | 只含聚合物物理与体积排斥的随机纤维集合 |
| 回转半径 | radius of gyration | 构象紧凑程度的常用度量 |
| 多体接触 | multi-body contact | 三个及以上元件同时靠近同一位置 |
| 增强子 | enhancer | 远距离调控转录的 DNA 元件 |
| 转录起始位点 | transcription start site | 基因转录开始的位置 |
| 分辨率 | resolution | 一个数据单元对应的碱基数,本库为 5 kb |
| 区段 | region | 一个可独立建模的基因组区间 |
| 参考基因组 | reference genome | 坐标体系,本库为 hg38 |
| 稀疏区 | sparse region | 有接触的格子占比极低的区段 |
| 表观轨道 | epigenetic track | 组蛋白修饰、转录因子结合等测序信号 |
附录 A:核心数字核对表
| 项 | 值 | 来源 | 来源层级 |
|---|---|---|---|
| 样本数 | 50 | 论文摘要与方法节 | 论文 |
| 来源分布 | 19 / 18 / 13 | 论文方法节 | 论文 |
| 细胞类型 | 50(36 正常 + 14 疾病) | 论文结果节 | 论文 |
| 生理系统覆盖 | 十一分之十 | 论文方法节 | 论文 |
| 构象总量 | 约 10⁸ | 论文摘要 | 论文 |
| 基因组区段 | 六万余 | 论文摘要 | 论文 |
| 分辨率 | 5 kb | 论文与界面 | 论文 |
| 参考基因组 | hg38 | 论文方法节 | 论文 |
| 每区段构象 | 5000 | 论文方法节与教程 | 论文 |
| 零模型构象 | 每样本五十万 | 论文方法节 | 论文 |
| 接触阈值 | 80 nm | 论文方法节 | 论文 |
| 显著接触校正 | p 小于 0.05 | 论文方法节 | 论文 |
| 建库年份 | 2025 | Database Commons | 第三方目录 |
| 版本 | v1.0 | Database Commons | 第三方目录 |
| 最后更新 | 2025-08-01 | Database Commons | 第三方目录 |
| 卷期页码 | 54 卷 D1 期 D994–D1004 | 期刊页 | 论文 |
| 数据许可 | 未单列 | 站点与论文 | 核验结论 |
附录 B:数字的来源分层
第一层,官方页面与官方教程仓库。样本来源分布、接口路径、导出文件命名、脚本中的阈值 80 加 34.3,都属于这一层。可直接引用,但要注意教程是示例,不是规范。
第二层,论文正文与补充材料。构象总量、区段数、细胞类型构成、零模型规模、显著接触判据,都属于这一层。数值以正式版为准,预印本有排版误差。
第三层,第三方目录。建库年份、版本号、最后更新日期来自国家生物信息中心的 Database Commons,该目录为编目机构,不存数据副本。两条记录字段略有出入,引用时标注来源。
第四层,未核实。坐标单位、每样本区段数、导出列定义、构象独立性保证、更新频率,均未见官方说明,一律标为未公布,不做推测。
附录 C:完整参考文献
- Chen M, Du L, Zhao S, Ye B, Delafrouz P, Farooq H, Chattopadhyay D, Marai GE, Shao Z, Liang J, Czajkowsky DM, Chronis C. ChromPolymerDB: a high-resolution database of single-cell 3D chromatin structures for functional genomics. Nucleic Acids Research. 2026;54(D1):D994–D1004. doi:10.1093/nar/gkaf1233
- 同文预印本. bioRxiv. 2025. doi:10.1101/2025.09.27.678816
- Du L, Farooq H, Delafrouz P, Liang J. Structural basis of differential gene expression at eQTLs loci from high-resolution ensemble models of 3D single-cell chromatin conformations. Bioinformatics. 2025;41:btaf050
- Chiariello AM, Annunziatella C, Bianco S, Esposito A, Nicodemi M. Polymer physics of chromosome large-scale 3D organisation. Scientific Reports. 2016;6:29775
- Nicodemi M, Prisco A. Thermodynamic pathways to genome spatial organization in the cell nucleus. Biophysical Journal. 2009;96:2168–2177
- Bianco S, Lupiáñez DG, Chiariello AM, et al. Polymer physics predicts the effects of structural variants on chromatin architecture. Nature Genetics. 2018;50:662–667
- Wang Y, Song F, Zhang B, et al. The 3D Genome Browser: a web-based browser for visualizing 3D genome organization and long-range chromatin interactions. Genome Biology. 2018;19:151
- Database Commons, ChromPolymerDB 记录 10677 与 10686. 国家生物信息中心
- ChromPolymerDB 官方教程仓库. https://github.com/ldu3/ChromPolymerDB_tutorial
- 官方站点. https://chrompolymerdb.bme.uic.edu/
附录 D:任务代码
用途:把一个区段的全部构象压成一张「每颗珠的平均接触次数」曲线,用来快速判断该区段的结构是否均匀。
import numpy as np
import pandas as pd
df = pd.read_csv("Calu3_chr8_127200000_127750000.csv")
beads = sorted(df["id"].unique())
n = len(beads)
#-- 每个构象的坐标矩阵,形状为 (珠数, 3)
coords = {sid: g.sort_values("id")[["x", "y", "z"]].to_numpy()
for sid, g in df.groupby("sampleid")}
acc = np.zeros(n)
for xyz in coords.values():
d = np.linalg.norm(xyz[:, None, :] - xyz[None, :, :], axis=-1)
acc += (d < 80).sum(axis=1) - 1 #-- 减去自身
profile = pd.DataFrame({"bead": beads, "mean_contacts": acc / len(coords)})
print(profile.head(10))
print("峰值珠序号", int(profile.loc[profile["mean_contacts"].idxmax(), "bead"]))
#-- 换成基因组坐标,便于与注释对齐
start = 127200000
profile["genomic_start"] = start + profile["bead"] * 5000
print(profile.nlargest(5, "mean_contacts")[["genomic_start", "mean_contacts"]])
输出里峰值所在的基因组位置,通常落在域内部而不是边界,这与「域内接触多」的常识一致。用它可以快速判断某段是否被正确建模;如果曲线平得像一条直线,多半是区段选得过大或数据过稀。
附录 E:如果只记五件事
第一,它是模型,不是测量。所有坐标都是推断值,用它做假设可以,用它当金标准不行。
第二,它的单位是「系综占比」,不是「细胞比例」。五千条构象是采样,不是人口普查。
第三,它覆盖的是区段,不是全基因组。六万余个区段由域边界决定,稀疏区被剔除,查不到是常态。
第四,它和 3D Genome Browser 是两层东西。一个存矩阵,一个存坐标;一个回答多频繁,一个回答多远。
第五,它没有整库下载,也没有接口文档。要批量用,得读前端代码、逐区段抓、自己算存储。
编辑说明
核验时间:2026 年 10 月 28 日。核验方式:直接访问官方站点确认可解析、可返回页面外壳;读取核酸研究正式版全文与预印本全文;读取官方教程仓库的文件列表与两个脚本源码;读取站点前端打包文件以提取接口路径与请求体结构;查询国家生物信息中心 Database Commons 的两条编目记录。
需要说明的一处事实:任务下发时提到的域名 chrompolymerdb.org 在当前 DNS 中无任何解析记录,无法访问。经检索确认真实实体为伊利诺伊大学芝加哥分校的 ChromPolymerDB,官方入口在 chrompolymerdb.bme.uic.edu。本文全部内容以该入口与对应论文为准。
未覆盖的内容:没有下载任何一个区段的完整坐标文件,因此文中的比例数字全部来自论文原文,不是本次复算结果;没有注册账号,站点也不需要注册;没有联系作者确认坐标单位与导出列定义,这两项在文中标为未公布。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- liver-cld-scatlas — 共享标签:基因组学与多组学 / 表观基因组 / 单细胞基因组学 / 测序数据
- encode — 共享标签:基因组学与多组学 / 表观基因组 / 测序数据
- roadmap-epigenomics — 共享标签:基因组学与多组学 / 表观基因组 / 测序数据
- blueprint — 共享标签:基因组学与多组学 / 表观基因组 / 测序数据
- encode — 共享标签:基因组学与多组学 / 表观基因组 / 测序数据
- 3d-genome-browser — 共享标签:基因组学与多组学 / 表观基因组 / 单细胞基因组学
- tabula-muris — 共享标签:基因组学与多组学 / 单细胞基因组学 / 测序数据
- cellxgene-census — 共享标签:基因组学与多组学 / 单细胞基因组学 / 测序数据
- adrenal-gland-atlas — 共享标签:基因组学与多组学 / 单细胞基因组学 / 测序数据
- mouse-cell-atlas — 共享标签:基因组学与多组学 / 单细胞基因组学 / 测序数据
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

