「三代組裝」使用Falcon對三代測序進行基因組組裝

Falcon是PacBio公司開發(fā)的用于自家SMRT產(chǎn)出數(shù)據(jù)的基因組組裝工具。Falcon分為三個部分:

  • HGAP:PacBio最先開發(fā)的工具,用于組裝細菌基因組,名字縮寫自Hierarchical genome-assembly process(層次基因組組裝進程)。 適用于已知復(fù)雜度的基因組,且基因組大小不能超過3Gb. 由于是圖形界面,所以用起來會非常方便。
  • Falcon:和HGAP工作流程相似,可認為是命令行版本的HGAP,能與Falcon-Unzip無縫銜接。
  • Falcon-Unzip: 適用于雜合度較高或者遠親繁殖或者是多倍體的物種

層次基因組組裝過程(HGAP)分為兩輪.

第一輪是選擇種子序列或者是數(shù)據(jù)集中最長的序列(通過length_cufoff設(shè)置),比較短的序列比對到長序列上用于產(chǎn)生高可信度的一致性序列。PacBio稱其為預(yù)組裝(pre-asembled), 其實和糾錯等價。這一步可能會將種子序列在低覆蓋度的區(qū)域進行分割(split)或者修整(trim),由falcon_sense_options參數(shù)控制,最后得到preads(pre-assembled reads)。

第二輪是將preads相互比對,從而組裝成contigs(contig指的是連續(xù)的不間斷的基因組序列, contiguous sequence)

HGAP

基因組最后組裝結(jié)果是單倍體,但實際上人類、動物和植物大部分的基因組都是二倍體,兩套染色體之間或多或少存在的差異。這種差異在組裝時就是“圖”里的氣泡(bubble)。PacBio開發(fā)的Falcon-Unzip就是用來處理“氣泡”,把不同單倍型的contig分開。

Falcon-Unzip

運行參數(shù)分類

Falcon的運行非常簡單,就是準備好配置文件傳給fc_run.py,然后讓fc_run.py調(diào)度所有需要的軟件完成基因組組裝即可。只不過初學(xué)者一開始可能會迷失在茫茫的參數(shù)中,所以我們要對參數(shù)進行劃分,分層理解。

參數(shù)從是否直接參與基因組組裝分為任務(wù)投遞管理系統(tǒng)相關(guān)和實際組裝相關(guān)。

任務(wù)投遞管理系統(tǒng)相關(guān)參數(shù):

  • 任務(wù)管理系統(tǒng)類型:job_type,job_queue
  • 不同階段并發(fā)任務(wù)數(shù):default_concurrent_jobs, pa_concurrent_jobs, cns_concurrent_jobs, ovlp_concurrent_jobs
  • 不同階段的投遞參數(shù):sge_option_da,sge_option_la, sge_option_cns, sge_option_pla, sge_option_fc

這些參數(shù)和實際的組裝并沒有多大關(guān)系,就是控制如何遞交任務(wù),一次遞交多少任務(wù)而已。這些你需要根據(jù)實際計算機可用資源進行設(shè)置,F(xiàn)alcon推薦多計算節(jié)點任務(wù)方式。實際組裝參數(shù)按照不同的任務(wù)階段可以繼續(xù)劃分

  • 原始序列間重疊檢測和糾錯: pa_DBsplit_option, pa_HPCdaligner_option,falcon_sense_option
  • 糾錯序列間重疊檢測:ovlp_DBsplit_option, ovlp_HPCdaligner_option
  • 字符串圖組裝: overlap_filtering_setting, length_cutoff_pr

除此之外,還有一些全局性的參數(shù),如輸入文件位置input_fofn, 輸入數(shù)據(jù)類型input_type, 基因組預(yù)估大小genome_size以及只使用超過一定長度的序列用于組裝 length_cutofflength_cutoff_pr。那么問題來了,面對茫茫多的Falcon參數(shù),我們到底應(yīng)該如何設(shè)置才比較好?

當然是學(xué)習(xí)前人的經(jīng)驗,F(xiàn)alcon在https://pb-falcon.readthedocs.io/en/latest/parameters.html 提供了不同物種組裝的參數(shù)設(shè)置參考文件, 我們通過比較不同配置間的參數(shù)差異來明確每個參數(shù)的意義,最后還需要通過實戰(zhàn)了解。

