測序數據質控和預處理之fastp

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. 輸入和輸出

  1. fastp支持雙端(PE)數據和單端(SE)數據的輸入和輸出

    • 對于SE數據,使用指令-i 或 --in1輸入,-o 或--out1輸出。

    • 對于PE數據,使用指令-I 或 --in2輸入,-O或--out2輸出。

    • 如果不指定輸出文件名,而且輸入名以.gz結尾,QC會執行完并壓縮。

  2. STDIN輸入

    • --stdin 指明使用STDIN輸入。

    • --interleaved_in 指定interleaved paired-end stream.

  3. STDOUT輸出 - fastp將結果傳到STDOUT,以便傳遞到bwabowtie2。

    • --stdout

對于PE數據,輸出將與FASTQ交錯,因此會有 record1-R1 -> record1-R2 -> record2-R1 -> record2-R2 -> record3-R1 -> record3-R2 ...記錄。

  1. store the unpaired reads for PE data

  2. store the reads that fail the filters

  3. process only part of the data

  4. do not overwrite exiting files

  5. split the output to multiple files for parallel processing

  6. merge PE reads

5. 功能介紹

  1. 質量過濾 - 質量過濾功能默認開啟

    • -Q 或 disable_quality_filtering關閉。

    • -n 或 --n_base_limit限制堿基N的數量

    • -q 或 --qualified_quality_phred指定合格的質量值。(默認為 -q 15,即質量值大于等于Q15的即為合格)

    • -u 或 --unqualified_percent_limit指定不合格堿基的最高百分比。(默認40%)

    • -e 或--average_qual通過質量百分比過濾,如果質量值低于平均值,就被丟棄。

  2. 長度過濾 - 長度過濾默認開啟

    • -L 或 --disable_length_filtering關閉。

    • -l 或 --length_required指定所需最小長度。(-l 30表示低于30個堿基的read會被丟棄)

    • --length_limit指定最長read長度。(mall RNA sequencing可用)

結合起來就可以實現常用的discard模式,以保證所有輸出的序列都一樣長。

  1. 低復雜度過濾 - 默認關閉

    • -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表格很清楚地顯示了過濾的統計信息。

  1. 接頭處理 - 默認開啟,自動識別
  • -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報告中找到.

  1. 根據質量修剪每條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.

  1. PE數據的堿基矯正 - 默認關閉

通過overlap檢索,矯正后堿基質量和對照同等。

-c or --correction 開啟. 可調參數overlap_len_require (default 30), overlap_diff_limit (default 5) and overlap_diff_limit_percent (default 20%).

  1. 全局裁剪 - 統一剪裁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)

  1. 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。

  1. polyX尾裁剪 - 默認關閉

-x or --polyX; <poly_x_min_len>, 默認值10。

同時開啟時的裁剪順序:polyG | polyA。

  1. 分子標簽(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
  1. 輸出拆分 - 兩種模式

-s or --split指定file數目。

-S or --split_by_lines指定file中的行數。

  1. **過表達序列(Overrepresented sequence analysis) **- 默認關閉

-p or --overrepresentation_analysis開啟。( count 長度為10bp, 20bp, 40bp, 100bp or (cycles - 2 ), 默認值20兼顧速度與精確性)

在fastp的報告中,不僅提供overrepresented sequence的序列個數和占比,還提供了其在測序cycles中的分布情況。

  1. PE數據reads拼接

對于PE數據,fastp通過-m/--merge選項實現拼接模式。

cheatsheet

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,786評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,656評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,697評論 0 379
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,098評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,855評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,254評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,322評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,473評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,014評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,833評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,016評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,568評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,273評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,680評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,946評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,730評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,006評論 2 374

推薦閱讀更多精彩內容