针对三代测序的比对工具,在原程序基础之上,做一些并行优化
 
 
 
 
 
 
Go to file
Heng Li 1a7d782131 r273: cdna mapping mode for testing
Differences from the typical mapping mode:

* banded alignment disabled
* log gap cost during chaining
* zero long-gap extension during alignment
* up to 100kb (by default) reference gap
* bad seeding not filtered (to tune later)
2017-08-08 11:31:49 -04:00
misc sim-eval.js to support mason2 read names and SAM 2017-08-07 13:28:33 -04:00
test added test data 2017-07-04 10:56:48 -04:00
tex command lines used for read simulation 2017-08-07 13:41:40 -04:00
.gitignore make sdust working with kalloc 2017-04-06 15:51:36 -04:00
.travis.yml added basic travis CI 2017-08-04 15:33:40 -04:00
LICENSE.txt added license 2017-07-01 11:39:19 -04:00
Makefile r229: a new way to prevent out-of-band backtrack 2017-07-29 23:52:30 -04:00
NEWS.md Release minimap2-2.0rc1-r232 2017-07-30 14:32:40 -04:00
README.md Added citation. 2017-08-06 21:30:47 -04:00
align.c r273: cdna mapping mode for testing 2017-08-08 11:31:49 -04:00
bseq.c r188: renamed bseq* to mm_bseq* 2017-07-19 09:26:46 -04:00
bseq.h r188: renamed bseq* to mm_bseq* 2017-07-19 09:26:46 -04:00
chain.c r273: cdna mapping mode for testing 2017-08-08 11:31:49 -04:00
example.c migrated minimap/example.c here. 2017-07-18 14:43:43 -04:00
format.c r238: bugfix to cs - rev sequence not complemented 2017-08-01 10:33:21 -04:00
hit.c r224: inversion alignment around Z-drop break 2017-07-29 13:09:10 -04:00
index.c r197: allocate index seq names from kalloc 2017-07-24 19:36:05 -04:00
kalloc.c number of allocated units must be an even number 2017-06-26 23:15:30 -04:00
kalloc.h Homopolymer-compressed k-mer sketch 2017-04-06 15:37:34 -04:00
kdq.h make sdust working with kalloc 2017-04-06 15:51:36 -04:00
khash.h index can be compiled; not tested yet 2017-04-07 15:30:30 -04:00
kseq.h Homopolymer-compressed k-mer sketch 2017-04-06 15:37:34 -04:00
ksort.h chaining 2017-05-03 20:47:29 +08:00
ksw2.h r229: a new way to prevent out-of-band backtrack 2017-07-29 23:52:30 -04:00
ksw2_extd2_sse.c avoid wasted memory allocation for backtrack 2017-08-08 11:29:46 -04:00
ksw2_extz2_sse.c avoid wasted memory allocation for backtrack 2017-08-08 11:29:46 -04:00
ksw2_ll_sse.c r230: code formatting changes only 2017-07-30 12:31:40 -04:00
kthread.c index can be compiled; not tested yet 2017-04-07 15:30:30 -04:00
kthread.h index can be compiled; not tested yet 2017-04-07 15:30:30 -04:00
kvec.h Homopolymer-compressed k-mer sketch 2017-04-06 15:37:34 -04:00
main.c r273: cdna mapping mode for testing 2017-08-08 11:31:49 -04:00
map.c r273: cdna mapping mode for testing 2017-08-08 11:31:49 -04:00
minimap.h r273: cdna mapping mode for testing 2017-08-08 11:31:49 -04:00
minimap2.1 Release minimap2-2.0rc1-r232 2017-07-30 14:32:40 -04:00
misc.c r149: introduced debugging flags on CLI 2017-07-03 11:02:32 -04:00
mmpriv.h r273: cdna mapping mode for testing 2017-08-08 11:31:49 -04:00
sdust.c fixed memory leaks 2017-06-06 21:45:55 -04:00
sdust.h r188: renamed bseq* to mm_bseq* 2017-07-19 09:26:46 -04:00
sketch.c wrong HPC 2017-05-04 17:45:19 +08:00