組裝實戰(zhàn)

這里用的是 E. coli 數(shù)據(jù)集。由于三代組裝對資源的消耗是非常厲害的,因此貿(mào)然使用較大基因組進行組裝,都不知道什么時候才能把基因組裝好,一不小心內(nèi)存用盡服務(wù)器卡的只能重啟,所以先用大腸桿菌先大致跑一下。

第一步: 準備數(shù)據(jù)

創(chuàng)建相應(yīng)的目錄,然后用wget進行數(shù)據(jù)下載并用tar進行解壓縮。

mkdir -p assembly_test/pb-data && cd assembly_test/pb-data
wget https://downloads.pacbcloud.com/public/data/git-sym/ecoli.m140913_050931_42139_c100713652400000001823152404301535_s1_p0.subreads.tar.gz
tar -zxvf ecoli.m140913_050931_42139_c100713652400000001823152404301535_s1_p0.subreads.tar.gz

第二步:創(chuàng)建FOFN

FOFN指的是包含文件名的文件(file-of-file-names), 每一行里面都要有fasta文件的全路徑.

/path/to/data/ecoli.1.subreads.fasta
/path/to/data/ecoli.2.subreads.fasta
/path/to/data/ecoli.3.subreads.fasta

第三步:準備配置文件

配置文件控制著Falcon組裝的各個階段所用的參數(shù),然而一開始我們并不知道哪一個參數(shù)才是最優(yōu)的,通常都需要不斷的調(diào)整才行。當然由于目前已經(jīng)有比較多的物種使用了Falcon進行組裝,所以可以從他們的配置文件中進行借鑒

wget https://pb-falcon.readthedocs.io/en/latest/_downloads/fc_run_ecoli_local.cfg

該文件的大部分內(nèi)容都不需要修改,除了如下幾個參數(shù)

input_fofn: 這里的input.fofn就是第二步創(chuàng)建的文件,input.fofn。建議把該文件放在cfg文件的同級目錄下,這樣子就不需要改配置文件該文件的路徑了。

# list of fasta files
input_fofn = input.fofn

genome_size, seed_coverage,length_cutoff,length-cutoff_pr 這三個參數(shù)控制糾錯所用數(shù)據(jù)量和組裝所用數(shù)據(jù)量. 如果要讓程序在運行的時候自動確定用于糾錯的數(shù)據(jù)量,就將length_cutoff設(shè)置成"-1",同時設(shè)置基因組估計大小genome_size和用于糾錯的深度seed_coverage。

# otherwise, user can specify length cut off in bp (e.g. 2000)
length_cutoff = -1
genome_size = 4652500
seed_coverage = 30
# The length cutoff used for overalpping the preassembled reads 
length_cutoff_pr = 12000

jobqueue: 這里用的是單主機而不是集群,所以其實隨便取一個名字就行,但是對于SGE則要選擇能夠提交的隊列名。

jobqueue = your_queue

xxx_concurrent_jobs: 同時運行的任務(wù)數(shù)。顯然是越多越快,有些配置文件都寫了192,但是對于大部分人而言是沒有那么多資源資源的,盲目寫多只會導(dǎo)致服務(wù)器宕機。

# job concurrency settings for...
# all jobs
default_concurrent_jobs = 30
# preassembly
pa_concurrent_jobs = 30
# consensus calling of preads
cns_concurrent_jobs = 30
# overlap detection
ovlp_concurrent_jobs = 30

參數(shù)參考: https://pb-falcon.readthedocs.io/en/latest/parameters.html

第四步:運行程序。

這一步可以寫一個專門的shell腳本,然后用qsub(一種SGE集群任務(wù)投遞命令)進行任務(wù)投遞。作為一個單主機用戶,我就直接在命令行中運行。

source ~/opt/biosoft/falcon_unzip/fc_env/bin/activate
fc_run fc_run_ecoli_local.cfg &> fc_run.log &

在程序運行過程中,可以通過幾行命令來看下程序的進度。

檢查不同階段總共要執(zhí)行的任務(wù)數(shù)目

# raw-data
grep '^#' 0-rawreads/run_jobs.sh
# preads
grep '^#' 1-preads_ovl/run_jobs.sh

