基因組De novo組裝和 ALLPATHS-LG使用

理論部分

該部分參考及引用陳連福的生信講義沥曹,zhaofei的https://vip.biotrainee.com/d/103--

由于儀器測序讀長的限制等窄锅,在建庫時會將DNA隨機打斷為小片段的序列藻肄,因此,基因組組裝就是將小片段的序列連接起來间学,但是序列之間的聯(lián)系十分復雜殷费,常用構建Graph來進行表示,然后在對Graph進行簡化低葫、拼接详羡,即reads→contigs→scaffolds。

下圖即為簡單的示意圖氮采,其中頂點A,B,C,D,E,F稱為nodes殷绍,是6條小片段序列;連接2個nodes的有方向的箭頭稱為edges鹊漠,這些邊表示reads間的overlap;而數字代表著權重主到。通過對Graph進行分析,選擇權重大的來簡化Graph躯概,得到ABCDEF這個序列登钥,依此類推,將基因組產生ABCDEFGH...等若干的reads娶靡,再根據各reads間的重復區(qū)域牧牢,選出最優(yōu)路徑,形成contigs姿锭,再組成scaffolds塔鳍,最終得到基因組序列。

組裝示意圖.png

尋找最優(yōu)路徑的常用算法:

早期使用的是貪婪法 :先選定初始read呻此,找到和其重疊區(qū)域最高的read進行延伸轮纫,直至拼接后的read兩端不能再進行延伸為止。每次延伸都是從最優(yōu)匹配開始的焚鲜,貪婪法得到的是局部最優(yōu)解掌唾,而不是全局最優(yōu)解放前,因此,在遇到重復序列時會出現比較大的問題糯彬。

Overlap-Layout-Consensus(OCL) 常用語處理reads讀長較大的測序數據凭语,比如PacBio數據的組裝。OLC算法分為三步:1)對所有的reads進行兩兩比對撩扒,得到overlap似扔。2)根據overlap簡化graph,建立overlap圖却舀,將reads組合成contig虫几。3)得到consensus:將所有read序列排列起來,找到一條從起始節(jié)點到終止節(jié)點的最佳近似路徑使得最終路徑將會遍歷一次重疊區(qū)域的每個節(jié)點挽拔,從而得到目標基因序列辆脸。

de Bruijin Graph(DBG)是目前常用的二代測序拼接算法。相關軟件:ALLPATHS-LG螃诅、SOAPdenovo等啡氢。該算法和OLC類似,不同之處在于:該算法中的nodes是kmer序列术裸,kmer和kmer必須僅有一個堿基差異才能相連倘是,即相鄰的kmer序列是通過k-1個堿基連接到一起的(每次只移動一個位置)。這種算法降低了重復區(qū)域的復雜度袭艺,降低了內存消耗搀崭。其步驟:1)構建DBG圖,將reads分割為一系列連續(xù)的kmer猾编;2)合并DBG圖瘤睹;3)構建contig:尋找最優(yōu)路徑(經過每一個節(jié)點且僅經過一次),最優(yōu)路徑對應的堿基序列構成一個contig答倡;4)構建scaffold:通過PE reads位置確定contig之間的相對位置和方向轰传,組裝contig,填充contig之間的gap瘪撇,得到scaffold序列获茬。

由于DBG構建不需要reads具有endanger的長度,因此只適用于reads長度較短的Illumina測序數據倔既。也因此DBG對于重復區(qū)域比較狠分析恕曲,進行de novo組裝時需要構建大片段文庫,測MP數據渤涌,只要MP文庫長度大于重復序列長度码俩,則有利于重復序列的組裝。

kmer和內存

k值越大可辨別更多的小重復序列歼捏,越容易把DBG轉換為唯一的序列稿存,但得到的拼接過程含有更多的gaps;小的k值對應的DBG能夠得到較好的連通性瞳秽,但是算法的復雜度會提高瓣履,repeats序列處理會更復雜,增加了錯拼的可能性练俐。

