annotate cpt_fasta_charges/fasta_charges.py @ 0:7443c98a4e3c draft

Uploaded
author cpt
date Fri, 17 Jun 2022 12:37:20 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
1 #!/usr/bin/env python
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
2 import argparse
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
3 from Bio import SeqIO
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
4 import logging
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
5
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
6 logging.basicConfig(level=logging.INFO)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
7 log = logging.getLogger(name="charges")
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
8
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
9 HTML_HEADER = "<html><head><title>Charges Report</title></head><body>"
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
10 HTML_FOOTER = "</body></html>"
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
11
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
12 SVG_HEADER = '<svg width="%i" height="%i" xmlns="http://www.w3.org/2000/svg">\n' # % (calcWidth, calcHeight)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
13 SVG_FOOTER = "</svg>"
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
14
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
15 FULL_AA = [
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
16 "H",
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
17 "S",
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
18 "Q",
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
19 "T",
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
20 "N",
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
21 "C",
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
22 "Y",
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
23 "A",
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
24 "V",
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
25 "I",
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
26 "L",
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
27 "M",
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
28 "P",
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
29 "F",
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
30 "W",
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
31 "G",
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
32 "E",
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
33 "R",
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
34 "D",
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
35 "K",
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
36 ]
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
37
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
38
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
39 def charges_html(svg, fasta, aa, fgColor, bgColor, width=120):
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
40 colour_scheme = zip([x.upper() for x in aa], bgColor, fgColor)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
41 copy_colour_scheme = zip([x.upper() for x in aa], bgColor, fgColor)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
42
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
43 # CSS and header styling
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
44 css = """<style type="text/css">
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
45 .list li { list-style: none; margin:10px }
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
46 .info { float:left; width:20px }
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
47 pre { font-size:1.3em }
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
48 """
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
49 info = '<h1>Charges</h1><h3>Legend</h3><ul class="list">'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
50 for group in colour_scheme:
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
51 css += ".%s{ background: %s; color: %s}\n" % group
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
52 info += '<li><span class="%s" style="padding:5px">%s</span></li>\n' % (
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
53 group[0],
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
54 group[0],
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
55 )
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
56 css += "</style>"
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
57 info += "</ul>"
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
58
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
59 # Pre-calculate, so we can use for testing 'in'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
60 match_list = [group[0] for group in copy_colour_scheme]
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
61
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
62 page = ""
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
63 # Parse sequences from fasta file
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
64 for record in SeqIO.parse(fasta, "fasta"):
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
65 page += "<pre><h3>&gt;%s %s</h3>\n" % (record.id, record.description)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
66 seq = list(str(record.seq).upper())
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
67
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
68 idx = 0
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
69 for i in range(0, len(seq), width):
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
70 line_charges = []
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
71 line_residues = seq[i : i + width]
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
72 line_numbers = []
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
73
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
74 for char in range(len(line_residues)):
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
75 if line_residues[char] in "KRkr":
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
76 line_charges.append("+")
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
77 elif line_residues[char] in "DEde":
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
78 line_charges.append("-")
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
79 else:
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
80 line_charges.append(" ")
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
81
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
82 # Could be swapped out for math with i+char...
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
83 idx += 1
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
84 if idx % 10 == 0:
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
85 line_numbers.append("%10s" % idx)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
86
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
87 # Replace with <span>
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
88 for m in match_list:
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
89 if line_residues[char].upper() in m:
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
90 line_residues[char] = '<span class="%s">%s</span>' % (
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
91 m,
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
92 line_residues[char],
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
93 )
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
94
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
95 page += "".join(line_charges) + "\n"
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
96 page += "".join(line_residues) + "\n"
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
97 page += "".join(line_numbers) + "\n"
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
98 page += "\n"
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
99 page += "</pre>"
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
100 return HTML_HEADER + css + info + page + HTML_FOOTER
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
101
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
102
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
103 def charges_svg(svg, fasta, aa, fgColor, bgColor, width=120):
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
104 colour_scheme = zip([x.upper() for x in aa], bgColor, fgColor)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
105
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
106 svgWidth = 1100
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
107
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
108 # CSS and header styling
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
109 classList = []
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
110 classes = '<style type="text/css">\n<![CDATA[\n'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
111
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
112 defClass = ""
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
113 for x in FULL_AA:
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
114 addAA = True
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
115 for y in aa:
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
116 if x in y:
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
117 addAA = False
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
118 if addAA:
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
119 defClass += x
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
120
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
121 defBox = "#ffffff"
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
122 defText = "#000000"
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
123
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
124 for group in colour_scheme:
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
125 classList.append(group[0])
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
126 classes += "text.text_%s{fill: %s;}\n" % (group[0], group[2])
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
127 classes += "rect.rect_%s{fill: %s; stroke: %s;}\n" % (
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
128 group[0],
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
129 group[1],
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
130 group[1],
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
131 )
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
132 # info += '<li><span class="%s" style="padding:5px">%s</span></li>\n' % (group[0], group[0])
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
133 if defClass != "":
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
134 classes += "text.text_%s{fill: %s;}\n" % (defClass, defText)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
135 classes += "rect.rect_%s{fill: %s; stroke: %s;}\n" % (defClass, defBox, defBox)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
136 classList.append(defClass)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
137 classes += "text.info_text{white-space: pre;}\n"
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
138 classes += "rect.rEven{fill: #fdfdfd; stroke: #fbfbfb;}\n"
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
139 classes += "rect.rOdd{fill: #f2f2fc; stroke: #fbfbfb;}\n"
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
140 classes += "]]></style>\n"
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
141 body = ""
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
142 groups = ""
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
143 # Pre-calculate, so we can use for testing 'in'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
144
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
145 match_list = aa
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
146 prevIndex = -1
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
147 boxLen = 0
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
148 page = ""
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
149 title = ""
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
150
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
151 yInd = 60
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
152 yInc = 15
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
153 seqIndent = 35
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
154 idIndent = 20
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
155 letterLen = 8.4375
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
156 recNum = -1
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
157
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
158 title += (
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
159 '<text x="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
160 + str(idIndent * 0.5)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
161 + '" y="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
162 + str(yInd)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
163 + '" style="font-weight:bold; font-size:40px">Charges</text>\n'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
164 )
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
165 yInd += 2 * yInc
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
166 title += (
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
167 '<text x="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
168 + str(idIndent)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
169 + '" y="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
170 + str(yInd)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
171 + '" style="font-size:18px">Legend:</text>\n'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
172 )
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
173 yInd += 2 * yInc
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
174
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
175 for i in range(len(classList)):
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
176 title += (
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
177 '<rect x="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
178 + str(seqIndent)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
179 + '" y="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
180 + str(yInd - yInc + 2)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
181 + '" width="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
182 + str(len(classList[i]) * letterLen)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
183 + '" height="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
184 + str(yInc)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
185 + '" class="rect_%s"/>\n' % classList[i]
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
186 )
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
187 title += (
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
188 '<text x="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
189 + str(seqIndent)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
190 + '" y="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
191 + str(yInd)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
192 + '" class="text_%s" font-family="monospace" font-size="14">%s</text>\n'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
193 % (classList[i], classList[i])
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
194 )
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
195 yInd += yInc + 3
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
196 yInd += yInc * 1.5
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
197
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
198 # Parse sequences from fasta file
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
199 for record in SeqIO.parse(fasta, "fasta"):
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
200
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
201 recNum += 1
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
202 seqHeader = (
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
203 '<g><text x="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
204 + str(idIndent)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
205 + '" y="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
206 + str(yInd)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
207 + '" style="font-weight:bold">&gt;%s %s</text>\n'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
208 % (record.id, record.description)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
209 )
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
210 body += seqHeader
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
211 seq = list(str(record.seq).upper())
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
212 yTop = yInd - yInc - 3
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
213 yInd += yInc
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
214 idx = 0
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
215 for i in range(0, len(seq), width):
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
216 line_charges = []
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
217 line_residues = seq[i : i + width]
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
218 line_numbers = []
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
219
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
220 boxList = []
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
221 groupList = []
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
222 seqList = []
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
223 prevIndex = -1
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
224 boxLen = 0
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
225 for char in range(len(line_residues)):
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
226
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
227 thisInd = 0
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
228 for x in match_list:
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
229
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
230 if line_residues[char] in x:
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
231 break
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
232 thisInd += 1
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
233
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
234 if thisInd == len(match_list):
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
235 thisInd = -1
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
236
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
237 if char != 0 and thisInd != prevIndex:
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
238 boxList.append(boxLen)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
239 seqList.append((line_residues[char - boxLen : char]))
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
240 groupList.append(prevIndex)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
241 boxLen = 0
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
242 prevIndex = thisInd
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
243 boxLen += 1
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
244
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
245 if line_residues[char] in "KRkr":
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
246 line_charges.append("+")
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
247 elif line_residues[char] in "DEde":
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
248 line_charges.append("-")
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
249 else:
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
250 line_charges.append(" ")
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
251
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
252 # Could be swapped out for math with i+char...
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
253 idx += 1
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
254 if idx % 10 == 0:
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
255 line_numbers.append("%10s" % idx)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
256
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
257 # Replace with <span>
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
258 # for m in match_list:
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
259 # if line_residues[char].upper() in m:
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
260 # line_residues[char] = '<span class="%s">%s</span>' % (m, line_residues[char])
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
261
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
262 seqList.append((line_residues[-boxLen:]))
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
263 boxList.append(boxLen)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
264 groupList.append(prevIndex)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
265 # Write line charges
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
266 line = "".join(line_charges)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
267 body += (
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
268 '<text x="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
269 + str(seqIndent)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
270 + '" y="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
271 + str(yInd)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
272 + '" class="info_text" font-family="monospace" font-size="14">%s</text>\n'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
273 % line
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
274 )
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
275 yInd += yInc
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
276 # Write sequence
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
277 sumSeq = 0
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
278 for i in range(len(seqList)):
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
279 res = ""
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
280 for sub in seqList[i]:
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
281 res += sub
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
282 body += (
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
283 '<rect x="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
284 + str(0.5 + seqIndent + (letterLen * sumSeq))
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
285 + '" y="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
286 + str(yInd - yInc + 2)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
287 + '" width="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
288 + str(boxList[i] * letterLen)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
289 + '" height="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
290 + str(yInc)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
291 + '" class="rect_%s"/>\n' % classList[groupList[i]]
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
292 )
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
293 body += (
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
294 '<text x="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
295 + str(seqIndent + (letterLen * sumSeq))
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
296 + '" y="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
297 + str(yInd)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
298 + '" class="text_%s" font-family="monospace" font-size="14">%s</text>\n'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
299 % (classList[groupList[i]], res)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
300 )
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
301 sumSeq += len(seqList[i])
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
302 yInd += yInc
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
303 # Write numbers
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
304 line = "".join(line_numbers) + "\n"
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
305 body += (
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
306 '<text x="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
307 + str(seqIndent)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
308 + '" y="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
309 + str(yInd)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
310 + '" class="info_text" font-size="14" font-family="monospace">%s</text>\n'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
311 % line
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
312 )
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
313 yInd += yInc
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
314
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
315 body += "</g>\n"
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
316 yInd += yInc
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
317 if recNum % 2 == 0:
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
318 groups += (
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
319 '<rect x="0" y="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
320 + str(yTop)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
321 + '" width="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
322 + str(svgWidth + 1)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
323 + '" height="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
324 + str(yInd - yTop)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
325 + '" class="rEven"/>\n'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
326 )
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
327 else:
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
328 groups += (
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
329 '<rect x="0" y="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
330 + str(yTop)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
331 + '" width="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
332 + str(svgWidth + 1)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
333 + '" height="'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
334 + str(yInd - yTop)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
335 + '" class="rOdd"/>\n'
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
336 )
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
337 svgHeight = yInd
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
338
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
339 return (
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
340 (SVG_HEADER % (svgWidth, svgHeight))
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
341 + title
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
342 + classes
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
343 + groups
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
344 + body
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
345 + SVG_FOOTER
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
346 )
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
347
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
348
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
349 if __name__ == "__main__":
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
350 parser = argparse.ArgumentParser(description="Top related genomes")
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
351 parser.add_argument("--svg", action="store_true")
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
352 parser.add_argument("fasta", type=argparse.FileType("r"), help="Fasta protein file")
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
353 parser.add_argument("--width", type=int, help="Plot width", default=120)
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
354 parser.add_argument("--aa", nargs="+")
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
355 parser.add_argument("--fgColor", nargs="+")
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
356 parser.add_argument("--bgColor", nargs="+")
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
357
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
358 args = parser.parse_args()
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
359 if args.svg:
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
360 print(charges_svg(**vars(args)))
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
361 else:
7443c98a4e3c Uploaded
cpt
parents:
diff changeset
362 print(charges_html(**vars(args)))