diff commons/core/parsing/AxtParser.py @ 31:0ab839023fe4

Uploaded
author m-zytnicki
date Tue, 30 Apr 2013 14:33:21 -0400
parents 94ab73e8a190
children
line wrap: on
line diff
--- a/commons/core/parsing/AxtParser.py	Mon Apr 29 03:45:52 2013 -0400
+++ b/commons/core/parsing/AxtParser.py	Tue Apr 30 14:33:21 2013 -0400
@@ -93,17 +93,20 @@
 
         m = re.search(r"^\s*\d+\s+(\S+)\s+(\d+)\s+(\d+)\s+(\S+)\s+(\d+)\s+(\d+)\s+([+-])\s+\d+\s*$", line)
         if m != None:
+            #sys.exit("\nLine %d '%s' does not have an AXT format" % (self.currentLineNb, line))
+
             mapping = Mapping()
             subMapping = SubMapping()
     
+            offset = -1 if m.group(7) == "-" else 0
             subMapping.queryInterval.setName(m.group(4))
-            subMapping.queryInterval.setStart(min(int(m.group(5)), int(m.group(6))))
-            subMapping.queryInterval.setEnd(max(int(m.group(5)), int(m.group(6))))
+            subMapping.queryInterval.setStart(min(int(m.group(5)), int(m.group(6)))-1)
+            subMapping.queryInterval.setEnd(max(int(m.group(5)), int(m.group(6)))-1)
             subMapping.queryInterval.setDirection(m.group(7))
     
             subMapping.targetInterval.setChromosome(m.group(1))
-            subMapping.targetInterval.setStart(min(int(m.group(2)), int(m.group(3))))
-            subMapping.targetInterval.setEnd(max(int(m.group(2)), int(m.group(3))))
+            subMapping.targetInterval.setStart(min(int(m.group(2)), int(m.group(3))) + offset)
+            subMapping.targetInterval.setEnd(max(int(m.group(2)), int(m.group(3))) + offset)
             subMapping.targetInterval.setDirection(1)
     
             subMapping.setSize(min(subMapping.targetInterval.getSize(), subMapping.queryInterval.getSize()))
@@ -113,28 +116,39 @@
     
             mapping.setDirection(m.group(7))
             mapping.targetInterval.setChromosome(m.group(1))
-            mapping.targetInterval.setStart(min(int(m.group(2)), int(m.group(3))))
-            mapping.targetInterval.setEnd(max(int(m.group(2)), int(m.group(3))))
+            mapping.targetInterval.setStart(min(int(m.group(2)), int(m.group(3))) + offset)
+            mapping.targetInterval.setEnd(max(int(m.group(2)), int(m.group(3))) + offset)
     
             mapping.queryInterval.setName(m.group(4))
-            mapping.queryInterval.setStart(min(int(m.group(5)), int(m.group(6))))
-            mapping.queryInterval.setEnd(max(int(m.group(5)), int(m.group(6))))
+            mapping.queryInterval.setStart(min(int(m.group(5)), int(m.group(6)))-1)
+            mapping.queryInterval.setEnd(max(int(m.group(5)), int(m.group(6)))-1)
     
             mapping.setSize(min(mapping.targetInterval.getSize(), mapping.queryInterval.getSize()))
     
+            for line in self.handle:
+                string1 = line.strip()
+                self.currentLineNb += 1
+                break
+            for line in self.handle:
+                string2 = line.strip()
+                self.currentLineNb += 1
+                break
+            mapping.setNbMismatches(Utils.getHammingDistance(string1, string2))
+            mapping.setNbGaps(0)
+    
             self.currentMapping = mapping
-            return None
-        if self.queryLine == None:
-            self.queryLine = line
-            return None
-        self.subjectLine = line
-        seqLen = float(len(self.subjectLine))
-        dist = float(getHammingDistance(self.queryLine, self.subjectLine))
-        self.currentMapping.setNbMismatches(getHammingDistance(self.queryLine, self.subjectLine))
-        self.currentMapping.setNbGaps(0)
-        self.queryLine = None
-        self.subjectLine = None
-        return self.currentMapping
+        else:
+            if self.queryLine == None:
+                self.queryLine = line
+            else:
+                self.subjectLine = line
+                seqLen = float(len(self.subjectLine))
+                dist = float(getHammingDistance(self.queryLine, self.subjectLine))
+                identity = ((seqLen-dist)/seqLen) *100
+                self.currentMapping.setIdentity(identity)
+                self.queryLine = None
+                self.subjectLine = None
+                return self.currentMapping