From 8300b90f3ee88e92e4d43263e6826a58453dff7d Mon Sep 17 00:00:00 2001
From: Martijn Vermaat <martijn@vermaat.name>
Date: Thu, 12 Jul 2012 15:46:25 +0000
Subject: [PATCH] Support non-coding transcripts in position converter (#102)

git-svn-id: https://humgenprojects.lumc.nl/svn/mutalyzer/trunk@573 eb6bd6ab-9ccd-42b9-aceb-e2899b4a52f1
---
 mutalyzer/Scheduler.py      |  4 ++--
 mutalyzer/mapping.py        |  4 ++--
 mutalyzer/services/rpc.py   |  2 +-
 mutalyzer/website.py        |  4 ++--
 tests/test_mapping.py       | 19 ++++++++++++++++---
 tests/test_services_soap.py |  2 +-
 6 files changed, 24 insertions(+), 11 deletions(-)

diff --git a/mutalyzer/Scheduler.py b/mutalyzer/Scheduler.py
index e02744fc..f95f4ad6 100644
--- a/mutalyzer/Scheduler.py
+++ b/mutalyzer/Scheduler.py
@@ -505,13 +505,13 @@ Mutalyzer batch checker.""" % url)
                 variant = converter.correctChrVariant(variant)
 
                 #TODO: Parse the variant and check for c or g. This is ugly
-                if not(":c." in variant or ":g." in variant) :
+                if not(":c." in variant or ":n." in variant or ":g." in variant) :
                     #Bad name
                     grammar = Grammar(O)
                     grammar.parse(variant)
                 #if
 
-                if ":c." in variant :
+                if ":c." in variant or ":n." in variant :
                     # Do the c2chrom dance
                     variant = converter.c2chrom(variant)
                     # NOTE:
diff --git a/mutalyzer/mapping.py b/mutalyzer/mapping.py
index 4ecba590..9485fe40 100644
--- a/mutalyzer/mapping.py
+++ b/mutalyzer/mapping.py
@@ -281,7 +281,7 @@ class Converter(object) :
             2. Position in I{g.} notation
         @rtype: triple (integer, integer, integer)
         """
-        if Type == 'c' :
+        if Type in 'cn' :
             if Loc.IVSLoc:
                 ivs_number = int(Loc.IVSLoc.IVSNumber)
                 if ivs_number < 1 or ivs_number > C.numberOfIntrons():
@@ -698,7 +698,7 @@ class Converter(object) :
 
             #Check if n or c type
             info = self.crossmap.info()
-            if info[0] == '1' and info[1] == info[2] :
+            if info[0] == 1 and info[1] == info[2] :
                 mtype = 'n'
             else :
                 mtype = 'c'
diff --git a/mutalyzer/services/rpc.py b/mutalyzer/services/rpc.py
index 1cb4a7ac..4e4f8776 100644
--- a/mutalyzer/services/rpc.py
+++ b/mutalyzer/services/rpc.py
@@ -568,7 +568,7 @@ class MutalyzerService(ServiceBase):
         converter = Converter(build, O)
         variant = converter.correctChrVariant(variant)
 
-        if "c." in variant :
+        if "c." in variant or "n." in variant:
             result = [converter.c2chrom(variant)]
         elif "g." in variant :
             result = converter.chrom2c(variant, "list", gene=gene)
diff --git a/mutalyzer/website.py b/mutalyzer/website.py
index 15f5dcf4..c738a673 100644
--- a/mutalyzer/website.py
+++ b/mutalyzer/website.py
@@ -584,12 +584,12 @@ class PositionConverter:
             variant = converter.correctChrVariant(variant)
 
             if variant:
-                if not(":c." in variant or ":g." in variant):
+                if not(":c." in variant or ":n." in variant or ":g." in variant):
                     #Bad name
                     grammar = Grammar(output)
                     grammar.parse(variant)
 
-                if ":c." in variant:
+                if ":c." in variant or ":n." in variant:
                     # Do the c2chrom dance
                     variant = converter.c2chrom(variant)
 
diff --git a/tests/test_mapping.py b/tests/test_mapping.py
index 2499d016..084cd96e 100644
--- a/tests/test_mapping.py
+++ b/tests/test_mapping.py
@@ -37,7 +37,20 @@ class TestConverter():
         assert 'NM_003002.2:c.274G>T' in coding
         # Fix for r536: disable the -u and +d convention.
         #assert 'NR_028383.1:c.1-u2173C>A' in coding
-        assert 'NR_028383.1:c.-2173C>A' in coding
+        assert 'NR_028383.1:n.-2173C>A' in coding
+
+    def test_converter_non_coding(self):
+        """
+        Test with variant on non-coding transcript.
+        """
+        converter = self._converter('hg19')
+        genomic = converter.c2chrom('NR_028383.1:n.-2173C>A')
+        assert_equal(genomic, 'NC_000011.9:g.111959695G>T')
+        coding = converter.chrom2c(genomic, 'list')
+        assert 'NM_003002.2:c.274G>T' in coding
+        # Fix for r536: disable the -u and +d convention.
+        #assert 'NR_028383.1:c.1-u2173C>A' in coding
+        assert 'NR_028383.1:n.-2173C>A' in coding
 
     def test_converter_compound(self):
         """
@@ -48,7 +61,7 @@ class TestConverter():
         assert_equal(genomic, 'NC_000011.9:g.[111959695G>T;111959699A>G]')
         coding = converter.chrom2c(genomic, 'list')
         assert 'NM_003002.2:c.[274G>T;278A>G]' in coding
-        assert 'NR_028383.1:c.[-2173C>A;-2177T>C]' in coding
+        assert 'NR_028383.1:n.[-2173C>A;-2177T>C]' in coding
 
     def test_hla_cluster(self):
         """
@@ -76,7 +89,7 @@ class TestConverter():
         #assert 'NM_001145134.1:c.-138-u21_60del123456789' in coding
         #assert 'NR_021492.1:c.1-u5170_1-u4338del123456789' in coding
         assert 'NM_001145134.1:c.-159_60del123456789' in coding
-        assert 'NR_021492.1:c.-5170_-4338del123456789' in coding
+        assert 'NR_021492.1:n.-5170_-4338del123456789' in coding
 
     def test_S_Venkata_Suresh_Kumar(self):
         """
diff --git a/tests/test_services_soap.py b/tests/test_services_soap.py
index 8ac6c91f..8f1ba62c 100644
--- a/tests/test_services_soap.py
+++ b/tests/test_services_soap.py
@@ -152,7 +152,7 @@ class TestServicesSoap():
         assert_equal(type(r.string), list)
         # Fix for r536: disable the -u and +d convention.
         #assert 'XM_001715131.2:c.1155+d19483A>G' in r.string
-        assert 'XM_001715131.2:c.*19483A>G' in r.string
+        assert 'XM_001715131.2:n.*19483A>G' in r.string
 
     def test_gettranscriptsbygenename_valid(self):
         """
-- 
GitLab