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