README.md

Getting Started

git clone https://github.com/lh3/minimap2
cd minimap2 && make
# long reads against a reference genome
./minimap2 -ax map10k test/MT-human.fa test/MT-orang.fa > test.sam
# create an index first and then map
./minimap2 -x map10k -d MT-human.mmi test/MT-human.fa
./minimap2 -ax map10k MT-human.mmi test/MT-orang.fa > test.sam
# long-read overlap (no test data)
./minimap2 -x ava-pb your-reads.fa your-reads.fa > overlaps.paf
# man page
man ./minimap2.1

Introduction

Minimap2 is a fast sequence mapping and alignment program that can find overlaps between long noisy reads, or map long reads or their assemblies to a reference genome optionally with detailed alignment (i.e. CIGAR). At present, it works efficiently with query sequences from a few kilobases to ~100 megabases in length at an error rate ~15%. Minimap2 outputs in the PAF or the SAM format. On limited test data sets, minimap2 is over 20 times faster than most other long-read aligners. It will replace BWA-MEM for long reads and contig alignment.

Minimap2 is the successor of minimap. It uses a similar minimizer-based indexing and seeding algorithm, and improves the original minimap with homopolyer-compressed k-mers (see also SMARTdenovo and longISLND), better chaining and the ability to produce CIGAR with fast extension alignment (see also libgaba and ksw2) and piece-wise affine gap cost.

If you use minimap2 in your work, please consider to cite:

Li, H. (2017). Minimap2: fast pairwise alignment for long DNA sequences. arXiv:1708.01492.

Installation

For modern x86-64 CPUs, just type make in the source code directory. This will compile a binary minimap2 which you can copy to your desired location. If you see compilation errors, try make sse2only=1 to disable SSE4. Minimap2 will run a little slower. At present, minimap2 does not work with non-x86 CPUs or ancient CPUs that do not support SSE2. SSE2 is critical to the performance of minimap2.

Algorithm Overview

In the following, minimap2 command line options have a dash ahead and are highlighted in bold.

  1. Read -I [=4G] reference bases, extract (-k,-w)-minimizers and index them in a hash table.

  2. Read -K [=200M] query bases. For each query sequence, do step 3 through 7:

  3. For each (-k,-w)-minimizer on the query, check against the reference index. If a reference minimizer is not among the top -f [=2e-4] most frequent, collect its the occurrences in the reference, which are called seeds.

  4. Sort seeds by position in the reference. Chain them with dynamic programming. Each chain represents a potential mapping. For read overlapping, report all chains and then go to step 8. For reference mapping, do step 5 through 7:

  5. Let P be the set of primary mappings, which is an empty set initially. For each chain from the best to the worst according to their chaining scores: if on the query, the chain overlaps with a chain in P by --mask-level [=0.5] or higher fraction of the shorter chain, mark the chain as secondary to the chain in P; otherwise, add the chain to P.

  6. Retain all primary mappings. Also retain up to -N [=5] top secondary mappings if their chaining scores are higher than -p [=0.8] of their corresponding primary mappings.

  7. If alignment is requested, filter out an internal seed if it potentially leads to both a long insertion and a long deletion. Extend from the left-most seed. Perform global alignments between internal seeds. Split the chain if the accumulative score along the global alignment drops by -z [=400], disregarding long gaps. Extend from the right-most seed. Output chains and their alignments.

  8. If there are more query sequences in the input, go to step 2 until no more queries are left.

  9. If there are more reference sequences, reopen the query file from the start and go to step 1; otherwise stop.

Limitations

  • Minimap2 may produce suboptimal alignments through long low-complexity regions where seed positions may be suboptimal. This should not be a big concern because even the optimal alignment may be wrong in such regions.

  • Minimap2 does not work well with Illumina short reads as of now.

  • Minimap2 requires SSE2 instructions to compile. It is possible to add non-SSE2 support, but it would make minimap2 slower by several times.

In general, minimap2 is a young project with most code written since June, 2017. It may have bugs and room for improvements. Bug reports and suggestions are warmly welcomed.