kmer越大需要的內存就越多袖迎,所以計算機的內存大小也會限制kmer的取值。這里需要說明的是腺晾,輸入數據的多少不會影響memory用量燕锥,但是輸入數據的錯誤越少,占用的內存也就越少悯蝉,假設所有測序數據都沒有任何錯誤归形,那么DBG的大小并不會因為測序深度的增加,因為不需要將因為幾個堿基不一致的kmer存入到DBG中(下一部分會具體提到)鼻由。至于需要多大的RAM則取決于DBG的大小和組裝基因組的大小暇榴。

另外,在拼接的過程中盡量避免使用偶數kmer蕉世,否則容易是kmer產生回文序列蔼紧,特別是在鏈特意性的數據中。

在平時分析中狠轻,一般會設置一個kmer的梯度(21奸例,23,25向楼,27,2931)查吊,來解決DBG算法loss of read coherence的問題。然后從中選擇最好的結果蜜自。另外菩貌,還有一種說法是在進行拼接過程時,kmer應該選擇read長度的1/2到2/3大小重荠,否則可能拼接出過多的Contig箭阶。

String Graph能較好的組裝散在重復序列。

目前構建Graph的方法主要有3種:Overlap-Layout-Consensus(OCL),de Bruijin Graph(DBG)和String Graph戈鲁。

實操部分

使用ALLPaths-LG組裝進行基因組組裝仇参,適合于短reads數據,也是現在公認的進行基因組De novo 組裝效果最好的軟件婆殿。但是該軟件十分消耗內存和計算诈乒。

1. fastqc軟件使用查看數據原始質量

find ./ -name "*.gz" |xargs fastqc -t 3 -o ./result 

xargs命令的用法:

其中管道和xargs的區(qū)別:管道是實現“將前面的標準輸出作為后面的標準輸入”,xargs是實現“將標準輸入作為命令的參數”婆芦∨履ィ可以試試下面兩代碼的結果

echo "--help"|cat #此處結果是顯示 “--help”
echo "--help"|xargs cat #此處結果是顯示cat的幫助說明文檔 相當于 cat --help喂饥,即xargs是將內容作為普通的參數傳遞給程序
cat gzip.sh|xargs -i echo "quick_qsub {}"
  • 結果說明

得到的結果是包括:
image

一般是查看網頁版結果,結果解釋說明fastqc中文結果說明肠鲫。

fastqc 軟件主要是針對全基因組測序的员帮,并且各建庫方法不同,其評判標準也會有所差距导饲;不能只是一味的尋求全部結果通過捞高。

ls *zip|while read id;do unzip $id;done #批量解壓壓縮結果

從文件夾中批量抓取里面的%GC,Total sequences等信息

Q20:質量值大于20的堿基數目占總共堿基數目的比例。

  • 使用multiqc批量查看fastqc結果

multiqc *fastqc.zip --pdf #

image

2. nxtrim文庫分選

nxtrim分開PE和MP文庫渣锦。
該軟件會用于去除Nextera Mate Pair 文庫中接頭并且根據接頭位置的方向分類reads硝岗。
其中的每個read都會搜索接頭信息(CTGTCTCTTATACACATCT)和他的反向序列(AGATGTGTATAAGAGACAG),因此這個完整的連接接頭是CTGTCTCTTATACACATCT+AGATGTGTATAAGAGACAG袋毙。

nxtrim -1 reads1 -2 read2 -O folderfile --joinreads --preserve-mp --separate 1 > read_nxtrim.log 2 >&1

注:該軟件的默認參數--rf 會將MP文庫的reads方向變換回去型檀。

nxtrim.png

其中的MP和PE 的文件即為所得。

3. bwa比對得到插入片段文庫

bwa mem -M ref.fa reads1.pe.fq.gz reads2.pe.fq.gz > read.pe.sam
bwa mem -M ref.fa reads1.mp.fq.gz reads2.mp.fq.gz > read.mp.sam
perl count_num_sam.pl read.pe.sam
perl count_num_sam.pl read.mp.sam 

SAM文件中第9列是建庫時候的打斷的片段長度娄猫,如若使用的是PE150的數據贱除,那么打斷成350bp,則這里的數據應該是350個字符左右媳溺。

