153_染色体外环状DNA分析¶
一句话概述¶
染色体外环状DNA(ecDNA/eccDNA)是游离于染色体之外的环形DNA分子,在肿瘤中驱动癌基因扩增和异质性,通过AmpliconArchitect(大ecDNA)和Circle-Map(小eccDNA)等工具从WGS数据中检测和重构。
核心知识点总览¶
| 知识点 | 说明 |
|---|---|
| ecDNA定义 | 大的染色体外环状DNA(>100kb),携带癌基因扩增 |
| eccDNA | 小的染色体外环状DNA(<100kb),正常细胞也有 |
| AmpliconArchitect | 从WGS检测和重构大ecDNA的金标准工具 |
| Circle-Map | 从WGS/Circle-seq检测eccDNA的工具 |
| 环状结构特征 | 断点连接(junction reads)、覆盖度异常、不均匀拷贝数 |
| FISH验证 | 荧光原位杂交验证ecDNA在分裂中期的存在 |
| 临床意义 | 驱动肿瘤异质性、耐药性、与预后相关 |
| Circle-seq | 外切酶V + 滚环扩增(RCA)富集环状DNA的实验方法 |
各步骤详解¶
第一步:理解ecDNA与eccDNA的生物学¶
白话解释: ecDNA就像从染色体上"脱落"出来的一圈DNA。普通DNA住在染色体"大楼"里,但ecDNA是独立的"环形公寓"。在肿瘤细胞中,癌基因可能搬到这些环形公寓里——由于环形DNA缺乏着丝粒,细胞分裂时分配不均匀,导致有些子细胞获得很多拷贝,驱动肿瘤异质性和耐药性。
分类: | 类型 | 大小 | 来源 | 生物学意义 | |------|------|------|-----------| | ecDNA | 1-10 Mb | 肿瘤特异性 | 携带癌基因扩增(EGFR, MYC等) | | eccDNA | 100bp-100kb | 正常+肿瘤 | 基因调控、免疫激活 | | microDNA | <400bp | 广泛存在 | 来自GC-rich区域,功能待研究 |
检测策略对比:
ecDNA检测 (AmpliconArchitect):
输入: WGS (肿瘤) → 寻找focal amplification → 重构环状结构
eccDNA检测 (Circle-Map):
输入: WGS 或 Circle-seq → 寻找split reads跨越junction → 鉴定环化位点
实验富集:
Circle-seq: 外切酶V消化线性DNA → 保留环状 → RCA扩增 → 测序
ATAC-seq也可富集开放的ecDNA(无组蛋白包裹)
第二步:AmpliconArchitect分析大ecDNA¶
白话解释: AmpliconArchitect(AA)就像一个DNA考古学家——它从WGS数据中找到拷贝数异常高的区域(focal amplification),然后像拼图一样把这些片段重新组装成环形结构。
技术原理: 1. 用CNV工具识别focal amplification区域(CN ≥ 4) 2. 提取该区域的discordant reads和split reads 3. 构建breakpoint graph(断点图) 4. 用图论算法寻找最优环状路径 5. 输出环状结构的序列和注释
代码示例:
# === 安装AmpliconArchitect ===
# 依赖: Python 3, samtools, bwa
git clone https://github.com/jluebeck/AmpliconArchitect.git
cd AmpliconArchitect
# 下载数据仓库 (GRCh38参考资源)
wget https://datasets.genepattern.org/data/module_support_files/AmpliconArchitect/aa_repo_GRCh38.tar.gz
tar -xzf aa_repo_GRCh38.tar.gz
# 设置环境变量
export AA_DATA_REPO=/path/to/aa_repo/
export AA_SRC=/path/to/AmpliconArchitect/src/
# === Step 1: 准备输入 ===
# 需要: sorted BAM + CNV segmentation结果
# 推荐使用cnvkit或ReadDepth进行CNV检测
# CNVkit生成segment文件
cnvkit.py batch tumor.bam \
--normal normal.bam \
--targets targets.bed \
--fasta hg38.fa \
--output-reference ref_flat.cnn \
--output-dir cnvkit_output/
# 转换为AA输入格式 (BED: chr, start, end, CN)
# 筛选CN >= 4 的focal amplification区域
awk '$4 >= 4 && ($3-$2) < 10000000' cnvkit_output/tumor.cns > seeds.bed
# === Step 2: 运行AmpliconArchitect ===
python $AA_SRC/AmpliconArchitect.py \
--bam tumor_sorted.bam \
--bed seeds.bed \
--out aa_output/tumor \
--ref GRCh38 \
--runmode FULL
# === 输出文件说明 ===
# tumor_amplicon1_cycles.txt : 环状结构的cycle描述
# tumor_amplicon1_graph.txt : breakpoint graph
# tumor_amplicon1.png : 可视化图
# tumor_summary.txt : 所有amplicon的摘要
# === Step 3: AmpliconClassifier分类 ===
# 将amplicon分类为 ecDNA / BFB / Complex / Linear
git clone https://github.com/jluebeck/AmpliconClassifier.git
python AmpliconClassifier/amplicon_classifier.py \
--cycles aa_output/tumor_amplicon1_cycles.txt \
--graph aa_output/tumor_amplicon1_graph.txt \
--ref GRCh38
第三步:Circle-Map检测eccDNA¶
白话解释: Circle-Map专门找小的环状DNA(eccDNA)。它的策略是找那些"首尾相接"的reads——正常线性DNA上不会出现的、跨越环化连接点(junction)的split reads。
技术原理: 1. 从BAM中提取soft-clipped reads和discordant read pairs 2. 寻找支持环化连接点的split reads(一条read的两端映射到同一区域的两个不相邻位置) 3. 利用覆盖度模式确认环化(环内覆盖度高于周围) 4. 输出eccDNA的坐标和支持证据
代码示例:
# === 安装Circle-Map ===
pip install circle-map
# 或
conda install -c bioconda circle-map
# === 输入准备 ===
# 1. 比对到参考基因组
bwa mem -t 16 hg38.fa reads_R1.fq.gz reads_R2.fq.gz | \
samtools sort -@ 8 -o sorted.bam
samtools index sorted.bam
# === 运行Circle-Map ===
# Step 1: 提取候选reads (split reads和discordant pairs)
Circle-Map ReadExtractor \
-i sorted.bam \
-o extracted_reads.bam
samtools sort extracted_reads.bam -o extracted_sorted.bam
samtools index extracted_sorted.bam
# Step 2: 检测eccDNA
Circle-Map Realign \
-i extracted_sorted.bam \
-qbam sorted.bam \
-sbam sorted.bam \
-fasta hg38.fa \
-o eccDNA_results.bed \
-t 16
# === 输出格式 (BED-like) ===
# chr start end discordant_reads split_reads circle_score mean_coverage
# chr1 15000 16500 8 12 25.3 45.2
# === 过滤高置信度eccDNA ===
awk '$5 >= 3 && $6 >= 10' eccDNA_results.bed > eccDNA_filtered.bed
# split_reads >= 3 且 circle_score >= 10
第四步:Circle-seq实验数据分析¶
白话解释: Circle-seq是一种实验方法——先用外切酶把线性DNA全部消化掉,只剩下环状DNA,然后用滚环扩增(RCA)增加环状DNA的量,再测序。这样得到的数据中环状DNA信号大大增强。
代码示例:
# === Circle-seq数据处理流程 ===
# 1. 质控
fastp -i R1.fq.gz -I R2.fq.gz \
-o clean_R1.fq.gz -O clean_R2.fq.gz \
--thread 8
# 2. 比对 (针对Circle-seq数据的特殊处理)
bwa mem -t 16 -Y hg38.fa clean_R1.fq.gz clean_R2.fq.gz | \
samtools sort -@ 8 -o circleseq_sorted.bam
samtools index circleseq_sorted.bam
# 3. 使用Circle-Map处理
Circle-Map ReadExtractor \
-i circleseq_sorted.bam \
-o circleseq_extracted.bam
samtools sort circleseq_extracted.bam -o circleseq_extracted_sorted.bam
samtools index circleseq_extracted_sorted.bam
Circle-Map Realign \
-i circleseq_extracted_sorted.bam \
-qbam circleseq_sorted.bam \
-sbam circleseq_sorted.bam \
-fasta hg38.fa \
-o circleseq_eccDNA.bed \
-t 16
# 4. 与常规WGS对比,过滤假阳性
# Circle-seq特异的eccDNA = 在Circle-seq中检测到但在对照WGS中不存在
bedtools intersect \
-a circleseq_eccDNA.bed \
-b wgs_eccDNA.bed \
-v \
> circleseq_specific.bed
第五步:ecDNA的功能注释与可视化¶
代码示例:
library(GenomicRanges)
library(ggplot2)
library(circlize)
# === 1. ecDNA区域的基因注释 ===
library(TxDb.Hsapiens.UCSC.hg38.knownGene)
library(org.Hs.eg.db)
# 读取ecDNA区域
ecdna_regions <- read.delim("aa_output/tumor_summary.txt", header = TRUE)
ecdna_gr <- GRanges(
seqnames = ecdna_regions$chr,
ranges = IRanges(start = ecdna_regions$start, end = ecdna_regions$end)
)
# 与基因注释overlap
txdb <- TxDb.Hsapiens.UCSC.hg38.knownGene
genes_in_ecdna <- subsetByOverlaps(genes(txdb), ecdna_gr)
# 获取基因名
gene_symbols <- mapIds(org.Hs.eg.db,
keys = as.character(genes_in_ecdna$gene_id),
column = "SYMBOL", keytype = "ENTREZID")
print(gene_symbols) # 查看ecDNA上的基因
# === 2. 环状结构可视化 (circos plot) ===
# 使用circlize包绘制ecDNA结构
library(circlize)
# 假设ecDNA包含来自chr7和chr12的片段
segments <- data.frame(
chr = c("chr7", "chr7", "chr12"),
start = c(54500000, 55000000, 25000000),
end = c(54800000, 55500000, 25800000),
cn = c(50, 45, 48)
)
# 绘制环状图
circos.clear()
circos.par(gap.degree = 5)
circos.genomicInitialize(segments, plotType = NULL)
circos.genomicTrack(segments,
panel.fun = function(region, value, ...) {
circos.genomicRect(region, value, col = "red", border = NA)
})
circos.clear()
# === 3. eccDNA大小分布 ===
eccDNA <- read.delim("eccDNA_filtered.bed", header = FALSE)
eccDNA$size <- eccDNA$V3 - eccDNA$V2
ggplot(eccDNA, aes(x = log10(size))) +
geom_histogram(bins = 50, fill = "steelblue", alpha = 0.7) +
scale_x_continuous(breaks = 1:6, labels = c("10bp","100bp","1kb","10kb","100kb","1Mb")) +
labs(x = "eccDNA Size (log10)", y = "Count",
title = "eccDNA Size Distribution") +
theme_minimal()
# === 4. eccDNA的基因组分布 ===
library(karyoploteR)
kp <- plotKaryotype(genome = "hg38")
eccDNA_gr <- GRanges(seqnames = eccDNA$V1,
ranges = IRanges(start = eccDNA$V2, end = eccDNA$V3))
kpPlotDensity(kp, data = eccDNA_gr, col = "red")
第六步:ecDNA与肿瘤生物学¶
代码示例:
# === ecDNA与拷贝数、基因表达关联分析 ===
library(ggplot2)
# 比较ecDNA+基因 vs 线性扩增基因的表达水平
expression_data <- data.frame(
Gene = c("EGFR", "MYC", "CDK4", "MDM2", "ERBB2"),
ecDNA_status = c("ecDNA", "ecDNA", "ecDNA", "Linear", "Linear"),
Expression = c(150, 200, 120, 45, 55),
CopyNumber = c(50, 60, 40, 15, 12)
)
# ecDNA基因通常比同等拷贝数的线性扩增基因表达更高
# (因为ecDNA缺乏紧密染色质包裹,转录更活跃)
ggplot(expression_data, aes(x = CopyNumber, y = Expression, color = ecDNA_status)) +
geom_point(size = 4) +
geom_text(aes(label = Gene), vjust = -1) +
geom_smooth(method = "lm", se = FALSE) +
labs(title = "ecDNA vs Linear Amplification: Expression per Copy",
x = "Copy Number", y = "Expression (TPM)") +
theme_minimal()
实战命令¶
# === 完整AmpliconArchitect流程 ===
# 1. 环境设置
export AA_DATA_REPO=/path/to/aa_data_repo/
export AA_SRC=/path/to/AmpliconArchitect/src/
# 2. CNV分析(种子区域)
cnvkit.py batch tumor.bam -n normal.bam \
-f hg38.fa --output-dir cnvkit_out/
python $AA_SRC/amplified_intervals.py \
--bed cnvkit_out/tumor.cns \
--out seeds.bed \
--gain 4 --cnsize_min 50000
# 3. AmpliconArchitect
python $AA_SRC/AmpliconArchitect.py \
--bam tumor.bam \
--bed seeds.bed \
--out results/tumor \
--ref GRCh38
# 4. Amplicon分类
python AmpliconClassifier/amplicon_classifier.py \
--cycles results/tumor_amplicon1_cycles.txt \
--graph results/tumor_amplicon1_graph.txt
# === Circle-Map eccDNA检测 ===
Circle-Map ReadExtractor -i sorted.bam -o extracted.bam
samtools sort extracted.bam -o extracted_sorted.bam
samtools index extracted_sorted.bam
Circle-Map Realign -i extracted_sorted.bam -qbam sorted.bam \
-sbam sorted.bam -fasta hg38.fa -o eccDNA.bed -t 16
面试常问点¶
Q1:ecDNA和传统染色体扩增有什么区别?¶
A: ecDNA是环状的、没有着丝粒的独立DNA分子(通常1-10Mb)。与传统的HSR(均质染色区)或DM(双微体)扩增相比:(1) ecDNA因无着丝粒而在细胞分裂时不均等分配,导致拷贝数快速波动和肿瘤异质性;(2) ecDNA缺乏高阶染色质结构,转录更活跃(单位拷贝表达量高于线性扩增);(3) ecDNA可以通过ecDNA hubs在细胞核内聚集,促进远距离调控。
Q2:AmpliconArchitect是如何重构ecDNA结构的?¶
A: AA的核心流程:(1) 从CNV分析中识别focal amplification(CN≥4, <10Mb)作为种子区域;(2) 构建breakpoint graph——节点是基因组片段,边包括序列连接(reference edges)和断点连接(discordant/split reads支持);(3) 在图上搜索最优环状路径(cyclic walk),使路径覆盖的拷贝数与观测拷贝数一致;(4) 输出cycle结构描述和可视化。
Q3:如何区分ecDNA和BFB(breakage-fusion-bridge)扩增?¶
A: 使用AmpliconClassifier,基于以下特征区分:(1) ecDNA:环状cycle,片段来自可能不相邻的基因组区域,拷贝数均匀;(2) BFB:特征性的"折叠回文"结构,连续倒位pattern,拷贝数呈阶梯状递减。判定标准:ecDNA要求检测到完整的circular cycle且无回文特征;BFB要求有fold-back inversions和阶梯CN。
Q4:eccDNA和ecDNA的检测方法有何不同?¶
A: 大ecDNA(>100kb)用AmpliconArchitect——依赖WGS中的拷贝数异常和复杂结构变异;小eccDNA(<100kb)用Circle-Map——依赖junction-spanning split reads。eccDNA通常需要Circle-seq实验富集(外切酶消化线性DNA)来提高灵敏度,因为小eccDNA的拷贝数不足以被常规WGS的CNV分析检出。
Q5:ecDNA在肿瘤治疗耐药中的角色?¶
A: ecDNA通过以下机制促进耐药:(1) 拷贝数可塑性:因不均等分配,药物选择压力下高拷贝ecDNA细胞被选择;(2) 快速适应:ecDNA拷贝数变化比染色体扩增快得多(数代vs数十代);(3) 异质性储库:群体中ecDNA拷贝数的变异为适应性进化提供原材料;(4) 实例:EGFR-TKI耐药中ecDNA上的EGFR突变型比例变化。
易错点¶
1. AA输入的种子区域(seeds)不合理¶
错误: 将所有CN>2的区域都作为种子。 正确做法: 使用CN≥4-5且大小50kb-10Mb的focal amplification。全染色体/臂水平的获得(arm-level gain)不是ecDNA。使用AA自带的amplified_intervals.py脚本筛选。
2. 没有配对normal样本¶
错误: 用tumor-only WGS做ecDNA分析。 正确做法: AA需要准确的CNV分析来识别focal amplification。没有normal对照会导致germline CNV和mapping artifacts被误判为扩增。
3. 测序深度不足¶
错误: 用10x WGS数据做eccDNA检测。 正确做法: eccDNA检测依赖junction reads。建议:Circle-seq数据至少20x;常规WGS做eccDNA建议30x+。ecDNA(AA)由于拷贝数高,15-30x WGS即可。
4. Circle-Map结果未过滤假阳性¶
错误: 不过滤直接使用所有检测到的eccDNA。 正确做法: 设置过滤标准:split reads ≥ 3, circle score ≥ 10-20, 大小 > 100bp。排除centromere/telomere/卫星序列区域。有对照WGS时排除对照中也存在的"eccDNA"(可能是mapping artifact)。
5. 混淆ecDNA和双微体(DM)¶
错误: 将所有非整合的DNA扩增都称为ecDNA。 正确做法: DM是细胞遗传学术语(FISH可见的小点状信号),ecDNA是分子生物学概念(环状、无着丝粒)。现代认为大部分DM就是ecDNA,但概念来源不同。AA分类为"ecDNA"需要检测到环状结构证据。
补充知识¶
相关工具生态¶
- AmpliconSuite: AA + AC + AmpliconRepository的组合流水线
- CReSIL: 利用ATAC-seq检测ecDNA(ecDNA更accessible)
- ECdetect: 基于FISH图像的ecDNA计数工具
- CIDER-Seq: 长读长环状DNA测序分析
ecDNA研究前沿¶
- ecDNA hubs: ecDNA在细胞核内的空间聚集和远距离调控
- ecDNA继承: 细胞分裂时ecDNA如何分配(随机vs选择性)
- 治疗靶向: 利用ecDNA特性设计治疗策略(如PARP trapping)
- 单细胞ecDNA: 通过单细胞WGS/FISH研究ecDNA异质性
- 液体活检: 从cfDNA中检测ecDNA来源的片段
数据库资源¶
- AmpliconRepository: 公开的ecDNA/amplicon数据库
- eccDNAdb: 已知eccDNA数据库
- COSMIC: 包含ecDNA相关基因扩增信息