ATAC-seq 入门(二):从 FASTQ 到可审计的峰集合

本篇继续讨论 bulk paired-end ATAC-seq,不覆盖 scATAC-seq。示例命令是教学模板,没有在本站执行测序分析,也没有真实实验结果。先完成实验设计与质控口径中的输入核对,再考虑运行流程。

这一篇的目标,不是记住一长串命令,而是让每个输出都能回答三个问题:它由什么输入产生,经过哪些转换,下一步允许拿它做什么。

一、把流程画成数据转换

双端 FASTQ 保存两端读段;比对后的 BAM 保存读段与参考坐标的关系;过滤后的 BAM 决定后续使用哪些有效信息;峰文件描述信号富集的区域;bigWig 用于浏览连续信号;统一区域计数表才是差异分析的输入候选。它们不是同一种数据的不同扩展名。

最容易出问题的地方,是只记住“最后生成了 peaks”,却不知道比较使用的是去重复前还是去重复后的 BAM,或将展示用的归一化信号误当成统计模型需要的原始计数。流程追踪要贯穿整个目录,而不是在结果末尾补一句“默认参数”。

本篇固定使用 nf-core/atacseq 2.1.2。固定的是学习示例的版本,不代表声称它永远是最新或适合所有协议。升级版本时应重新核对输入、过滤步骤、峰识别和计数参数,不能只改版本号。固定版本使用文档

二、运行之前,输入和资源都要明确

需要上一章的样本表、配对且完整的 gzip FASTQ、同一组装的 FASTA/GTF、匹配的 blacklist/TSS 注释,以及实际确认的线粒体名称。这里假设两组各有三个独立生物学重复,并以相同长度的双端 reads 测序。不同读长、不同参考和不同建库方案需要重新制定配置。

运行环境应有兼容该版本的 Nextflow、Java 和可用容器运行时。下面选用 Linux/WSL/集群环境中的 Docker profile,只是示例;受管理的计算集群应使用其允许的容器和调度配置。不要将它复制到尚未检查容器权限、磁盘和内存的环境里直接启动。大型参考建立索引及中间 BAM 可能占用较多资源,不能从“代码只有几行”推断任务很轻。

下面所有 /data 和 /refs 文件都是占位路径。GRCh38 是本例的参考选择,不是要求所有项目换成人类数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
nextflow run nf-core/atacseq -r 2.1.2 \
-profile docker \
--input /data/samplesheet.csv \
--outdir /data/results/atacseq-2.1.2 \
--fasta /refs/GRCh38.fa \
--gtf /refs/GRCh38.annotation.gtf \
--blacklist /refs/GRCh38.blacklist.bed \
--tss_bed /refs/GRCh38.tss.bed \
--mito_name chrM \
--read_length 150 \
--aligner bowtie2 \
--narrow_peak \
--min_reps_consensus 2 \
--skip_merge_replicates

-r 与 -profile 属于 Nextflow 选项,使用单横线;--input 等属于流程参数,使用双横线。本例显式选择 narrow peaks,并关闭将同组生物学重复合并的附加分支,保留独立样本用于比较。--min_reps_consensus 2 是这个三重复教学设计的候选区域支持规则,需要按实际重复质量评估,不是通用最优值。--read_length 与有效基因组大小的处理有关;若显式提供 --macs_gsize,需要记录其来源和依据,而不是随便抄一个物种缩写。2.1.2 参数定义

不要为使峰数量增加就开启 --keep_dups、--keep_multi_map 或 --keep_mito。改变保留规则会改变可比性,必须有协议与研究问题上的理由。也不要为了省时间跳过关键 QC,然后把缺失的报告当成“没有异常”。

三、理解每个步骤在保护什么

接头剪切解决的是文库片段短于测序读长时的接头残留等问题,不是把所有警告修成绿色。比对把序列放到参考坐标上,但多重映射仍可能产生解释歧义。重复标记帮助识别可能重复测到的分子;它不能仅凭一个百分比判断整个实验是否失败。

技术 lane 可以合并到对应生物学样本,生物学重复则应保留独立身份。过滤还涉及配对关系、线粒体和不可靠区域。若两端之一被过滤,剩下的孤立 read 不能继续假装是一条完整片段。每一步的日志应回答“保留了多少、排除了多少、按什么规则排除”,否则看到有效数据减少时很难定位原因。

浏览信号轨道时,应核对归一化方式并让比较图使用一致的纵轴。自动缩放后的两个轨道都看起来很高,不意味着强度一样;局部位置也不能替代全局质控。峰识别进一步把连续信号变成区域集合,这一步受到深度、背景、参数和候选区域规则影响,因此峰数量不是独立于流程的自然常数。

四、Tn5 校正只做一次,而且先分清数据模型

ATAC-seq 常提到 Tn5 插入位点校正,但“做 ATAC 就在所有 BAM 上加 shift”是危险的简化。首先问下游想要的是真实双端片段,还是校正后的插入切点。这两个对象服务于不同的统计与可视化问题。

