From ede6619d3b486727ab2000f86723f19d33aa1642 Mon Sep 17 00:00:00 2001 From: "J.F.J. Laros" <j.f.j.laros@lumc.nl> Date: Fri, 28 Feb 2014 14:06:02 +0100 Subject: [PATCH] Added a generic insertion object, implemented rudimentary transpositions. --- mutalyzer/describe.py | 61 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 4 deletions(-) diff --git a/mutalyzer/describe.py b/mutalyzer/describe.py index 0776989d..c9c30b60 100644 --- a/mutalyzer/describe.py +++ b/mutalyzer/describe.py @@ -160,6 +160,39 @@ def findFS(peptide, altPeptide, FS): return maxFS - 1, fsStart #findFS +class Seq(object): + """ + Container for an inserted sequence. + """ + def __init__(self, sequence="", reference="", start=0, end=0, + reverse=False): + """ + """ + self.sequence = sequence + self.reference = reference + self.start = start + self.end = end + self.reverse = reverse + #__init__ + + def __str__(self): + if self.sequence: + return self.sequence + + inverted = "inv" if self.reverse else "" + return "{}_{}{}".format(self.start, self.end, inverted) + #__str__ + + def dump(self): + """ + Debug function. + """ + if self.sequence: + return self.sequence + return self.reference[self.start:self.end] + #dump +#Seq + class RawVar(models.RawVar): """ Container for a raw variant. @@ -485,7 +518,7 @@ def var2RawVar(s1, s2, var, DNA=True): inserted=s2[var.sample_start:var.sample_end], type="delins") # Inversion. - if var.type == extractor.REVERSE_COMPLEMENT: + if var.type & extractor.REVERSE_COMPLEMENT: trim = palinsnoop(s1[var.reference_start:var.reference_end]) if trim > 0: # Partial palindrome. @@ -549,10 +582,30 @@ def describe(s1, s2, DNA=True): #if #if else: + in_transposition = False + for variant in extractor.extract(unicode(s1), len(s1), unicode(s2), len(s2), - 0): - if variant.type != extractor.IDENTITY: - description.append(var2RawVar(s1, s2, variant, DNA=DNA)) + 0): + if variant.type & extractor.TRANSPOSITION_OPEN: + in_transposition = True + seq_list = [] + + if in_transposition: + if variant.type & extractor.IDENTITY: + seq_list.append(Seq(reference=s2, # This should be s1. + start=variant.sample_start, end=variant.sample_end, + reverse=variant.type & extractor.REVERSE_COMPLEMENT)) + else: + seq_list.append(Seq( + sequence=s2[variant.sample_start:variant.sample_end])) + #if + elif variant.type != extractor.IDENTITY: + description.append(var2RawVar(s1, s2, variant, DNA=DNA)) + + if variant.type & extractor.TRANSPOSITION_CLOSE: + in_transposition = False + #for + #else # Nothing happened. if not description: -- GitLab