@@ -123,6 +123,7 @@ cdef class Aligner:
123123 self ._idx = cmappy.mm_idx_reader_read(r, n_threads) # NB: ONLY read the first part
124124 cmappy.mm_idx_reader_close(r)
125125 cmappy.mm_mapopt_update(& self .map_opt, self ._idx)
126+ cmappy.mm_idx_index_name(self ._idx)
126127
127128 def __dealloc__ (self ):
128129 if self ._idx is not NULL :
@@ -140,8 +141,13 @@ cdef class Aligner:
140141 if self ._idx is NULL : return None
141142 if buf is None : b = ThreadBuffer()
142143 else : b = buf
143- if seq2 is None : regs = cmappy.mm_map_aux(self ._idx, str .encode(seq), NULL , & n_regs, b._b, & self .map_opt)
144- else : regs = cmappy.mm_map_aux(self ._idx, str .encode(seq), str .encode(seq2), & n_regs, b._b, & self .map_opt)
144+
145+ _seq = seq if isinstance (seq, bytes) else seq.encode()
146+ if seq2 is None :
147+ regs = cmappy.mm_map_aux(self ._idx, _seq, NULL , & n_regs, b._b, & self .map_opt)
148+ else :
149+ _seq2 = seq2 if isinstance (seq2, bytes) else seq2.encode()
150+ regs = cmappy.mm_map_aux(self ._idx, _seq, _seq2, & n_regs, b._b, & self .map_opt)
145151
146152 for i in range (n_regs):
147153 cmappy.mm_reg2hitpy(self ._idx, & regs[i], & h)
@@ -153,7 +159,24 @@ cdef class Aligner:
153159 cmappy.mm_free_reg1(& regs[i])
154160 free(regs)
155161
156- def fastx_read (fn ):
162+ def seq (self , str name , int start = 0 , int end = 0x7fffffff ):
163+ cdef int l
164+ cdef char * s = cmappy.mappy_fetch_seq(self ._idx, name.encode(), start, end, & l)
165+ if l == 0 : return None
166+ r = s[:l] if isinstance (s, str ) else s[:l].decode()
167+ free(s)
168+ return r
169+
170+ @property
171+ def k (self ): return self ._idx.k
172+
173+ @property
174+ def w (self ): return self ._idx.w
175+
176+ @property
177+ def n_seq (self ): return self ._idx.n_seq
178+
179+ def fastx_read (fn , read_comment = False ):
157180 cdef cmappy.kseq_t * ks
158181 ks = cmappy.mm_fastx_open(str .encode(fn))
159182 if ks is NULL : return None
@@ -162,7 +185,12 @@ def fastx_read(fn):
162185 else : qual = None
163186 name = ks.name.s if isinstance (ks.name.s, str ) else ks.name.s.decode()
164187 seq = ks.seq.s if isinstance (ks.seq.s, str ) else ks.seq.s.decode()
165- yield name, seq, qual
188+ if read_comment:
189+ if ks.comment.l > 0 : comment = ks.comment.s if isinstance (ks.comment.s, str ) else ks.comment.s.decode()
190+ else : comment = None
191+ yield name, seq, qual, comment
192+ else :
193+ yield name, seq, qual
166194 cmappy.mm_fastx_close(ks)
167195
168196def revcomp (seq ):
0 commit comments