Skip to content
Snippets Groups Projects
Commit 61ddd6b7 authored by Laros's avatar Laros Committed by Vermaat
Browse files

Some more refactoring.

parent 08ecdc5c
No related branches found
No related tags found
No related merge requests found
...@@ -212,15 +212,14 @@ class Seq(object): ...@@ -212,15 +212,14 @@ class Seq(object):
class SeqList(list): class SeqList(list):
def __str__(self): def __str__(self):
representation = ';'.join(map(str, self))
if len(self) > 1: if len(self) > 1:
return "[{}]".format(representation) return "[{}]".format(';'.join(map(str, self)))
return representation return str(self[0])
#__str__ #__str__
#SeqList #SeqList
class HGVSVar(object): class HGVSVar(object):
# NOTE: This may be obsolete, but check the JSON generation.
def update(self): def update(self):
self.hgvs = str(self) self.hgvs = str(self)
self.hgvs_length = len(self) self.hgvs_length = len(self)
...@@ -321,6 +320,7 @@ class DNAVar(models.DNAVar, HGVSVar): ...@@ -321,6 +320,7 @@ class DNAVar(models.DNAVar, HGVSVar):
variant stored in this class. variant stored in this class.
:rtype: int :rtype: int
""" """
# NOTE: Obsolete?
if self.type in ("none", "unknown"): # `=' or `?' if self.type in ("none", "unknown"): # `=' or `?'
return 1 return 1
...@@ -434,6 +434,7 @@ class ProteinVar(models.ProteinVar, HGVSVar): ...@@ -434,6 +434,7 @@ class ProteinVar(models.ProteinVar, HGVSVar):
variant stored in this class. variant stored in this class.
:rtype: int :rtype: int
""" """
# NOTE: Obsolete?
if not self.start: # = if not self.start: # =
return 1 return 1
...@@ -477,6 +478,7 @@ class Allele(list): ...@@ -477,6 +478,7 @@ class Allele(list):
:rtype: int :rtype: int
""" """
# NOTE: Do we need to count the ; and [] ? # NOTE: Do we need to count the ; and [] ?
# NOTE: Obsolete?
return sum(map(lambda x: x.hgvs_length, self)) return sum(map(lambda x: x.hgvs_length, self))
#length #length
#Allele #Allele
...@@ -571,7 +573,7 @@ def var_to_rawvar(s1, s2, var, seq_list=[], container=DNAVar): ...@@ -571,7 +573,7 @@ def var_to_rawvar(s1, s2, var, seq_list=[], container=DNAVar):
sample_end=var.sample_end) sample_end=var.sample_end)
#var_to_rawvar #var_to_rawvar
def describe(s1, s2, dna=True): def describe_dna(s1, s2):
""" """
Give an allele description of the change from {s1} to {s2}. Give an allele description of the change from {s1} to {s2}.
...@@ -584,84 +586,91 @@ def describe(s1, s2, dna=True): ...@@ -584,84 +586,91 @@ def describe(s1, s2, dna=True):
:rtype: list(RawVar) :rtype: list(RawVar)
""" """
description = Allele() description = Allele()
in_transposition = 0
for variant in extractor.extract(str(s1), len(s1), str(s2), len(s2), 0):
print (variant.type, variant.reference_start,
variant.reference_end, variant.sample_start,
variant.sample_end, variant.transposition_start,
variant.transposition_end)
print (variant.type & extractor.TRANSPOSITION_OPEN, variant.type &
extractor.TRANSPOSITION_CLOSE)
if variant.type & extractor.TRANSPOSITION_OPEN:
if not in_transposition:
seq_list = SeqList()
in_transposition += 1
#if
if not dna: if in_transposition:
fs1, fs2 = make_fs_tables(1) if variant.type & extractor.IDENTITY:
longest_fs_f = max(find_fs(s1, s2, fs1), find_fs(s1, s2, fs2)) seq_list.append(Seq(start=variant.transposition_start + 1,
longest_fs_r = max(find_fs(s2, s1, fs1), find_fs(s2, s1, fs2)) end=variant.transposition_end, reverse=False))
elif variant.type & extractor.REVERSE_COMPLEMENT:
if longest_fs_f > longest_fs_r: seq_list.append(Seq(start=variant.transposition_start + 1,
print s1[:longest_fs_f[1]], s1[longest_fs_f[1]:] end=variant.transposition_end, reverse=True))
print s2[:len(s2) - longest_fs_f[0]], \ else:
s2[len(s2) - longest_fs_f[0]:] seq_list.append(Seq(
s1_part = s1[:longest_fs_f[1]] sequence=s2[variant.sample_start:variant.sample_end]))
s2_part = s2[:len(s2) - longest_fs_f[0]]
term = longest_fs_f[0]
#if #if
else: elif not (variant.type & extractor.IDENTITY):
print s1[:len(s1) - longest_fs_r[0]], \ description.append(var_to_rawvar(s1, s2, variant))
s1[len(s1) - longest_fs_r[0]:]
print s2[:longest_fs_r[1]], s2[longest_fs_r[1]:] if variant.type & extractor.TRANSPOSITION_CLOSE:
s1_part = s1[:len(s1) - longest_fs_r[0]] in_transposition -= 1
s2_part = s2[:longest_fs_r[1]]
term = len(s2) - longest_fs_r[1] if not in_transposition:
#else description.append(var_to_rawvar(s1, s2, variant, seq_list))
s1_part = s1
s2_part = s2
for variant in extractor.extract(unicode(s1_part), len(s1_part),
unicode(s2_part), len(s2_part), 1):
description.append(var_to_rawvar(s1, s2, variant, container=ProteinVar))
if description:
description[-1].term = term + 2
description[-1].update()
#if #if
#for
return description
#describe_dna
def describe_protein(s1, s2):
"""
Give an allele description of the change from {s1} to {s2}.
:arg s1: Sequence 1.
:type s1: str
:arg s2: Sequence 2.
:type s2: str
:returns: A list of RawVar objects, representing the allele.
:rtype: list(RawVar)
"""
description = Allele()
fs1, fs2 = make_fs_tables(1)
longest_fs_f = max(find_fs(s1, s2, fs1), find_fs(s1, s2, fs2))
longest_fs_r = max(find_fs(s2, s1, fs1), find_fs(s2, s1, fs2))
if longest_fs_f > longest_fs_r:
print s1[:longest_fs_f[1]], s1[longest_fs_f[1]:]
print s2[:len(s2) - longest_fs_f[0]], s2[len(s2) - longest_fs_f[0]:]
s1_part = s1[:longest_fs_f[1]]
s2_part = s2[:len(s2) - longest_fs_f[0]]
term = longest_fs_f[0]
#if #if
else: # DNA description extraction, the only thing that `works'. else:
in_transposition = 0 print s1[:len(s1) - longest_fs_r[0]], s1[len(s1) - longest_fs_r[0]:]
print s2[:longest_fs_r[1]], s2[longest_fs_r[1]:]
for variant in extractor.extract(unicode(s1), len(s1), unicode(s2), len(s2), s1_part = s1[:len(s1) - longest_fs_r[0]]
0): s2_part = s2[:longest_fs_r[1]]
print variant.type, variant.reference_start, variant.reference_end, variant.sample_start, variant.sample_end, variant.transposition_start, variant.transposition_end term = len(s2) - longest_fs_r[1]
print variant.type & extractor.TRANSPOSITION_OPEN, variant.type & extractor.TRANSPOSITION_CLOSE
if variant.type & extractor.TRANSPOSITION_OPEN:
if not in_transposition:
seq_list = SeqList()
in_transposition += 1
#if
if in_transposition:
if variant.type & extractor.IDENTITY:
seq_list.append(Seq(#reference=s1,
start=variant.transposition_start + 1,
end=variant.transposition_end, reverse=False))
elif variant.type & extractor.REVERSE_COMPLEMENT:
seq_list.append(Seq(#reference=s1,
start=variant.transposition_start + 1,
end=variant.transposition_end, reverse=True))
else:
seq_list.append(Seq(
sequence=s2[variant.sample_start:variant.sample_end]))
#if
elif not (variant.type & extractor.IDENTITY):
description.append(var_to_rawvar(s1, s2, variant))
if variant.type & extractor.TRANSPOSITION_CLOSE:
in_transposition -= 1
if not in_transposition:
description.append(var_to_rawvar(s1, s2, variant, seq_list))
#for i in seq_list:
# print i.dump()
#if
#for
#else #else
# Nothing happened. s1_part = s1
if not description: s2_part = s2
return Allele(RawVar()) for variant in extractor.extract(str(s1_part), len(s1_part),
str(s2_part), len(s2_part), 1):
description.append(var_to_rawvar(s1, s2, variant,
container=ProteinVar))
if description:
description[-1].term = term + 2
description[-1].update()
#if
return description return description
#describe #describe_protein
...@@ -100,28 +100,28 @@ def check_name(description): ...@@ -100,28 +100,28 @@ def check_name(description):
reference_sequence = O.getIndexedOutput("original", 0) reference_sequence = O.getIndexedOutput("original", 0)
sample_sequence = O.getIndexedOutput("mutated", 0) sample_sequence = O.getIndexedOutput("mutated", 0)
extracted_allele = describe.describe(reference_sequence, described_allele = describe.describe_dna(reference_sequence,
sample_sequence) sample_sequence)
#extracted_protein_allele = describe.describe( #described_protein_allele = describe.describe(
# O.getIndexedOutput("oldprotein", 0), # O.getIndexedOutput("oldprotein", 0),
# O.getIndexedOutput("newprotein", 0, default=""), # O.getIndexedOutput("newprotein", 0, default=""),
# DNA=False) # DNA=False)
extracted_protein_allele = "" described_protein_allele = ""
extracted = extracted_protein = '(skipped)' described = described_protein = '(skipped)'
if extracted_allele: if described_allele:
extracted = extracted_allele described = described_allele
if extracted_protein_allele: if described_protein_allele:
extracted_protein = extracted_protein_allele described_protein = described_protein_allele
print "\nExperimental services:" print "\nExperimental services:"
print extracted print described
print extracted_protein print described_protein
#print "+++ %s" % O.getOutput("myTranscriptDescription") #print "+++ %s" % O.getOutput("myTranscriptDescription")
print json.dumps({"reference_sequence": reference_sequence, print json.dumps({"reference_sequence": reference_sequence,
"sample_sequence": sample_sequence, "allele_description": "sample_sequence": sample_sequence, "allele_description":
extracted_allele}, cls=MyEncoder) described_allele}, cls=MyEncoder)
def main(): def main():
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment