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。 They produce data of varying quality and properties. By default, -x splice
assumes the read orientation relative to the transcript strand is unknown. It tries two rounds of alignment to infer the orientation and write the strand to the ts
SAM/PAF tag if possible.对于ISO-Seq,直接RNA-Seq和Tranditional全长cDNA,需要应用-uf
来强制minimap2仅考虑前向转录链。 This speeds up alignment with slight improvement to accuracy. For noisy Nanopore Direct RNA-seq reads, it is recommended to use a smaller k-mer size for increased sensitivity to the first or the last exons.
Minimap2 rates an alignment by the score of the max-scoring sub-segment, excluding introns, and marks the best alignment as primary in 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 ]中,请在参考中收集其出现,称为种子。
通过参考中的位置对种子进行排序。用动态编程链接它们。每个链代表一个潜在的映射。 For read overlapping, report all chains and then go to step 8. For reference mapping, do step 5 through 7:
令P为一组主要映射,最初是一个空集。对于从最佳到最差的每个链,根据其链接分数:如果在查询上,链条与p中的链条重叠- 掩码级别[= 0.5 ]或较短链的较高分数,将链条标记为链条为继发于P中的链; otherwise, add the chain to 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经常错过小外显子。