Mercurial > repos > nick > duplex
view swalign.py @ 4:af383638de66 draft
planemo upload commit 022984f323d3da44f70b3bf79c684cfd8dda3f61-dirty
author | nick |
---|---|
date | Mon, 23 Nov 2015 18:44:23 -0500 |
parents | |
children |
line wrap: on
line source
import os import ctypes script_dir = os.path.dirname(os.path.realpath(__file__)) swalign = ctypes.cdll.LoadLibrary(os.path.join(script_dir, 'swalignc.so')) # C struct for ctypes class SeqPairC(ctypes.Structure): _fields_ = [ ('a', ctypes.c_char_p), ('alen', ctypes.c_uint), ('b', ctypes.c_char_p), ('blen', ctypes.c_uint), ] # C struct for ctypes class AlignC(ctypes.Structure): _fields_ = [ ('seqs', ctypes.POINTER(SeqPairC)), ('start_a', ctypes.c_int), ('start_b', ctypes.c_int), ('end_a', ctypes.c_int), ('end_b', ctypes.c_int), ('matches', ctypes.c_int), ('score', ctypes.c_double), ] # The Python version class Align(object): def __init__(self, align_c): self.target = align_c.seqs.contents.a self.query = align_c.seqs.contents.b self.start_target = align_c.start_a self.start_query = align_c.start_b self.end_target = align_c.end_a self.end_query = align_c.end_b self.matches = align_c.matches self.score = align_c.score # Initialize functions (define types). swalign.smith_waterman.restype = ctypes.POINTER(AlignC) swalign.revcomp.restype = ctypes.c_char_p def smith_waterman(target, query): seq_pair = SeqPairC(target, len(target), query, len(query)) align_c = swalign.smith_waterman(ctypes.pointer(seq_pair), 1).contents return Align(align_c) def revcomp(seq): """WARNING: This will alter the input string in-place!""" swalign.revcomp(seq)