MUMmer共線性分析與SNP檢測



系統發育相關的基因組之間既存在保守性又存在可變性。有些序列片斷的數目以及順序具備保守性,這種保守性可使用共線性(synteny)或同線性(colinearity)來進行描述。共線性主要強調兩方面,一是序列的同源性,二是序列片斷的排列順序。同時即便很近緣的基因組也可能存在大量的變異和多態性,這種變異可能構成了不一樣個體與羣體性狀差別的基礎。單核苷酸多態性(single-nucleotide polymorphismSNP)是指因爲單個核苷酸位置上存在轉換或顛換等變異所引發的DNA序列多態性,經常使用來研究近緣物種基因組的進化。css


MUMmer http://mummer.sourceforge.net/ )是一個大尺度的長片斷 DNA 和蛋白序列全局比對工具,能夠方便的比較兩個物種完整基因組之間的差異。
MUMmer3 安裝方法以下所示( http://mummer.sourceforge.net/manual/ ):
tar -zxvf MUMmer3.23.tar.gzcd MUMmer3.23make install

MUMmer4安裝(https://github.com/mummer4/mummer/releases):git

tar -zxvf mummer-4.0.0beta2.tar.gzcd mummer-4.0.0beta2./configure --prefix=/data/tengwenkai/software/MUMmer4.0makemake install
MUMmer 原理

MUMmer的核心基於Maximalexact matching算法開發的mummer。其餘工具(nucmerpromerrun-mummer1run-mummer3)都是基於mummer的開發的流程。這些流程的分析策略分爲三部:github

mummer在兩個輸入中找給定長度的極大惟一匹配(Maximal exact matching算法

而後將這些匹配區域聚類成較大不徹底聯配區域,做爲錨定點(anchorsql

最後它從每一個匹配外部擴展聯配,造成有gap的聯配。shell

MUMmer核心是基於後綴樹(suffix tree)數據結構的最大匹配路徑。根據這個算法開發出來的repeat-matchexact-tandems能夠從單個序列中檢測重複,mummer則是用於聯配兩條或兩條以上的序列。swift

概念1suffix tree: 表示一個字符串的全部子字符串的數據結構,好比說abc的全部子字符串就是aabacbcabc微信

概念2Maximal Unique Match指的是匹配僅在兩個比較序列中各出現一次。數據結構

Mummer爲基於後綴樹(suffix tree)數據結構,可以在兩條序列中有效定位極大惟一匹配(maximal uniquematches),所以它比較適用於產生一組準確匹配(exact matches)以點圖形式展現,或者用來錨定從而產生逐對聯配(pair-wise alignments)編輯器

大部分狀況下都不會直接用到主程序mummer,因此只要知道MUMmer歷經幾回升級,使得mummer能夠可以只找在referencequery都惟一的匹配(初版功能),也能夠找在reference惟一但不必定在query惟一的匹配(第二版新增),甚至不在意是否惟一的匹配(第三版新增),參數分別爲-mum-mumreference-maxmatchrepeat-matchexact-tandems比較少用,畢竟參數也很少,彷佛有其餘更好的工具能用來尋找序列中的重複區。

MUMmer 的聚類算法可以比較智能地把幾個獨立的匹配按照順序聚成一組匹配,分爲兩種模式 gaps mgaps (以下圖所示)。這二者差異在因而否容許重排(例如倒置現象),分別用於 run-mummer1 run-mummer3

mummer最適合生成能夠顯示爲dot plot的精確匹配列表,或者用做生成成對比對中的錨點。基於mummer,做者編寫了如下4pipeline,方便實際使用:

nucmer:由Perl寫的流程,用於聯配很相近(closely related)核酸序列。它比較適合定位和展現高度保守的DNA序列。注意,爲了提升nucmer的精確性,最好把輸入序列先作遮蓋(mask)避免不感興趣的序列的聯配,或者修改單一性限制下降重複致使的聯配數。

promer:也是Perl寫的流程,工做原理相似nucmer。其在進行任何精確匹配以前,將輸入序列被翻譯成全部六種讀框的氨基酸。這使得promer可以鑑定在DNA水平上可能不保守的保守蛋白質序列的區域,並所以使其具備比nucmer更高的靈敏度。注意,靈敏度的增長將致使大量輸出高度類似的序列,所以建議僅當輸入序列太分散難以產生合理數量的nucmer輸出時才使用promer

run-mummer1 run-mummer3 :二者是基於 cshell 寫的流程,用於兩個序列的常規聯配,和 promer nucmer 相似,只不過可以自動識別序列類型。它們擅長聯配類似度高的 DNA 序列,找到它們的不一樣,也就是適合找 SNP 或者糾錯。前者用於 1v1 無重排,後者 1v 多有重排。
MUMmer 使用

因爲MUMmer有一個主程序和4個主流程,所以決定每種狀況下最佳的MUMmer比對程序十分重要。MUMmer的使用狀況可能有如下幾種:

兩個完成序列的全局比對,例如兩個細菌基因組的比較。獨立的 mummer 程序,與 mummerplot 結合,多是可視化兩個序列的全局比對所必需的,有助於肯定兩個序列之間的差別,其使用以下所示:
./mummer [options] <reference-file> <query-files>-mum:只尋找在reference和query都惟一的匹配-mumreference:尋找在reference惟一但不必定在query惟一的匹配(默認)-maxmatch:尋找全部匹配,不在意是否惟一-n:只匹配字符a、c、g、t,能夠大寫或小寫,忽略掉被mask的序列-l:匹配的最短長度,默認爲20-b:同時查找正向鏈和反向互補鏈的匹配-r:只查找反向互補鏈的匹配-s:顯示匹配的子字符串-c:彙報與原始鏈對應的反向互補匹配的query-position-F:無論輸入序列的數目,強制4列的輸出結果格式-L:顯示query序列的長度

使用mummer對兩個基因組進行分析:

MUMmer4.0/bin/mummer -mum -b -c -n 1171_armatimo.fasta 142_armatimo.fasta > 1171_142.mums
結果以下所示(第一列爲查詢基因組中的位置,第二列爲參考基因組中的位置,第三列爲匹配長度):

Mummerplot使用方法以下所示:

mummerplot [options] <match file>match file:匹配文件,由mummer、nucmer、promer等程序生成(後綴.out、.cluster、.delta、.tiling)-f, --filter:只展現.delta比對中best匹配(在一對多模式中)--fat:只展現使用fattest比對的序列-p|prefix:設置輸出結果的文件前綴,默認爲'out'-rv:x11格式結果背景顏色反轉-r|IdR:指定X軸繪製的序列ID-q|IdQ:指定Y軸繪製的序列ID-R|Rfile:經過文件Rfile指定參考序列的繪製順序-Q|Qfile:經過文件Qfile指定查詢序列的繪製順序,Rfile/Qfile能夠是fasta序列文件,也能夠是序列ID的列表-s|size:輸出圖片的大小,可選small、medium、large,至關於--small、--medium、--large,默認爲small。-S, --SNP:在比對中標出SNP位點-t|terminal:輸出結果爲x十一、postscript、png,至關於--x十一、--postscript、--png,默認爲x11,x11是一種互動展現,postscript爲矢量格式-t|title:設置圖片的標題,默認爲none-x|xrange:設置x軸的範圍[min:max]-y|yrange:設置y軸的範圍[min:max]
注意, MUMmer3 中的 mummerplot 只適合 gnuplot 5.0 如下的版本。使用 mummerplot 對分析結果做圖:
MUMmer4.0/bin/mummerplot -t postscript -p 1171_142 1171_142.mums

做圖結果以下所示:

不一樣顏色分別表明不一樣方向(正向鏈/反向互補鏈)上的匹配。

沒有重排的高度類似序列,例如同一個屬或種的基因組。當比較兩個幾乎相同的序列,比對的目的一般是 SNP small InDel 的鑑定。原 MUMmer 1.0 pipeline 仍然是這類分析的一個方便的工具,使用方法以下所示(注意, MUMmer 4.0 scripts/run-mummer1.sh 腳本中 bindir 須修改成包含 mumer gap 命令的路徑,因爲 4.0 版安裝後的 bin 中沒有 gap 命令,所以可設置爲 MUMmer3.23 的路徑;此外 MUMmer3.23 中的 run-mummer1 腳本有一點錯誤,須要在 21 tail 命令後面添加 -n ,此處可參考 run-mummer1.sh ):
MUMmer3.23/run-mummer1 142_armatimo.fasta 391_armatimo.fasta 142_391
結果以下所示(第一列爲查詢基因組):

能夠看出,因爲是很近緣的物種的基因組,匹配區域很長,但有一個長序列的重排(此重排極可能是因爲基因組序列未做複製起點校訂所致)。 Gaps 文件給出了匹配之間的 gap 長度,以下所示(第五列爲連續匹配之間的 gap 長度):

若是正向鏈匹配效果很差,還能夠查詢反向互補鏈的匹配與 gap
MUMmer3.23/run-mummer1 142_armatimo.fasta 391_armatimo.fasta 142_391 -r

有重排的高度類似序列,有時候兩個序列是高度類似的,可是會出現大片斷的序列重排、顛倒或插入。爲了比對這些序列應該使用run-mummer3,它使用一種聚類方法,容許這些大規模突變的類型,但保留了run-mummer1的許多其餘功能。爲了更準確地尋找SNP,您能夠編輯腳本,並將-D選項添加到combineMUMs命令行,從而產生一個僅兩個序列之間差別位置的簡明文件。用法以下所示:

MUMmer3.23/run-mummer3 142_armatimo.fasta 391_armatimo.fasta 142_391

重排以後gap減小。在腳本里添加-D後的align文件給出了gap處的鹼基差別,以下所示:

較類似序列的比對,run-mummer1run-mummer3更多地關注兩個序列之間的區別,而nucmer關注的是什麼是相同的。它對一致性對齊的限制不多,因此從新排列,反轉和重複都將被nucmer識別。nucmer的使用方法以下所示(須要預先安裝Foundation.pm):

nucmer [options] <Reference> <Query>Reference:參考基因組,含有多條序列的FASTA文件名Query:要匹配的基因組,含有多條序列的FASTA文件名--mum, --mumreference(默認), --maxmatch:與mumer相同-b, --breaklen:一個比對嘗試延伸的最大距離,默認爲200-c, --mincluster:一個匹配聚類簇的最短長度,默認爲65-D, --diagdiff:一個聚類中兩個鄰接匹配的最大對角差分,默認5-d, --diagfactor一個聚類中兩個鄰接匹配的最大對角差分與gap長度的比值,默認爲0.12--noextend:不執行聚類簇延長步驟,默認關閉-f, --forward:只使用查詢序列的正向鏈-g, --maxgap:一個聚類中兩個鄰接匹配的最大gap長度,默認爲90-l, --minmatch:一個匹配的最短長度,默認爲20-L, --minalign:一個聚類延伸後比對的最短長度,默認爲0-r, --reverse:只使用查詢序列的反向互補鏈--nosimplify:不簡化比對,當使用序列與自身比對來尋找重複時能夠選此選項,默認關閉-p, --prefix:輸出結果delta文件的前綴,默認爲out--sam-short:保存SAM短格式到文件路徑--sam-long:保存SAM長格式到文件路徑-t, --threads:程序運行使用的核數

使用nucmer對兩個基因組進行比較分析:

MUMmer4.0/bin/nucmer --mum -g 500 -c 100 -p 1171_142 142_armatimo.fasta 1171_armatimo.fasta
運行後獲得一個 delta 格式的文件,它的做用是記錄每一個聯配的座標,每一個聯配中的插入和缺失的距離。使用 show-coords 腳本能夠將 delta 文件轉換爲易讀的匹配座標:
MUMmer4.0/bin/show-coords -r 1171_142.delta > 1171_142.coords

其中-r表示按照參考序列的ID以及座標進行分類,結果以下所示:

使用 show-aligns 能夠查看具體的序列比對狀況,以下所示:
MUMmer4.0/bin/show-aligns -r 1171_142.delta 142_armatimo1 1171_armatimo1 > 1171_142.aligns

結果以下所示:

使用mummerplot進行可視化,以下所示:

MUMmer4.0/bin/mummerplot -t postscript -p 1171_142 1171_142.delta

做圖結果以下所示:

較不類似的序列比對,不少基因的DNA序列差別較大,但蛋白序列是保守的,所以比較蛋白序列能尋找到更多的匹配,promer能夠將DNA序列翻譯成蛋白序列進行比對,其使用參數與nucmer相似,以下所示:

MUMmer4.0/bin/promer --mum -p 1171_142 142_armatimo.fasta 1171_armatimo.fasta

使用delta-filter過濾掉Identity低於50%的匹配:

MUMmer4.0/bin/delta-filter -q -r -i 50 1171_142.delta > 1171_142.filter

進行可視化做圖:

MUMmer4.0/bin/mummerplot -t postscript -p 1171_142 1171_142.filter

做圖結果以下所示:

檢測 SNP SNP 主要是指在基因組水平上由單個核苷酸的變異所引發的 DNA 序列多態性,所以在檢測 SNP 時須要對基因組進行比對,排除插入缺失、基因重排的影響,尋找匹配聚類簇中的單核苷酸變異位點,以下所示:
MUMmer4.0/bin/nucmer -p 142_391 142_armatimo.fasta 391_armatimo.fasta

重複序列可能會掩蓋可能的SNP,所以使用delta-filter去除一對多、多對多中的冗餘匹配:

MUMmer4.0/bin/delta-filter -r -q 142_391.delta > 142_391.filter

使用show-snps顯示匹配中的SNP,以下所示:

MUMmer4.0/bin/show-snps -Clr 142_391.filter > 142_391.snps

結果以下所示:

END

本文分享自微信公衆號 - 微生態與微進化(MicroEcoEvo)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索