MM2-fast是對MiniMAP2在現代CPU上的加速實現。 mm2 fast加速了minimap2的所有三個主要模塊:(a)播種,(b)鏈接和(c)成對對準,在minimap2上使用AVX512實現高達1.8倍的速度。 MM2-fast是minimap2的倒入替換,提供了相同的功能,具有完全相同的輸出。在當前版本中,所有模塊均使用AVX-512和AVX2矢量化進行了優化。我們的自然計算科學出版物(https://www.nature.com/articles/S43588-022-00201-8)提供了詳細的基準結果。
操作系統:Linux
使用G ++(GCC)9.2.0和ICPC版本19.1.3.304測試MM2-fast
體系結構:x86_64 cpus with avx512,avx2
記憶要求:人類基因組的〜30GB
克隆MM2快速github repo。可以使用Make Command來編譯源代碼。只需幾秒鐘。
git clone --recursive https://github.com/bwa-mem2/mm2-fast.git mm2-fast
cd mm2-fast
make
MM2-fast的使用與miniMAP2相同。這是映射ONT讀取測試數據的示例。
./minimap2 -ax map-ont test/MT-human.fa test/MT-orang.fa > mm2-fast_output
由於MM2-fast的這一方面是minimap2-v2.24的加速版本,因此可以使用MiniMAP2-V2.24驗證MM2-FAST的輸出。請注意,嚴格要求使用鏈接參數max-chain-skip =無窮大的MM2-fast中的優化鏈接。請注意,具有參數最大鍊Skip =無窮大會導致更高的鍊式精度。因此,為了正確度驗證,MiniMAP2應以更大的Max-Chain-SKIP參數值運行。請按照以下步驟驗證MM2快速的準確性。
git clone --recursive https://github.com/bwa-mem2/mm2-fast.git mm2-fast
cd mm2-fast && make
./minimap2 -ax map-ont test/MT-human.fa test/MT-orang.fa --max-chain-skip=1000000 > mm2-fast_output
git clone https://github.com/lh3/minimap2.git -b v2.24
cd minimap2 && make
./minimap2 -ax map-ont test/MT-human.fa test/MT-orang.fa --max-chain-skip=1000000 > minimap2_output
MiniMAP2和MM2-fast產生的輸出應匹配。
diff minimap2_output mm2-fast_output > diff_result
文件diff_result
應該為空,意味著0行的差異。
使用Make的默認彙編應用了兩個優化:矢量化鏈條和序列比對。默認情況下,基於學習的索引的播種是默認情況下的,因為它需要生鏽的可用性。這是因為博學的哈希表使用了在Rust上運行的外部培訓庫。 Rust的安裝是微不足道的,請參見https://rustup.rs/,並將其路徑添加到.bashrc文件。生鏽的安裝只需幾秒鐘。以下是在mm2-fast中啟用學習的哈希表優化的步驟:
# Start by building learned hash table index for optimized seeding module
cd mm2-fast
source build_rmi.sh # #build binaries for creating index.
./create_index_rmi.sh test/MT-human.fa map-ont # #Takes two arguments: 1. path-to-reference-seq-file 2. preset.
# #For human genome, this step should take around 2-3 minutes to finish.
# Next, compile and run the mapping phase
make clean && make lhash=1
./minimap2 -ax map-ont test/MT-human.fa test/MT-orang.fa > mm2-fast-lhash_output
要編譯MM2快速,所有優化都關閉並切換回默認的minimap2,請在編譯過程中使用以下命令。這對於調試可能很有用。
make clean && make no_opt=1
# to use test data, download github repository
git clone --recursive https://github.com/bwa-mem2/mm2-fast.git
cd mm2-fast
# build Docker image
docker build -f Dockerfile -t mm2-fast:latest .
# minimap2 baseline
docker run -v $PWD /test:/test mm2-fast:latest /baseline/minimap2 -ax map-ont /test/MT-human.fa /test/MT-orang.fa > minimap2_baseline
# mm2-fast
docker run -v $PWD /test:/test mm2-fast:latest /mm2fast/minimap2 -ax map-ont /test/MT-human.fa /test/MT-orang.fa > mm2fast
# mm2-fast Advanced Options
# create index
# docker run -v $PWD/test:/test mm2-fast:latest bash /mm2-fast/create_index_rmi.sh /test/MT-human.fa <>
# <> can be map-hifi,map-ont,map-pb,asm5,asm20 depending upon your usecase
# example
docker run -v $PWD /test:/test mm2-fast:latest bash /mm2-fast/create_index_rmi.sh /test/MT-human.fa map-ont
# mapping
# docker run -v $PWD/test:/test mm2-fast:latest /lisa/mm2-fast/minimap2 -ax <> /test/MT-human.fa /test/MT-orang.fa > mm2fast_lisa
# <> can be map-hifi,map-ont,map-pb,asm5,asm20 depending upon your usecase
# example
docker run -v $PWD /test:/test mm2-fast:latest /lisa/mm2-fast/minimap2 -ax map-ont /test/MT-human.fa /test/MT-orang.fa > mm2fast_lisa
我們已經觀察到跨數據集的最多1.8倍加速度(有關更多詳細信息,請參閱本文)。例如,對於隨機採樣的100k讀取,摘自“ HG002_GM24385_1_2_2_3_GUPPY_3.6.0_0_PROM.FASTQ.GZ”,MiniMAP2需要92秒,而MM2-FAST則需要54秒才能在28 CoresIntel®Xeon®Xeon®Plininum822828280 cpus上映射54秒。我們的帶有100K讀取的採樣數據集可在此處找到。
加速MiniMAP2,用於對現代CPU的長閱讀測序應用。 Saurabh Kalikar,Chirag Jain,Vasimuddin MD,Sanchit Misra。 NAT Comput Sci 2,78-83(2022)。 https://doi.org/10.1038/s43588-022-00201-8
minimap2的原始讀數內容如下。
git clone https://github.com/lh3/minimap2
cd minimap2 && make
# long sequences against a reference genome
./minimap2 -a test/MT-human.fa test/MT-orang.fa > test.sam
# create an index first and then map
./minimap2 -x map-ont -d MT-human-ont.mmi test/MT-human.fa
./minimap2 -a MT-human-ont.mmi test/MT-orang.fa > test.sam
# use presets (no test data)
./minimap2 -ax map-pb ref.fa pacbio.fq.gz > aln.sam # PacBio CLR genomic reads
./minimap2 -ax map-ont ref.fa ont.fq.gz > aln.sam # Oxford Nanopore genomic reads
./minimap2 -ax map-hifi ref.fa pacbio-ccs.fq.gz > aln.sam # PacBio HiFi/CCS genomic reads (v2.19 or later)
./minimap2 -ax asm20 ref.fa pacbio-ccs.fq.gz > aln.sam # PacBio HiFi/CCS genomic reads (v2.18 or earlier)
./minimap2 -ax sr ref.fa read1.fa read2.fa > aln.sam # short genomic paired-end reads
./minimap2 -ax splice ref.fa rna-reads.fa > aln.sam # spliced long reads (strand unknown)
./minimap2 -ax splice -uf -k14 ref.fa reads.fa > aln.sam # noisy Nanopore Direct RNA-seq
./minimap2 -ax splice:hq -uf ref.fa query.fa > aln.sam # Final PacBio Iso-seq or traditional cDNA
./minimap2 -ax splice --junc-bed anno.bed12 ref.fa query.fa > aln.sam # prioritize on annotated junctions
./minimap2 -cx asm5 asm1.fa asm2.fa > aln.paf # intra-species asm-to-asm alignment
./minimap2 -x ava-pb reads.fa reads.fa > overlaps.paf # PacBio read overlap
./minimap2 -x ava-ont reads.fa reads.fa > overlaps.paf # Nanopore read overlap
# man page for detailed command line options
man ./minimap2.1
MiniMAP2是一個多功能序列比對程序,將DNA或mRNA序列與大型參考數據庫保持一致。典型的用例包括:(1)將PACBIO或牛津納米孔基因組讀取為人類基因組; (2)在誤差率高達〜15%之間查找長讀數之間的重疊; (3)PACBIO ISO-SEQ或NANOPORE cDNA或直接RNA的剪接意識對齊是針對參考基因組的; (4)對齊Illumina單或配對讀數; (5)組裝到組裝對齊; (6)兩個密切相關的物種之間的完全基因組對齊,差異低於15%。
對於〜10KB噪聲讀取序列,miniMAP2比主流長閱讀映射器(例如Blasr,BWA-MEM,NGMLR和GMAP)快幾十倍。它在模擬的長讀數上更準確,並產生準備下游分析的生物學上有意義的比對。對於> 100bp Illumina的簡短讀數,miniMAP2的速度是BWA-MEM和BOWTIE2的三倍,並且在模擬數據上的準確性。可從MiniMAP2紙或預印本中獲得詳細的評估。
MiniMAP2針對X86-64 CPU進行了優化。您可以通過以下方式從發布頁面中獲取預編譯的二進製文件
curl -L https://github.com/lh3/minimap2/releases/download/v2.24/minimap2-2.24_x64-linux.tar.bz2 | tar -jxvf -
./minimap2-2.24_x64-linux/minimap2
如果要從源中進行編譯,則需要安裝C編譯器,GNU Make和Zlib開發文件。然後make
“源代碼”目錄以編譯。如果您看到編譯錯誤,請嘗試make sse2only=1
禁用SSE4代碼,這將使MiniMAP2稍慢。
MiniMAP2還可以與支撐霓虹燈指令集的ARM CPU一起使用。要編譯32位ARM架構(例如ARMV7),請使用make arm_neon=1
。要用於64位ARM架構(例如ARMV8)的編譯,請使用make arm_neon=1 aarch64=1
。
MiniMAP2可以使用無處不在的SIMD(SIMDE)庫將實現移植到不同的SIMD指令集。要使用Simde編譯,請使用make -f Makefile.simde
。要編譯ARM CPU,請使用上面給出的ARM相關命令行使用Makefile.simde
。
沒有任何選項,MiniMAP2將參考數據庫和查詢序列文件作為輸入,並產生近似映射,而無需基礎級別對齊(即坐標僅是近似值,輸出中沒有雪茄),以PAFAF格式:
minimap2 ref.fa query.fq > approx-mapping.paf
您可以要求minimap2在PAF的cg
標籤上生成雪茄:
minimap2 -c ref.fa query.fq > alignment.paf
或以SAM格式輸出對齊:
minimap2 -a ref.fa query.fq > alignment.sam
MiniMAP2無縫使用GZIP'D FASTA和FASTQ格式作為輸入。您無需首先在FASTA和FASTQ之間轉換,也不需要Dempompress Gzip'd文件。
對於人類參考基因組,MiniMAP2需要幾分鐘才能在映射之前生成最小化指數供參考。為了減少索引時間,您可以選擇使用選項-D保存索引,並用minimap2命令行上的索引文件替換參考序列文件:
minimap2 -d ref.mmi ref.fa # indexing
minimap2 -a ref.mmi reads.fq > alignment.sam # alignment
重要的是,應該注意的是,一旦構建索引,索引參數,例如-k , -w , -h和-i,在映射過程中無法更改。如果要針對不同的數據類型運行miniMAP2,則可能需要保留具有不同參數的多個索引。這使MiniMAP2與BWA不同,BWA總是使用相同的索引,而不論查詢數據類型如何。
MiniMAP2用於所有應用程序使用相同的基本算法。但是,由於它支持的不同數據類型(例如,短讀和讀取mRNA讀取),需要對MiniMAP2進行調整以達到最佳性能和準確性。通常建議選擇具有選項-X的預設,該預設同時設置多個參數。默認設置與map-ont
相同。
minimap2 -ax map-pb ref.fa pacbio-reads.fq > aln.sam # for PacBio CLR reads
minimap2 -ax map-ont ref.fa ont-reads.fq > aln.sam # for Oxford Nanopore reads
map-pb
和map-ont
之間的區別在於, map-pb
使用均聚物壓縮(HPC)最小化器作為種子,而map-ont
則將普通最小化器作為種子。皇帝評估表明,在對齊PACBIO CLR讀取時,HPC最小化器會提高性能和靈敏度,但在對齊納米孔讀取時會受傷。
minimap2 -ax splice:hq -uf ref.fa iso-seq.fq > aln.sam # PacBio Iso-seq/traditional cDNA
minimap2 -ax splice ref.fa nanopore-cdna.fa > aln.sam # Nanopore 2D cDNA-seq
minimap2 -ax splice -uf -k14 ref.fa direct-rna.fq > aln.sam # Nanopore Direct RNA-seq
minimap2 -ax splice --splice-flank=no SIRV.fa SIRV-seq.fa # mapping against SIRV control
有不同的長讀RNA-seq技術,包括tranditional的全長cDNA,EST,PACBIO ISO-SEQ,Nanopore 2D cDNA-Seq和Direct RNA-Seq。它們產生不同質量和特性的數據。默認情況下, -x splice
假定相對於轉錄鏈的讀取方向是未知的。如果可能的話,它會嘗試兩輪對齊來推斷方向並將鏈寫入ts
SAM/PAF標籤。對於ISO-Seq,直接RNA-Seq和Tranditional全長cDNA,需要應用-uf
來強制minimap2僅考慮前向轉錄鏈。這加快了對齊的速度,並略有提高準確性。對於嘈雜的納米孔直接RNA-Seq讀取,建議使用較小的K-MER尺寸來提高對第一或最後一個外顯子的敏感性。
MiniMAP2對最高得分子段的分數對齊,不包括內含子,並將最佳對齊標記為SAM中的主要對齊。當剪接基因也具有未繪製的假基因時,MiniMAP2並不是故意偏愛剪接的對準,儘管實際上它更常見地將剪接的對準標記為主要的對準。默認情況下,MiniMAP2最多輸出五個二級比對(即在RNA-Seq映射的背景下可能的假基因)。可以用選項-N調節。
對於長RNA -seq讀取,MiniMAP2可能會產生可能由基因融合/結構變化引起的嵌合比對,或者由內含子長於最大內含子長度-g (默認情況下為200K)。目前,不建議施加過度-g,因為這會減慢minimap2,有時會導致虛假對準。
值得注意的是,默認情況下-x splice
優先於GT [a/g] .. [c/t] ag在gt [c/t]中。考慮一個額外的基礎,可以提高噪聲讀取的連接精度,但在與廣泛使用的SIRV控制數據對齊時降低了準確性。這是因為SIRV不尊重進化保守的剪接信號。如果您正在學習SIRV,則可以應用--splice-flank=no
srimap2僅Minimap2型gt..Ag,而忽略了額外的基礎。
自v2.17以來,MiniMAP2可以選擇將帶註釋的基因作為輸入並優先考慮帶註釋的剪接連接。要使用此功能,您可以
paftools.js gff2bed anno.gff > anno.bed
minimap2 -ax splice --junc-bed anno.bed ref.fa query.fa > aln.sam
在這裡, anno.gff
是GTF或GFF3格式中的基因註釋( gff2bed
自動測試格式)。 gff2bed
的輸出為12列床格式或Bed12格式。使用--junc-bed
選項,MiniMAP2如果對齊連接點與註釋中的交界處相匹配,則添加了獎勵分數(由--junc-bonus
調整)。選項--junc-bed
還搭配5張床,包括Strand Field。在這種情況下,每行都表示定向交界處。
minimap2 -x ava-pb reads.fq reads.fq > ovlp.paf # PacBio CLR read overlap
minimap2 -x ava-ont reads.fq reads.fq > ovlp.paf # Oxford Nanopore read overlap
同樣, ava-pb
使用HPC最小化器,而ava-ont
則使用普通最小化器。通常不建議在重疊模式下執行基礎級別對齊,因為它很慢並且可能產生假陽性重疊。但是,如果不考慮性能,您可以嘗試添加-a
或-c
。
minimap2 -ax sr ref.fa reads-se.fq > aln.sam # single-end alignment
minimap2 -ax sr ref.fa read1.fq read2.fq > aln.sam # paired-end alignment
minimap2 -ax sr ref.fa reads-interleaved.fq > aln.sam # paired-end alignment
指定兩個讀取文件時,MiniMAP2依次從每個文件中讀取並將它們合併到內部交織的流中。如果兩個讀數在輸入流中相鄰,並且具有相同的名稱(如果存在/[0-9]
後綴修剪),則認為兩個讀數是配對的。單端和配對讀數可以混合。
MiniMAP2與簡短的剪接讀數無法正常工作。有許多功能強大的RNA-seq映射器可用於簡短讀取。
minimap2 -ax asm5 ref.fa asm.fa > aln.sam # assembly to assembly/ref alignment
對於跨物種的全基因組比對,需要根據序列差異來調整評分系統。
由於設計缺陷,BAM無法與65535操作(Sam和Cram Work)的雪茄弦一起使用。但是,對於超長的納米孔讀取,miniMAP2可能會使讀取鹼基的約1%與長雪茄的能力超出BAM的能力。如果您將這樣的SAM/CRAM轉換為BAM,Picard和最近的Samtools將丟失並流產。較舊的Samtool和其他工具可能會造成損壞的BAM。
為了避免此問題,您可以在miniMAP2命令行中添加選項-L
。此選項將一支長雪茄移到CG
標籤上,並在Sam雪茄柱上留下完全夾的雪茄。當前不閱讀雪茄的工具(例如合併和分類)仍然可以與此類BAM記錄一起使用;閱讀雪茄的工具將有效地忽略這些記錄。已經決定,未來的工具將無縫識別選項-L
生成的長煙記錄。
TL; DR :如果您使用超長讀取並使用僅處理BAM文件的工具,請添加選項-L
。
cs
SAM/PAF標籤編碼不匹配和indels的基礎。它匹配正則表達式/(:[0-9]+|*[az][az]|[=+-][A-Za-z]+)+/
。像雪茄一樣, cs
包括一系列操作。每個領導角色指定操作;以下序列是該操作中涉及的序列。
cs
標籤由命令行選項啟用--cs
啟用。例如,以下對齊方式:
CGATCGATAAATAGAGTAG---GAATAGCA
|| |||| |||||||||| |||| || |
CGATCG---AATAGAGTAGGTCGAATtGCA
表示為:6-ata:10+gtc:4*at:3
,其中:[0-9]+
代表相同的塊, -ata
代表刪除, +gtc
a插入和*at
指示參考基礎a
被替換為帶有查詢基礎t
。它類似於MD
SAM標籤,但是獨立的,更容易解析。
如果使用--cs=long
,則cs
字符串還包含對齊中的相同序列。上面的示例將變為=CGATCG-ata=AATAGAGTAG+gtc=GAAT*at=GCA
。 cs
的長形式編碼一個字符串中的參考序列和查詢序列。 cs
標籤還編碼內含子位置和剪接信號(有關詳細信息,請參見Minimap2 manpage)。
MiniMAP2還帶有(Java)腳本paftools.js,可處理PAF格式的對齊。它調用從組裝到引用對齊的變體,基於對齊方式升級床文件,在格式之間進行轉換,並為各種評估提供實用程序。有關詳細信息,請參閱MISC/readme.md。
在下文中,miniMAP2命令行選項提前突出顯示,並以粗體突出顯示。該描述可能有助於調整MiniMAP2參數。
讀取-i [= 4G ]參考基礎,提取( -k , -w )-Minimizers,並將它們索引在哈希表中。
讀取-k [= 200m ]查詢基礎。對於每個查詢序列,請步驟3至7:
對於查詢上的每個( -k , -w )-minimizer,請檢查參考索引。如果最常見的參考最小化器不在頂部-f [= 2e -4 ]中,請在參考中收集其出現,稱為種子。
通過參考中的位置對種子進行排序。用動態編程鏈接它們。每個鏈代表一個潛在的映射。要閱讀重疊,請報告所有鏈條,然後轉到第8步。對於參考映射,請步驟5至7:
令P為一組主映射,最初是一個空集。對於從最佳到最差的每個鏈,根據其鏈接分數:如果在查詢上,鏈條與p中的鏈條重疊- 掩碼級別[= 0.5 ]或較短鏈的較高分數,將鏈條標記為鏈條為繼發於P中的鏈;否則,將鏈條添加到p 。
保留所有主要映射。如果它們的鏈接得分高於其相應的主映射的-p [= 0.8 ],則還保留至-n [= 5 ]頂級次級映射。
如果要求對齊,請過濾出內部種子,如果它有可能導致長插入和長時間的刪除。從最左邊的種子延伸。在內部種子之間執行全球對齊。如果沿全局對齊的累積得分下降-z [= 400 ],則將鏈分開,而無視長間隙。從最正確的種子延伸。輸出鍊及其對齊。
如果輸入中有更多查詢序列,請轉到步驟2,直到不再剩下查詢為止。
如果有更多參考序列,請從開始重新打開查詢文件,然後轉到步驟1;否則停止。
manpage minimap2.1提供了MiniMAP2命令行選項和可選標籤的詳細說明。 FAQ頁面回答了幾個常見問題。如果您遇到錯誤或有其他問題或請求,則可以在問題頁面上提出問題。暫時沒有特定的郵件列表。
如果您在工作中使用minimap2,請引用:
Li,H。(2018)。 Minimap2:核苷酸序列的成對比對。生物信息學, 34 :3094-3100。 doi:10.1093/bioinformatics/bty191
和/或:
Li,H。(2021)。提高MiniMAP2對齊精度的新策略。生物信息學, 37 :4572-4574。 doi:10.1093/bioinformatics/btab705
minimap2不僅是命令行工具,而且是編程庫。它提供了C API來構建/負載索引並與索引對齊序列。文件示例。c演示了C API的典型用途。標題文件minimap.h提供了更詳細的API文檔。 MiniMAP2旨在將API保持在此標頭穩定中。文件mmmpriv.h包含可能經常進行更改的其他私有API。
該存儲庫還提供了與C API子集的Python結合。文件python/readme.rst提供完整的文檔; Python/minimap2.py顯示了一個示例。 Python擴展名Mappy也可以通過PIPI通過pip install mappy
或Bioconda通過conda install -c bioconda mappy
獲得。
MiniMAP2可能會通過長的低複雜性區域產生次優的比對,其中種子位置可能是次優的。這不應該是一個大問題,因為即使是最佳的一致性也可能是錯誤的。
MiniMAP2需要有關X86 CPU的SSE2說明或ARM CPU上的霓虹燈。可以添加非SIMD支持,但它會使MiniMAP2速度較慢幾次。
MiniMAP2不適用於一個查詢或數據庫序列約20億個或更長的基礎(準確地說是2,147,483,647)。所有序列的總長度都可以超過此閾值。
minimap2經常錯過小外顯子。