固定版本的 MACS2 模块使用 2.2.7.1,双端数据默认选择 BAMPE,从两端信息使用片段。本文沿用这条片段级峰识别路线,不另加外部 Tn5 shift,也不叠加单端切点路线的 --shift/--extsize 组合。2.1.2 MACS2 模块源码

如果另做 footprinting 或切点轨道,应从明确、未重复校正的来源生成单独的派生文件,记录谁负责校正、何时校正、使用什么工具与坐标约定。deepTools 的 alignmentSieve --ATACshift 有明确的双端位移定义;它不能被无差别加到本文主线中,更不能与已校正输入重复使用。alignmentSieve 文档

另一个常见错误,是把 --nomodel --shift -100 --extsize 200 当成“完成 Tn5 校正”的同义词。它描述的是另一种峰识别时的信号扩展方式,不等于插入位置校正;BAMPE 又有自己的片段语义。现代 MACS 官方文档明确区分这些输入模型,阅读时也应注意它讨论的是 MACS3,而本文流程固定的是 MACS2,不能借此悄悄换掉实现。MACS 输入模式与参数说明

五、结果目录应该能被解释

选择 Bowtie2 后,下游文件位于 bowtie2/。本例最值得寻找的是以下几类文件;具体前缀依样本和峰类型而定,不应硬猜完整文件名:

输出位置 阅读用途
fastqc/、trimgalore/ 原始和剪切后的质量信息与日志
bowtie2/merged_library/ 独立生物学样本对应的过滤 BAM,留意 .mLb.clN. 标识
bowtie2/merged_library/macs2/narrow_peak/ 单样本峰及峰相关 QC
上述目录的 consensus/ 统一区域 BED/SAF 和计数结果
multiqc/narrow_peak/ 汇总报告及可追查的统计数据

需要检查过滤前后 BAM 时,应预先决定是否保存中间比对文件;未保存的中间文件不应被文章或脚本假定存在。merged_library 在这里对应技术数据合并后的生物学样本,不等于把一组独立样本混成一个统计重复。2.1.2 输出说明

同时保存输入清单、运行命令、参数文件、软件版本、日志、参考校验值和必要的工作流信息。-resume 可以复用符合缓存条件的步骤,但它不是允许改动参考和参数却仍沿用旧结果标签的理由。改变方法后,结果标签和记录也必须能区分。

六、用四条假设片段理解 FRiP

以下练习完全是人工构造的区间:四条已经通过约定过滤的核基因组片段,两段不重叠的峰。使用 BED 的零起点、半开区间,片段只要至少命中一个峰就计一次。这个定义便于理解,但不是声称它复现了流程中的 FRiP 实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
fragments = [
("chr1", 100, 160),
("chr1", 180, 230),
("chr1", 500, 550),
("chr2", 100, 140),
]
peaks = [("chr1", 90, 170), ("chr1", 175, 240)]

def overlaps(a, b):
return a[0] == b[0] and a[1] < b[2] and b[1] < a[2]

hits = sum(any(overlaps(fragment, peak) for peak in peaks)
for fragment in fragments)
denominator = len(fragments)
print({"fragments_in_peaks": hits,
"usable_fragments": denominator,
"fragment_FRiP": hits / denominator})
assert hits == 2 and denominator == 4

预期是两条命中、四条作为分母,得到 0.5;这只是练习答案,不是文库质量结果。把第一段峰复制一份,答案仍应为两条,因为 any 保证同一片段不会重复累计。把第三条片段也包进一个新增峰,比例就会变化,说明 FRiP 既受数据影响,也受峰集合影响。

固定流程的 FRiP 模块使用映射 reads 的统计口径,而不是本练习的独立片段口径,还带有其重叠规则。因此不能把练习值与报告数值直接比较。真正记录时写清分子、分母、输入 BAM、过滤状态与峰集合;报告中不同工具的相似名称也不保证同一单位。流程 FRiP 模块源码

七、常见“运行成功但分析不成立”

样本名错误,可能把技术重复当成生物学重复;染色体命名不一致,可能让 TSS 或 blacklist 没有正确参与分析;组间使用不同过滤标准,可能制造技术差异;把 pooled BAM 当成多个独立样本,可能夸大置信度。这些问题并不一定触发软件错误。

还有两种解释层面的陷阱:把峰附近的最近基因当成确定靶基因,把 motif 富集当成该转录因子实际结合。峰注释和序列富集是生成待检验假说的入口,不是机制证据的终点。即便暂时只做浏览,也要将观察与推断分开写。

本篇的验收应是:样本映射无误、参考一致、过滤链可追踪、QC 可以定位到样本、独立重复仍被保留、峰和计数文件的单位明确。若样本质量不足或批次比较不可识别,可以保留描述性结果,但应停止差异推断。下一篇将使用这些材料学习差异可及性:从统一峰集合到明确统计问题。

继续阅读与公开资源