Mercurial > repos > cpt > cpt_phageqc_annotations
comparison cpt_phageqc_annotation/phageqc_report_464.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>[BICH464] 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 | |
129 | |
130 | |
131 | |
132 | |
133 | |
134 /* CUSTOM CSS */ | |
135 .spark { | |
136 position: relative; | |
137 margin:5px; | |
138 } | |
139 .spark span { | |
140 padding: 0px; | |
141 padding-left: 20px; | |
142 padding-right: 20px; | |
143 margin: 5px; | |
144 position: relative; | |
145 } | |
146 .spark .plus { | |
147 top: -10px; | |
148 background: #aaaaff; | |
149 } | |
150 .spark .minus { | |
151 top: 10px; | |
152 background: #ffaaaa; | |
153 } | |
154 .plus-focus { | |
155 top: -10px; | |
156 background: blue; | |
157 } | |
158 .minus-focus { | |
159 top: 10px; | |
160 background: red; | |
161 } | |
162 </style> | |
163 <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> | |
164 <!--[if lt IE 9]> | |
165 <script src="//oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> | |
166 <script src="//oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> | |
167 <![endif]--> | |
168 </head> | |
169 <body> | |
170 | |
171 <nav class="navbar navbar-inverse navbar-fixed-top"> | |
172 <div class="container-fluid"> | |
173 <div class="navbar-header"> | |
174 <a class="navbar-brand" href="#">[BICH464] Phage QC on {{record_name}}</a> | |
175 </div> | |
176 </div> | |
177 </nav> | |
178 | |
179 <div class="container-fluid"> | |
180 <div class="row"> | |
181 <div class="col-sm-3 col-md-2 sidebar"> | |
182 <ul class="nav nav-sidebar"> | |
183 <li><a href="#main"><b>Overview</b></a></li> | |
184 <li><a href="#bad_gene_starts"><b>Bad Gene Starts</b></a></li> | |
185 <li><a href="#missing_rbs"><small>Missing RBS</small></a></li> | |
186 <li><a href="#weird_starts"><small>Unusual Start Codons</small></a></li> | |
187 <li><a href="#excessive_gaps"><small>Excessive Gaps</small></a></li> | |
188 <li><a href="#excessive_overlap"><small>Excessive Overlaps</small></a></li> | |
189 <!--<li><a href="#coding_density"><small>Coding Density</small></a></li>--> | |
190 <li><a href="#gene_model"><b>Gene Model Issues</b></a></li> | |
191 </ul> | |
192 </div> | |
193 <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main" id="main"> | |
194 <div class="jumbotron"> | |
195 <div class="row"> | |
196 <div class="col-sm-7"> | |
197 <h1>Phage {{record_name}}</h1> | |
198 <!--<h2>Score: {{ '%d' % ((gene_model_score + coding_density + excessive_overlap_score + excessive_overlap_score + missing_rbs_score) / 5)}}</h2>--> | |
199 </div> | |
200 <!--<div class="col-sm-5"> | |
201 <table class="table table-striped"> | |
202 <thead> | |
203 <tr> | |
204 <th>Section</th> | |
205 <th>Score</th> | |
206 </tr> | |
207 </thead> | |
208 <tbody> | |
209 <tr><td>Missing RBS</td><td>{{ '%d' % missing_rbs_score }}%</td></tr> | |
210 <tr><td>Excessive Gaps</td><td>{{ '%d' % excessive_gap_score }}%</td></tr> | |
211 <tr><td>Excessive Overlap</td><td>{{ '%d' % excessive_overlap_score }}%</td></tr> | |
212 <tr><td>Coding Density Score</td><td>{{ '%d' % coding_density }}%</td></tr> | |
213 <tr><td>Coding Density Real</td><td>{{ '%0.2f' % (100 * coding_density_exact) }}%</td></tr> | |
214 <tr><td>Gene Model Issues</td><td>{{ '%d' % gene_model_score }}%</td></tr> | |
215 </tbody> | |
216 </table> | |
217 </div>--> | |
218 </div> | |
219 <div class="row"> | |
220 <h3>Genome Overview</h3> | |
221 <h4>Genes</h4> | |
222 <ul> | |
223 <li>Count: {{ genome_overview.genes.count }}</li> | |
224 <li>Bases: {{ genome_overview.genes.bases }}</li> | |
225 <li>Average Length: {{ genome_overview.genes.avg_len | round | int}}</li> | |
226 <li>Coding Density: {{ '%0.2f' % (100 * coding_density_exact) }}%</li> | |
227 <li>Composition | |
228 <ul> | |
229 <li>A {{ genome_overview.genes.comp.A }}</li> | |
230 <li>C {{ genome_overview.genes.comp.C }}</li> | |
231 <li>T {{ genome_overview.genes.comp.T }}</li> | |
232 <li>G {{ genome_overview.genes.comp.G }}</li> | |
233 </ul> | |
234 </li> | |
235 </ul> | |
236 <h4>Overall</h4> | |
237 <ul> | |
238 <li>%GC: {{ '%0.2f' % (100 * genome_overview.overall.gc) }}%</li> | |
239 <li>Composition | |
240 <ul> | |
241 <li>A {{ genome_overview.overall.comp.A }}</li> | |
242 <li>C {{ genome_overview.overall.comp.C }}</li> | |
243 <li>T {{ genome_overview.overall.comp.T }}</li> | |
244 <li>G {{ genome_overview.overall.comp.G }}</li> | |
245 </ul> | |
246 </li> | |
247 </ul> | |
248 </div> | |
249 </div> | |
250 | |
251 <h2 class="sub-header" id="bad_gene_starts">Gene Starts</h2> | |
252 <h3 id="missing_rbs">Genes Missing RBS <small>{{missing_rbs_good}} / {{missing_rbs_good + missing_rbs_bad}}</small></h3> | |
253 <p>The following genes have issues with their RBS.</p> | |
254 {% if not rbss_annotated %} | |
255 <p> | |
256 Since you have not annotated any possible RBSs, this does not count off from your overall score. | |
257 </p> | |
258 {% endif %} | |
259 <div class="table-responsive"> | |
260 <table class="table table-striped"> | |
261 <thead> | |
262 <tr> | |
263 <th>ID</th> | |
264 <th>Location</th> | |
265 <th>Error</th> | |
266 <th>Upstream (-{{upstream_max}} .. -{{upstream_min}})</th> | |
267 </tr> | |
268 </thead> | |
269 <tbody> | |
270 {% for row in missing_rbs %} | |
271 {% if "None found" in row.__message %} | |
272 <tr> | |
273 <td>{{row | nice_id | decode}}</td> | |
274 <td>{{row.location.start}}..{{row.location.end}} [{{row.strand}}]</td> | |
275 <td>None found</td> | |
276 <td><span style="font-family:monospace">{{row.__upstream }}</span></td> | |
277 </tr> | |
278 {% endif %} | |
279 {% endfor %} | |
280 </tbody> | |
281 </table> | |
282 </div> | |
283 | |
284 <h3 id="weird_starts">Start Codon Usage</h3> | |
285 <p>This section covers genes with unusual start codons</p> | |
286 <div class="table-responsive"> | |
287 <table class="table table-striped"> | |
288 <thead> | |
289 <tr> | |
290 <th>Start Codon</th> | |
291 <th>Count</th> | |
292 </tr> | |
293 </thead> | |
294 <tbody> | |
295 {% for codon_key in weird_starts_overall_sorted_keys %} | |
296 <tr><td>{{ codon_key }}</td><td>{{ weird_starts_overall[codon_key] }}</td></tr> | |
297 {% endfor %} | |
298 </tbody> | |
299 </table> | |
300 </div> | |
301 | |
302 <div class="table-responsive"> | |
303 <table class="table table-striped"> | |
304 <thead> | |
305 <tr> | |
306 <th>ID</th> | |
307 <th>Location</th> | |
308 <th>Error</th> | |
309 </tr> | |
310 </thead> | |
311 <tbody> | |
312 {% for row in weird_starts %} | |
313 <tr> | |
314 <td>{{row | nice_id| decode}}</td> | |
315 <td>{{row.location.start}}..{{row.location.end}} [{{row.strand}}]</td> | |
316 <td>{{row.qualifiers.get('note', [])}}</td> | |
317 </tr> | |
318 {% endfor %} | |
319 </tbody> | |
320 </table> | |
321 </div> | |
322 | |
323 <h3 id="excessive_gaps">Intergenic Gaps</h3> | |
324 <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> | |
325 <div class="table-responsive"> | |
326 <table class="table table-striped"> | |
327 <thead> | |
328 <tr> | |
329 <th>Region</th> | |
330 <th>Size</th> | |
331 <th>Bounding Gene Transcription Direction</th> | |
332 <th>Message</th> | |
333 </tr> | |
334 </thead> | |
335 <tbody> | |
336 {% for row in excessive_gap %} | |
337 <tr> | |
338 <td>{{row[0]}} .. {{row[1]}}</td> | |
339 <td>{{row[1] - row[0]}}</td> | |
340 <td>{{row[2] | nice_strand}} {{row[3] | nice_strand}}</td> | |
341 <td> | |
342 {% if row[4] == 0 %} | |
343 {% else %} | |
344 {{row[4]}} possible genes found in this region | |
345 {% endif %} | |
346 </td> | |
347 </tr> | |
348 {% endfor %} | |
349 </tbody> | |
350 </table> | |
351 </div> | |
352 | |
353 <h3 id="excessive_overlap">Overlapping Genes</h3> | |
354 <p>Large gene overlaps may indicate an incorrect gene start or miscalled gene.</p> | |
355 <div class="table-responsive"> | |
356 <table class="table table-striped"> | |
357 <thead> | |
358 <tr> | |
359 <th>Feature A</th> | |
360 <th>Feature B</th> | |
361 <th>Shared Region</th> | |
362 <th>Overlap Length</th> | |
363 </tr> | |
364 </thead> | |
365 <tbody> | |
366 {% for row in excessive_overlap %} | |
367 <tr> | |
368 <td>{{row[0] | nice_id | decode}} ({{row[0].location}})</td> | |
369 <td>{{row[1] | nice_id | decode}} ({{row[1].location}})</td> | |
370 <td>{{row[2]}}..{{row[3]}}</td> | |
371 <td>{{row[3] - row[2]}}bp</td> | |
372 </tr> | |
373 {% endfor %} | |
374 </tbody> | |
375 </table> | |
376 </div> | |
377 <!--<h3 id="coding_density">Coding Density Issues <small>{{ coding_density }} / 100</small></h3> | |
378 <div class="table-responsive"> | |
379 <p> | |
380 You have a coding density score of {{ coding_density_real }} which scores | |
381 {{ coding_density }} / 100. Most genomes should be in the 90% to | |
382 100% coding density range. Your exact coding density is {{ coding_density_exact }}. | |
383 </p> | |
384 </div>--> | |
385 | |
386 <h2 class="sub-header" id="gene_model">Gene Model Issues</h2> | |
387 <p>These issues are mostly derived from how Apollo handles the gene model. <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMsAAAAUCAYAAAAjk8nJAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AIRECEhlCV0dQAAAPBJREFUaN7t20EKgkAUxvFnlBASiBewNm7HldA+ukQH6AhtukBH6ABdIqJtIIS6dVNdoCtMm8CN1gtb6f+3GmQ28/DjzeDoWGutAPhqQAkAnSElQB0n6M9a7ZOwoKV43/015uuWnWW2q8a3Tf1zgDML0DNpepSyvLTfhh1OFBMd34rldzEmlCw7i+eNJYrmnFmAJkXxEBH5GBrCAihDQ1gAZWg44ANKdBaghjGhuO6IbRjwS0joLIAyJOqwrBbVeHulqOieOJ6K708aQ0JnAd6SZKma5/A/C2pfjKA/Fym1t44JCxrD0heEBfgzPkoCSi/B1kHb2fpwrwAAAABJRU5ErkJggg=="></p> | |
388 <div class="table-responsive"> | |
389 <table class="table table-striped"> | |
390 <thead> | |
391 <tr> | |
392 <th>ID</th> | |
393 <th>Exon</th> | |
394 <th>CDS</th> | |
395 <th>Message</th> | |
396 </tr> | |
397 </thead> | |
398 <tbody> | |
399 {% for row in gene_model %} | |
400 <tr> | |
401 <td>{{row[0]}}</td> | |
402 <td>{{row[1].location}}</td> | |
403 <td>{{row[2].location}}</td> | |
404 <td>{{row[3]}}</td> | |
405 </tr> | |
406 {% endfor %} | |
407 </tbody> | |
408 </table> | |
409 </div> | |
410 | |
411 </div> | |
412 </div> | |
413 </div> | |
414 | |
415 | |
416 <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> | |
417 </body> | |
418 </html> | |
419 |