#!/usr/bin/perl   #count_num_sam.pl;提取sam文件中第九列月幌,統(tǒng)計每個插入片段長度的個數
open FH,'>',"$ARGV[0].count.out" or die;
my @num;
my $i = 0;
while(<>){
        next if /^\@/;
        if(/(?:.*?\s){8}(-?\d+)\s.*/){
                $num[$1]++ if($1>=0);
        }
}
$num[0] = $num[0]/2;
for($i=0; $i<20001; $i++){
        if($num[$i] == 0){
                print FH "$i\t0\n";
        }else{
                print FH "$i\t$num[$i]\n";      
        }        
}

用excel得到插入片段的圖,平均值計算方法是:(A+B)/2;偏差值=平均值-A悬蔽。

插入片段長度圖.png

根據實驗中選擇文庫的原理(如下圖)扯躺,對于同一個Well的數據,其index相同蝎困,則其MP文庫插入片段分布一致录语,此類數據只需分析一個插入片段的圖即可。對于同一個 Fragment禾乘,其PE文庫插入片段分布一致澎埠,同理此類數據只需分析一個插入片段的圖即可。

文庫構建.jpg
4. ALLPaths-LG組裝(參考陳連福生信講義)

使用ALLPATHS-LG的條件比較嚴格始藕,有以下的注意事項:

1.不能只使用一個library數據進行組裝蒲稳;

2.必須有一個“overlapping”的片段文庫的PE數據;

3.必須有jumping library 數據(也就是Illumina Mate-pair測序數據)

4.基因組組裝需要有100X或者以上基因組覆蓋度的堿基伍派,這里的覆蓋度是指raw reads數據的覆蓋度江耀;

5.可以使用PacBio數據;

6.不能使用454數據和Torrent數據诉植;

7.輸入10G的堿基數據量祥国,大約需要17G內存;

8.對于試探性的參數晾腔,比如K舌稀,原則上可以調整啊犬;但是一般不自行調整,也不推薦扩借。本軟件中Kmer大小的參數K和read之間沒有直接的聯(lián)系椒惨,其會在運行過程中運用一系列的K值。

4.1 準備in_groups.csv和in_libs.csv文件

in_groups.csv用于指出測序數據的存放路徑潮罪,

其中file_name:數據文件所存放位置,文件名可以包含‘*‘和’?’领斥,從而代表paired數據嫉到。支持的文件類型有“.bam,.fasta,.fa,.fastq,.fq.,fastq.gz,.fq.gz”。

file_name, library_name, group_name
HoS150_peQ20-1_R?.cut.fq.trimmed.paired.fastq,     PE1,       PE01
HoS_mp1_R?.fastq, MP6-1,      HoS250_6-1
HoS_mp2_R?.fastq, MP6-2,      HoS250_6-2
HoS_mp3_R?.fastq, MP6-3,      HoS250_6-3

in_libs.csv用于給出文庫的特性月洛。

其中:library_name指文庫的名字何恶,和In_groups.csv相匹配。type文庫類型:fragment→PE測序嚼黔;jumping→MP測序细层;long→Pacbio測序。read_orientation reads的方向唬涧,小片段文庫為inward疫赎,大片段文庫為outward。但是需要注意的是nxtrim軟件中默認是將大片段文庫的方向改變?yōu)閕nward碎节。

library_name, project_name,     organism_name,        type,     paired,   frag_size, frag_stddev, insert_size, insert_stddev,    read_orientation, genomic_start, genomic_end
PE1, HoS, RFgenome, fragment, 1, 287, 50,, , inward,   0, 0
MP6-1,  HoS, RFgenome,  jumping, 1,  , ,  2290,220,inward,  0, 0
MP6-2,  HoS, RFgenome,  jumping, 1,  , ,  2808,  318,  inward,  0, 0
MP6-3,  HoS, RFgenome,  jumping, 1, , , 3954, 750,  inward,  0, 0
4.2 將Fastq轉換為ALLPATH-LG支持的輸入格式
#!/bin/sh
#這個為prepare.sh文件
# ALLPATHS-LG needs 100 MB of stack space.  In 'csh' run 'limit stacksize 100000'.
ulimit -s 100000 #程序中需要較大的堆椗醺悖空間,使用ulimit將計算資源放寬松些狮荔。

