aboutsummaryrefslogtreecommitdiff
path: root/kmer.py
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