CUT&Tag 表观组学分析¶
一句话概述¶
CUT&Tag 是一种低成本、低细胞量的表观组学技术,利用 Protein A-Tn5 融合蛋白在目标蛋白结合位点处原位切割 DNA 并添加测序接头,信噪比远优于 ChIP-seq。
核心知识点表格¶
| 知识点 | 说明 |
|---|---|
| CUT&Tag | Cleavage Under Targets and Tagmentation,2019年 Henikoff 实验室发明 |
| CUT&RUN | 前身技术,用 MNase 代替 Tn5,需要更多步骤 |
| pA-Tn5 | Protein A 与 Tn5 转座酶的融合蛋白,既能识别抗体又能切割 DNA |
| 低背景 | CUT&Tag 背景极低(不像 ChIP-seq 有非特异性捕获),是其核心优势 |
| SEACR | 专为 CUT&Tag/CUT&RUN 设计的峰调用工具 |
| IgG 对照 | 用无关抗体做阴性对照,而非传统的 Input 对照 |
| Spike-in | 加入已知量的外源 DNA(如果蝇或大肠杆菌)用于标准化 |
| nf-core/cutandrun | Nextflow 标准化分析流程 |
| stringent/relaxed | SEACR 的两种模式:严格模式更保守,宽松模式更灵敏 |
| 细胞量 | 最少只需 100-1000 个细胞 |
白话解释原理¶
想象一下: ChIP-seq 像是用渔网在大海里捞鱼,捞上来一大堆东西(背景噪音高)。
CUT&Tag 更像是精确制导: 1. 让抗体找到目标蛋白(像GPS定位) 2. pA-Tn5 融合蛋白沿着抗体找过去(像精确制导导弹) 3. 在目标位置精准切割 DNA 并加上测序接头(手术式打击) 4. 只有被切下来的 DNA 片段才会被测序
因为切割是在原位发生的,没有被抗体拉下来的非特异性 DNA,所以背景噪音极低,只需很少的测序深度就能得到好结果。
各步骤详解¶
第一步:数据预处理¶
# 1. 质量控制
fastqc sample_R1.fastq.gz sample_R2.fastq.gz -o qc/ # FastQC质控
# 2. 去接头
trim_galore \
--paired \ # 双端模式
--nextera \ # Nextera接头(Tn5使用Nextera接头)
--quality 20 \ # Q20质量过滤
--length 20 \ # 最短20bp
sample_R1.fastq.gz \ # R1
sample_R2.fastq.gz # R2
# 3. 比对(Bowtie2)
bowtie2 \
-x /data/genome/hg38_index \ # 参考基因组
-1 sample_R1_val_1.fq.gz \ # 修剪后R1
-2 sample_R2_val_2.fq.gz \ # 修剪后R2
--very-sensitive \ # 高灵敏度
--maxins 700 \ # 最大片段长度700bp
--no-mixed \ # 不允许单端比对
--no-discordant \ # 不允许不一致比对
--dovetail \ # 允许dovetail配对
-p 8 \ # 8线程
-S sample.sam # 输出SAM
# 4. Spike-in 比对(如果有果蝇spike-in)
bowtie2 \
-x /data/genome/dm6_index \ # 果蝇基因组索引
-1 sample_R1_val_1.fq.gz \ # 同样的reads
-2 sample_R2_val_2.fq.gz \ # 同样的reads
--very-sensitive \ # 高灵敏度
--maxins 700 \ # 最大片段长度
--no-mixed --no-discordant \ # 配对过滤
-p 8 \ # 线程
-S sample_spikein.sam # 输出
# 计算 spike-in 标准化因子
spikein_reads=$(samtools view -c -F 4 sample_spikein.bam) # 计算spike-in reads数
scale_factor=$(echo "scale=6; 1 / $spikein_reads * 10000" | bc) # 计算缩放因子
echo "Spike-in 标准化因子: $scale_factor"
# 5. 后处理
samtools sort -@ 8 -o sample.sorted.bam sample.sam # 排序
samtools index sample.sorted.bam # 建索引
# 去重(CUT&Tag重复率通常很低,但仍建议去重)
picard MarkDuplicates \
I=sample.sorted.bam \ # 输入
O=sample.dedup.bam \ # 输出
M=dup_metrics.txt \ # 重复统计
REMOVE_DUPLICATES=true # 移除重复
# 过滤低质量比对
samtools view -b -f 2 -F 1804 -q 30 \
sample.dedup.bam > sample.clean.bam # 只保留高质量配对
samtools index sample.clean.bam # 建索引
第二步:生成 bedGraph 信号文件¶
# SEACR 需要 bedGraph 格式输入
# 1. BAM 转 bedGraph
bedtools genomecov \
-bg \ # bedGraph格式
-pc \ # 使用片段(而非reads)
-ibam sample.clean.bam \ # 输入BAM
> sample.bedGraph # 输出bedGraph
# 如果需要 spike-in 标准化
bedtools genomecov \
-bg \ # bedGraph格式
-pc \ # 片段模式
-scale $scale_factor \ # 应用spike-in缩放因子
-ibam sample.clean.bam \ # 输入BAM
> sample.normalized.bedGraph # 标准化后的bedGraph
第三步:峰调用(SEACR)¶
白话解释: SEACR 是专门为 CUT&Tag/CUT&RUN 的超低背景数据设计的峰调用工具。
# 安装 SEACR
# git clone https://github.com/FredHutch/SEACR.git
# 或在线: https://seacr.fredhutch.org/
# === 方法1: 有 IgG 对照 ===
bash SEACR_1.3.sh \
sample.bedGraph \ # 目标样本bedGraph
igg_control.bedGraph \ # IgG对照bedGraph
norm \ # 标准化对照到目标
stringent \ # 严格模式(推荐首选)
sample_peaks # 输出前缀
# === 方法2: 无对照(数值阈值) ===
bash SEACR_1.3.sh \
sample.bedGraph \ # 目标样本bedGraph
0.01 \ # 取top 1%的峰
non \ # 不标准化
stringent \ # 严格模式
sample_peaks_nocontrol # 输出前缀
# SEACR 输出格式(6列BED):
# chr start end total_signal max_signal max_signal_region
# 第6列是峰内信号最强区域的坐标
# === 也可以用 MACS2 调峰(适合尖锐信号如 H3K4me3) ===
macs2 callpeak \
-t sample.clean.bam \ # 目标BAM
-c igg_control.clean.bam \ # IgG对照BAM
-f BAMPE \ # 双端格式
-g hs \ # 人类基因组
-n sample_macs2 \ # 前缀
--keep-dup all \ # 保留所有(已去重)
-q 0.05 # FDR阈值
# === 选择建议 ===
# H3K4me3(尖锐峰): MACS2 或 SEACR stringent
# H3K27me3(宽峰): SEACR relaxed
# H3K27ac(中等宽度): SEACR stringent 或 MACS2
第四步:使用 nf-core/cutandrun 流程(推荐)¶
白话解释: nf-core 提供了标准化的 CUT&Tag/CUT&RUN 全自动分析流程。
# 安装 Nextflow
curl -s https://get.nextflow.io | bash # 安装Nextflow
# 运行 nf-core/cutandrun 流程
nextflow run nf-core/cutandrun \
-profile docker \ # 使用Docker容器
--input samplesheet.csv \ # 样本信息表
--genome GRCh38 \ # 参考基因组
--peakcaller 'seacr,MACS2' \ # 同时用两种峰调用工具
--outdir results/ # 输出目录
# 样本信息表格式 (samplesheet.csv):
# group,replicate,fastq_1,fastq_2,control_group
# H3K27me3,1,h3k27me3_r1_R1.fq.gz,h3k27me3_r1_R2.fq.gz,IgG
# H3K27me3,2,h3k27me3_r2_R1.fq.gz,h3k27me3_r2_R2.fq.gz,IgG
# IgG,1,igg_r1_R1.fq.gz,igg_r1_R2.fq.gz,
第五步:可视化和下游分析¶
# 1. 生成 bigWig 信号轨迹
bamCoverage \
-b sample.clean.bam \ # 输入BAM
-o sample.bw \ # 输出bigWig
--normalizeUsing RPKM \ # RPKM标准化
--binSize 10 \ # 10bp分辨率
--extendReads # 延伸到片段长度
# 2. 热图可视化
# 提取 SEACR 峰的中心点
awk 'OFS="\t" {split($6,a,":"); split(a[2],b,"-"); \
mid=int((b[1]+b[2])/2); \
print a[1], mid-1, mid}' \
sample_peaks.stringent.bed > peak_centers.bed # 峰中心坐标
# 用 deeptools 绘制热图
computeMatrix reference-point \
-S sample.bw igg.bw \ # ChIP和IgG信号
-R peak_centers.bed \ # 峰中心
--referencePoint center \ # 以中心对齐
-a 3000 -b 3000 \ # 上下游各3kb
-o matrix.gz # 输出矩阵
plotHeatmap \
-m matrix.gz \ # 输入矩阵
-o heatmap.pdf \ # 输出图片
--colorMap Blues \ # 蓝色系
--heatmapHeight 10 # 热图高度
常见报错与解决¶
| 报错 | 原因 | 解决方案 |
|---|---|---|
SEACR: no peaks found | 信号太弱或阈值太严 | 尝试 relaxed 模式或数值阈值 0.05 |
Very few reads (<1M) | CUT&Tag需要的测序深度本来就低 | 3-5M reads 通常就够,不是bug |
High duplicate rate | 文库复杂度低 | 可能起始细胞太少,检查建库质量 |
Spike-in reads = 0 | spike-in DNA添加不成功 | 检查spike-in是否正确添加,或基因组索引是否正确 |
Broad signal not called | SEACR stringent 对宽信号不敏感 | 使用 relaxed 模式或 MACS2 --broad |
bedGraph format error | bedGraph 列格式不对 | 确保4列: chr, start, end, value |
速查表¶
┌──────────────────────────────────────────────────────────┐
│ CUT&Tag / CUT&RUN 分析速查 │
├──────────────────────────────────────────────────────────┤
│ 技术对比: │
│ CUT&Tag: pA-Tn5切割, 更简单, 更少细胞 │
│ CUT&RUN: pA-MNase切割, 分辨率略高 │
│ ChIP-seq: 抗体沉淀, 背景高, 需大量细胞 │
│ │
│ 峰调用工具选择: │
│ SEACR — 专为低背景数据设计(首选) │
│ MACS2 — 尖锐峰也适用 │
│ SEACR stringent — 保守,适合TF/H3K4me3 │
│ SEACR relaxed — 宽松,适合H3K27me3 │
│ │
│ 关键参数: │
│ 测序深度: 3-5M reads (通常足够) │
│ 对照: IgG (非传统Input) │
│ Spike-in: 果蝇/大肠杆菌 DNA │
│ 接头: Nextera (Tn5) │
│ │
│ 标准化: │
│ 有spike-in → spike-in标准化 │
│ 无spike-in → RPKM 或 reads-in-peaks 标准化 │
│ │
│ 自动化流程: nf-core/cutandrun │
└──────────────────────────────────────────────────────────┘
面试高频问题¶
CUT&Tag 相比 ChIP-seq 有哪些优势? 答:(1) 细胞需求极少(100-1000个 vs ChIP-seq 的百万级);(2) 背景极低,信噪比高,只需 3-5M reads 就够(ChIP-seq 通常需要 30-50M);(3) 操作简单快速,不需要超声打碎 DNA;(4) 不依赖甲醛交联(减少假阳性);(5) 成本低。局限:抗体仍是关键、对某些靶标效果不如 ChIP-seq。
为什么 CUT&Tag 数据不能直接用 ChIP-seq 的分析工具? 答:CUT&Tag 的背景极低(大量区域 read count = 0),传统的泊松/负二项分布模型(如 MACS2)在估计背景时会被这些零值干扰。SEACR 用经验分布而非参数模型来确定阈值,更适合这种稀疏数据。不过 MACS2 在处理尖锐峰(如 H3K4me3)时仍然可用。
SEACR 的 stringent 和 relaxed 模式有什么区别? 答:两者的区别在于信号阈值的确定方式。SEACR 先计算所有信号块的总信号量分布曲线——stringent 模式取曲线的"拐点"(peak of the curve)作为阈值,更保守;relaxed 模式取"膝盖点"(knee of the curve)作为阈值,更宽松。建议先用 stringent,如果峰太少再用 relaxed;对于宽信号(如 H3K27me3)直接用 relaxed。