minimap2 0.2.30.3 → 1.2.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +48 -63
  3. data/ext/minimap2/Makefile +1 -1
  4. data/ext/minimap2/format.c +12 -2
  5. data/ext/minimap2/hit.c +19 -8
  6. data/ext/minimap2/ksw2_ll_sse.c +2 -2
  7. data/ext/minimap2/minimap.h +2 -1
  8. data/ext/minimap2/pe.c +7 -2
  9. data/ext/ruby_minimap2/extconf.rb +47 -0
  10. data/ext/ruby_minimap2/native_main.c +15 -0
  11. data/ext/ruby_minimap2/ruby_minimap2.c +1134 -0
  12. data/lib/minimap2/aligner.rb +66 -374
  13. data/lib/minimap2/alignment.rb +22 -11
  14. data/lib/minimap2/version.rb +2 -1
  15. data/lib/minimap2.rb +39 -110
  16. metadata +8 -89
  17. data/ext/Rakefile +0 -60
  18. data/ext/cmappy/cmappy.c +0 -134
  19. data/ext/cmappy/cmappy.h +0 -46
  20. data/ext/minimap2/FAQ.md +0 -46
  21. data/ext/minimap2/MANIFEST.in +0 -10
  22. data/ext/minimap2/Makefile.simde +0 -97
  23. data/ext/minimap2/NEWS.md +0 -989
  24. data/ext/minimap2/README.md +0 -428
  25. data/ext/minimap2/code_of_conduct.md +0 -30
  26. data/ext/minimap2/cookbook.md +0 -243
  27. data/ext/minimap2/minimap2.1 +0 -844
  28. data/ext/minimap2/misc/README.md +0 -180
  29. data/ext/minimap2/misc/pafcluster.js +0 -241
  30. data/ext/minimap2/misc/paftools.js +0 -3734
  31. data/ext/minimap2/pyproject.toml +0 -2
  32. data/ext/minimap2/python/README.rst +0 -198
  33. data/ext/minimap2/python/cmappy.h +0 -152
  34. data/ext/minimap2/python/cmappy.pxd +0 -156
  35. data/ext/minimap2/python/mappy.pyx +0 -289
  36. data/ext/minimap2/python/minimap2.py +0 -41
  37. data/ext/minimap2/setup.py +0 -55
  38. data/ext/minimap2/test/MT-human.fa +0 -278
  39. data/ext/minimap2/test/MT-orang.fa +0 -276
  40. data/ext/minimap2/test/q-inv.fa +0 -4
  41. data/ext/minimap2/test/q2.fa +0 -2
  42. data/ext/minimap2/test/t-inv.fa +0 -127
  43. data/ext/minimap2/test/t2.fa +0 -2
  44. data/ext/minimap2/test/x3s-aln.txt +0 -5
  45. data/ext/minimap2/test/x3s-qry.fa +0 -5
  46. data/ext/minimap2/test/x3s-ref.fa +0 -10
  47. data/ext/minimap2/tex/Makefile +0 -21
  48. data/ext/minimap2/tex/bioinfo.cls +0 -930
  49. data/ext/minimap2/tex/blasr-mc.eval +0 -17
  50. data/ext/minimap2/tex/bowtie2-s3.sam.eval +0 -28
  51. data/ext/minimap2/tex/bwa-s3.sam.eval +0 -52
  52. data/ext/minimap2/tex/bwa.eval +0 -55
  53. data/ext/minimap2/tex/eval2roc.pl +0 -33
  54. data/ext/minimap2/tex/graphmap.eval +0 -4
  55. data/ext/minimap2/tex/hs38-simu.sh +0 -10
  56. data/ext/minimap2/tex/minialign.eval +0 -49
  57. data/ext/minimap2/tex/minimap2.bib +0 -460
  58. data/ext/minimap2/tex/minimap2.tex +0 -724
  59. data/ext/minimap2/tex/mm2-s3.sam.eval +0 -62
  60. data/ext/minimap2/tex/mm2-update.tex +0 -240
  61. data/ext/minimap2/tex/mm2.approx.eval +0 -12
  62. data/ext/minimap2/tex/mm2.eval +0 -13
  63. data/ext/minimap2/tex/natbib.bst +0 -1288
  64. data/ext/minimap2/tex/natbib.sty +0 -803
  65. data/ext/minimap2/tex/ngmlr.eval +0 -38
  66. data/ext/minimap2/tex/roc.gp +0 -60
  67. data/ext/minimap2/tex/snap-s3.sam.eval +0 -62
  68. data/ext/minimap2.patch +0 -19
  69. data/lib/minimap2/ffi/constants.rb +0 -267
  70. data/lib/minimap2/ffi/functions.rb +0 -239
  71. data/lib/minimap2/ffi/mappy.rb +0 -104
  72. data/lib/minimap2/ffi.rb +0 -27
