first trial for a fasta formater
This commit is contained in:
@ -6,4 +6,4 @@ cdef class FastaFormat:
|
|||||||
cdef HeaderFormat headerFormater
|
cdef HeaderFormat headerFormater
|
||||||
|
|
||||||
cdef size_t sequenceBufferLength
|
cdef size_t sequenceBufferLength
|
||||||
cdef cvarray sequenceBuffer
|
cdef char* sequenceBuffer
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
cimport cython
|
cimport cython
|
||||||
|
from libc.stdlib cimport malloc, free, realloc
|
||||||
|
from libc.string cimport strncpy
|
||||||
|
|
||||||
cdef class FastaFormat:
|
cdef class FastaFormat:
|
||||||
|
|
||||||
@ -7,32 +9,30 @@ cdef class FastaFormat:
|
|||||||
tags,
|
tags,
|
||||||
printNAKeys)
|
printNAKeys)
|
||||||
|
|
||||||
|
|
||||||
|
def __cinit(self):
|
||||||
self.sequenceBufferLength=1000
|
self.sequenceBufferLength=1000
|
||||||
self.sequenceBuffer = cvarray(shape=(1000,),
|
self.sequenceBuffer = malloc(self.sequenceBufferLength)
|
||||||
itemsize=sizeof(char),
|
|
||||||
format="c",
|
def __dealloc__(self)
|
||||||
mode="c",
|
free(self.sequenceBuffer)
|
||||||
allocate_buffer=True)
|
|
||||||
@cython.boundscheck(False)
|
@cython.boundscheck(False)
|
||||||
def __call__(self, dict data):
|
def __call__(self, dict data):
|
||||||
cdef bytes brawseq = <bytes> data['sequence']
|
cdef bytes brawseq = <bytes> data['sequence']
|
||||||
|
cdef char* crowseq = <char*> brawseq
|
||||||
cdef size_t lseq = len(brawseq)
|
cdef size_t lseq = len(brawseq)
|
||||||
cdef size_t needed_size = lseq + 1
|
cdef size_t needed_size = lseq + 1
|
||||||
cdef char[:] seq
|
|
||||||
cdef char[:] fasta
|
|
||||||
cdef size_t k=0
|
cdef size_t k=0
|
||||||
|
|
||||||
needed_size += needed_size/ 50
|
needed_size += needed_size/ 50
|
||||||
|
|
||||||
if needed_size > self.sequenceBufferLength:
|
if needed_size > self.sequenceBufferLength:
|
||||||
self.sequenceBufferLength=needed_size
|
self.sequenceBufferLength=needed_size
|
||||||
self.sequenceBuffer = cvarray(shape=(needed_size,),
|
self.sequenceBuffer = realloc(self.sequenceBuffer,
|
||||||
itemsize=sizeof(char),
|
self.sequenceBufferLength
|
||||||
format="c",
|
)
|
||||||
mode="c",
|
|
||||||
allocate_buffer=True)
|
|
||||||
|
|
||||||
seq = brawseq
|
|
||||||
fasta = self.sequenceBuffer
|
|
||||||
|
|
||||||
for i in range(0,lseq,60):
|
for i in range(0,lseq,60):
|
||||||
if i+60 <= lseq:
|
if i+60 <= lseq:
|
||||||
|
Reference in New Issue
Block a user