From 646ce812f052219048762b012d45337b0345492d Mon Sep 17 00:00:00 2001
From: "J.F.J. Laros" <j.f.j.laros@lumc.nl>
Date: Sun, 19 Aug 2012 13:51:35 +0000
Subject: [PATCH] Added description extractor functionality to the name checker
 as an experimental service.

describe.py:
- Added an `unknown' type to the possible types of raw variants.
- Disabled the experimental LCSMatrix() code.



git-svn-id: https://humgenprojects.lumc.nl/svn/mutalyzer/trunk@596 eb6bd6ab-9ccd-42b9-aceb-e2899b4a52f1
---
 mutalyzer/describe.py          | 17 +++++++++++++++--
 mutalyzer/templates/check.html | 14 ++++++++++++++
 mutalyzer/website.py           | 13 ++++++++++++-
 3 files changed, 41 insertions(+), 3 deletions(-)

diff --git a/mutalyzer/describe.py b/mutalyzer/describe.py
index 644573a7..1863bb9d 100644
--- a/mutalyzer/describe.py
+++ b/mutalyzer/describe.py
@@ -298,6 +298,8 @@ class RawVar(models.RawVar):
         @returns: The HGVS description of the raw variant stored in this class.
         @rtype: str
         """
+        if self.type == "unknown":
+            return "?"
         if not self.start:
             return "="
 
@@ -317,6 +319,7 @@ class RawVar(models.RawVar):
             descr += self.type
         if self.inserted:
             descr += "%s" % seq3(self.inserted)
+
         if self.type == "stop":
             return descr + '*'
         if self.term:
@@ -336,7 +339,7 @@ class RawVar(models.RawVar):
             variant stored in this class.
         @rtype: int
         """
-        if not self.start : # =
+        if not self.start : # `=' or `?'
             return 1
 
         descrLen = 1 # Start position.
@@ -625,6 +628,13 @@ def protein_description(M, s1, s2, s1_start, s1_end, s2_start, s2_end):
     @returns: A list of RawVar objects, representing the allele.
     @rval: list(RawVar)
     """
+    if s1 == '?' or s2 == '?':
+        return [RawVar(DNA=False, type="unknown")]
+
+    # One of the sequences is missing.
+    if not (s1 and s2):
+        return [RawVar(DNA=False)]
+
     # Nothing happened.
     if s1 == s2:
         return [RawVar(DNA=False)]
@@ -743,7 +753,10 @@ def describe(original, mutated, DNA=True):
     s1_end = len(s1) - lcs
     s2_end = len(s2) - lcs
 
-    M = LCSMatrix(s1, s2)
+    # TODO: use only the altered part for the rest of the analysis.
+    # the lcp and lcs can be ignored.
+    #M = LCSMatrix(s1, s2)
+    M = []
 
     if not DNA:
         return protein_description(M, s1, s2, lcp, s1_end, lcp, s2_end)
diff --git a/mutalyzer/templates/check.html b/mutalyzer/templates/check.html
index 758a9a4d..89da7bb0 100644
--- a/mutalyzer/templates/check.html
+++ b/mutalyzer/templates/check.html
@@ -268,7 +268,21 @@
             <br>
             <br>
           </div> <!-- interactive -->
+          <br>
         </div> <!-- reference -->
+        <div>
+          <b>Experimental services:</b><br>
+          <br>
+          Genomic description:
+          <tt>
+            <div tal:replace = "structure extractedDescription/0"></div><br>
+          </tt>
+          <br>
+          Protein description:
+          <tt>
+            <div tal:replace = "structure extractedProtein/0"></div><br>
+          </tt>
+        </div> <!-- experimental -->
       </div> <!-- name -->
     </div>
   </body>
diff --git a/mutalyzer/website.py b/mutalyzer/website.py
index f7d706ce..89ee649d 100644
--- a/mutalyzer/website.py
+++ b/mutalyzer/website.py
@@ -824,6 +824,15 @@ class Check:
                 chromosome=raw_variants[0], start=min(positions) - 10,
                 stop=max(positions) + 10, bed_file=urllib.quote(bed_url))
 
+        extracted = describe.alleleDescription(
+            describe.describe(output.getIndexedOutput("original", 0),
+            output.getIndexedOutput("mutated", 0)))
+
+        extractedProt = describe.alleleDescription(
+            describe.describe(output.getIndexedOutput("oldprotein", 0),
+            output.getIndexedOutput("newprotein", 0, default=""), DNA=False))
+
+
         # Todo: Generate the fancy HTML views for the proteins here instead
         # of in mutalyzer/variantchecker.py.
         args = {
@@ -852,7 +861,9 @@ class Check:
             'restrictionSites'   : output.getOutput('restrictionSites'),
             'legends'            : output.getOutput('legends'),
             'reference'          : reference,
-            'browserLink'        : browser_link
+            'browserLink'        : browser_link,
+            'extractedDescription' : (extracted, urllib.quote(extracted)),
+            'extractedProtein'   : (extractedProt, urllib.quote(extractedProt))
         }
 
         output.addMessage(__file__, -1, 'INFO', 'Finished variant %s' % name)
-- 
GitLab