mkdir -p /02allpaths/data #用于將轉換后的數據文件放入到此目錄下胎撇。

# NOTE: The option GENOME_SIZE is OPTIONAL. 
#       It is useful when combined with FRAG_COVERAGE and JUMP_COVERAGE 
#       to downsample data sets.
#       By itself it enables the computation of coverage in the data sets 
#       reported in the last table at the end of the preparation step. 

# NOTE: If your data is in BAM format you must specify the path to your 
#       picard tools bin directory with the option: 
#
#       PICARD_TOOLS_DIR=/your/picard/tools/bin

PrepareAllPathsInputs.pl\

 DATA_DIR=$PWD/genome/data \
 PLOIDY=2\ #生成ploidy文件,1表示基因組為單倍體型殖氏;2為雙倍體型晚树。
 IN_GROUPS_CSV=in_groups.csv\
 IN_LIBS_CSV=in_libs.csv\
 OVERWRITE=True\
 | tee prepare.out 

運行以上命令,將fastq文件轉成運行ALLPATH-LG所需要的文件雅采,并存放到/02allpaths/data文件夾下爵憎。

4.3 ALLPATHS-LG主程序的使用

使用RunAllPathsLG這個命令來進行基因組組裝,該命令有很多參數总滩,但是在一般情況下不要隨意使用纲堵,使用默認設置即可。

#!/bin/sh
# assemble.sh
# ALLPATHS-LG needs 100 MB of stack space.  In 'csh' run 'limit stacksize 100000'.
ulimit -s 100000

RunAllPathsLG\
 PRE=$PWD\ #程序運行的根目錄闰渔,所有的其他目錄全在該目錄下
 REFERENCE_NAME=.genome \ #參考基因組目錄名稱席函,位于PRE目錄下,若有參考基因組冈涧,可放于此目錄下茂附。
 DATA_SUBDIR=data\ #DATA子目錄正蛙,位于REFERENCE_NAME目錄下,程序從該目錄下讀取數據营曼。
 RUN=run\  #位于DATA_SUBDIR目錄下乒验,將生成的中間文件和結果文件存儲與該目錄中。
 SUBDIR=test\
 TARGETS=standard\
 OVERWRITE=True\
 | tee -a /02allpaths/assemble.out

注意:assemble.sh文件中幾個目錄的路徑的設置蒂阱。

接著就是漫長的結果等待啦~~~

由于組裝需要的內存很大锻全,一定要保證內存,否則會運行到一半會被刪除录煤。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末鳄厌,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子妈踊,更是在濱河造成了極大的恐慌了嚎,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件廊营,死亡現場離奇詭異歪泳,居然都是意外死亡,警方通過查閱死者的電腦和手機露筒,發(fā)現死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門呐伞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人邀窃,你說我怎么就攤上這事荸哟。” “怎么了瞬捕?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵鞍历,是天一觀的道長。 經常有香客問我肪虎,道長劣砍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任扇救,我火速辦了婚禮刑枝,結果婚禮上,老公的妹妹穿的比我還像新娘迅腔。我一直安慰自己装畅,他們只是感情好,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布沧烈。 她就那樣靜靜地躺著掠兄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蚂夕,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天迅诬,我揣著相機與錄音,去河邊找鬼婿牍。 笑死侈贷,一個胖子當著我的面吹牛,可吹牛的內容都是我干的等脂。 我是一名探鬼主播俏蛮,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼慎菲!你這毒婦竟也來了嫁蛇?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤露该,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后第煮,有當地人在樹林里發(fā)現了一具尸體解幼,經...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年包警,在試婚紗的時候發(fā)現自己被綠了撵摆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡害晦,死狀恐怖特铝,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情壹瘟,我是刑警寧澤鲫剿,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站稻轨,受9級特大地震影響灵莲,放射性物質發(fā)生泄漏。R本人自食惡果不足惜殴俱,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一政冻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧线欲,春花似錦明场、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春逆屡,著一層夾襖步出監(jiān)牢的瞬間圾旨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工魏蔗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留砍的,地道東北人。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓莺治,卻偏偏與公主長得像廓鞠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子谣旁,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內容