Pore-C 多路染色体构象捕获¶
一句话说明¶
Pore-C 是 Hi-C 的升级版,用 Nanopore 长读测序代替短读,一条读段能同时捕获多个(3个以上)基因组位点的空间互作,比 Hi-C 的"两两配对"信息更丰富。
核心知识点¶
1. Pore-C vs Hi-C 的区别¶
- Hi-C:每个读段只能捕获两个位点的互作(pairwise,白话:每次只能拍两个人的合照)
- Pore-C:一条长读段可以包含多个互作片段(multi-way contact,白话:一张照片能拍到一桌人)
- 信息量:Pore-C 一条读段 = Hi-C 的多个配对,揭示多体互作(higher-order contacts)
2. 实验原理¶
- 甲醛交联 → 限制性内切酶消化 → 不做近端连接 → 直接 Nanopore 测序
- 长读段会包含多个来自不同基因组位置的片段(被交联在一起的)
- 每条读段通过虚拟消化(virtual digest)分成多个 segment,各自比对到基因组
3. 数据分析流程¶
- basecalling → 比对 → 虚拟消化 → contact 提取 → 矩阵构建 → 下游分析
- 专用工具:pore-c-py(ONT 官方)、Pairtools
- 可以转换为 Hi-C 格式的 pairwise contact,兼容所有 Hi-C 下游工具
4. 独特应用¶
- 多体互作检测:发现 3 个或更多基因组区域同时靠近的事件(如增强子-启动子-绝缘子三方互作)
- 单分子单倍型 phasing:一条超长读段跨越多个杂合 SNP,直接确定单倍型
- 辅助基因组组装:比 Hi-C 更少的数据量即可达到相似的 scaffolding 效果
实战代码¶
# === Pore-C 数据分析流程 ===
# 1. Basecalling(使用 Dorado)
dorado basecaller sup pod5_dir/ > pore_c.bam # 超高精度模型识别碱基
# 2. 使用 pore-c-py 进行虚拟消化和比对
# 安装 pore-c-py
pip install pore-c-py # ONT官方Pore-C分析工具
# 3. 创建酶切片段参考(virtual digest)
pore_c_py refgenome virtual-digest \ # 虚拟消化参考基因组
--enzyme NlaIII \ # 使用的限制性内切酶
ref.fa \ # 参考基因组
ref_NlaIII.bed # 输出酶切片段BED
# 4. 比对并提取 contact
pore_c_py reads map \ # 比对读段
ref.fa \ # 参考基因组
pore_c.bam \ # 输入读段
mapped_output/ # 输出目录
# 5. 提取 pairwise contacts(兼容Hi-C工具)
pore_c_py alignments to-pairs \ # 转换为pairs格式
mapped_output/aligned.bam \ # 比对结果
contacts.pairs # 输出pairs文件
# 6. 转为 cooler 格式(Hi-C标准分析)
cooler cload pairs \ # 从pairs文件构建矩阵
-c1 2 -p1 3 -c2 4 -p2 5 \ # 列定义
chrom.sizes:10000 \ # 10kb分辨率
contacts.pairs \ # 输入pairs
pore_c.cool # 输出cool文件
# 7. 矩阵归一化
cooler balance pore_c.cool # ICE归一化
# 8. 生成多分辨率文件
cooler zoomify pore_c.cool # 自动生成多分辨率mcool
# 分析 Pore-C 多体互作(multi-way contacts)
import pysam # BAM文件处理
from collections import Counter # 计数器
bam = pysam.AlignmentFile("mapped_output/aligned.bam", "rb")
# 按读段ID分组,提取每条读段涉及的染色体
read_contacts = {} # 存储每条读段的contact信息
for read in bam: # 遍历比对结果
if read.mapping_quality >= 10: # 过滤低质量比对
qname = read.query_name # 读段名称
chrom = read.reference_name # 比对到的染色体
pos = read.reference_start # 比对起始位置
if qname not in read_contacts: # 初始化
read_contacts[qname] = []
read_contacts[qname].append((chrom, pos)) # 记录位置
# 统计多体互作
multiway = {k: v for k, v in read_contacts.items() if len(v) >= 3}
print(f"总读段数: {len(read_contacts)}") # 所有读段
print(f"多体互作读段 (>=3 contacts): {len(multiway)}") # 多体互作
# 统计互作涉及的染色体组合
chrom_combos = Counter() # 染色体组合计数
for contacts in multiway.values(): # 遍历多体互作
chroms = tuple(sorted(set(c[0] for c in contacts))) # 去重排序
chrom_combos[chroms] += 1 # 计数
# 打印最常见的多体互作模式
for combo, count in chrom_combos.most_common(10): # 前10
print(f" {' - '.join(combo)}: {count}") # 打印
面试常问点¶
★ Pore-C 比 Hi-C 好在哪里?¶
参考答案:Pore-C 最大优势是能检测多体互作(multi-way contacts),一条读段同时捕获 3 个以上基因组位点的空间接触,而 Hi-C 只能看到两两配对。这对理解复杂的基因调控网络(比如一个增强子同时和多个启动子互作)非常重要。另外,Pore-C 还能直接利用长读段做单倍型分型,并且用于基因组组装时数据效率更高。
★ Pore-C 数据能用 Hi-C 的分析工具吗?¶
参考答案:可以。Pore-C 的多体互作可以分解为所有可能的 pairwise 组合(比如 3 个位点 A/B/C 可以分解为 A-B, A-C, B-C 三对),转换为标准的 pairs 格式后,就能用 cooler、Juicer 等所有 Hi-C 分析工具。但这样做会丢失多体互作的独特信息,想充分利用 Pore-C 数据需要用专门的多体分析方法。
速查卡片¶
| 问题 | 答案 |
|---|---|
| Pore-C 平台 | Oxford Nanopore |
| 与 Hi-C 核心区别 | 多体互作 vs 仅 pairwise |
| 一条读段能捕获 | 3-20+ 个基因组位点 |
| 分析工具 | pore-c-py (ONT官方) |
| 数据格式 | 可转 .pairs → .cool |
| 兼容 Hi-C 工具 | 是(转 pairwise 后) |
| 独特应用 | 多体互作、单分子phasing |
| 组装辅助 | 比 Hi-C 数据效率更高 |
| 常用酶 | NlaIII, DpnII |
| 数据量需求 | 比 Hi-C 少即可达到相似效果 |