bugfix: in-place revcomp() not working
This commit is contained in:
parent
7dc7097208
commit
29ed675ee5
|
|
@ -101,16 +101,15 @@ static inline mm_reg1_t *mm_map_aux(const mm_idx_t *mi, const char *seq1, const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint8_t *mappy_revcomp(int len, uint8_t *seq)
|
static inline char *mappy_revcomp(int len, const uint8_t *seq)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < len>>1; ++i) {
|
char *rev;
|
||||||
uint8_t t = seq_comp_table[seq[i]];
|
rev = (char*)malloc(len + 1);
|
||||||
seq[i] = seq_comp_table[seq[len - 1 - i]];
|
for (i = 0; i < len; ++i)
|
||||||
seq[len - 1 - i] = t;
|
rev[len - i - 1] = seq_comp_table[seq[i]];
|
||||||
}
|
rev[len] = 0;
|
||||||
if (len&1) seq[len>>1] = seq_comp_table[seq[len>>1]];
|
return rev;
|
||||||
return seq;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -116,6 +116,6 @@ cdef extern from "cmappy.h":
|
||||||
void mm_fastx_close(kseq_t *ks)
|
void mm_fastx_close(kseq_t *ks)
|
||||||
int kseq_read(kseq_t *seq)
|
int kseq_read(kseq_t *seq)
|
||||||
|
|
||||||
uint8_t *mappy_revcomp(int l, uint8_t *seq)
|
char *mappy_revcomp(int l, const uint8_t *seq)
|
||||||
int mm_verbose_level(int v)
|
int mm_verbose_level(int v)
|
||||||
void mm_reset_timer()
|
void mm_reset_timer()
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
from libc.stdint cimport uint8_t, int8_t
|
from libc.stdint cimport uint8_t, int8_t
|
||||||
from libc.stdlib cimport free
|
from libc.stdlib cimport free
|
||||||
cimport cmappy
|
cimport cmappy
|
||||||
|
import sys
|
||||||
|
|
||||||
cmappy.mm_reset_timer()
|
cmappy.mm_reset_timer()
|
||||||
|
|
||||||
|
|
@ -165,9 +166,12 @@ def fastx_read(fn):
|
||||||
cmappy.mm_fastx_close(ks)
|
cmappy.mm_fastx_close(ks)
|
||||||
|
|
||||||
def revcomp(seq):
|
def revcomp(seq):
|
||||||
cdef uint8_t *s
|
l = len(seq)
|
||||||
s = cmappy.mappy_revcomp(len(seq), str.encode(seq))
|
bseq = seq if isinstance(seq, bytes) else seq.encode()
|
||||||
return s if isinstance(s, str) else s.decode()
|
cdef char *s = cmappy.mappy_revcomp(l, bseq)
|
||||||
|
r = s[:l] if isinstance(s, str) else s[:l].decode()
|
||||||
|
free(s)
|
||||||
|
return r
|
||||||
|
|
||||||
def verbose(v=None):
|
def verbose(v=None):
|
||||||
if v is None: v = -1
|
if v is None: v = -1
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue