染色质可及性ATAC-seq全流程¶
一句话概述¶
ATAC-seq(Assay for Transposase-Accessible Chromatin using sequencing)通过Tn5转座酶切割开放染色质区域来检测基因组的可及性,本教程覆盖从原始数据处理到peak calling和motif分析的完整计算流程。
目录¶
1. 核心知识点¶
| 序号 | 步骤 | 工具 | 目的 | 输入 | 输出 | 关键参数 |
|---|---|---|---|---|---|---|
| 1 | 质控与接头去除 | FastQC/Trim Galore | 去除低质量reads和接头 | Raw FASTQ | Clean FASTQ | Nextera接头 |
| 2 | 基因组比对 | Bowtie2/BWA | 将reads比对到参考基因组 | Clean FASTQ + 基因组索引 | BAM | --very-sensitive -X 2000 |
| 3 | BAM后处理 | SAMtools/Picard | 去重、过滤、排序 | BAM | 处理后BAM | MAPQ≥30, 去重 |
| 4 | 线粒体和黑名单过滤 | SAMtools/BEDTools | 去除MT reads和黑名单区域 | BAM | 过滤后BAM | 黑名单BED |
| 5 | Tn5偏移校正 | deepTools/自定义 | 校正Tn5插入位点偏移 | BAM | 偏移校正BAM | +4/-5 shift |
| 6 | 片段大小分布 | ATACseqQC/Picard | 检查核小体信号 | BAM | 片段大小直方图 | 周期~200bp |
| 7 | Peak calling | MACS2/HMMRATAC | 识别开放染色质区域 | BAM | Narrowpeak/BED | -f BAMPE --nomodel |
| 8 | 差异可及性分析 | DiffBind/DESeq2 | 识别条件间差异peaks | Peak集合+BAMs | 差异peaks | FDR<0.05, |
| 9 | 转录因子足迹 | TOBIAS/HINT | 识别TF结合足迹 | BAM + Peaks + Motifs | TF足迹分数 | 覆盖度校正 |
| 10 | Motif富集分析 | HOMER/MEME | 发现富集的TF motif | Peak序列 | Motif列表 | 背景选择 |
2. 各步骤详解¶
步骤1:质控与接头去除¶
白话解释:ATAC-seq使用Nextera转座酶接头(与标准Illumina接头不同)。由于ATAC-seq的片段长度分布很广(从<100bp的无核小体区域到~200bp的单核小体片段),短片段reads中接头污染比例很高,必须彻底去除。
技术细节:
ATAC-seq的接头特殊性: - Tn5转座酶使用Nextera接头序列 - 接头序列:CTGTCTCTTATACACATCT - 因为有大量短片段(<150bp),PE150测序时接头读穿率很高 - Trim Galore可自动检测Nextera接头
质控指标特殊关注: - 片段大小分布应呈现核小体周期性(~200bp间隔的峰) - GC含量可能因开放染色质的GC偏好而略偏 - 过高的重复率可能表示起始材料太少
# FastQC质控
fastqc -t 8 sample_R1.fastq.gz sample_R2.fastq.gz -o qc_raw/
# Trim Galore(自动检测Nextera接头)
trim_galore --paired --nextera --quality 20 --length 20 \
--cores 4 --fastqc \
sample_R1.fastq.gz sample_R2.fastq.gz \
-o trimmed/
# 或手动指定Nextera接头
trim_galore --paired \
-a CTGTCTCTTATACACATCT -a2 CTGTCTCTTATACACATCT \
--quality 20 --length 20 \
--cores 4 \
sample_R1.fastq.gz sample_R2.fastq.gz \
-o trimmed/
步骤2:基因组比对¶
白话解释:将质控后的reads比对到参考基因组。ATAC-seq片段的长度范围很广(100-1000bp+),所以需要设置足够大的最大插入片段长度参数。
技术细节:
Bowtie2是ATAC-seq比对的首选工具(比BWA对短片段处理更好)。关键参数: - --very-sensitive:使用最灵敏的比对模式 - -X 2000:允许的最大片段长度(ATAC-seq可有很长的片段) - --no-mixed --no-discordant:只保留配对比对正确的reads - --dovetail:允许reads重叠(短片段可能导致PE reads互相穿过)
为什么不用STAR/HISAT2:ATAC-seq数据来自基因组DNA(不是RNA),没有剪接,所以不需要splice-aware的比对工具。
# Bowtie2索引(如未建立)
bowtie2-build --threads 16 genome.fa genome_bt2_idx
# Bowtie2比对
bowtie2 -x genome_bt2_idx \
-1 trimmed/sample_R1_val_1.fq.gz \
-2 trimmed/sample_R2_val_2.fq.gz \
--very-sensitive \
-X 2000 \
--no-mixed --no-discordant \
--threads 16 \
2> align_stats.txt \
| samtools sort -@ 8 -o aligned/sample.bam
samtools index aligned/sample.bam
# 查看比对统计
cat align_stats.txt
步骤3:BAM后处理¶
白话解释:比对后的BAM文件需要进一步清理:去除PCR重复(同一个DNA片段被多次测序)、去除低比对质量的reads、去除未正确配对的reads。这些过滤确保后续分析基于真实的、可靠的信号。
技术细节:
过滤步骤: 1. 去除PCR重复:Picard MarkDuplicates或sambamba markdup 2. MAPQ过滤:只保留高质量比对(MAPQ≥30,对应错误概率<0.1%) 3. 去除未配对/不一致reads:SAMtools flag过滤 4. 去除多比对reads:ATAC-seq中多比对reads通常来自重复序列区域 5. 仅保留常染色体:去除随机contigs和未定位scaffolds
ATAC-seq的PCR重复率通常为10-40%。如果重复率>50%,说明建库起始材料可能太少。使用UMI可以更准确地去重。
# 标记并去除PCR重复
picard MarkDuplicates \
I=aligned/sample.bam \
O=aligned/sample_dedup.bam \
M=aligned/sample_dup_metrics.txt \
REMOVE_DUPLICATES=true
# 多步过滤
samtools view -@ 8 -b -f 2 -F 1804 -q 30 \
aligned/sample_dedup.bam \
> aligned/sample_filtered.bam
# Flag解释:
# -f 2: 保留properly paired
# -F 1804: 去除unmapped(4), mate unmapped(8), not primary(256),
# fails QC(512), duplicate(1024)
# -q 30: MAPQ >= 30
samtools index aligned/sample_filtered.bam
# 统计过滤前后reads数
echo "原始比对reads: $(samtools view -c aligned/sample.bam)"
echo "过滤后reads: $(samtools view -c aligned/sample_filtered.bam)"
步骤4:线粒体和黑名单过滤¶
白话解释:ATAC-seq中线粒体DNA是一个大问题——线粒体DNA没有组蛋白包装,完全"开放",会消耗大量测序能力。此外,基因组中有些区域(ENCODE黑名单)无论什么实验都会产生异常高的信号,应该排除。
技术细节:
线粒体reads的影响: - 线粒体DNA完全开放(无核小体),Tn5会大量切割 - 好的ATAC-seq实验线粒体reads<20%(理想<5%) - 高线粒体比例(>50%)通常表示细胞活力差或核提取不完全 - 一些建库方案使用差异离心或核分离来减少线粒体
ENCODE黑名单区域: - 这些区域在各种ChIP-seq/ATAC-seq实验中都产生异常高信号 - 原因包括:重复序列过多、基因组组装错误、卫星DNA - 应在peak calling之前去除这些区域的reads - 可从ENCODE下载物种特异的黑名单BED文件
# 去除线粒体reads
samtools view -@ 8 -b aligned/sample_filtered.bam \
$(samtools view -H aligned/sample_filtered.bam | grep "^@SQ" | \
awk '{print $2}' | sed 's/SN://' | grep -v "chrM" | tr '\n' ' ') \
> aligned/sample_noMT.bam
# 或者用samtools idxstats计算线粒体比例后直接过滤
echo "线粒体reads比例:"
samtools idxstats aligned/sample_filtered.bam | \
awk '{if($1=="chrM") mt=$3; total+=$3} END{print mt/total*100 "%"}'
# 去除黑名单区域
bedtools intersect -v -abam aligned/sample_noMT.bam \
-b encode_blacklist_hg38.bed \
> aligned/sample_final.bam
samtools index aligned/sample_final.bam
echo "最终分析reads: $(samtools view -c aligned/sample_final.bam)"
步骤5:Tn5偏移校正¶
白话解释:Tn5转座酶实际切割DNA时,会产生一个9bp的间隔(staggered cut)——正链切割点比负链的切割点偏移9bp。为了精确定位真正的"切割点"(即开放染色质位点),需要将正链reads向3'方向偏移+4bp,负链reads向5'方向偏移-5bp。
技术细节:
Tn5偏移的生物学原因: - Tn5以二聚体形式工作,在DNA双链上交错切割 - 两个切割位点之间有9bp的间距 - 因此每个插入事件产生9bp的TSD(Target Site Duplication) - 校正后的位点代表Tn5二聚体中心的真正插入位置
校正方法: - 正链(+)reads的5'端位置+4 → 真实切割位点 - 负链(-)reads的5'端位置-5 → 真实切割位点
这个校正对于TF footprint分析至关重要(需要碱基水平的精度),但对peak calling影响不大(peak通常跨越数百bp)。
# 使用alignmentSieve(deepTools)进行Tn5偏移校正
alignmentSieve \
--bam aligned/sample_final.bam \
--outFile aligned/sample_shifted.bam \
--ATACshift \
--numberOfProcessors 16
samtools sort -@ 8 -o aligned/sample_shifted_sorted.bam aligned/sample_shifted.bam
samtools index aligned/sample_shifted_sorted.bam
# 或使用自定义脚本(基于pysam)
python3 << 'EOF'
import pysam
inbam = pysam.AlignmentFile("aligned/sample_final.bam", "rb")
outbam = pysam.AlignmentFile("aligned/sample_shifted.bam", "wb", template=inbam)
for read in inbam:
if read.is_unmapped or read.is_secondary or read.is_supplementary:
continue
if read.is_reverse:
read.reference_start = read.reference_start - 5
else:
read.reference_start = read.reference_start + 4
outbam.write(read)
inbam.close()
outbam.close()
EOF
步骤6:片段大小分布与质量评估¶
白话解释:好的ATAC-seq数据应该呈现明显的核小体周期性:最小的片段(<150bp)来自无核小体区域(NFR),~200bp的片段跨过1个核小体,~400bp跨过2个核小体。这个分布是判断ATAC-seq数据质量的关键指标。
技术细节:
期望的片段大小分布模式: - 第一个峰(<150bp):无核小体区域(NFR)/亚核小体片段,代表TF结合位点和启动子区域 - 第二个峰(~200bp):单核小体片段 - 第三个峰(~400bp):双核小体片段 - 峰之间的谷应该明显
如果看不到周期性: - 可能细胞核提取不完全 - 或转座酶用量不当(过量会切太碎,不足会切不够) - 或数据质量差
TSS(转录起始位点)富集也是重要的质量指标:ATAC-seq信号应该在活跃基因的TSS附近富集。
# 使用Picard计算插入片段大小
picard CollectInsertSizeMetrics \
I=aligned/sample_final.bam \
O=qc/insert_size_metrics.txt \
H=qc/insert_size_histogram.pdf
# 使用ATACseqQC(R包,更全面的QC)
library(ATACseqQC)
library(ggplot2)
# 片段大小分布
fragSize <- fragSizeDist("aligned/sample_final.bam", "Sample1")
# 或直接从BAM提取
library(Rsamtools)
param <- ScanBamParam(what="isize")
bam <- scanBam("aligned/sample_final.bam", param=param)
frag_sizes <- abs(bam[[1]]$isize)
frag_sizes <- frag_sizes[frag_sizes > 0 & frag_sizes < 1000]
ggplot(data.frame(size=frag_sizes), aes(x=size)) +
geom_histogram(bins=500, fill="steelblue", color="white", linewidth=0.1) +
geom_vline(xintercept=c(150, 200, 400), linetype="dashed", color="red") +
labs(x="Fragment size (bp)", y="Count",
title="ATAC-seq Fragment Size Distribution") +
xlim(0, 800) +
theme_minimal(base_size=14)
ggsave("qc/fragment_size_distribution.pdf", width=8, height=5)
# TSS富集图
library(ChIPseeker)
library(TxDb.Hsapiens.UCSC.hg38.knownGene)
txdb <- TxDb.Hsapiens.UCSC.hg38.knownGene
# 读取peaks用于TSS注释(先做peak calling再回来看)
peaks <- readPeakFile("peaks/sample_peaks.narrowPeak")
peakAnno <- annotatePeak(peaks, TxDb=txdb, tssRegion=c(-3000, 3000))
plotAnnoPie(peakAnno)
步骤7:Peak calling¶
白话解释:找到基因组上那些Tn5切割频率异常高的区域——即开放染色质区域。MACS2是最常用的peak caller,对ATAC-seq需要使用特定参数(无control、paired-end模式)。
技术细节:
MACS2用于ATAC-seq的关键参数: - -f BAMPE:使用配对reads的片段信息(比单端模型更准确) - --nomodel:不需要估计fragment size(因为我们已知片段大小分布) - --keep-dup all:保留所有reads(已经去过重了) - --nolambda或-g:基因组有效大小 - --shift -75 --extsize 150:如果用单端模式(不推荐),这模拟了NFR的大小 - 不需要input/control样本(不同于ChIP-seq)
HMMRATAC是专门为ATAC-seq设计的替代工具: - 使用隐马尔可夫模型识别开放区域和核小体位置 - 能区分NFR和核小体区域 - 对核小体定位信号更好
建议:先用MACS2做标准分析,对于需要精细核小体定位的研究可以加用HMMRATAC。
# MACS2 peak calling(推荐:BAMPE模式)
macs2 callpeak \
-t aligned/sample_final.bam \
-f BAMPE \
-g hs \
-n sample \
--outdir peaks/ \
--nomodel \
--keep-dup all \
-B --SPMR \
-q 0.01
# 输出文件:
# peaks/sample_peaks.narrowPeak - peak坐标和信号
# peaks/sample_summits.bed - peak顶点
# peaks/sample_treat_pileup.bdg - 信号track
# HMMRATAC(替代方案)
HMMRATAC \
-b aligned/sample_final.bam \
-i aligned/sample_final.bam.bai \
-g genome.genome \
-o peaks/sample_hmmratac
# 统计
echo "Peak数: $(wc -l < peaks/sample_peaks.narrowPeak)"
echo "Peak中位数宽度: $(awk '{print $3-$2}' peaks/sample_peaks.narrowPeak | sort -n | awk 'NR==int(NR/2)')"
# 生成bigWig用于可视化
bamCoverage \
-b aligned/sample_final.bam \
-o tracks/sample.bw \
--normalizeUsing RPGC \
--effectiveGenomeSize 2913022398 \
--binSize 10 \
-p 16
步骤8:差异可及性分析¶
白话解释:比较不同条件(如处理vs对照、不同细胞类型)之间的染色质开放程度差异。哪些区域变得更开放了?哪些关闭了?这反映了调控程序的改变。
技术细节:
差异可及性分析流程: 1. 建立共识peak集(consensus peaks):合并所有样本的peaks,保留在一定比例样本中出现的peaks 2. 计数矩阵:对每个consensus peak区域,计算每个样本的reads数 3. 差异分析:使用DESeq2或edgeR框架进行统计检验
DiffBind是专为ChIP-seq/ATAC-seq差异分析设计的R包: - 自动处理peak合并和计数 - 内置DESeq2和edgeR方法 - 支持多因素实验设计 - 提供MA图、火山图等可视化
最少需要每组2-3个生物学重复。
library(DiffBind)
# 创建DiffBind样本表
samples <- data.frame(
SampleID = c("Control_1","Control_2","Control_3","Treatment_1","Treatment_2","Treatment_3"),
Condition = c(rep("Control",3), rep("Treatment",3)),
bamReads = paste0("aligned/", c("ctrl1","ctrl2","ctrl3","treat1","treat2","treat3"), "_final.bam"),
Peaks = paste0("peaks/", c("ctrl1","ctrl2","ctrl3","treat1","treat2","treat3"), "_peaks.narrowPeak"),
PeakCaller = rep("macs", 6)
)
# DiffBind分析
dba_obj <- dba(sampleSheet=samples)
dba_obj <- dba.count(dba_obj, bUseSummarizeOverlaps=TRUE)
dba_obj <- dba.normalize(dba_obj)
dba_obj <- dba.contrast(dba_obj, contrast=c("Condition","Treatment","Control"))
dba_obj <- dba.analyze(dba_obj, method=DBA_DESEQ2)
# 获取差异peaks
diff_peaks <- dba.report(dba_obj, th=0.05, fold=1)
cat("差异peaks数:", length(diff_peaks), "\n")
cat(" 开放增加:", sum(diff_peaks$Fold > 0), "\n")
cat(" 开放减少:", sum(diff_peaks$Fold < 0), "\n")
# MA图
dba.plotMA(dba_obj)
# 火山图
dba.plotVolcano(dba_obj)
# 保存差异peaks
export(diff_peaks, "results/differential_peaks.bed")
步骤9:转录因子足迹分析¶
白话解释:当转录因子(TF)结合在DNA上时,它会保护其结合位点免受Tn5的切割。因此在TF结合位点中心会看到一个ATAC-seq信号的"凹陷"——称为"足迹"(footprint)。检测这些足迹可以推断哪些TF在特定条件下活跃。
技术细节:
足迹分析工具: - TOBIAS(最推荐):校正Tn5序列偏好,比较不同条件间的footprint差异 - HINT-ATAC:使用HMM检测footprint - pyDNase/Wellington:经典的DNase-seq footprint方法,也可用于ATAC-seq
TOBIAS的流程: 1. Tn5偏好校正(ATACorrect):消除Tn5的序列切割偏好 2. 足迹评分(ScoreBigwig):为每个motif位点计算footprint分数 3. 差异足迹(BINDetect):比较条件间的TF活性差异
Tn5偏好校正非常重要:Tn5转座酶对特定DNA序列有偏好(不完全随机),如果不校正,会产生假足迹或掩盖真足迹。
# TOBIAS流程
# 1. Tn5偏好校正
TOBIAS ATACorrect \
--bam aligned/sample_final.bam \
--genome genome.fa \
--peaks peaks/sample_peaks.narrowPeak \
--outdir tobias_output/ \
--cores 16
# 2. 足迹评分
TOBIAS ScoreBigwig \
--signal tobias_output/sample_final_corrected.bw \
--regions peaks/sample_peaks.narrowPeak \
--output tobias_output/sample_footprints.bw \
--cores 16
# 3. TF结合检测(差异比较)
TOBIAS BINDetect \
--motifs JASPAR2024_CORE_vertebrates.meme \
--signals treatment_footprints.bw control_footprints.bw \
--genome genome.fa \
--peaks consensus_peaks.bed \
--outdir tobias_output/bindetect \
--cores 16 \
--cond_names Treatment Control
步骤10:Motif富集分析¶
白话解释:分析peak区域中富集的DNA序列模式(motif),推断哪些转录因子可能在这些开放染色质区域中结合。这是连接表观基因组数据和转录调控网络的关键步骤。
技术细节:
HOMER是ATAC-seq motif分析最常用的工具: - findMotifsGenome.pl:从peak序列中从头发现和数据库匹配motif - 自动生成背景序列(GC%和长度匹配) - 同时做de novo motif发现和已知motif富集 - 输出包含html报告,非常直观
关键考虑: - 背景选择:使用GC%匹配的随机基因组区域作为背景;也可以用所有peaks作为背景分析子集peaks中的富集(如差异peaks vs 所有peaks) - Peak大小:通常使用peak summit±150bp的区域(富集更集中) - 去除重复序列:重复区域中的motif不代表TF结合
MEME-ChIP是另一个选择,包含MEME(de novo)和AME(已知motif富集)。
# HOMER motif分析
# 安装HOMER后需要下载motif数据库
# perl configureHomer.pl -install hg38
findMotifsGenome.pl \
peaks/sample_summits.bed \
hg38 \
motif_results/ \
-size 200 \
-mask \
-p 16
# 对差异peaks分别分析
# 开放增加的peaks
findMotifsGenome.pl \
results/peaks_gained.bed \
hg38 \
motif_gained/ \
-size 200 -mask -p 16
# 开放减少的peaks
findMotifsGenome.pl \
results/peaks_lost.bed \
hg38 \
motif_lost/ \
-size 200 -mask -p 16
# MEME-ChIP(替代方案)
# 先提取peak序列
bedtools getfasta -fi genome.fa -bed peaks/sample_summits_200bp.bed > peak_seqs.fa
meme-chip -meme-maxw 20 -meme-nmotifs 10 peak_seqs.fa -o meme_output/
3. 实战命令/代码(完整流程)¶
#!/bin/bash
# ====================================================
# ATAC-seq完整分析流程
# ====================================================
set -euo pipefail
SAMPLE="sample1"
THREADS=16
GENOME="ref/hg38.fa"
BT2_INDEX="ref/hg38_bt2"
BLACKLIST="ref/hg38_blacklist_v2.bed"
GENOME_SIZE="2913022398" # hg38 effective genome size
R1="raw/${SAMPLE}_R1.fastq.gz"
R2="raw/${SAMPLE}_R2.fastq.gz"
OUTDIR="results/${SAMPLE}"
mkdir -p ${OUTDIR}/{qc,trimmed,aligned,peaks,tracks,motifs}
# ==== Step 1: 质控 ====
echo "[Step 1] 质控与接头去除..."
trim_galore --paired --nextera --quality 20 --length 20 \
--cores 4 --fastqc \
${R1} ${R2} \
-o ${OUTDIR}/trimmed/
# ==== Step 2: 比对 ====
echo "[Step 2] Bowtie2比对..."
bowtie2 -x ${BT2_INDEX} \
-1 ${OUTDIR}/trimmed/${SAMPLE}_R1_val_1.fq.gz \
-2 ${OUTDIR}/trimmed/${SAMPLE}_R2_val_2.fq.gz \
--very-sensitive -X 2000 \
--no-mixed --no-discordant \
--threads ${THREADS} \
2> ${OUTDIR}/qc/bowtie2_stats.txt \
| samtools sort -@ 8 -o ${OUTDIR}/aligned/raw.bam
samtools index ${OUTDIR}/aligned/raw.bam
# ==== Step 3: 去重和过滤 ====
echo "[Step 3] 去重和过滤..."
picard MarkDuplicates \
I=${OUTDIR}/aligned/raw.bam \
O=${OUTDIR}/aligned/dedup.bam \
M=${OUTDIR}/qc/dup_metrics.txt \
REMOVE_DUPLICATES=true
samtools view -@ 8 -b -f 2 -F 1804 -q 30 \
${OUTDIR}/aligned/dedup.bam \
> ${OUTDIR}/aligned/filtered.bam
# ==== Step 4: 去MT和黑名单 ====
echo "[Step 4] 去除线粒体和黑名单..."
# 计算MT比例
MT_PCT=$(samtools idxstats ${OUTDIR}/aligned/filtered.bam | \
awk '{if($1=="chrM") mt=$3; total+=$3} END{printf "%.1f", mt/total*100}')
echo "线粒体reads比例: ${MT_PCT}%"
# 去除chrM
samtools view -@ 8 -b ${OUTDIR}/aligned/filtered.bam \
$(seq 1 22 | sed 's/^/chr/' | tr '\n' ' ') chrX chrY \
> ${OUTDIR}/aligned/noMT.bam
# 去除黑名单
bedtools intersect -v -abam ${OUTDIR}/aligned/noMT.bam \
-b ${BLACKLIST} \
> ${OUTDIR}/aligned/final.bam
samtools index ${OUTDIR}/aligned/final.bam
FINAL_READS=$(samtools view -c ${OUTDIR}/aligned/final.bam)
echo "最终有效reads: ${FINAL_READS}"
# ==== Step 5: Tn5偏移校正 ====
echo "[Step 5] Tn5偏移校正..."
alignmentSieve \
--bam ${OUTDIR}/aligned/final.bam \
--outFile ${OUTDIR}/aligned/shifted.bam \
--ATACshift \
--numberOfProcessors ${THREADS}
samtools sort -@ 8 -o ${OUTDIR}/aligned/shifted_sorted.bam ${OUTDIR}/aligned/shifted.bam
samtools index ${OUTDIR}/aligned/shifted_sorted.bam
# ==== Step 6: 片段大小分布 ====
echo "[Step 6] 片段大小分布..."
picard CollectInsertSizeMetrics \
I=${OUTDIR}/aligned/final.bam \
O=${OUTDIR}/qc/insert_metrics.txt \
H=${OUTDIR}/qc/insert_histogram.pdf
# ==== Step 7: Peak calling ====
echo "[Step 7] MACS2 Peak calling..."
macs2 callpeak \
-t ${OUTDIR}/aligned/final.bam \
-f BAMPE -g hs \
-n ${SAMPLE} \
--outdir ${OUTDIR}/peaks/ \
--nomodel --keep-dup all \
-B --SPMR -q 0.01
echo "Peak数: $(wc -l < ${OUTDIR}/peaks/${SAMPLE}_peaks.narrowPeak)"
# ==== Step 8: BigWig生成 ====
echo "[Step 8] 生成信号track..."
bamCoverage \
-b ${OUTDIR}/aligned/final.bam \
-o ${OUTDIR}/tracks/${SAMPLE}.bw \
--normalizeUsing RPGC \
--effectiveGenomeSize ${GENOME_SIZE} \
--binSize 10 -p ${THREADS}
# ==== Step 9: Motif分析 ====
echo "[Step 9] Motif富集分析..."
findMotifsGenome.pl \
${OUTDIR}/peaks/${SAMPLE}_summits.bed \
hg38 ${OUTDIR}/motifs/ \
-size 200 -mask -p ${THREADS}
# ==== QC汇总 ====
echo ""
echo "========== QC Summary =========="
echo "样本: ${SAMPLE}"
echo "比对率: $(grep 'overall' ${OUTDIR}/qc/bowtie2_stats.txt)"
echo "重复率: $(grep 'PERCENT' ${OUTDIR}/qc/dup_metrics.txt | cut -f9)"
echo "线粒体: ${MT_PCT}%"
echo "有效reads: ${FINAL_READS}"
echo "Peak数: $(wc -l < ${OUTDIR}/peaks/${SAMPLE}_peaks.narrowPeak)"
echo "================================"
4. 面试常问点¶
Q1:ATAC-seq的实验原理是什么?与ChIP-seq、DNase-seq有什么区别?
ATAC-seq使用Tn5转座酶(预装测序接头)切割开放染色质区域并同时整合测序接头,一步完成染色质可及性检测和建库。与ChIP-seq的区别:ChIP-seq检测特定蛋白结合位点(需要抗体),ATAC-seq检测所有开放区域(不需要抗体)。与DNase-seq的区别:原理相似(都检测可及性),但ATAC-seq只需500-50000个细胞(DNase-seq需要百万级),操作更简单快速。
Q2:为什么需要进行Tn5偏移校正(+4/-5 shift)?
Tn5以二聚体形式工作,在DNA双链上产生交错切割(staggered cut),两个切割位点间隔9bp。正链读取的5'端比实际切割点偏移4bp,负链偏移5bp。校正后才能精确定位Tn5的真实插入位点(代表染色质开放位点)。对peak calling影响不大(数百bp的peak),但对TF footprint分析至关重要(需要碱基级精度)。
Q3:ATAC-seq数据质量如何判断?
关键QC指标:(1)片段大小分布应呈核小体周期性(~200bp间隔的峰);(2)线粒体reads比例<20%(理想<5%);(3)TSS周围信号富集(FRiP score);(4)PCR重复率<30%;(5)比对率>80%;(6)最终有效reads≥25M(建议≥50M)。如果看不到核小体周期性或线粒体比例>50%,数据质量可能有问题。
Q4:ATAC-seq的peak calling为什么不需要input/control?
因为ATAC-seq检测的是开放区域vs关闭区域的信号差异,背景就是关闭的染色质区域(Tn5无法切割)。不像ChIP-seq中信号是特异性的(抗体富集),需要input来估计非特异性背景。MACS2使用局部lambda估计基因组背景水平,足以区分真实的开放区域。但在某些特殊情况下(如比较不同条件),使用genomic DNA input可以改善标准化。
Q5:如何从ATAC-seq数据中推断核小体定位?
利用片段大小信息:(1)短片段(<150bp)代表无核小体区域(NFR),提取这些reads可以精确定位开放区域中心;(2)单核小体片段(150-300bp)的中心对应核小体位置;(3)NucleoATAC等专门工具从ATAC-seq信号解卷积出核小体定位。HMMRATAC也能同时输出NFR和核小体位置。
Q6:差异可及性分析和差异基因表达分析的方法论有什么异同?
相同:都使用计数数据+负二项分布模型(DESeq2/edgeR框架)。不同:(1)ATAC-seq中"特征"是peak区域而非基因;(2)需要先建立consensus peak集合;(3)标准化方法可能不同(ATAC-seq常用library size或FRiP标准化);(4)ATAC-seq重复间变异通常大于RNA-seq(建议≥3个重复)。DiffBind包封装了这些差异。
5. 易错/易混淆点¶
使用错误的接头序列进行修剪:ATAC-seq使用Nextera接头(不是标准TruSeq接头)。如果用TruSeq接头参数,会遗漏大量接头污染,影响后续比对。
忽略线粒体reads:不去除线粒体reads会浪费大量有效测序深度,且线粒体区域在peak calling中可能产生假阳性。务必检查并报告MT比例。
Peak calling时使用ChIP-seq的默认参数:MACS2默认参数是为ChIP-seq设计的。ATAC-seq必须使用
-f BAMPE --nomodel(paired-end模式且不建模fragment size)。使用默认参数会产生大量错误的peak。混淆"开放染色质"和"TF结合":ATAC-seq peak代表染色质可及的区域,不一定意味着有TF在结合。同样,不是所有TF结合都能被ATAC-seq检测到(如果结合在已经开放的大区域中间)。
生物学重复不足:ATAC-seq的技术变异较大(特别是单细胞水平的变异),差异分析至少需要3个生物学重复。2个重复的统计功效很低。
不做ENCODE黑名单过滤:黑名单区域在几乎所有ATAC-seq/ChIP-seq实验中都产生信号,如果不过滤会产生大量假阳性peaks(通常位于着丝粒、端粒、卫星DNA区域)。
对TF footprint分析不做Tn5偏好校正:Tn5转座酶对DNA序列有偏好(不完全随机切割)。如果不校正这个偏好,某些DNA序列的"凹陷"可能只是Tn5偏好的artifact而非真正的TF footprint。TOBIAS的ATACorrect步骤解决这个问题。
6. 补充知识¶
单细胞ATAC-seq(scATAC-seq)¶
- 10x Genomics scATAC-seq:最主流的商业平台
- 分析工具:ArchR、Signac、SnapATAC2
- 挑战:极度稀疏(每个细胞仅捕获~10,000个片段)
- 应用:识别细胞类型特异的调控程序、推断基因调控网络
CUT&Tag作为替代/互补¶
- CUT&Tag可以用于检测特定组蛋白修饰(H3K4me3、H3K27ac等)
- 比ChIP-seq需要更少的细胞,与ATAC-seq互补使用
- CUT&RUN/CUT&Tag的分析流程与ATAC-seq/ChIP-seq相似
推荐资源¶
- ENCODE ATAC-seq pipeline: https://www.encodeproject.org/atac-seq/
- nf-core/atacseq: https://nf-co.re/atacseq — Nextflow自动化流程
- TOBIAS: https://github.com/loosolab/TOBIAS
- DiffBind: https://bioconductor.org/packages/DiffBind/
- HOMER: http://homer.ucsd.edu/homer/
- ATACseqQC: https://bioconductor.org/packages/ATACseqQC/
- 原始论文: Buenrostro et al. (2013) "Transposition of native chromatin for fast and sensitive epigenomic profiling" Nature Methods