1. 程式人生 > 實用技巧 >生信軟體工具-fastp

生信軟體工具-fastp

fastp

注意:軟體工具一般會定期進行迭代更新,如果使用出現問題,請檢視官方文件。

fastp是一款資料質控過濾軟體,作者是陳實富,來自深圳海普洛斯公司。他們將這款工具開源免費使用,這一點是非常值得稱讚的。其實國內很多測序公司都有自己開發的資料處理程式,不過很多都在內部使用。

1、fastp可以實現處理資料的一次性處理,包括過濾低質量,過濾adapter,擷取reads,split分割大檔案等操作

2、支援長reads,也就是不僅僅適用與illumina測序平臺,還可以處理Pacbio和Ion torrent的測序資料

3、直接輸出質控和統計報告,包括json格式和html格式;

4、使用c++寫的,執行效率非常高;

  1. fastp官方github
  2. 下載安裝
    ## conda: 但可能不是最新版本
    conda install -c bioconda fastp
    
    ## 編譯好的二進位制版本,只適用於Linux
    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
    make install
    
  3. 使用方法
    ## 單末端測序資料,非壓縮格式
    fastp -i in.fq -o out.fq
    
    ## 雙末端測序資料,gzip壓縮格式
    fastp -i in.R1.fq.gz -I in.R2.fq.gz -o out.R1.fq.gz -O out.R2.fq.gz
    
    ## 使用案例: 
    fastp -i reads.1.fq.gz -I reads.2.fq.gz -o clean.1.fq.gz -O clean.2.fq.gz -z 4 -q 20 -u 30 -n 
    
    預設情況下,HTML格式報告儲存在fastp.html,可以通過-h引數指定;JSON格式報告儲存在fastp.json,可以通過-j
    引數指定
  4. 主要選項
    ## I/O 相關
    -i, --in1    輸入read1檔名  
    -o, --out1   輸出read1檔名
    -I, --in2    輸入read2檔名  
    -O, --out2   輸出read2檔名,軟體預設是根據副檔名識別壓縮檔案,所以輸出檔案需要加上*.gz副檔名;  
    -6, --phred64  指定質量體系是phred64。目前主流測序資料都採用phred33,如果從NCBI下載以前hiseq 2000以及之前的資料,可能是Phred 64質量體系。  
    -z, --compression 輸出壓縮格式。給定一個數字1-9,調整壓縮比率和效率的平衡;  
    
    ## adapter相關選項
    -A 關閉adapter trimming,預設軟體會切出adapter,如果設定-A,則關閉這個功能;  
    -a 給定一個adapter序列檔案;
    
    ## 全域性裁剪選項
    -f, --trim_front1  裁剪read1前多少個鹼基,預設0;
    -F, --trim_front2  裁剪read2前多少個鹼基,預設0,如果沒有指定,將保持與read1相同設定;
    -t, --trim_tail1   裁剪read1末尾多少個鹼基,預設0;
    -T, --trim_tail2   裁剪read2末尾多少個鹼基,預設0,如果沒有指定,將保持與read1相同設定;
    -b, --max_len1     如果read1比max_len1長,就從末尾擷取一段使read1與max_len1等長,預設0,代表沒有限制;
    -B, --max_len2     如果read2比max_len2長,就從末尾擷取一段使read2與max_len2等長,預設0,代表沒有限制,如果沒有指定,就保持與read1相同設定;
    
    ## polyG尾裁剪,針對NextSeq/NovaSeq資料
    -g, --trim_poly_g  擷取polyG尾,對於Illumina NextSeq/NovaSeq測序資料時預設自動操作的;
        --poly_g_min_len 檢測read末尾的polyG的長度,預設10;
    -G, --disable_trim_poly_g 取消-g的功能;
    
    ## polyX tail trimming
    -x, --trim_poly_x  擷取3'末端polyX
        --poly_x_min_len    檢測read末尾的polyX的長度,預設10;
    
    ## 通過質量值對每條read進行裁剪
    -5, --cut_front  從read的5'端至末尾移動視窗,去除視窗中平均質量值小於'<'閾值的鹼基;
    -3, --cut_tail   從read的3'端值至開頭移動視窗,去除視窗中平均質量值小於'<'閾值的鹼基;
    -r, --cut_right  從read的開頭到末尾移動視窗,如果某一視窗的平均質量值小於閾值,去除視窗中的鹼基及其右側部分,並停止;
    -W, --cut_window_size  滑動視窗過濾,這個類似於計算kmer,1~1000, 預設是4個鹼基;
    -M -W選擇的視窗中,鹼基平均質量值,範圍1~36,預設是Q20,如果這個區域視窗平均低於20,則認為是一個低質量區域,處理掉;
    
    ## 質量過濾選項
    -Q 控制是否去除低質量,預設自動去除,設定-Q關閉;
    -q 設定低質量的標準,預設是15,也就是質量值小於15認為是低質量鹼基,一般我們設定20,常說的Q20;
    -u 低質量鹼基所佔百分比,並不是包含低質量鹼基就把一條reads丟掉,而是設定一定的比例,預設40代表40%,也就是150bpreads,包含60個以上低質量的鹼基就丟掉,只要有一條reads不滿足條件就成對丟掉;
    -n 過濾N鹼基過多的reads,如果N鹼基含量大於n,這條read/pair將被捨棄,預設5;
    
    ## 長度過濾選項
    -L 關閉reads長度過濾選項;
    -l 接一個長度值,小於這個長度reads被丟掉,預設是15,這個在處理非illumina測序資料時很有用。
    
    ## 低複雜度過濾
    -y, --low_complexity_filter    使用低複雜度過濾,這裡低複雜度的定義是與其下一個鹼基不同的鹼基比例(base[i] != base[i+1]).
    -Y, --complexity_threshold    低複雜度的閾值(0~100),預設30;
    
    ## 根據indexes過濾reads--刪除可能的汙染
    --filter_by_index1               specify a file contains a list of barcodes of index1 to be filtered out, one barcode per line (string [=])
    --filter_by_index2               specify a file contains a list of barcodes of index2 to be filtered out, one barcode per line (string [=])
    --filter_by_index_threshold      the allowed difference of index barcode for index filtering, default 0 means completely identical. (int [=0])
    
    ## base correction by overlap analysis options
    -c 是對overlap的區域進行糾錯,所以只適用於pairend reads。
    
    ## UMI processing 分子標籤處理
    -U, --umi                        enable unique molecular identifier (UMI) preprocessing
      --umi_loc                      specify the location of UMI, can be (index1/index2/read1/read2/per_index/per_read, default is none (string [=])
      --umi_len                      if the UMI is in read1/read2, its length should be provided (int [=0])
      --umi_prefix                   if specified, an underline will be used to connect prefix and UMI (i.e. prefix=UMI, UMI=AATTCG, final=UMI_AATTCG). No prefix by default (string [=])
      --umi_skip                       if the UMI is in read1/read2, fastp can skip several bases following UMI, default is 0 (int [=0])
    
    # overrepresented sequence analysis
    -p, --overrepresentation_analysis    enable overrepresented sequence analysis.
    -P, --overrepresentation_sampling    One in (--overrepresentation_sampling) reads will be computed for overrepresentation analysis (1~10000), smaller is slower, default is 20. (int [=20])
    
    # reporting options
    -j, --json        輸出json格式報告檔名(string [=fastp.json])
    -h, --html        輸出html 格式報告檔名,可以用瀏覽器直接檢視(string [=fastp.html])
    -R, --report_title                 should be quoted with ' or ", default is "fastp report" (string [=fastp report])
    
    # threading options
    -w, --thread     使用執行緒數,預設是2(int [=2])
    
    # 控制split選項,有時候單條reads檔案太大,可以分割為多份分別比對,在合併bam結果,這樣可以提高效率。
    -s, --split      切割數目(2~999),預設是0,不分割
    -S, --split_by_lines  split output by limiting lines of each file with this option(>=1000), a sequential number prefix will be added to output name ( 0001.out.fq, 0002.out.fq...), disabled by default (long [=0])
    -d, --split_prefix_digits    輸出字首位數,預設是4,0001,0002這種命名,如果設定為3,就是001,002這種;
    
    # help
    -?, --help       輸出幫助資訊
    
    
  5. 基本功能簡介
    • 過濾
      fastp可以對低質量序列,較多N的序列,該功能預設是啟用的,但可以使用-Q引數關閉。使用-q引數來指定合格的phred質量值,比如-q 15表示質量值大於等於Q15的即為合格,然後使用-u引數來指定最多可以有多少百分比的質量不合格鹼基。比如-q 15 -u 40表示一個read最多隻能有40%的鹼基的質量值低於Q15,否則會被扔掉。使用-n可以限定一個read中最多能有多少個N。
      fastp還預設啟用了read長度過濾,但可以使用-L引數關閉。使用-l引數指定最低要求一個read有多長,比如-l 30表示低於30個鹼基的read會被扔掉。這個功能可以用於實現常用的discard模式,以保證所有輸出的序列都一樣長。
      在fastp的HTML報告中,最頭上的Summary表格很清楚地顯示了過濾的統計資訊,
    • 接頭處理
      接頭(adapter)汙染的處理是FASTQ檔案預處理中很重要的一步。fastp預設啟用了接頭處理,但是可以使用-A命令來關掉。fastp可以自動化地查詢接頭序列並進行剪裁,也就是說你可以不輸入任何的接頭序列,fastp全自動搞定了!對於SE資料,你還是可以-a引數來輸入你的接頭,而對於PE資料則完全沒有必要,fastp基於PE資料的overlap分析可以更準確地查詢接頭,去得更乾淨,而且對於一些接頭本身就有鹼基不匹配情況處理得更好。fastp對於接頭去除會有一個彙總的報告。
    • 滑窗質量剪裁
      很多時候,一個read的低質量序列都是集中在read的末端,也有少部分是在read的開頭。fastp支援像Trimmomatic那樣對滑動視窗中的鹼基計算平均質量值,然後將不符合的滑窗直接剪裁掉。使用-5引數開啟在5’端,也就是read的開頭的剪裁,使用-3引數開啟在3’端,也就是read的末尾的剪裁。使用-W引數指定滑動窗大小,預設是4,使用-M引數指定要求的平均質量值,預設是20,也就是Q20。
    • PE資料的鹼基校正
      fastp支援對PE資料的每一對read進行分析,查詢它們的overlap區間,然後對於overlap區間中不一致的鹼基,如果發現其中一個質量非常高,而另一個非常低,則可以將非常低質量的鹼基改為相應的非常高質量值的鹼基值。該校正功能預設沒有開啟使用-c引數可以啟用,對於一些對噪聲容忍度低的應用,比如液體活檢,建議開啟。
    • 全域性剪裁
      fastp可以對所有read在頭部和尾部進行統一剪裁,該功能在去除一些測序質量不好的cycle比較有用,比如151*2的PE測序中,最後一個cycle通常質量是非常低的,需要剪裁掉。使用-f和-t分別指定read1的頭部和尾部的剪裁,使用-F和-T分別指定read2的頭部和尾部的剪裁。
    • polyG剪裁
      對於兩色發光法的Illumina裝置(NextSeq /NovaSeq),因為在沒有光訊號情況下base calling的結果會返回G,所以在序列的尾端可能會出現較多的polyG,需要被去除。fastp會自動化地識別NextSeq / NovaSeq的資料,然後進行polyG識別和剪裁。如果你想強制開啟該功能,可以指定-g引數,如果想強制關閉該功能,則可以指定-G引數。
    • 分子標籤UMI處理
      UMI在處理ctDNA類似的超低頻突變檢測應用中是十分有用的,為了更好地對帶UMI的FASTQ檔案進行預處理,fastp也很好地支援了UMI預處理功能。該功能預設沒有啟用,需要使用-U引數開啟,另外需要使用--umi_loc來指定UMI所在的位置,它可以是(index1、 index2、 read1、 read2、 per_index、 per_read )中的一種,分別表示UMI是在index位置上,還是在插入片段中。如果指定了是在插入序列中,還需要使用--umi_len引數來指定UMI所佔的鹼基長度。
    • 輸出檔案切分
      很多時候我們需要對輸出的FASTQ進行切分,分成大小均勻的多個檔案,這樣可以使用比對軟體並行地比對,提高並行處理的速度。fastp軟體也提供了相應的功能,並且支援了兩種模式,分別是使用引數-s指定切分後文件的個數,或者使用-S引數指定每個切分後文件的行數。
  6. 質控報告解讀
    fastp的報告在單一檔案中同時包含了過濾前和過濾後的統計結果,如果是PE資料,則同時包含了read1和read2的統計結果。fastp會生成HTML的報告和JSON格式的報告。HTML報告的預設檔名是fastp.html,但是可以通過-h引數修改,JSON報告的預設檔名是fastp.json,但是可以通過-j引數修改。而且fastp報告還有一個標題,預設是fastp report,這個也可以通過-R引數修改為你想要的標題。JSON格式的報告是優化過的,人機皆可讀,適合進階的使用者使用程式解析,而這裡我們重點關注HTML格式的報告。
    • 質量分佈曲線圖
      我們第一關注的當然是質量,所以fastp提供了質量分佈曲線,即每一個cycle的平均質量值,而且fastp同時提供了A/T/C/G四種不同鹼基的平均質量,以及總的平均質量圖,從圖中我們可以看到,一共有5條曲線,分別是A/T/C/G和mean。而且HTML報告中的每一個專案和分專案都是可以點選進行隱藏和展開的。
    • 鹼基含量分佈曲線
      和質量分佈曲線類似,鹼基含量分佈曲線也是按照每一個cycle來的,顯示了每一個位置的鹼基含量。從圖中可以看到,fastp同時顯示了A/T/C/G/N/GC的每一個位置的比例和總的比例。而且如果你覺得頭部那裡比較亂看不清的話,可以用滑鼠拉一個框,它就放大了。
    • KMER統計表格
      fastp對5個鹼基長度的所有組合的出現次數進行了統計,然後把它放在了一張表格中,表格的每一個元素為深背景白字,背景越深,則表示重複次數越多。這樣,一眼望去,就可以發現有哪一些異常的資訊。比如,從KMER表格中,我們可以發現,GGGGG的顏色特別深,從滑鼠移上去之後顯示的資訊中我們可以發現它的出現次數是平均次數的12.8倍,這是不正常的,因為GGGGG的正常倍數應該在1倍左右。幸好我們有fastp,它可以過濾掉這種polyG,讓數值較多地迴歸正常。
    • 過表達序列(overrepresented sequence)
      fastp提供了overrepresetned sequence的分析,而且不但提供了這些overrepresented sequence的序列個數和佔比,還提供了他們在測序cycles中的分佈情況,這有利於分析各種問題。