跳转至

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相关基因扩增信息