comparison blast2html.py @ 67:19c48f2ec775

wrap alignments if they are too long
author Jan Kanis <jan.code@jankanis.nl>
date Tue, 17 Jun 2014 18:07:02 +0200
parents 4217bb9cf1d3
children fa8a93bdefd7
comparison
equal deleted inserted replaced
66:e3dd39906eef 67:19c48f2ec775
81 return hitid 81 return hitid
82 82
83 83
84 @filter 84 @filter
85 def alignment_pre(hsp): 85 def alignment_pre(hsp):
86 return ( 86 step = 60
87 "Query {:>7s} {} {}\n".format(hsp['Hsp_query-from'].text, hsp.Hsp_qseq, hsp['Hsp_query-to']) + 87
88 " {:7s} {}\n".format('', hsp.Hsp_midline) + 88 def split(txt):
89 "Subject{:>7s} {} {}".format(hsp['Hsp_hit-from'].text, hsp.Hsp_hseq, hsp['Hsp_hit-to']) 89 return [txt[i:i+step] for i in range(0, len(txt), step)]
90 ) 90
91 qfrom = int(hsp['Hsp_query-from'])
92 qto = int(hsp['Hsp_query-to'])
93 hfrom = int(hsp['Hsp_hit-from'])
94 hto = int(hsp['Hsp_hit-to'])
95 qseq = hsp.Hsp_qseq.text
96 midline = hsp.Hsp_midline.text
97 hseq = hsp.Hsp_hseq.text
98
99 offset = 0
100 for qs, mid, hs, offset in zip(split(qseq), split(midline), split(hseq), range(0, len(qseq), step)):
101 yield (
102 "Query {:>7} {} {}\n".format(qfrom+offset, qs, qfrom+len(qs)-1) +
103 " {:7} {}\n".format('', mid) +
104 "Subject{:>7} {} {}".format(hfrom+offset, hs, hfrom+len(hs)-1)
105 )
106
107 if qfrom+len(qseq)-1 != qto:
108 warnings.warn("Error in BlastXML input: Hsp node {} qseq length mismatch: from {} to {} length {}".format(
109 nodeid(hsp), qfrom, qto, len(qseq)))
110 if hfrom+len(hseq)-1 != hto:
111 warnings.warn("Error in BlastXML input: Hsp node {} hseq length mismatch: from {} to {} length {}".format(
112 nodeid(hsp), hfrom, hto, len(hseq)))
113
114
91 115
92 @filter('len') 116 @filter('len')
93 def blastxml_len(node): 117 def blastxml_len(node):
94 if node.tag == 'Hsp': 118 if node.tag == 'Hsp':
95 return int(node['Hsp_align-len']) 119 return int(node['Hsp_align-len'])