Mercurial > repos > jankanis > blast2html
comparison blast2html.py @ 69:0c4ac210068b
handle reverse matches
| author | Jan Kanis <jan.code@jankanis.nl> |
|---|---|
| date | Wed, 18 Jun 2014 14:12:00 +0200 |
| parents | fa8a93bdefd7 |
| children | 371cd585e459 |
comparison
equal
deleted
inserted
replaced
| 68:fa8a93bdefd7 | 69:0c4ac210068b |
|---|---|
| 85 def alignment_pre(hsp): | 85 def alignment_pre(hsp): |
| 86 """Create the preformatted alignment blocks""" | 86 """Create the preformatted alignment blocks""" |
| 87 | 87 |
| 88 step = 60 | 88 step = 60 |
| 89 | 89 |
| 90 def split(txt): | |
| 91 return [txt[i:i+step] for i in range(0, len(txt), step)] | |
| 92 | |
| 93 qfrom = int(hsp['Hsp_query-from']) | 90 qfrom = int(hsp['Hsp_query-from']) |
| 94 qto = int(hsp['Hsp_query-to']) | 91 qto = int(hsp['Hsp_query-to']) |
| 92 qframe = int(hsp['Hsp_query-frame']) | |
| 95 hfrom = int(hsp['Hsp_hit-from']) | 93 hfrom = int(hsp['Hsp_hit-from']) |
| 96 hto = int(hsp['Hsp_hit-to']) | 94 hto = int(hsp['Hsp_hit-to']) |
| 95 hframe = int(hsp['Hsp_hit-frame']) | |
| 97 qseq = hsp.Hsp_qseq.text | 96 qseq = hsp.Hsp_qseq.text |
| 98 midline = hsp.Hsp_midline.text | 97 midline = hsp.Hsp_midline.text |
| 99 hseq = hsp.Hsp_hseq.text | 98 hseq = hsp.Hsp_hseq.text |
| 100 | 99 |
| 101 offset = 0 | 100 if not qframe in [1, -1]: |
| 101 warnings.warn("Error in BlastXML input: Hsp node {} has a Hsp_query-frame of {}".format(nodeid(hsp), qframe)) | |
| 102 qframe = -1 if qframe < 0 else 1 | |
| 103 if not hframe in [1, -1]: | |
| 104 warnings.warn("Error in BlastXML input: Hsp node {} has a Hsp_hit-frame of {}".format(nodeid(hsp), hframe)) | |
| 105 hframe = -1 if hframe < 0 else 1 | |
| 106 | |
| 107 def split(txt): | |
| 108 return [txt[i:i+step] for i in range(0, len(txt), step)] | |
| 109 | |
| 102 for qs, mid, hs, offset in zip(split(qseq), split(midline), split(hseq), range(0, len(qseq), step)): | 110 for qs, mid, hs, offset in zip(split(qseq), split(midline), split(hseq), range(0, len(qseq), step)): |
| 103 yield ( | 111 yield ( |
| 104 "Query {:>7} {} {}\n".format(qfrom+offset, qs, qfrom+offset+len(qs)-1) + | 112 "Query {:>7} {} {}\n".format(qfrom+offset*qframe, qs, qfrom+(offset+len(qs)-1)*qframe) + |
| 105 " {:7} {}\n".format('', mid) + | 113 " {:7} {}\n".format('', mid) + |
| 106 "Subject{:>7} {} {}".format(hfrom+offset, hs, hfrom+offset+len(hs)-1) | 114 "Subject{:>7} {} {}".format(hfrom+offset*hframe, hs, hfrom+(offset+len(hs)-1)*hframe) |
| 107 ) | 115 ) |
| 108 | 116 |
| 109 if qfrom+len(qseq)-1 != qto: | 117 if qfrom+(len(qseq)-1)*qframe != qto: |
| 110 warnings.warn("Error in BlastXML input: Hsp node {} qseq length mismatch: from {} to {} length {}".format( | 118 warnings.warn("Error in BlastXML input: Hsp node {} qseq length mismatch: from {} to {} length {}".format( |
| 111 nodeid(hsp), qfrom, qto, len(qseq))) | 119 nodeid(hsp), qfrom, qto, len(qseq))) |
| 112 if hfrom+len(hseq)-1 != hto: | 120 if hfrom+(len(hseq)-1)*hframe != hto: |
| 113 warnings.warn("Error in BlastXML input: Hsp node {} hseq length mismatch: from {} to {} length {}".format( | 121 warnings.warn("Error in BlastXML input: Hsp node {} hseq length mismatch: from {} to {} length {}".format( |
| 114 nodeid(hsp), hfrom, hto, len(hseq))) | 122 nodeid(hsp), hfrom, hto, len(hseq))) |
| 115 | 123 |
| 116 | 124 |
| 117 | 125 |
