Repository 'blast2html'
hg clone https://toolshed.g2.bx.psu.edu/repos/jankanis/blast2html

Changeset 69:0c4ac210068b (2014-06-18)
Previous changeset 68:fa8a93bdefd7 (2014-06-18) Next changeset 70:0ef071bba164 (2014-06-18)
Commit message:
handle reverse matches
modified:
blast2html.py
test-data/blast xml example1.html
b
diff -r fa8a93bdefd7 -r 0c4ac210068b blast2html.py
--- a/blast2html.py Wed Jun 18 12:25:37 2014 +0200
+++ b/blast2html.py Wed Jun 18 14:12:00 2014 +0200
[
@@ -87,29 +87,37 @@
     
     step = 60
 
-    def split(txt):
-        return [txt[i:i+step] for i in range(0, len(txt), step)]
-
     qfrom = int(hsp['Hsp_query-from'])
     qto = int(hsp['Hsp_query-to'])
+    qframe = int(hsp['Hsp_query-frame'])
     hfrom = int(hsp['Hsp_hit-from'])
     hto = int(hsp['Hsp_hit-to'])
+    hframe = int(hsp['Hsp_hit-frame'])
     qseq = hsp.Hsp_qseq.text
     midline = hsp.Hsp_midline.text
     hseq = hsp.Hsp_hseq.text
+
+    if not qframe in [1, -1]:
+        warnings.warn("Error in BlastXML input: Hsp node {} has a Hsp_query-frame of {}".format(nodeid(hsp), qframe))
+        qframe = -1 if qframe < 0 else 1
+    if not hframe in [1, -1]:
+        warnings.warn("Error in BlastXML input: Hsp node {} has a Hsp_hit-frame of {}".format(nodeid(hsp), hframe))
+        hframe = -1 if hframe < 0 else 1
     
-    offset = 0
+    def split(txt):
+        return [txt[i:i+step] for i in range(0, len(txt), step)]
+
     for qs, mid, hs, offset in zip(split(qseq), split(midline), split(hseq), range(0, len(qseq), step)):
         yield (
-            "Query  {:>7}  {}  {}\n".format(qfrom+offset, qs, qfrom+offset+len(qs)-1) +
+            "Query  {:>7}  {}  {}\n".format(qfrom+offset*qframe, qs, qfrom+(offset+len(qs)-1)*qframe) +
             "       {:7}  {}\n".format('', mid) +
-            "Subject{:>7}  {}  {}".format(hfrom+offset, hs, hfrom+offset+len(hs)-1)
+            "Subject{:>7}  {}  {}".format(hfrom+offset*hframe, hs, hfrom+(offset+len(hs)-1)*hframe)
         )
         
-    if qfrom+len(qseq)-1 != qto:
+    if qfrom+(len(qseq)-1)*qframe != qto:
         warnings.warn("Error in BlastXML input: Hsp node {} qseq length mismatch: from {} to {} length {}".format(
             nodeid(hsp), qfrom, qto, len(qseq)))
-    if hfrom+len(hseq)-1 != hto:
+    if hfrom+(len(hseq)-1)*hframe != hto:
         warnings.warn("Error in BlastXML input: Hsp node {} hseq length mismatch: from {} to {} length {}".format(
             nodeid(hsp), hfrom, hto, len(hseq)))
 
b
diff -r fa8a93bdefd7 -r 0c4ac210068b test-data/blast xml example1.html
--- a/test-data/blast xml example1.html Wed Jun 18 12:25:37 2014 +0200
+++ b/test-data/blast xml example1.html Wed Jun 18 14:12:00 2014 +0200
b
b'@@ -6667,7 +6667,7 @@\n \n                   <pre class=alignmentgraphic>Query        2  GTCCGTCG  9\n                 ||||||||\n-Subject    177  GTCCGTCG  184</pre>\n+Subject    177  GTCCGTCG  170</pre>\n                 </div>\n                 <div class=hotspot id=hotspot1-26-3>\n                   <p class=range>\n@@ -6715,7 +6715,7 @@\n \n                   <pre class=alignmentgraphic>Query        2  GTCCGTC  8\n                 |||||||\n-Subject   2048  GTCCGTC  2054</pre>\n+Subject   2048  GTCCGTC  2042</pre>\n                 </div>\n                 <div class=hotspot id=hotspot1-26-5>\n                   <p class=range>\n@@ -6853,7 +6853,7 @@\n \n                   <pre class=alignmentgraphic>Query        8  CGTGAAGA  15\n                 ||||||||\n-Subject   1634  CGTGAAGA  1641</pre>\n+Subject   1634  CGTGAAGA  1627</pre>\n                 </div>\n                 <div class=hotspot id=hotspot1-28-3>\n                   <p class=range>\n@@ -6994,7 +6994,7 @@\n \n                   <pre class=alignmentgraphic>Query        8  CGTGAAGA  15\n                 ||||||||\n-Subject   1634  CGTGAAGA  1641</pre>\n+Subject   1634  CGTGAAGA  1627</pre>\n                 </div>\n                 <div class=hotspot id=hotspot1-29-3>\n                   <p class=range>\n@@ -7111,7 +7111,7 @@\n \n                   <pre class=alignmentgraphic>Query        7  TCGTGAAGA  15\n                 |||||||||\n-Subject    298  TCGTGAAGA  306</pre>\n+Subject    298  TCGTGAAGA  290</pre>\n                 </div>\n                 <div class=hotspot id=hotspot1-31-2>\n                   <p class=range>\n@@ -7672,7 +7672,7 @@\n \n                   <pre class=alignmentgraphic>Query        7  TCGTGAAGA  15\n                 |||||||||\n-Subject    305  TCGTGAAGA  313</pre>\n+Subject    305  TCGTGAAGA  297</pre>\n                 </div>\n                 <div class=hotspot id=hotspot1-37-2>\n                   <p class=range>\n@@ -7813,7 +7813,7 @@\n \n                   <pre class=alignmentgraphic>Query       10  TGAAGAG  16\n                 |||||||\n-Subject   1569  TGAAGAG  1575</pre>\n+Subject   1569  TGAAGAG  1563</pre>\n                 </div>\n \n               </div>\n@@ -7924,7 +7924,7 @@\n \n                   <pre class=alignmentgraphic>Query       10  TGAAGAG  16\n                 |||||||\n-Subject   1569  TGAAGAG  1575</pre>\n+Subject   1569  TGAAGAG  1563</pre>\n                 </div>\n \n               </div>\n@@ -8392,7 +8392,7 @@\n \n                   <pre class=alignmentgraphic>Query        8  CGTGAAGA  15\n                 ||||||||\n-Subject   1634  CGTGAAGA  1641</pre>\n+Subject   1634  CGTGAAGA  1627</pre>\n                 </div>\n                 <div class=hotspot id=hotspot1-45-3>\n                   <p class=range>\n@@ -8551,7 +8551,7 @@\n \n                   <pre class=alignmentgraphic>Query        8  CGTGAAGA  15\n                 ||||||||\n-Subject   1634  CGTGAAGA  1641</pre>\n+Subject   1634  CGTGAAGA  1627</pre>\n                 </div>\n                 <div class=hotspot id=hotspot1-46-3>\n                   <p class=range>\n@@ -8716,7 +8716,7 @@\n \n                   <pre class=alignmentgraphic>Query       10  TGAAGAG  16\n                 |||||||\n-Subject   1569  TGAAGAG  1575</pre>\n+Subject   1569  TGAAGAG  1563</pre>\n                 </div>\n \n               </div>\n@@ -8809,7 +8809,7 @@\n \n                   <pre class=alignmentgraphic>Query       10  TGAAGAG  16\n                 |||||||\n-Subject   1569  TGAAGAG  1575</pre>\n+Subject   1569  TGAAGAG  1563</pre>\n                 </div>\n \n               </div>\n@@ -8878,7 +8878,7 @@\n \n                   <pre class=alignmentgraphic>Query        8  CGTGAAGA  15\n                 ||||||||\n-Subject   1634  CGTGAAGA  1641</pre>\n+Subject   1634  CGTGAAGA  1627</pre>\n                 </div>\n                 <div class=hotspot id=hotspot1-49-3>\n                   <p class=range>\n@@ -9043,7 +9043,7 @@\n \n                   <pre class=alignmentgraphic>Query       10  TGAAGAG  16\n                 |||||||\n-Subject   1569  TGAAGAG  1575</pre>\n+Subject   1569  TGAAGA'..b'y        7  TCGTGAAGA  15\n                 |||||||||\n-Subject    305  TCGTGAAGA  313</pre>\n+Subject    305  TCGTGAAGA  297</pre>\n                 </div>\n                 <div class=hotspot id=hotspot1-63-2>\n                   <p class=range>\n@@ -10093,7 +10093,7 @@\n \n                   <pre class=alignmentgraphic>Query        7  TCGTGAAGA  15\n                 |||||||||\n-Subject    305  TCGTGAAGA  313</pre>\n+Subject    305  TCGTGAAGA  297</pre>\n                 </div>\n                 <div class=hotspot id=hotspot1-64-2>\n                   <p class=range>\n@@ -10186,7 +10186,7 @@\n \n                   <pre class=alignmentgraphic>Query        7  TCGTGAAGA  15\n                 |||||||||\n-Subject    305  TCGTGAAGA  313</pre>\n+Subject    305  TCGTGAAGA  297</pre>\n                 </div>\n                 <div class=hotspot id=hotspot1-65-2>\n                   <p class=range>\n@@ -10279,7 +10279,7 @@\n \n                   <pre class=alignmentgraphic>Query        7  TCGTGAAGA  15\n                 |||||||||\n-Subject    305  TCGTGAAGA  313</pre>\n+Subject    305  TCGTGAAGA  297</pre>\n                 </div>\n                 <div class=hotspot id=hotspot1-66-2>\n                   <p class=range>\n@@ -10348,7 +10348,7 @@\n \n                   <pre class=alignmentgraphic>Query        7  TCGTGAAGA  15\n                 |||||||||\n-Subject    305  TCGTGAAGA  313</pre>\n+Subject    305  TCGTGAAGA  297</pre>\n                 </div>\n                 <div class=hotspot id=hotspot1-67-2>\n                   <p class=range>\n@@ -10441,7 +10441,7 @@\n \n                   <pre class=alignmentgraphic>Query        7  TCGTGAAGA  15\n                 |||||||||\n-Subject    305  TCGTGAAGA  313</pre>\n+Subject    305  TCGTGAAGA  297</pre>\n                 </div>\n                 <div class=hotspot id=hotspot1-68-2>\n                   <p class=range>\n@@ -10534,7 +10534,7 @@\n \n                   <pre class=alignmentgraphic>Query        7  TCGTGAAGA  15\n                 |||||||||\n-Subject    305  TCGTGAAGA  313</pre>\n+Subject    305  TCGTGAAGA  297</pre>\n                 </div>\n                 <div class=hotspot id=hotspot1-69-2>\n                   <p class=range>\n@@ -10627,7 +10627,7 @@\n \n                   <pre class=alignmentgraphic>Query        7  TCGTGAAGA  15\n                 |||||||||\n-Subject    305  TCGTGAAGA  313</pre>\n+Subject    305  TCGTGAAGA  297</pre>\n                 </div>\n                 <div class=hotspot id=hotspot1-70-2>\n                   <p class=range>\n@@ -10768,7 +10768,7 @@\n \n                   <pre class=alignmentgraphic>Query        7  TCGTGAAGA  15\n                 |||||||||\n-Subject    305  TCGTGAAGA  313</pre>\n+Subject    305  TCGTGAAGA  297</pre>\n                 </div>\n                 <div class=hotspot id=hotspot1-71-2>\n                   <p class=range>\n@@ -11263,7 +11263,7 @@\n \n                   <pre class=alignmentgraphic>Query        7  TCGTGAAGA  15\n                 |||||||||\n-Subject    305  TCGTGAAGA  313</pre>\n+Subject    305  TCGTGAAGA  297</pre>\n                 </div>\n                 <div class=hotspot id=hotspot1-76-2>\n                   <p class=range>\n@@ -11380,7 +11380,7 @@\n \n                   <pre class=alignmentgraphic>Query        7  TCGTGAAGA  15\n                 |||||||||\n-Subject    305  TCGTGAAGA  313</pre>\n+Subject    305  TCGTGAAGA  297</pre>\n                 </div>\n                 <div class=hotspot id=hotspot1-77-2>\n                   <p class=range>\n@@ -11473,7 +11473,7 @@\n \n                   <pre class=alignmentgraphic>Query        7  TCGTGAAGA  15\n                 |||||||||\n-Subject    305  TCGTGAAGA  313</pre>\n+Subject    305  TCGTGAAGA  297</pre>\n                 </div>\n                 <div class=hotspot id=hotspot1-78-2>\n                   <p class=range>\n@@ -12961,7 +12961,7 @@\n \n                   <pre class=alignmentgraphic>Query        5  CGTCGTGA  12\n                 ||||||||\n-Subject     52  CGTCGTGA  59</pre>\n+Subject     52  CGTCGTGA  45</pre>\n                 </div>\n \n               </div>\n'