@@ -1,2 +0,0 @@
1
- [build-system]
2
- requires = ["setuptools", "wheel", "Cython"]
@@ -1,198 +0,0 @@
1
- ==============================
2
- Mappy: Minimap2 Python Binding
3
- ==============================
4
-
5
- Mappy provides a convenient interface to `minimap2
6
- <https://github.com/lh3/minimap2>`_, a fast and accurate C program to align
7
- genomic and transcribe nucleotide sequences.
8
-
9
- Installation
10
- ------------
11
-
12
- Mappy depends on `zlib <http://zlib.net>`_. It can be installed with `pip
13
- <https://en.wikipedia.org/wiki/Pip_(package_manager)>`_:
14
-
15
- .. code:: shell
16
-
17
- pip install --user mappy
18
-
19
- or from the minimap2 github repo (`Cython <http://cython.org>`_ required):
20
-
21
- .. code:: shell
22
-
23
- git clone https://github.com/lh3/minimap2
24
- cd minimap2
25
- python setup.py install
26
-
27
- Usage
28
- -----
29
-
30
- The following Python script demonstrates the key functionality of mappy:
31
-
32
- .. code:: python
33
-
34
- import mappy as mp
35
- a = mp.Aligner("test/MT-human.fa") # load or build index
36
- if not a: raise Exception("ERROR: failed to load/build index")
37
- s = a.seq("MT_human", 100, 200) # retrieve a subsequence from the index
38
- print(mp.revcomp(s)) # reverse complement
39
- for name, seq, qual in mp.fastx_read("test/MT-orang.fa"): # read a fasta/q sequence
40
- for hit in a.map(seq): # traverse alignments
41
- print("{}\t{}\t{}\t{}".format(hit.ctg, hit.r_st, hit.r_en, hit.cigar_str))
42
-
43
- APIs
44
- ----
45
-
46
- Mappy implements two classes and two global function.
47
-
48
- Class mappy.Aligner
49
- ~~~~~~~~~~~~~~~~~~~
50
-
51
- .. code:: python
52
-
53
- mappy.Aligner(fn_idx_in=None, preset=None, ...)
54
-
55
- This constructor accepts the following arguments:
56
-
57
- * **fn_idx_in**: index or sequence file name. Minimap2 automatically tests the
58
- file type. If a sequence file is provided, minimap2 builds an index. The
59
- sequence file can be optionally gzip'd. This option has no effect if **seq**
60
- is set.
61
-
62
- * **seq**: a single sequence to index. The sequence name will be set to
63
- :code:`N/A`.
64
-
65
- * **preset**: minimap2 preset. Currently, minimap2 supports the following
66
- presets: **sr** for single-end short reads; **map-pb** for PacBio
67
- read-to-reference mapping; **map-ont** for Oxford Nanopore read mapping;
68
- **splice** for long-read spliced alignment; **asm5** for assembly-to-assembly
69
- alignment; **asm10** for full genome alignment of closely related species. Note
70
- that the Python module does not support all-vs-all read overlapping.
71
-
72
- * **k**: k-mer length, no larger than 28
73
-
74
- * **w**: minimizer window size, no larger than 255
75
-
76
- * **min_cnt**: mininum number of minimizers on a chain
77
-
78
- * **min_chain_score**: minimum chaing score
79
-
80
- * **bw**: chaining and alignment band width (initial chaining and extension)
81
-
82
- * **bw_long**: chaining and alignment band width (RMQ-based rechaining and closing gaps)
83
-
84
- * **best_n**: max number of alignments to return
85
-
86
- * **n_threads**: number of indexing threads; 3 by default
87
-
88
- * **extra_flags**: additional flags defined in minimap.h
89
-
90
- * **fn_idx_out**: name of file to which the index is written. This parameter
91
- has no effect if **seq** is set.
92
-
93
- * **scoring**: scoring system. It is a tuple/list consisting of 4, 6 or 7
94
- positive integers. The first 4 elements specify match scoring, mismatch
95
- penalty, gap open and gap extension penalty. The 5th and 6th elements, if
96
- present, set long-gap open and long-gap extension penalty. The 7th sets a
97
- mismatch penalty involving ambiguous bases.
98
-
99
- .. code:: python
100
-
101
- mappy.Aligner.map(seq, seq2=None, cs=False, MD=False)
102
-
103
- This method aligns :code:`seq` against the index. It is a generator, *yielding*
104
- a series of :code:`mappy.Alignment` objects. If :code:`seq2` is present, mappy
105
- performs paired-end alignment, assuming the two ends are in the FR orientation.
106
- Alignments of the two ends can be distinguished by the :code:`read_num` field
107
- (see Class mappy.Alignment below). Argument :code:`cs` asks mappy to generate
108
- the :code:`cs` tag; :code:`MD` is similar. These two arguments might slightly
109
- degrade performance and are not enabled by default.
110
-
111
- .. code:: python
112
-
113
- mappy.Aligner.seq(name, start=0, end=0x7fffffff)
114
-
115
- This method retrieves a (sub)sequence from the index and returns it as a Python
116
- string. :code:`None` is returned if :code:`name` is not present in the index or
117
- the start/end coordinates are invalid.
118
-
119
- .. code:: python
120
-
121
- mappy.Aligner.seq_names
122
-
123
- This property gives the array of sequence names in the index.
124
-
125
- Class mappy.Alignment
126
- ~~~~~~~~~~~~~~~~~~~~~
127
-
128
- This class describes an alignment. An object of this class has the following
129
- properties:
130
-
131
- * **ctg**: name of the reference sequence the query is mapped to
132
-
133
- * **ctg_len**: total length of the reference sequence
134
-
135
- * **r_st** and **r_en**: start and end positions on the reference
136
-
137
- * **q_st** and **q_en**: start and end positions on the query
138
-
139
- * **strand**: +1 if on the forward strand; -1 if on the reverse strand
140
-
141
- * **mapq**: mapping quality
142
-
143
- * **blen**: length of the alignment, including both alignment matches and gaps
144
- but excluding ambiguous bases.
145
-
146
- * **mlen**: length of the matching bases in the alignment, excluding ambiguous
147
- base matches.
148
-
149
- * **NM**: number of mismatches, gaps and ambiguous positions in the alignment
150
-
151
- * **trans_strand**: transcript strand. +1 if on the forward strand; -1 if on the
152
- reverse strand; 0 if unknown
153
-
154
- * **is_primary**: if the alignment is primary (typically the best and the first
155
- to generate)
156
-
157
- * **read_num**: read number that the alignment corresponds to; 1 for the first
158
- read and 2 for the second read
159
-
160
- * **cigar_str**: CIGAR string
161
-
162
- * **cigar**: CIGAR returned as an array of shape :code:`(n_cigar,2)`. The two
163
- numbers give the length and the operator of each CIGAR operation.
164
-
165
- * **MD**: the :code:`MD` tag as in the SAM format. It is an empty string unless
166
- the :code:`MD` argument is applied when calling :code:`mappy.Aligner.map()`.
167
-
168
- * **cs**: the :code:`cs` tag.
169
-
170
- An :code:`Alignment` object can be converted to a string with :code:`str()` in
171
- the following format:
172
-
173
- ::
174
-
175
- q_st q_en strand ctg ctg_len r_st r_en mlen blen mapq cg:Z:cigar_str
176
-
177
- It is effectively the PAF format without the QueryName and QueryLength columns
178
- (the first two columns in PAF).
179
-
180
- Miscellaneous Functions
181
- ~~~~~~~~~~~~~~~~~~~~~~~
182
-
183
- .. code:: python
184
-
185
- mappy.fastx_read(fn, read_comment=False)
186
-
187
- This generator function opens a FASTA/FASTQ file and *yields* a
188
- :code:`(name,seq,qual)` tuple for each sequence entry. The input file may be
189
- optionally gzip'd. If :code:`read_comment` is True, this generator yields
190
- a :code:`(name,seq,qual,comment)` tuple instead.
191
-
192
- .. code:: python
193
-
194
- mappy.revcomp(seq)
195
-
196
- Return the reverse complement of DNA string :code:`seq`. This function
197
- recognizes IUB code and preserves the letter cases. Uracil :code:`U` is
198
- complemented to :code:`A`.
@@ -1,152 +0,0 @@
1
- #ifndef CMAPPY_H
2
- #define CMAPPY_H
3
-
4
- #include <stdlib.h>
5
- #include <string.h>
6
- #include <zlib.h>
7
- #include "minimap.h"
8
- #include "kseq.h"
9
- KSEQ_DECLARE(gzFile)
10
-
11
- typedef struct {
12
- const char *ctg;
13
- int32_t ctg_start, ctg_end;
14
- int32_t qry_start, qry_end;
15
- int32_t blen, mlen, NM, ctg_len;
16
- uint8_t mapq, is_primary;
17
- int8_t strand, trans_strand;
18
- int32_t seg_id;
19
- int32_t n_cigar32;
20
- uint32_t *cigar32;
21
- } mm_hitpy_t;
22
-
23
- static inline void mm_reg2hitpy(const mm_idx_t *mi, mm_reg1_t *r, mm_hitpy_t *h)
24
- {
25
- h->ctg = mi->seq[r->rid].name;
26
- h->ctg_len = mi->seq[r->rid].len;
27
- h->ctg_start = r->rs, h->ctg_end = r->re;
28
- h->qry_start = r->qs, h->qry_end = r->qe;
29
- h->strand = r->rev? -1 : 1;
30
- h->mapq = r->mapq;
31
- h->mlen = r->mlen;
32
- h->blen = r->blen;
33
- h->NM = r->blen - r->mlen + r->p->n_ambi;
34
- h->trans_strand = r->p->trans_strand == 1? 1 : r->p->trans_strand == 2? -1 : 0;
35
- h->is_primary = (r->id == r->parent);
36
- h->seg_id = r->seg_id;
37
- h->n_cigar32 = r->p->n_cigar;
38
- h->cigar32 = r->p->cigar;
39
- }
40
-
41
- static inline void mm_free_reg1(mm_reg1_t *r)
42
- {
43
- free(r->p);
44
- }
45
-
46
- static inline kseq_t *mm_fastx_open(const char *fn)
47
- {
48
- gzFile fp;
49
- fp = fn && strcmp(fn, "-") != 0? gzopen(fn, "r") : gzdopen(fileno(stdin), "r");
50
- return kseq_init(fp);
51
- }
52
-
53
- static inline void mm_fastx_close(kseq_t *ks)
54
- {
55
- gzFile fp;
56
- fp = ks->f->f;
57
- kseq_destroy(ks);
58
- gzclose(fp);
59
- }
60
-
61
- static inline int mm_verbose_level(int v)
62
- {
63
- if (v >= 0) mm_verbose = v;
64
- return mm_verbose;
65
- }
66
-
67
- static inline void mm_reset_timer(void)
68
- {
69
- extern double realtime(void);
70
- mm_realtime0 = realtime();
71
- }
72
-
73
- extern unsigned char seq_comp_table[256];
74
- static inline mm_reg1_t *mm_map_aux(const mm_idx_t *mi, const char* seqname, const char *seq1, const char *seq2, int *n_regs, mm_tbuf_t *b, const mm_mapopt_t *opt)
75
- {
76
- mm_reg1_t *r;
77
-
78
- Py_BEGIN_ALLOW_THREADS
79
- if (seq2 == 0) {
80
- r = mm_map(mi, strlen(seq1), seq1, n_regs, b, opt, seqname);
81
- } else {
82
- int _n_regs[2];
83
- mm_reg1_t *regs[2];
84
- char *seq[2];
85
- int i, len[2];
86
-
87
- len[0] = strlen(seq1);
88
- len[1] = strlen(seq2);
89
- seq[0] = (char*)seq1;
90
- seq[1] = strdup(seq2);
91
- for (i = 0; i < len[1]>>1; ++i) {
92
- int t = seq[1][len[1] - i - 1];
93
- seq[1][len[1] - i - 1] = seq_comp_table[(uint8_t)seq[1][i]];
94
- seq[1][i] = seq_comp_table[t];
95
- }
96
- if (len[1]&1) seq[1][len[1]>>1] = seq_comp_table[(uint8_t)seq[1][len[1]>>1]];
97
- mm_map_frag(mi, 2, len, (const char**)seq, _n_regs, regs, b, opt, seqname);
98
- for (i = 0; i < _n_regs[1]; ++i)
99
- regs[1][i].rev = !regs[1][i].rev;
100
- *n_regs = _n_regs[0] + _n_regs[1];
101
- regs[0] = (mm_reg1_t*)realloc(regs[0], sizeof(mm_reg1_t) * (*n_regs));
102
- memcpy(&regs[0][_n_regs[0]], regs[1], _n_regs[1] * sizeof(mm_reg1_t));
103
- free(regs[1]);
104
- r = regs[0];
105
- }
106
- Py_END_ALLOW_THREADS
107
-
108
- return r;
109
- }
110
-
111
- static inline char *mappy_revcomp(int len, const uint8_t *seq)
112
- {
113
- int i;
114
- char *rev;
115
- rev = (char*)malloc(len + 1);
116
- for (i = 0; i < len; ++i)
117
- rev[len - i - 1] = seq_comp_table[seq[i]];
118
- rev[len] = 0;
119
- return rev;
120
- }
121
-
122
- static char *mappy_fetch_seq(const mm_idx_t *mi, const char *name, int st, int en, int *len)
123
- {
124
- int i, rid;
125
- char *s;
126
- *len = 0;
127
- rid = mm_idx_name2id(mi, name);
128
- if (rid < 0) return 0;
129
- if ((uint32_t)st >= mi->seq[rid].len || st >= en) return 0;
130
- if (en < 0 || (uint32_t)en > mi->seq[rid].len)
131
- en = mi->seq[rid].len;
132
- s = (char*)malloc(en - st + 1);
133
- *len = mm_idx_getseq(mi, rid, st, en, (uint8_t*)s);
134
- for (i = 0; i < *len; ++i)
135
- s[i] = "ACGTN"[(uint8_t)s[i]];
136
- s[*len] = 0;
137
- return s;
138
- }
139
-
140
- static mm_idx_t *mappy_idx_seq(int w, int k, int is_hpc, int bucket_bits, const char *seq, int len)
141
- {
142
- const char *fake_name = "N/A";
143
- char *s;
144
- mm_idx_t *mi;
145
- s = (char*)calloc(len + 1, 1);
146
- memcpy(s, seq, len);
147
- mi = mm_idx_str(w, k, is_hpc, bucket_bits, 1, (const char**)&s, (const char**)&fake_name);
148
- free(s);
149
- return mi;
150
- }
151
-
152
- #endif
@@ -1,156 +0,0 @@
1
- from libc.stdint cimport int8_t, uint8_t, int32_t, int64_t, uint32_t, uint64_t
2
-
3
- cdef extern from "minimap.h":
4
- #
5
- # Options
6
- #
7
- ctypedef struct mm_idxopt_t:
8
- short k, w, flag, bucket_bits
9
- int64_t mini_batch_size
10
- uint64_t batch_size
11
-
12
- ctypedef struct mm_mapopt_t:
13
- int64_t flag
14
- int seed
15
- int sdust_thres
16
-
17
- int max_qlen
18
-
19
- int bw, bw_long
20
- int max_gap, max_gap_ref
21
- int max_frag_len
22
- int max_chain_skip, max_chain_iter
23
- int min_cnt
24
- int min_chain_score
25
- float chain_gap_scale
26
- float chain_skip_scale
27
- int rmq_size_cap, rmq_inner_dist
28
- int rmq_rescue_size
29
- float rmq_rescue_ratio
30
-
31
- float mask_level
32
- int mask_len
33
- float pri_ratio
34
- int best_n
35
-
36
- float alt_drop
37
-
38
- int a, b, q, e, q2, e2
39
- int transition
40
- int sc_ambi
41
- int noncan
42
- int junc_bonus, junc_pen
43
- int zdrop, zdrop_inv
44
- int end_bonus
45
- int min_dp_max
46
- int min_ksw_len
47
- int anchor_ext_len, anchor_ext_shift
48
- float max_clip_ratio
49
-
50
- int rank_min_len
51
- float rank_frac
52
-
53
- int pe_ori, pe_bonus
54
-
55
- int jump_min_match;
56
-
57
- float mid_occ_frac
58
- float q_occ_frac
59
- int32_t min_mid_occ
60
- int32_t mid_occ
61
- int32_t max_occ
62
- int64_t mini_batch_size
63
- int64_t max_sw_mat
64
- int64_t cap_kalloc
65
-
66
- const char *split_prefix
67
-
68
- int mm_set_opt(char *preset, mm_idxopt_t *io, mm_mapopt_t *mo)
69
- int mm_verbose
70
-
71
- #
72
- # Indexing
73
- #
74
- ctypedef struct mm_idx_seq_t:
75
- char *name
76
- uint64_t offset
77
- uint32_t len
78
-
79
- ctypedef struct mm_idx_bucket_t:
80
- pass
81
-
82
- ctypedef struct mm_idx_t:
83
- int32_t b, w, k, flag
84
- uint32_t n_seq
85
- mm_idx_seq_t *seq
86
- uint32_t *S
87
- mm_idx_bucket_t *B
88
- void *km
89
- void *h
90
-
91
- ctypedef struct mm_idx_reader_t:
92
- pass
93
-
94
- mm_idx_reader_t *mm_idx_reader_open(const char *fn, const mm_idxopt_t *opt, const char *fn_out)
95
- mm_idx_t *mm_idx_reader_read(mm_idx_reader_t *r, int n_threads)
96
- void mm_idx_reader_close(mm_idx_reader_t *r)
97
- void mm_idx_destroy(mm_idx_t *mi)
98
- void mm_mapopt_update(mm_mapopt_t *opt, const mm_idx_t *mi)
99
-
100
- int mm_idx_index_name(mm_idx_t *mi)
101
-
102
- #
103
- # Mapping (key struct defined in cmappy.h below)
104
- #
105
- ctypedef struct mm_reg1_t:
106
- pass
107
-
108
- ctypedef struct mm_tbuf_t:
109
- pass
110
-
111
- mm_tbuf_t *mm_tbuf_init()
112
- void mm_tbuf_destroy(mm_tbuf_t *b)
113
- void *mm_tbuf_get_km(mm_tbuf_t *b)
114
- int mm_gen_cs(void *km, char **buf, int *max_len, const mm_idx_t *mi, const mm_reg1_t *r, const char *seq, int no_iden)
115
- int mm_gen_MD(void *km, char **buf, int *max_len, const mm_idx_t *mi, const mm_reg1_t *r, const char *seq)
116
-
117
- #
118
- # Helper header (because it is hard to expose mm_reg1_t with Cython)
119
- #
120
- cdef extern from "cmappy.h":
121
- ctypedef struct mm_hitpy_t:
122
- const char *ctg
123
- int32_t ctg_start, ctg_end
124
- int32_t qry_start, qry_end
125
- int32_t blen, mlen, NM, ctg_len
126
- uint8_t mapq, is_primary
127
- int8_t strand, trans_strand
128
- int32_t seg_id
129
- int32_t n_cigar32
130
- uint32_t *cigar32
131
-
132
- void mm_reg2hitpy(const mm_idx_t *mi, mm_reg1_t *r, mm_hitpy_t *h)
133
- void mm_free_reg1(mm_reg1_t *r)
134
- mm_reg1_t *mm_map_aux(const mm_idx_t *mi, const char* seqname, const char *seq1, const char *seq2, int *n_regs, mm_tbuf_t *b, const mm_mapopt_t *opt)
135
- char *mappy_fetch_seq(const mm_idx_t *mi, const char *name, int st, int en, int *l)
136
- mm_idx_t *mappy_idx_seq(int w, int k, int is_hpc, int bucket_bits, const char *seq, int l)
137
-
138
- ctypedef struct kstring_t:
139
- unsigned l, m
140
- char *s
141
-
142
- ctypedef struct kstream_t:
143
- pass
144
-
145
- ctypedef struct kseq_t:
146
- kstring_t name, comment, seq, qual
147
- int last_char
148
- kstream_t *f
149
-
150
- kseq_t *mm_fastx_open(const char *fn)
151
- void mm_fastx_close(kseq_t *ks)
152
- int kseq_read(kseq_t *seq)
153
-
154
- char *mappy_revcomp(int l, const uint8_t *seq)
155
- int mm_verbose_level(int v)
156
- void mm_reset_timer()