欢迎关注”生信修炼手册”!
fastp是最近新出的一款NGS数据质量过滤工具,相比传统的QC工具,有两个主要特点,第一个就是运行速度快,第二个就是提供了质控前后数据详细统计结果。github地址如下
https://github.com/OpenGene/fastp
安装过程如下
代码语言:javascript复制wget http://opengene.org/fastp/fastp
chmod a x fastp
无论是单端测序,还是双端数据,fastp都支持。对于单端数据,用-i
参数指定输入的序列文件,-o
参数指定输出的序列文件;对于双端数据,用-i
和-I
分别指定R1端和R2端的序列。
该软件可以对数据进行以下几种过滤
1. 去除adapter 序列
默认情况下,该软件会自动查找序列中的adapter序列并去除,对于单端测序数据,根据起始的1M左右的reads来预测adapter序列;对于双端测序数据,根据overlap部分的reads来推测adapter序列,虽然自动化预测对于使用者而言比较方便省心,但是预测的adaper序列可能不太准确,实际使用时,建议还是自己手动指定具体的adapter序列。
单端数据,通过--adapter_sequence
指定adapter序列;对于双端数据,通过--adapter_sequence
和--adapter_sequence_r2
指定adapter序列。当手动指定adapter序列时,软件就不会自动检测了,而是按照指定的adapter序列进行查找和过滤。
如果不希望进行去除adapter序列这一步,可以添加-A
或者--disable_adapter_trimming
参数,这样软件就不会去除adapter序列了。
2. 过滤低质量的序列
默认情况下,会过滤掉质量较差的序列,-q
参数指定碱基质量的阈值,小于该质量的碱基被认为是低质量的碱基,-u
参数指定一条序列中允许的低质量碱基的百分比,取值范围从0-100,如果序列中低质量碱基百分比超过了该阈值,这条序列就会被过滤掉;-n
参数指定一条序列中最多允许的N碱基的个数,如果超过这个数值,这条序列会被过滤掉。
如果不希望过滤掉低质量序列,可以添加-Q
参数。
3. 根据序列长度进行过滤
默认情况下,该软件会根据长度对序列进行过滤,--length_required
指定最小长度,小于该长度的reads会被过滤掉;--length_limit
指定最大长度,大于该长度的reads也会被过滤掉,如果不希望进行长度过滤,可以添加-L
或者--disable_length_filtering
参数。
4. 去除低质量的碱基
fastp支持类似trimmomatic滑动窗口的方式,对序列中的低质量碱基进行过滤,但是它的算法运行速度更快。-W
参数定义滑动窗口的长度,默认值为4,-M
参数定义碱基平均质量的阈值,默认值为20。如果一个窗口内碱基平均质量低于20,该窗口及其之后的碱基都会被过滤掉。
默认情况下,是不会去除低质量碱基的,添加-3
参数可以利用滑动窗口的方式从reads的3’端去除低质量的碱基。
5. 去除reads两端的部分碱基
fastp支持从reads的3’端和5’端去除固定个数的碱基,对于单端数据,-f
指定从5’端去除的碱基数,-t
指定从3’端去除的碱基数;对于双端数据,用-f
和-F
参数分别指定R1序列5’端去除的碱基数,用-t
和-T
参数分别指定R2序列3’端去除的碱基数。
6. 去除polyG/polyX
fastp支持去除序列3’端的尾巴,只有对于NextSeq/NovsSeq的数据,fastp会自动去除polyG尾,--poly_g_min_len
指定ployG的最小长度,-g
参数强制对所有数据去除polyG尾,-G
参数禁止去除polyG尾。默认情况下,fastp不会去除polyX尾,可以添加-X
参数,同时使用--poly_x_min_len
指定polyX的最小长度,默认值都为10。
7. 过滤掉低复杂度的序列
fastp支持根据复杂度对序列进行过滤,序列复杂度定义如下
代码语言:javascript复制seq = 'AAAATTTTTTTTGGGCCC'
complexity = 3/(18-1) = 17.65%
依次比较前后相连的两个碱基,统计前后碱基不同的次数,这个次数作为分母,对于上述的例子而言,就是3,分子是序列长度减一,二者的商就是序列负责度。
默认情况下,是不会根据序列复杂度进行过滤的,如果想要进行过滤,需要添加-Y
参数,同时使用-y
参数指定复杂度的阈值,取值范围0-100, 默认值为30,复杂度低于30%的序列会被过滤掉。
8. 根据index 对序列进行过滤
fastp支持根据index对序列进行过滤, --filter_by_index1
参数指定一个index文件,该文件中每行是一个index,如果序列的index在该文件中,这条序列会被过滤掉,--filter_by_index_threshold
参数指定实际index序列与检测到的index序列之间的最大错配数。
9. 对双端数据进行校正
通常情况下,reads的3’端质量较差,双端测序的数据,可以根据overlap部分的序列,对低质量的测序结果进行校正。通过添加-c
参数,fastp可以校正双端测序的结果,--overlap_len_require
参数指定overlap的最小碱基数,--overlap_diff_limit
指定overlap区域允许的最大错配数。
10. UMI 预处理
由于文件构建过程中,存在PCR的过程, 会影响定量结果的准确性,最近出现了UMI这样的技术,本质上对未扩增之前的片段进行标记,建库之后,拥有相同UMI标记的reads来自于同一份模板,在数据分析时,可以依据这个标记对序列去冗余,使定量的结果更加准确。
fastp支持对UMI标记的序列进行预处理,添加-U
参数之后,fastp就可以对UMI数据进行预处理。--umi_loc
指定umi 的index 出现的位置,--umi_len
指定umi index的长度。
11. 分析过表达序列
在reads中存在的过表达序列可能是adapter序列,分析过表达序列有助于我们发现测序和建库中可能出现的问题,通过添加-p
参数可以使fastp进行过表达序列的分析。
在以上所有操作中,前3步默认都会执行,其他操作可以根据个人需要,进行添加。fastp支持多线程,通过-w
参数指定并行的线程数。
除了输出质控后的clean reads外,fastp还可以输出json
和html
两种格式的报告文件,-j
指定json
格式的报告文件,-h
指定html格式的报告文件。
fastp的基本用法如下,单端数据
代码语言:javascript复制fastp -i input.fastq -o output.fastq -a ATAGCATCA -j report.json -h report.html
双端数据
代码语言:javascript复制fastp -i R1.fq -o R1.clean.fq -I R2.fq -O R2.clean.fq -a ATAGCATCA -a2 ATAGCATCA -j report.json -h json.html
在报告文件中,会给出QC前后的序列统计信息, json
文件示例如下
"summary": {
"before_filtering": {
"total_reads":90187304,
"total_bases":10477279513,
"q20_bases":9875367665,
"q30_bases":9314029123,
"q20_rate":0.942551,
"q30_rate":0.888974,
"gc_content":0.475662
},
"after_filtering": {
"total_reads":81203730,
"total_bases":9425595563,
"q20_bases":9153628470,
"q30_bases":8762772007,
"q20_rate":0.971146,
"q30_rate":0.929678,
"gc_content":0.472036
}
}
fastp的质量过滤功能更加的丰富,速度更快,而且报告文件给出的统计信息详尽有用,可以算得上是最强大的质控软件了。
·end·
—如果喜欢,快分享给你的朋友们吧—