這里的新版指的是PacBio公司在2018年9月發布pb-assembly, 而這篇文章是在2018年9月30日發的。
今年早些時候在參加三代培訓時,聽說PacBio會在今年對Falcon進行一些改變。前幾天我在讀 readthedocs上的Falcon文檔時,發現了文檔頁面上方出現了這樣兩欄提醒
其中pb_assembly就是新的FALCON組裝套裝在GitHub上的使用文檔,經過了幾天的探索,我對它有了一點了解,寫一篇教程作為官方文檔的一些補充吧。
新版亮點
- 整合了串聯重復序列和遍在重復序列的屏蔽(之前沒有這一步)
- 以GFA格式存放graph文件,后續可以用Bandage進行可視化
- 通過算法和性能優化,提高了Associate Contigs的準確性
- 分析流程的性能優化
軟件安裝和數據準備
Falcon終于擁抱了bioconda, 這也就意味著我們再也不需要用到他們原本笨拙的安裝腳本,浪費時間在安裝軟件上。
conda create -n pb-assembly pb-assembly
source activate pb-assembly
# 或者
conda create -p ~/opt/biosoft/pb-assembly pb-assembly
source activate ~/opt/biosoft/pb-assembly
這里使用https://pb-falcon.readthedocs.io/en/latest/tutorial.html上的所用的E. coli數據集
wget https://downloads.pacbcloud.com/public/data/git-sym/ecoli.m140913_050931_42139_c100713652400000001823152404301535_s1_p0.subreads.tar.gz
tar -xvzf ecoli.m140913_050931_42139_c100713652400000001823152404301535_s1_p0.subreads.tar.gz
解壓縮后的文件夾里有三個300M的Fasta文件, 將他們的實際路徑記錄到input.fofn
中
ecoli.1.fasta
ecoli.2.fasta
ecoli.3.fasta
準備配置文件
為了進行組裝,需要準備一個配置文件。我的配置文件為fc_run.cfg
,內容如下。你們可以先預覽一下,后面看我的解釋說明。
#### Input
[General]
input_fofn=input.fofn
input_type=raw
pa_DBdust_option=
pa_fasta_filter_option=pass
target=assembly
skip_checks=False
LA4Falcon_preload=false
#### Data Partitioning
pa_DBsplit_option=-x500 -s50
ovlp_DBsplit_option=-x500 -s50
#### Repeat Masking
pa_HPCTANmask_option=
pa_REPmask_code=1,100;2,80;3,60
####Pre-assembly
genome_size=0
seed_coverage=20
length_cutoff=3000
pa_HPCdaligner_option=-v -B128 -M24
pa_daligner_option=-e.7 -l1000 -k18 -h80 -w8 -s100
falcon_sense_option=--output-multi --min-idt 0.70 --min-cov 2 --max-n-read 800
falcon_sense_greedy=False
####Pread overlapping
ovlp_daligner_option=-e.96 -l2000 -k24 -h1024 -w6 -s100
ovlp_HPCdaligner_option=-v -B128 -M24
####Final Assembly
overlap_filtering_setting=--max-diff 100 --max-cov 300 --min-cov 2
fc_ovlp_to_graph_option=
length_cutoff_pr=2000
[job.defaults]
job_type=local
pwatcher_type=blocking
JOB_QUEUE=default
MB=32768
NPROC=6
njobs=32
submit = /bin/bash -c "${JOB_SCRIPT}" > "${JOB_STDOUT}" 2> "${JOB_STDERR}"
[job.step.da]
NPROC=4
MB=32768
njobs=32
[job.step.la]
NPROC=4
MB=32768
njobs=32
[job.step.cns]
NPROC=8
MB=65536
njobs=5
[job.step.pla]
NPROC=4
MB=32768
njobs=4
[job.step.asm]
NPROC=24
MB=196608
njobs=1
根據注釋信息,文件分為"input", "Data partitioning", "Repeat Masking", "Pre-assembly", "Pread overlapping", "Final Assembly", 以及最后的任務調度部分,讓我們分別看下這里面的內容
輸入(Input)
#### Input
[General]
input_fofn=input.fofn
input_type=raw
pa_DBdust_option=
pa_fasta_filter_option=pass
target=assembly
skip_checks=False
LA4Falcon_preload=false
輸入這里參數比較簡單,基本不需要做任何改動,除了 pa_fasta_filter_options,用于處理一個ZMW(測序翻譯孔)有多條subread時,到底選擇哪一條的問題。
- "pass": 不做過濾,全部要。
- "streamed-median": 表示選擇大于中位數的subread
- "streamed-internal-median": 當一個ZMW里的subread低于3條時選擇最長,多于單條則選擇大于中位數的subread
0.01版本pb-assembly的
pa_DBdust_option
有一個bug,也就是里面的參數不會傳遞給DBdust, DBdust是對read進行soft-masking,一般都用默認參數,因此這個bug問題不大。
數據分配(Data Partitioning)
pa_DBsplit_option=-x500 -s50
ovlp_DBsplit_option=-x500 -s50
這部分的設置會將參數傳遞給DBsplit
,將數據進行拆分多個block,后續的并行計算都基于block。-s 50
表示每個block大小為50M。 這適用于基因組比較小的物種,如果是大基因組則應該設置為-s 200
或者-s 400
重復屏蔽(Repeat Masking)
#### Repeat Masking
pa_HPCTANmask_option=
pa_REPmask_code=1,100;2,80;3,60
屏蔽重復序列可以在不損失組裝準確性的同時,提高后續組裝的overlap/daligner步驟10~20倍速度,見Detecting and Masking Repeats.
pa_HPCTANmask_option的參數會傳給串聯重復步驟的HPCTANmask
, 而pa_REPmask_code
很復雜,它分為三次迭代,因此這里1:100;2,80;3,60 就表示第一次迭代檢測每個block中出現超過100次的序列,第二次迭代將2個block合并一起檢測超過80次的序列,第三次將3個block進行合并檢測超過60次的序列。
預組裝(糾錯)pre-assembly
####Pre-assembly
genome_size=0
seed_coverage=20
length_cutoff=3000
pa_HPCdaligner_option=-v -B128 -M24
pa_daligner_option=-e.7 -l1000 -k18 -h80 -w8 -s100
falcon_sense_option=--output-multi --min-idt 0.70 --min-cov 2 --max-n-read 800
falcon_sense_greedy=False
當length_cutoff=-1
時,設置genome_size
和seed_coverage
會自動計算要過濾的序列。否則是過濾低于一定長度的read。
pa_HPCdalinger_option參數不需要調整,-M表示每個進程的內存為24G,一般200M的block對應16G。
pa_daligner_option的參數比較重要:
-
-e
:錯誤率,低質量序列設置為0.70,高質量設置為0.80。 值越高避免單倍型的坍縮 -
-l
: 最低overlap的長度,文庫比較短時為1000, 文庫比較長為5000. -
-k
: 低質量數據為14,高質量數據為18 -
-h
: 表示完全match的k-mer所覆蓋的堿基數。和-l
,-e
有關,越大越嚴格。預組裝時最大也不要超過最低overlap長度的1/4. 最低就設置為80
糾錯后相互比對
####Pread overlapping
ovlp_daligner_option=-e.96 -l2000 -k24 -h1024 -w6 -s100
ovlp_HPCdaligner_option=-v -B128 -M24
和上面的參數類似,但是-e的范圍調整為0.93-0.96,-l范圍調整為1800-6000, -k調整為 18-24
最后組裝
overlap_filtering_setting=--max-diff 100 --max-cov 300 --min-cov 2
fc_ovlp_to_graph_option=
length_cutoff_pr=2000
這里的參數就可以隨便調整了,因為這一步速度很快。 例如length_cutoff_pr
就可以從2000,提高到15000.
最后還有一部分是任務投遞系統,如果是單節點運行,需要注意設置 njobs,這是同時投遞的任務數。假如你將[job.step.cns]按照如下的方式設置,那么同時會出現 個任務,如果你的內存只有128G,運行一段時間后你的所有內存就會被耗盡,那么基本上你就只能重啟服務器了。
[job.step.cns]
NPROC=8
MB=65536
njobs=50
運行結果
用上述的配置文件,以fc_run fc_run.cfg
運行后,最后的2-asm-falcon/p_ctg.fa
的序列數有4條,最長為4,685,024, 之后我將length_cutoff_pr
調整為15k,2-asm-falcon/p_ctg.fa
序列只有一條,長度為4,638,411
下載asm.gfa
到本地,用Bandage可視化,可以發現組裝效果不錯。