當前已經(jīng)執(zhí)行的任務(wù)數(shù)

find 0-rawreads/ -name "job*done" | wc -l
find 0-rawreads/ -name "m_*done" | wc -l

評估組裝運行結(jié)果

E. coli 的 subreads總共有1.01Gb數(shù)據(jù),共105.451條reads。

我們可以用dazzler里的命令行來確認dazzler數(shù)據(jù)庫是否構(gòu)建正常

DBstats 0-rawreads/raw_reads.db | head -n 17
DBstats

從中我們可以發(fā)現(xiàn),只有86.1%的read被用于構(gòu)建dazzler數(shù)據(jù)庫,這是由于配置文件里我們設(shè)置的DBsplit參數(shù)使用長度大于500bp的read,pa_DBsplit_option = -x500 -s50

此外,我們還需要檢查 預(yù)組裝(preassmebly)中實際用于組裝的數(shù)據(jù)量

cat 0-rawreads/report/pre_assembly_stats.json
糾錯數(shù)據(jù)報告

這里注意一點,這里的length_cutoff是程序根據(jù)配置文件中這一項length_cutoff = -1確定,這里的"-`"意味著程序會自動根據(jù)基因組大小和覆蓋度確定,但是這不一定是最佳選擇,你應(yīng)該自己設(shè)置。

最后的數(shù)據(jù)存放在2-asm-falcon/文件夾下,簡單用ls -lh 2-asm-falcon/查看該文件時,我發(fā)現(xiàn)組裝的p_ctg.fa大小就只有1.4M, 而實際的大腸桿菌基因組大小為4.8M左右,差距有點大。

原因就是配置文件中length_cutoff的設(shè)置問題,上圖顯示只有22X用于組裝。

當我將其修改成length_cutoff=2000時,糾錯后還有156X數(shù)據(jù)用于組裝,最后的組裝的大小就成了4.8m。 因此用于糾錯的數(shù)據(jù)應(yīng)該盡量多一點,但是閾值也不要太低,否則增加了不必要的運算量。

由于大腸桿菌基因組小,1Gb的數(shù)據(jù)相當于深度為200X,深度非常的高,可以適當繼續(xù)提高length_cutfoff 。當然大多數(shù)項目都是70X, 100X, 120X的數(shù)據(jù), 設(shè)置成2000也就差不多了。

此外,建議多用幾個長度閾值的preads進行組裝,即修改配置文件中 length_cutoff_pr, 然后對"2-asm-falcon", "mypwatcher",和 "all.log" 重命名, 這樣子重新運行腳本就會從糾錯后序列開始。

我嘗試了5k,10k,15k這三個參數(shù),其中5k效果最差,裝出了20條序列,基因組只有560k。10k裝出了3條序列,基因組大小是4.5M,N501.7M。 15k效果最好,裝出了一條4.6M的序列。

在length_cutoff分別是2k和15k情況下,length_cutoff_pr的長度都設(shè)置為15k,最后組裝結(jié)果是length_cutoff 設(shè)置為2k時,最后序列長度更長

官方文檔的坑

如果你在組裝過程中用ps aux | grep 你的用戶名 | wc -l 檢查自己用了多少線程時。你會發(fā)現(xiàn)有一個時期會突然出現(xiàn)會出現(xiàn)好幾百個python -m falcon_kit.mains.consensus 進程。

我在組裝自己物種的時候出現(xiàn)了700多個,最后256G內(nèi)存完全被消耗完,導(dǎo)致無法登陸服務(wù)器只好重啟。

據(jù)我猜測應(yīng)該是和falcon_sense_option中的--n_corescns_concurrent_jobs有關(guān),我當時這兩個參數(shù)分別設(shè)置了20和32,那么結(jié)果就要用到600多個進程。而每個進程大概會消耗1G內(nèi)存,那么峰值就會是600G。

而這里組裝 E. coli 基因組這兩個參數(shù)分別是6和10,用free -h看內(nèi)存消耗時也差不多時用了60多G內(nèi)存。

所以一定要根據(jù)實際情況調(diào)整,配置文件中和并行運算的參數(shù),量力而行,不然重啟等著你。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容