blob: 1774f5f7ad51e72a75424c6cd8b807e329518521 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
'''
The kmer module provides an interface between the C-library
for quikr kmer counting in Python
'''
__author__ = "Calvin Morrison"
__copyright__ = "Copyright 2013, EESI Laboratory"
__credits__ = ["Calvin Morrison"]
__license__ = "GPL"
__version__ = "0.1.0"
__maintainer__ = "Calvin Morrison"
__email__ = "mutantturkey@gmail.com"
__status__ = "development"
import numpy as np
import ctypes as c
try:
libkmer = c.CDLL("libkmer.so");
except:
raise Exception("Error: could not load libkmer.so")
def get_counts_from_file(fn, kmer):
'''
load kmer counts from a filename (not a handle), of size kmer.
returns an array size 4^k of counts
>>> import kmer
>>> counts = kmer.get_counts_from_file("test.fa", 6)
'''
if type(fn) is not str:
raise TypeError("fn must be a str");
if type(kmer) is not int:
raise TypeError("fn must be int");
ret = []
width = (kmer ** 4)
libkmer.get_kmer_counts_from_filename.restype = c.POINTER(c.c_ulonglong * width )
counts = libkmer.get_kmer_counts_from_filename(fn, kmer);
if counts:
for i in counts.contents:
ret.append(i)
else:
ret = 'error could not count mers on' + str(fn)
return ret
|