陈实富博士编写的 fastp 软件能实现 FASTQ 数据自动化过滤、剪裁、错误校正等功能,因其多样的功能和高效的速度受到了许多用户的欢迎,已成为 NGS 质控领域不可或缺的软件。fastp 本身采用C++编写的,代码规范,我希望通过学习 fastp 文章增加对质控及 C++ 源代码的理解。
1 摘要
NGS 原始下机数据为 FASTQ 格式,原始数据需要经过QC和预处理步骤才能用于后续的分析。预处理步骤通常会使用不同的软件分别进行QC、接头去除、低质量序列过滤等步骤。因为各处理软件的功能比较单一,各步骤需要进行反复的 I/O 读写,而且这些工具本身采用Java/Python 等高级语言编写运行效率较低。因此,这篇文章开发了一种超快速的 FASTQ 预处理工具 fastp ,在遍历FASTQ 文件时可以同时完成QC、接头去除、质量过滤、低质量reads修剪等步骤。fastp 软件使用 C++ 语言开发,支持多线程,它的速度要比功能单一的FASTQ处理软件Trimmomatic 和 Cutadapt 软件快2-5倍,而且具有更多的功能。 文章的源代码见:https://github.com/OpenGene/fastp.
2 引言
测序数据可能会存在接头污染、碱基偏倚、测序错误,这些因素会都影响下游的变异分析。例如,ctDNA测序常需要检测超低频的变异,而且ctDNA测序背景噪音较高,测序数据的质量控制和预处理步骤对低频突变的检出、减少假阳性和假阴性非常关键。典型的生信处理步骤是用FASTQC软件进行质控、Cutadapt 软件去除接头、Trimmomatic 软件进行read 裁剪和过滤。这些骤需要进行反复的 I/O 读写,目前没有一个软件能有效实现所有的功能。这篇文章介绍的 fastp 软件可以对FASTQ文件快速实现 QC、接头去除、质量过滤、碱基校正等步骤,包括了FASTQC + Cutadapt + Trimmomatic 的大部分功能,同时 fastp 软件还具有 UMI 预处理、polyG错误去除、分隔输出等功能。
3 材料与方法
3.1 整体设计
fastp 采用的是多线程处理方式。从 FASTQ 文件加载的 reads 会被分成1000个包,每个包会分配至一个线程进行处理,在处理过程中会记录各种统计指标,包括碱基质量、碱基比例、接头去除结果、k-mer 统计结果等指标。当所有reads都处理完成后,所有包的统计结果最终会进行合并统计。fastp 最终会输出过滤前和过滤后的统计数据,方便使用者进行对比。fastp 同时支持单端(SE)和双端(PE)测序数据,SE 和 PE 数据的处理过程在很多步骤都是一样的,PE 数据处理有一些额外的步骤,比如重叠序列分析等。PE 数据具体处理过程详见图1。图1 a 是整体的处理过程,图1b 是每个包内reads的详细处理步骤。
3.2 接头去除
fastp 程序可以自动检测并去除接头序列,针对 SE 和 PE 测序数据会采用不同的测序算法进行接头的去除。
对于单端测序数据,会采用reads 末端高频序列组装的方法检测接头序列。接头序列检测算法是基于两个假设:第一,一组测序数据中只存在一种接头序列;第二,接头序列只存在于reads的末尾;这两个假设适用于一系列 Illumina 测序仪。在检测接头序列时,首先,选取前 N 条(N=1M) reads 末尾的 k-mer(k=10)序列,并统计各 k-mer 出现的频率。如果 k-mer 序列出现的频率较高,为接头序列的种子。然后,对 k-mer 序列的频次由高到底进行排序,采用树型算法扩展接头种子序列,得到完整的接头序列。算法1中列出了树型算法的伪代码,整体思路就是对每个种子序列进行遍历,获取种子序列的前、后的序列,对前、后序列的碱基频率逐个进行统计,如果含有占支配地位的碱基序列(>90%)则不断延伸种子序列。图2列出了向前、向后延伸种子序列的过程。
对于双端测序数据,会根据重叠区域及配对reads的偏移量来确定确定接头序列(如下截图17所示,来自陈实富博士论文)。当被测序的DNA模板的长度小于测序的周期的时候,就会在read的末尾处到3‘端产生接头。当对配对 reads 进行overlap分析时,当有接头序列存在,Read2(read2已经进行反向互补操作)相对于Read1会往左偏移的长度就是接头的长度。依赖于接头序列匹配的去除接头工具通常需要 3bp 碱基的限制,不同去除 reads 末端1-2bp的接头序列。与Cutadapt、Trimmomatic 等软件相比,fastp 一大优势是可以检测去除 reads 末尾几 bp 的接头序列。
尽管 fastp 可以自动检测接头序列,它也提供了直接输入已知接头序列,采用序列匹配进行去除接头的功能。对于单端测序数据,输入已知接头序列后会就不会采用自动检测接头的功能。对于双端测序数据,只有没有检测到合格的overlap序列时,才会采用序列匹配方法进行接头去除。
3.3 碱基校正
对于配对数据,如果一对 reads 能检测到重叠区域,那么重叠区域的碱基就可以相互比较校正。理论上如果重叠区域的碱基质量足够高,那么它们通常能完全的互补配对。但是,如果重叠区域的碱基出现了错配,fastp 软件可以对不匹配碱基进行校正,通常采用高质量值的碱基(>Q30)校正低质量的碱基(<Q15)。为了避免错误校正,fastp 也设定了阈值T (T=5), 只有碱基错配低于阈值时才进行校正。
3.4 滑动窗质量裁剪
为了提高 read 的质量,fastp 提供了采用滑动窗去除 read 头尾低质量碱基的功能。程序会统计滑动窗范围内的平均碱基质量值,如果低于一定的阈值,会将其标记为低质量并进行裁剪。
3.5 polyG 和 polyX 末尾裁剪
PolyG尾是 Illumina NextSeq 和 NovaSeq 测序平台(两色化学发光)常见的现象。这些测序平台采用两种颜色(红光和绿光)来代表 4 种碱基:只检测到红光信号时代表碱基 C ;只检测到绿光信号时代表碱基 T;同时检测到红光和绿光信号时代表碱基 A;没有检测到任何信号时代表碱基 G;由于Illumina 平台采用边合成边测序策略,DNA 的测序信号在测序循环后期会逐渐变弱。在 read 的末尾,T 和 C 的信号会错误的当做 G,这就导致了reads 尾部的 polyG 现象。
fastp 软件可以检测并裁剪掉 read 末尾的 ployG。软件会检测下机数据 flowcell 的标识符,如果确定数据来自于Illumina 的NextSeq 和 NovaSeq 测序仪,就会自动进行polyG 尾的裁剪。ployG 尾可以导致严重的碱基分离现象,图片3 显示了ployG 尾去除前后碱基含量的变化。fastp 也可以进行 polyX 末尾的去除,去除3' 端末尾连续的低复杂度碱基。
3.6 UMI预处理
UMI 技术在ctDNA检测中应用广泛,它可以在高深度测中提高低频突变检测的灵敏度。UMI 方法可以去除重复获得高质量 consensus 序列。对于Illumina 平台,UMI 可以被整合入样品的 index 序列或者插入的DNA序列中。在处理过程中,UMI序列应该被转移到read的名称中,它可以在比对工具BWA 或 Bowite 的输出结果中保留。
目前有许多工具支持处理FASTQ数据中的UMI,例如,UMI-tools 和 umis 。但是,这些工具需要单独执行,不够高效。fastp 也支持UMI 预处理,它的运行速度大约是其软件的3倍。
3.7 分隔输出
并行计算式 NGS 处理的新趋势,特别是这个云计算的时代。原始下机的FASTQ序可以被分隔成多个小的文件,分别进行后续的比对操作,生成小的BAM文件,再进行合并成最终的BAM文件,进行后续的变异检测。fastp 支持两种分隔模式:按照行分隔,按照文件大小进行分隔。
3.8 重复率估计
重复率水平对于评估测序文库的多样性非常重要。FASTQC 软件评估重复率时会选取前100,000条记录, 每条 read 的前 50bp 序列会被用于评估重复性评估。FASTQC 采用的方法有一个主要的缺点,它不支持双端重复率分析。它只能反应read1 和 read2 各自的重复率,不能反应整个DNA插入序列的重复率水平。这样就会导致重复率水平会被过高估计,因为对于长度不同的DNA插入片段来说,在高深度测序条件下,出现相同的前端序列是非常普通的现象。
fastp 同时支持双端和单端重复率评估。在一个测序深度10000X ctDNA 数据中,FASTQC给出的read1 和read2 的重复率分别是79.99% 和 77.75%,但 fastp 软件给出的双端重复率仅为16.22%。当fastp采用单端模式进行评估时,read1 和read2 的重复率分别为79.23% 和 79.06%,与FASTQC的结果接近,可见采用单端模式进行评估时,重复率被显著高估了。
3.9 过量序列分析
如果有某个序列在FASTQ中大量出现,就叫做overrepresented。overrepresented 序列的出现多是因为人工合成序列,例如 PCR 造成的过度重复,polyG 尾和接头污染。FASTQC 提供了过量序列分析模块,根据作者的介绍,FASTQC 只是评估前1M 的reads。但是,如果想获得 FASTQ 数据中准确的过量序列分布信息,只评估前1M reads 会不可靠,因为Illumina FASTQ 前面的数据经常来源于flowcells lanes 的边缘,这些数据质量一般较低。
fastp 采用了更均衡的reads 抽样方法,来消除抽样误差。fastp 设计了两步法进行抽样,第一步分析输入FASTQ的前1.5 M base pairs 数据,得到出现频率较高的序列列表;第二步对整个FASTQ文件进行采样,统计每条序列出现的次数。最终,报告出总体出现频率较高的序列。如图5所示,fastp 除了报告 overrepresented 序列出现的频率,也记录了序列在 reads 中出现的位置,这对于分析过量序列的形成很有帮助。
3.10 质控结果和报告
fastp 提供过滤前数据和过滤后数据的统计结果,有助于使用者对比过滤前后的特征。fastp 提供 JSON 和 HTML 格式的报告。HTML 格式报告示例详见 http://opengene.org/fastp/fastp.html
4 结果
这部分进行了多种实验评估 fastp 软件运行速度和质量过滤的表现。本部分选取了 FASTQC,Cutadapt,Trimmomaitc,SOAPnuke 和 AfterQC 软件进行对比,最终结果显示 fastp 的速度更快,质量过滤表现一致或更好。
4.1 速度评估
文章利用中国临床中心实验室的 B17NCB1 数据集对 6 种软件的运行速度进行了评估。 B17NCB1 数据集共9316 Mb,采用双端测序。分别评估了一个线程下,PE 和 SE 模式的各软件运行速度。如表1 所示,fastp 软件的速度最快,显著优于其他软件,并且fastp 同时执行了QC、数据过滤等多项操作。fastp 设计之初就是为了执行多线程任务,在多线程条件下速度可以预见会更快。由于所选的有些测试软件不能执行多线程任务,没有进行软件多线程的对比。
4.2 质量过滤评估
为了评估 fastp 与其他软件(i.e. AfterQC, SOAPnuke, Trimmomatic,Cutadapt)接头去除和低质量裁剪的表现,选用了Illumina NextSeq PE150(NS_PE150) 数据集进行测试。在这些工具种,只有 fastp 和 AfterQC 能利用 overlap 序列进行接头的去除,其他工具需要输入已知接头序列进行去除。文章对各个软件过滤接头后的数据进行了评估,在几bp 容错的条件下,搜索 33bp 接头序列在过滤后数据中含有接头碱基的潜在reads 数量。结果如图6 所示,fastp 和 Trimmomatic 软件的表现最好,fastp 在大于4bp 容错时才有少量的可疑接reads,而Cutadapt,SOAPnuke,AfterQC在大于4bp 容错时会出现大量可疑接头reads。
为了整体评估各软件过滤后的表现,文章将软件过滤后的数据比对到了人参考基因组hg19上(比对方法为BWA-MEM),使用Samtools 软件评估了比对结果。统计的比对指标为错配碱基数目、clips 数目、不一致比对数。根据文章的观点,未校正的测序错误会造成更多错配,残留的接头序列会导致更多的 clips 和不一致比对。如下表 2 所示,fastp 软件在比对之后,错配碱基数目,含有 clip 的reads数目、单端reads 比对数量都是最低的。Trimmomatic, Cutadapt 及 SOAPnuke 软件都是以接头序列匹配为基础进行接头的去除,在接头只有几bp时,不能有效的去除接头,导致比对后 clip reads数目较高。
4.3 UMI 评估
UMI 技术在肿瘤ctDNA 测序过程中广泛使用。为了分析整合UMI的NGS数据,在FASTQ预处理阶段会将 UMI 从 reads 序列转移至 reads 名称中。文章使用 4Gb Illumina PE150 的FASTQ数据,评估了fastp,umis 和 UMI-tools 工具处理 UMI 的性能。如下表3 所示,fastp 的速度是比 umis 快2.7 倍,比 UMI-tools 快6.1倍。
4.4 下游数据分析评估
为了评估 fastp 软件预处理过程对下游数据分析的影响,文章选择了 NA12878 (SRR952827) 标准数据集评估了 fastp, Trimmomatic,Cutadapt 和 SOAPNuke 等软件减少假阳变异的表现。首先使用各个软件过滤原始FASTQ数据,过滤后数据采用SpeedSeq 软件进行变异分析。不在 NA12878 标准变异数据集中的变异被标记为假阳。采用 Trimmomatic,SOAPNuke, Cutadapt 和 fastp软件过滤数据后的假阳个数分别为 7174,7040,6942,6708 。fastp 的假阳数最少,证明它可以提高下游变异检测的特异性。
5 参考文献
[1] Chen S , Zhou Y , Chen Y , et al. fastp : an ultra-fast all-in-one FASTQ preprocessor. 2018.