1. 引言
下機的FASTQ數據通常需要進行質控和預處理,以保證下游分析輸的準確性。fastp軟件僅掃描數據文件一次,就可以完成FASTQC + cutadapt + Trimmomatic 的功能;而且它使用C++開發,利用高效算法,并且支持多線程,加快了處理速度。
2. 特點
對輸入和輸出數據進行詳盡的質量剖析,生成人性化的報告。(quality curves, base contents, KMER, Q20/Q30, GC Ratio, duplication, adapter contents...)
過濾掉低質量,太短和太多N的"bad reads"。
從頭部(5')或尾部(3')計算滑動窗內的堿基質量均值,并切除低質量堿基。(類似Trimmomatic,但是非??欤?/p>
頭尾剪裁。(上下機序列可能不穩定)
去除接頭。(可以不用輸入接頭序列,算法可以自動識別接頭序列并進行剪裁)
不匹配堿基對矯正。(對于雙端測序(PE)的數據,軟件能夠矯正重疊區域的不匹配堿基對。如:重疊區域內,一個堿基質量很高,另一個非常低,fastp會依據質量值進行校正。
修剪尾部(3')的polyG。(修剪ployX尾,可以去掉不想要的ploy。如:mRNA-Seq 中的ployA。)
處理使用了唯一分子標識符(UMI)的數據,并將UMI轉換為序列名稱。
不僅生成質控和過濾結果的HTML報告(存儲在fastp.html,可用-h可指定),還生成了程序可讀性非常強的JSON報告(fastp.json,可用-j指定)。
為了適合并行處理,fastp將輸出進行分拆。有兩種模式可選,a. 指定拆分的個數; b. 指定拆分后每個文件的行數。
fastp支持gzip的輸入和輸出,同時支持SE和PE數據處理;支持PacBio/Nanopore的長reads數據;也支持交錯輸入。
3. 安裝fastp
Bioconda 安裝
# note: the fastp version in bioconda may be not the latest
conda install -c bioconda fastp
Linux 系統安裝
# this binary was compiled on CentOS, and tested on CentOS/Ubuntu
wget http://opengene.org/fastp/fastp
chmod a+x ./fastp
源下載安裝
# get source (you can also use browser to download from master or releases)
git clone https://github.com/OpenGene/fastp.git
# build
cd fastp
make
# Install
sudo make install
注:如編譯時遇到(undefined reference to gzbuffer),需要更新zlib。
4. 輸入和輸出
-
fastp支持雙端(PE)數據和單端(SE)數據的輸入和輸出
對于SE數據,使用指令-i 或 --in1輸入,-o 或--out1輸出。
對于PE數據,使用指令-I 或 --in2輸入,-O或--out2輸出。
如果不指定輸出文件名,而且輸入名以.gz結尾,QC會執行完并壓縮。
-
STDIN輸入
--stdin 指明使用STDIN輸入。
--interleaved_in 指定interleaved paired-end stream.
-
STDOUT輸出 - fastp將結果傳到STDOUT,以便傳遞到bwa和bowtie2。
- --stdout
對于PE數據,輸出將與FASTQ交錯,因此會有 record1-R1 -> record1-R2 -> record2-R1 -> record2-R2 -> record3-R1 -> record3-R2 ...記錄。
store the unpaired reads for PE data
store the reads that fail the filters
process only part of the data
do not overwrite exiting files
split the output to multiple files for parallel processing
merge PE reads
5. 功能介紹
-
質量過濾 - 質量過濾功能默認開啟
-Q 或 disable_quality_filtering關閉。
-n 或 --n_base_limit限制堿基N的數量
-q 或 --qualified_quality_phred指定合格的質量值。(默認為 -q 15,即質量值大于等于Q15的即為合格)
-u 或 --unqualified_percent_limit指定不合格堿基的最高百分比。(默認40%)
-e 或--average_qual通過質量百分比過濾,如果質量值低于平均值,就被丟棄。
-
長度過濾 - 長度過濾默認開啟
-L 或 --disable_length_filtering關閉。
-l 或 --length_required指定所需最小長度。(-l 30表示低于30個堿基的read會被丟棄)
--length_limit指定最長read長度。(mall RNA sequencing可用)
結合起來就可以實現常用的discard模式,以保證所有輸出的序列都一樣長。
-
低復雜度過濾 - 默認關閉
- -y 或 --low_complexity_filter開啟。
復雜度由的定義為reads中與下一個堿基不同的堿基的百分比。
# a 51-bp sequence, with 3 bases that is different from its next base
seq ='AAAATTTTTTTTTTTTTTTTTTTTTGGGGGGGGGGGGGGGGGGGGGGCCCC'
complexity = 3/(51-1) = 6%
- -Y 或 --complexity_threshold 指定閾值,默認為30%。
在fastp的報告中,第一個Summary表格很清楚地顯示了過濾的統計信息。
- 接頭處理 - 默認開啟,自動識別
-
-A 或 --disable_adapter_trimming關閉。
對于SE數據,可以用a 或 --adapter_sequence參數來輸入接頭。(fastp通過分析前1M的reads估計接頭序列,對于SE數據,估計可能不準確,而且如果接頭序列是特制的,也可能導致估計出錯。)
對于PE數據,自動檢測接頭功能是關閉的,--detect_adapter_for_pe開啟。亦可以用--adapter_sequence和 --adapter_sequence_r2指定R1, R2接頭序列。
--adapter_fasta 還可以用file 的形式指定需要修剪的任何序列,序列長度大>6bp。
>Illumina TruSeq Adapter Read 1
AGATCGGAAGAGCACACGTCTGAACTCCAGTCA
>Illumina TruSeq Adapter Read 2
AGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGT
>polyA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
修剪順序:--adapter_sequence | --adapter_sequence_r2 | --adapter_fasta
修剪的接頭序列可以在fastp報告中找到.
- 根據質量修剪每條read - 有三種選擇,可以全選
-5或 --cut_front指定從5'開始丟棄低于質量低的,同時多N堿基也會被去除;cut_front_window_size設定滑窗大?。?cut_front_mean_quality指定閾值。
-3或 --cut_tail, cut_tail_window_size, cut_tail_mean_quality.
-r或 --cut_right, cut_right_window_size, cut_right_mean_quality.(滑窗從頭向尾移動,如果窗內平均質量低于閾值,丟棄滑窗內和右邊所有序列。)
*all these three operations will interfere deduplication for SE data, and --cut_front or --cut_right may also interfere deduplication for PE data. *
If --cut_right is enabled, then there is no need to enable --cut_tail, since the former is more aggressive. If --cut_right is enabled together with --cut_front, --cut_front will be performed first before --cut_right to avoid dropping whole reads due to the low quality starting bases.
cut_front will interfere deduplication for both PE/SE data, and --cut_tail will interfere deduplication for SE data.
- PE數據的堿基矯正 - 默認關閉
通過overlap檢索,矯正后堿基質量和對照同等。
-c or --correction 開啟. 可調參數overlap_len_require (default 30), overlap_diff_limit (default 5) and overlap_diff_limit_percent (default 20%).
- 全局裁剪 - 統一剪裁reads的頭部和尾部
用于統一去掉低質量cycle。如:Illumina最后一個cycle通常質量是非常低,通過-t 1 or --trim_tail1=1去掉。
For read1 or SE data, the front/tail trimming settings are given with -f, --trim_front1 and -t, --trim_tail1.
For read2 of PE data, the front/tail trimming settings are given with -F, --trim_front2 and -T, --trim_tail2. (如read2無指定,read2裁剪參數 = read1。)
-b或 --max_len1指定read1長度, -B或 --max_len2指定read2長度。(如read2無指定,read2裁剪參數 = read1。)
1, UMI preprocessing (--umi)
2, global trimming at front (--trim_front)
3, global trimming at tail (--trim_tail)
4, quality pruning at 5' (--cut_front)
5, quality pruning by sliding window (--cut_right)
6, quality pruning at 3' (--cut_tail)
7, trim polyG (--trim_poly_g, enabled by default for NovaSeq/NextSeq data)
8, trim adapter by overlap analysis (enabled by default for PE data)
9, trim adapter by adapter sequence (--adapter_sequence, --adapter_sequence_r2. For PE data, this step is skipped if last step succeeded)
10, trim polyX (--trim_poly_x)
11, trim to max length (---max_len)
- polyG裁剪 - 默認對Illumina NextSeq/NovaSeq data開啟
對于兩色發光法的Illumina設備(NextSeq /NovaSeq),在沒有光信號情況下base calling的結果會返回G,所以在序列的尾端可能會出現較多的polyG,需要被去除。
fastp會通過機器ID自動化地識別NextSeq / NovaSeq的數據,然后進行polyG識別和裁剪。
-g or --trim_poly_g 向其他數據開啟;-G or --disable_trim_poly_g關閉。
<poly_g_min_len>設定最小長度,默認值10。
- polyX尾裁剪 - 默認關閉
-x or --polyX; <poly_x_min_len>, 默認值10。
同時開啟時的裁剪順序:polyG | polyA。
- 分子標簽(UMI)處理 - 消除重復和糾正錯誤
-U 或 -umi 開啟。
--umi_loc指定UMI所在的位置,可以是(index1、 index2、 read1、 read2、 per_index、 per_read )中的一種;分別表示UMI是在index位置上,還是在插入片段中。如果指定了是在插入序列中,還需要使用 --umi_len 參數來指定UMI所占的堿基長度。
#初始序列
@NS500713:64:HFKJJBGXY:1:11101:1675:1101 1:N:0:TATAGCCT+GACCCCCA
AAAAAAAAGCTACTTGGAGTACCAATAATAAAGTGAGCCCACCTTCCTGGTACCCAGACATTTCAGGAGGTCGGGAAA
+
6AAAAAEEEEE/E/EA/E/AEA6EE//AEE66/AAE//EEE/E//E/AA/EEE/A/AEE/EEA//EEEEEEEE6EEAA
?
fastp -i R1.fq -o out.R1.fq -U --umi_loc=read1 --umi_len=8
?
@NS500713:64:HFKJJBGXY:1:11101:1675:1101:AAAAAAAA 1:N:0:TATAGCCT+GACCCCCA
GCTACTTGGAGTACCAATAATAAAGTGAGCCCACCTTCCTGGTACCCAGACATTTCAGGAGGTCGGGAAA
+
EEE/E/EA/E/AEA6EE//AEE66/AAE//EEE/E//E/AA/EEE/A/AEE/EEA//EEEEEEEE6EEAA
- 輸出拆分 - 兩種模式
-s or --split指定file數目。
-S or --split_by_lines指定file中的行數。
- **過表達序列(Overrepresented sequence analysis) **- 默認關閉
-p or --overrepresentation_analysis開啟。( count 長度為10bp, 20bp, 40bp, 100bp or (cycles - 2 ), 默認值20兼顧速度與精確性)
在fastp的報告中,不僅提供overrepresented sequence的序列個數和占比,還提供了其在測序cycles中的分布情況。
- PE數據reads拼接
對于PE數據,fastp通過-m/--merge選項實現拼接模式。