Mercurial > repos > cpt > cpt_phageqc_annotations
comparison cpt_phageqc_annotation/phageqc_report_full.html @ 0:c3140b08d703 draft default tip
Uploaded
author | cpt |
---|---|
date | Fri, 17 Jun 2022 13:00:50 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:c3140b08d703 |
---|---|
1 <!DOCTYPE html> | |
2 <html lang="en"> | |
3 <head> | |
4 <meta charset="utf-8"> | |
5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |
6 <meta name="viewport" content="width=device-width, initial-scale=1"> | |
7 <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> | |
8 <meta name="description" content=""> | |
9 <meta name="author" content=""> | |
10 <title>Phage QC on {{record_name}} - {{score}}</title> | |
11 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css"> | |
12 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css"> | |
13 | |
14 <style type="text/css"> | |
15 /* | |
16 * Base structure | |
17 */ | |
18 | |
19 /* Move down content because we have a fixed navbar that is 50px tall */ | |
20 body { | |
21 padding-top: 50px; | |
22 } | |
23 | |
24 h3:before { | |
25 display: block; | |
26 content: " "; | |
27 margin-top: -50px; | |
28 height: 50px; | |
29 visibility: hidden; | |
30 } | |
31 | |
32 /* | |
33 * Global add-ons | |
34 */ | |
35 | |
36 .sub-header { | |
37 padding-bottom: 10px; | |
38 border-bottom: 1px solid #eee; | |
39 } | |
40 | |
41 /* | |
42 * Top navigation | |
43 * Hide default border to remove 1px line. | |
44 */ | |
45 .navbar-fixed-top { | |
46 border: 0; | |
47 } | |
48 | |
49 /* | |
50 * Sidebar | |
51 */ | |
52 | |
53 /* Hide for mobile, show later */ | |
54 .sidebar { | |
55 display: none; | |
56 } | |
57 @media (min-width: 768px) { | |
58 .sidebar { | |
59 position: fixed; | |
60 top: 51px; | |
61 bottom: 0; | |
62 left: 0; | |
63 z-index: 1000; | |
64 display: block; | |
65 padding: 20px; | |
66 overflow-x: hidden; | |
67 overflow-y: auto; /* Scrollable contents if viewport is shorter than content. */ | |
68 background-color: #f5f5f5; | |
69 border-right: 1px solid #eee; | |
70 } | |
71 } | |
72 | |
73 /* Sidebar navigation */ | |
74 .nav-sidebar { | |
75 margin-right: -21px; /* 20px padding + 1px border */ | |
76 margin-bottom: 20px; | |
77 margin-left: -20px; | |
78 } | |
79 .nav-sidebar > li > a { | |
80 padding-right: 20px; | |
81 padding-left: 20px; | |
82 } | |
83 .nav-sidebar > .active > a, | |
84 .nav-sidebar > .active > a:hover, | |
85 .nav-sidebar > .active > a:focus { | |
86 color: #fff; | |
87 background-color: #428bca; | |
88 } | |
89 | |
90 | |
91 /* | |
92 * Main content | |
93 */ | |
94 | |
95 .main { | |
96 padding: 20px; | |
97 } | |
98 @media (min-width: 768px) { | |
99 .main { | |
100 padding-right: 40px; | |
101 padding-left: 40px; | |
102 } | |
103 } | |
104 .main .page-header { | |
105 margin-top: 0; | |
106 } | |
107 | |
108 | |
109 /* | |
110 * Placeholder dashboard ideas | |
111 */ | |
112 | |
113 .placeholders { | |
114 margin-bottom: 30px; | |
115 text-align: center; | |
116 } | |
117 .placeholders h4 { | |
118 margin-bottom: 0; | |
119 } | |
120 .placeholder { | |
121 margin-bottom: 20px; | |
122 } | |
123 .placeholder img { | |
124 display: inline-block; | |
125 border-radius: 50%; | |
126 } | |
127 | |
128 td.moron { | |
129 font-size: 150%; | |
130 padding: 0px; | |
131 color: gray; | |
132 } | |
133 .strand_emph { | |
134 text-decoration: underline; | |
135 color: black; | |
136 } | |
137 | |
138 </style> | |
139 <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> | |
140 <!--[if lt IE 9]> | |
141 <script src="//oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> | |
142 <script src="//oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> | |
143 <![endif]--> | |
144 </head> | |
145 <body> | |
146 | |
147 <nav class="navbar navbar-inverse navbar-fixed-top"> | |
148 <div class="container-fluid"> | |
149 <div class="navbar-header"> | |
150 <a class="navbar-brand" href="#">Phage QC on {{record_name}}</a> | |
151 </div> | |
152 </div> | |
153 </nav> | |
154 | |
155 <div class="container-fluid"> | |
156 <div class="row"> | |
157 <div class="col-sm-3 col-md-2 sidebar"> | |
158 <ul class="nav nav-sidebar"> | |
159 <li><a href="#main"><b>Overview</b></a></li> | |
160 <li><a href="#bad_gene_starts"><b>Bad Gene Starts</b></a></li> | |
161 <li><a href="#missing_rbs"><small>Missing RBS</small></a></li> | |
162 <li><a href="#weird_starts"><small>Unusual Start Codons</small></a></li> | |
163 <li><a href="#excessive_gaps"><small>Excessive Gaps</small></a></li> | |
164 <li><a href="#excessive_overlap"><small>Excessive Overlaps</small></a></li> | |
165 <!--<li><a href="#coding_density"><small>Coding Density</small></a></li>--> | |
166 <li><a href="#antisense"><b>Antisense Genes</b></a></li> | |
167 <li><a href="#morons"><small>Possible Morons</small></a></li> | |
168 <li><a href="#annotations"><b>Annotation Issues</b></a></li> | |
169 <li><a href="#missing_product"><small>Missing Product Tags</small></a></li> | |
170 </ul> | |
171 </div> | |
172 <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main" id="main"> | |
173 <div class="jumbotron"> | |
174 <div class="row"> | |
175 <div class="col-sm-7"> | |
176 <h1>Phage {{record_name}}</h1> | |
177 <!--<h2>Score: {{score}}/100</h2>--> | |
178 </div> | |
179 <!--<div class="col-sm-5"> | |
180 <table class="table table-striped"> | |
181 <thead> | |
182 <tr> | |
183 <th>Section</th> | |
184 <th>Score</th> | |
185 </tr> | |
186 </thead> | |
187 <tbody> | |
188 <tr><td>Missing RBS</td><td>{{ '%d' % missing_rbs_score }}%</td></tr> | |
189 <tr><td>Excessive Gaps</td><td>{{ '%d' % excessive_gap_score }}%</td></tr> | |
190 <tr><td>Excessive Overlap</td><td>{{ '%d' % excessive_overlap_score }}%</td></tr> | |
191 <tr><td>Coding Density Score</td><td>{{ '%d' % coding_density }}%</td></tr> | |
192 <tr><td>Possible Morons</td><td>{{ '%d' % (100 * morons_good / (morons_good + morons_bad))}}%</td></tr> | |
193 <tr><td>Missing Product Tags</td><td>{{ '%d' % (100 * missing_tags_good / (missing_tags_good + missing_tags_bad))}}%</td></tr> | |
194 </tbody> | |
195 </table> | |
196 </div>--> | |
197 </div> | |
198 </div> | |
199 | |
200 <h2 class="sub-header" id="bad_gene_starts">Gene Starts</h2> | |
201 <h3 id="missing_rbs">Genes missing RBS <small>{{missing_rbs_good}} / {{missing_rbs_good + missing_rbs_bad}}</small></h3> | |
202 <p>The following genes have issues with their RBS.</p> | |
203 {% if not rbss_annotated %} | |
204 <p> | |
205 Since you have not annotated any possible RBSs, this does not count off from your overall score. | |
206 </p> | |
207 {% endif %} | |
208 <div class="table-responsive"> | |
209 <table class="table table-striped"> | |
210 <thead> | |
211 <tr> | |
212 <th>Feature Type</th> | |
213 <th>ID</th> | |
214 <th>Location</th> | |
215 <th>Error</th> | |
216 <th>Upstream (-{{upstream_max}} .. -{{upstream_min}})</th> | |
217 </tr> | |
218 </thead> | |
219 <tbody> | |
220 {% for row in missing_rbs %} | |
221 <tr> | |
222 <td>{{row.type}}</td> | |
223 <td>{{row.id}}</td> | |
224 <td>{{row.location.start}}..{{row.location.end}} [{{row.strand}}]</td> | |
225 <td>{{row.__message}}</td> | |
226 <td><span style="font-family:monospace">{{row.__upstream}}</span></td> | |
227 </tr> | |
228 {% endfor %} | |
229 </tbody> | |
230 </table> | |
231 </div> | |
232 | |
233 <h3 id="weird_starts">Start Codon Usage</h3> | |
234 <p>This section covers genes with unusual start codons</p> | |
235 <div class="table-responsive"> | |
236 <table class="table table-striped"> | |
237 <thead> | |
238 <tr> | |
239 <th>Start Codon</th> | |
240 <th>Count</th> | |
241 </tr> | |
242 </thead> | |
243 <tbody> | |
244 {% for codon_key in weird_starts_overall_sorted_keys %} | |
245 <tr><td>{{ codon_key }}</td><td>{{ weird_starts_overall[codon_key] }}</td></tr> | |
246 {% endfor %} | |
247 </tbody> | |
248 </table> | |
249 </div> | |
250 | |
251 <div class="table-responsive"> | |
252 <table class="table table-striped"> | |
253 <thead> | |
254 <tr> | |
255 <th>Feature Type</th> | |
256 <th>ID</th> | |
257 <th>Location</th> | |
258 <th>Error</th> | |
259 </tr> | |
260 </thead> | |
261 <tbody> | |
262 {% for row in weird_starts %} | |
263 <tr> | |
264 <td>{{row.type}}</td> | |
265 <td>{{row.id}}</td> | |
266 <td>{{row.location.start}}..{{row.location.end}} [{{row.strand}}]</td> | |
267 <td>{{row.__error}}</td> | |
268 </tr> | |
269 {% endfor %} | |
270 </tbody> | |
271 </table> | |
272 </div> | |
273 | |
274 <h3 id="excessive_gaps">Intergenic Gaps</h3> | |
275 <p>Phage genomes are under pressure to maintain high coding density. Large intergenic gaps may be a sign of incorrect gene starts or missing genes.</p> | |
276 <div class="table-responsive"> | |
277 <table class="table table-striped"> | |
278 <thead> | |
279 <tr> | |
280 <th>Region</th> | |
281 <th>Size</th> | |
282 <th>Bounding Gene Transcription Direction</th> | |
283 <th>Message</th> | |
284 </tr> | |
285 </thead> | |
286 <tbody> | |
287 {% for row in excessive_gap %} | |
288 <tr> | |
289 <td>{{row[0]}} .. {{row[1]}}</td> | |
290 <td>{{row[1] - row[0]}}</td> | |
291 <td>{{row[2] | nice_strand}} {{row[3] | nice_strand}}</td> | |
292 <td> | |
293 {% if row[4] == 0 %} | |
294 {% else %} | |
295 {{row[4]}} ORFs found in this region | |
296 {% endif %} | |
297 </td> | |
298 </tr> | |
299 {% endfor %} | |
300 </tbody> | |
301 </table> | |
302 </div> | |
303 | |
304 <h3 id="excessive_overlap">Overlapping Genes </h3> | |
305 <p>Large gene overlaps may indicate an incorrect gene start or miscalled gene.</p> | |
306 <div class="table-responsive"> | |
307 <table class="table table-striped"> | |
308 <thead> | |
309 <tr> | |
310 <th>Feature A</th> | |
311 <th>Feature B</th> | |
312 <th>Shared Region</th> | |
313 <th>Overlap Length</th> | |
314 </tr> | |
315 </thead> | |
316 <tbody> | |
317 {% for row in excessive_overlap %} | |
318 <tr> | |
319 <td>{{row[0].id}} ({{row[0].location}})</td> | |
320 <td>{{row[1].id}} ({{row[1].location}})</td> | |
321 <td>{{row[2]}}..{{row[3]}}</td> | |
322 <td>{{row[3] - row[2]}} bp</td> | |
323 </tr> | |
324 {% endfor %} | |
325 </tbody> | |
326 </table> | |
327 </div> | |
328 <!--<h3 id="coding_density">Coding Density Issues <small>{{ coding_density }} / 100</small></h3> | |
329 <div class="table-responsive"> | |
330 <p> | |
331 You have a coding density of {{ coding_density_real }} which scores | |
332 {{ coding_density }} / 100. Most genomes should be in the 90% to | |
333 100% coding density range | |
334 </p> | |
335 </div>--> | |
336 | |
337 <h2 class="sub-header" id="antisense">Antisense Genes</h2> | |
338 <h3 id="morons">Possible Morons <small>{{morons_good}} / {{morons_good + morons_bad}} (Doesn't count towards score)</small></h3> | |
339 <div class="table-responsive"> | |
340 <table class="table table-striped"> | |
341 <thead> | |
342 <tr> | |
343 <th>Feature</th> | |
344 <th>RBS</th> | |
345 <th>Surrounding Features</th> | |
346 </tr> | |
347 </thead> | |
348 <tbody> | |
349 {% for row in morons %} | |
350 <tr> | |
351 <td>{{row[0].id}}</td> | |
352 <td>{{row[3]}}</td> | |
353 <td class="moron"> | |
354 {% for x in row[1] %} | |
355 {{ x | nice_strand }} | |
356 {% endfor %} | |
357 <span class="strand_emph">{{ row[0].strand | nice_strand }}</span> | |
358 {% for x in row[2] %} | |
359 {{ x | nice_strand }} | |
360 {% endfor %} | |
361 </div> | |
362 </td> | |
363 </tr> | |
364 {% endfor %} | |
365 </tbody> | |
366 </table> | |
367 </div> | |
368 | |
369 | |
370 <h2 class="sub-header" id="annotations">Annotation Issues</h2> | |
371 <h3 id="missing_product">Missing Product Tags <small>{{missing_tags_good}} / {{missing_tags_good + missing_tags_bad}}</small></h3> | |
372 <div class="table-responsive"> | |
373 <table class="table table-striped"> | |
374 <thead> | |
375 <tr> | |
376 <th>Feature</th> | |
377 <th>Qualifiers</th> | |
378 </tr> | |
379 </thead> | |
380 <tbody> | |
381 {% for row in missing_tags %} | |
382 <tr> | |
383 <td>{{row.id}}</td> | |
384 <td> | |
385 {% for key in row.qualifiers %} | |
386 {{ key }} | |
387 <ul> | |
388 {% for value in row.qualifiers[key] %} | |
389 <li>{{value}}</li> | |
390 {% endfor %} | |
391 </ul> | |
392 {% endfor %} | |
393 </td> | |
394 </tr> | |
395 {% endfor %} | |
396 </tbody> | |
397 </table> | |
398 </div> | |
399 | |
400 | |
401 | |
402 | |
403 | |
404 </div> | |
405 </div> | |
406 </div> | |
407 | |
408 | |
409 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> | |
410 </body> | |
411 </html> | |
412 |