first trial for a fasta formater

This commit is contained in:
2016-07-03 09:18:52 +02:00
parent 6af62d8124
commit 448fa8d325
2 changed files with 15 additions and 15 deletions

View File

@ -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

View File

@ -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: