Mercurial > repos > nick > duplex
comparison swalign.py @ 4:af383638de66 draft
planemo upload commit 022984f323d3da44f70b3bf79c684cfd8dda3f61-dirty
author | nick |
---|---|
date | Mon, 23 Nov 2015 18:44:23 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
3:13bcc2f459b0 | 4:af383638de66 |
---|---|
1 import os | |
2 import ctypes | |
3 | |
4 script_dir = os.path.dirname(os.path.realpath(__file__)) | |
5 swalign = ctypes.cdll.LoadLibrary(os.path.join(script_dir, 'swalignc.so')) | |
6 | |
7 | |
8 # C struct for ctypes | |
9 class SeqPairC(ctypes.Structure): | |
10 _fields_ = [ | |
11 ('a', ctypes.c_char_p), | |
12 ('alen', ctypes.c_uint), | |
13 ('b', ctypes.c_char_p), | |
14 ('blen', ctypes.c_uint), | |
15 ] | |
16 | |
17 | |
18 # C struct for ctypes | |
19 class AlignC(ctypes.Structure): | |
20 _fields_ = [ | |
21 ('seqs', ctypes.POINTER(SeqPairC)), | |
22 ('start_a', ctypes.c_int), | |
23 ('start_b', ctypes.c_int), | |
24 ('end_a', ctypes.c_int), | |
25 ('end_b', ctypes.c_int), | |
26 ('matches', ctypes.c_int), | |
27 ('score', ctypes.c_double), | |
28 ] | |
29 | |
30 | |
31 # The Python version | |
32 class Align(object): | |
33 def __init__(self, align_c): | |
34 self.target = align_c.seqs.contents.a | |
35 self.query = align_c.seqs.contents.b | |
36 self.start_target = align_c.start_a | |
37 self.start_query = align_c.start_b | |
38 self.end_target = align_c.end_a | |
39 self.end_query = align_c.end_b | |
40 self.matches = align_c.matches | |
41 self.score = align_c.score | |
42 | |
43 | |
44 # Initialize functions (define types). | |
45 swalign.smith_waterman.restype = ctypes.POINTER(AlignC) | |
46 swalign.revcomp.restype = ctypes.c_char_p | |
47 | |
48 | |
49 def smith_waterman(target, query): | |
50 seq_pair = SeqPairC(target, len(target), query, len(query)) | |
51 align_c = swalign.smith_waterman(ctypes.pointer(seq_pair), 1).contents | |
52 return Align(align_c) | |
53 | |
54 | |
55 def revcomp(seq): | |
56 """WARNING: This will alter the input string in-place!""" | |
57 swalign.revcomp(seq) |