##// END OF EJS Templates
Task #714: Modulo web del ABS ...
Fiorella Quino -
r166:d72e9c99e97e
parent child
Show More
@@ -0,0 +1,19
1 {% extends "dev_conf_edit.html" %}
2
3 {% load bootstrap3 %}
4 {% load static %}
5 {% load main_tags %}
6
7 {% block content %}
8 <form class="form" method="post">
9 {% csrf_token %}
10 {#% bootstrap_form form layout='horizontal' size='medium' %#}
11 {{form}}
12 <div style="clear: both;"></div>
13 <br>
14 <div class="pull-right">
15 <button type="button" class="btn btn-primary" onclick="{% if previous %}window.location.replace('{{ previous }}');{% else %}history.go(-1);{% endif %}">Cancel</button>
16 <button type="submit" class="btn btn-primary">{{button}}</button>
17 </div>
18 </form>
19 {% endblock %}
This diff has been collapsed as it changes many lines, (691 lines changed) Show them Hide them
@@ -0,0 +1,691
1 {% load static %}
2 {% load bootstrap3 %}
3 {% load main_tags %}
4
5 {% block content %}
6 <style>
7
8 .abs {
9 border: 2px solid #00334d;
10 vertical-align: center;
11 display: inline-block;
12 font-size: 95%;
13 }
14
15 .abs tr{
16 border-bottom: 0px solid #00334d;
17 }
18
19 .abs td{
20 border-right: 0px solid #00334d;
21 text-align: center;
22 padding: 4px;
23 }
24
25 .pattern {
26 border: 2px solid #00334d;
27 vertical-align: center;
28 font-weight: bold;
29 text-align: center;
30 }
31 .pattern tr{
32 border: 1px solid #ffffff;
33 background-color: #ecf0f1;
34 }
35 .pattern td{
36 border: 2px solid #e2e2e7;
37 text-align: center;
38 }
39
40 .north_quarter{
41 border: 2px solid #00334d;
42 vertical-align: center;
43 font-weight: bold;
44 }
45 .north_quarter tr{
46 border: 1px solid #ffffff;
47 background-color: #ecf0f1;
48 }
49 .north_quarter td{
50 border: 2px solid #e2e2e7;
51 text-align: center;
52 }
53
54 .east_quarter{
55 border: 2px solid #00334d;
56 vertical-align: center;
57 font-weight: bold;
58 }
59 .east_quarter tr{
60 border: 1px solid #ffffff;
61 background-color: #ecf0f1;
62 }
63 .east_quarter td{
64 border: 2px solid #e2e2e7;
65 text-align: center;
66 }
67
68 .west_quarter{
69 border: 2px solid #00334d;
70 vertical-align: center;
71 font-weight: bold;
72 }
73 .west_quarter tr{
74 border: 1px solid #ffffff;
75 background-color: #ecf0f1;
76 }
77 .west_quarter td{
78 border: 2px solid #e2e2e7;
79 text-align: center;
80 }
81
82 .south_quarter{
83 border: 2px solid #00334d;
84 vertical-align: center;
85 font-weight: bold;
86 }
87 .south_quarter tr{
88 border: 1px solid #ffffff;
89 background-color: #ecf0f1;
90 }
91 .south_quarter td{
92 border: 2px solid #e2e2e7;
93 text-align: center;
94 }
95
96 .abs_tx {
97 border: 2px solid #00334d;
98 vertical-align: center;
99 display: inline-block;
100 vertical-align: top;
101 margin-left: 10px;
102 vertical-align: top;
103 font-size: 95%;
104 }
105
106
107 }
108 .abs_tx tr:nth-last-child(1){
109 border-bottom: 0px solid #00334d;
110 }
111 .abs_tx td {
112 text-align: center;
113 padding: 4px;
114 }
115
116 .abs_rx {
117 border: 2px solid #00334d;
118 vertical-align: center;
119 display: inline-block;
120 margin-left: 10px;
121 text-align: center;
122 font-size: 95%;
123 }
124
125
126 }
127 .abs_rx tr:nth-last-child(1){
128 border-bottom: 0px solid #00334d;
129 }
130 .abs_rx td {
131 text-align: center;
132 padding: 4px;
133 }
134
135 .tx {
136 border: 2px solid #00334d;
137 vertical-align: center;
138 font-weight: bold;
139 }
140 .tx tr{
141 border: 1px solid #ffffff;
142 background-color: #ecf0f1;
143 }
144 .tx td{
145 border: 2px solid #e2e2e7;
146 text-align: center;
147 }
148
149
150 .rx {
151 border: 2px solid #00334d;
152 vertical-align: center;
153 font-weight: bold;
154 }
155 .rx tr{
156 border: 1px solid #ffffff;
157 background-color: #ecf0f1;
158 }
159 .rx td{
160 border: 2px solid #e2e2e7;
161 text-align: center;
162 }
163
164
165 </style>
166
167 <script>
168 $(document).ready(function() {
169
170 $( "#bt_remove_beam-{{ beam.id }}" ).click(function() {
171 document.location = "{% url 'url_remove_abs_beam' id_conf beam.id %}";
172 });
173
174 $( "#bt_edit_beam-{{ beam.id }}" ).click(function() {
175 document.location = "{% url 'url_edit_abs_beam' id_conf beam.id %}";
176 });
177
178 });
179 </script>
180
181
182 <div id="UP" class="panel-group">
183 <div class="panel panel-default">
184 <div class="panel-heading">UP</div>
185 <div class="panel-body">
186 <table class="abs">
187 <tr>
188 <td> <b>Antenna</b>
189 <table id="antenna_up" class="pattern">
190 <tr>
191 <td> North Quarter
192 <table class="north_quarter">
193 <tr>
194 <td>{{beam.get_upvalues.0}}</td> <td>{{beam.get_upvalues.1}}</td> <td>{{beam.get_upvalues.2}}</td> <td>{{beam.get_upvalues.3}}</td>
195 </tr>
196 <tr>
197 <td>{{beam.get_upvalues.8}}</td> <td>{{beam.get_upvalues.9}}</td> <td>{{beam.get_upvalues.10}}</td> <td>{{beam.get_upvalues.11}}</td>
198 </tr>
199 <tr>
200 <td>{{beam.get_upvalues.16}}</td> <td>{{beam.get_upvalues.17}}</td> <td>{{beam.get_upvalues.18}}</td> <td>{{beam.get_upvalues.19}}</td>
201 </tr>
202 <tr>
203 <td>{{beam.get_upvalues.24}}</td> <td>{{beam.get_upvalues.25}}</td> <td>{{beam.get_upvalues.26}}</td> <td>{{beam.get_upvalues.27}}</td>
204 </tr>
205 </table>
206 </td>
207 <td> East Quarter
208 <table class="east_quarter">
209 <tr>
210 <td>{{beam.get_upvalues.4}}</td> <td>{{beam.get_upvalues.5}}</td> <td>{{beam.get_upvalues.6}}</td> <td>{{beam.get_upvalues.7}}</td>
211 </tr>
212 <tr>
213 <td>{{beam.get_upvalues.12}}</td> <td>{{beam.get_upvalues.13}}</td> <td>{{beam.get_upvalues.14}}</td> <td>{{beam.get_upvalues.15}}</td>
214 </tr>
215 <tr>
216 <td>{{beam.get_upvalues.20}}</td> <td>{{beam.get_upvalues.21}}</td> <td>{{beam.get_upvalues.22}}</td> <td>{{beam.get_upvalues.23}}</td>
217 </tr>
218 <tr>
219 <td>{{beam.get_upvalues.28}}</td> <td>{{beam.get_upvalues.29}}</td> <td>{{beam.get_upvalues.30}}</td> <td>{{beam.get_upvalues.31}}</td>
220 </tr>
221 </table>
222 </td>
223 </tr>
224 <tr>
225 <td> West Quarter
226 <table class="west_quarter">
227 <tr>
228 <td>{{beam.get_upvalues.32}}</td> <td>{{beam.get_upvalues.33}}</td> <td>{{beam.get_upvalues.34}}</td> <td>{{beam.get_upvalues.35}}</td>
229 </tr>
230 <tr>
231 <td>{{beam.get_upvalues.40}}</td> <td>{{beam.get_upvalues.41}}</td> <td>{{beam.get_upvalues.42}}</td> <td>{{beam.get_upvalues.43}}</td>
232 </tr>
233 <tr>
234 <td>{{beam.get_upvalues.48}}</td> <td>{{beam.get_upvalues.49}}</td> <td>{{beam.get_upvalues.50}}</td> <td>{{beam.get_upvalues.51}}</td>
235 </tr>
236 <tr>
237 <td>{{beam.get_upvalues.56}}</td> <td>{{beam.get_upvalues.57}}</td> <td>{{beam.get_upvalues.58}}</td> <td>{{beam.get_upvalues.59}}</td>
238 </tr>
239 </table>
240 </td>
241 <td> South Quarter
242 <table class="south_quarter">
243 <tr>
244 <td>{{beam.get_upvalues.36}}</td> <td>{{beam.get_upvalues.37}}</td> <td>{{beam.get_upvalues.38}}</td> <td>{{beam.get_upvalues.39}}</td>
245 </tr>
246 <tr>
247 <td>{{beam.get_upvalues.44}}</td> <td>{{beam.get_upvalues.45}}</td> <td>{{beam.get_upvalues.46}}</td> <td>{{beam.get_upvalues.47}}</td>
248 </tr>
249 <tr>
250 <td>{{beam.get_upvalues.52}}</td> <td>{{beam.get_upvalues.53}}</td> <td>{{beam.get_upvalues.54}}</td> <td>{{beam.get_upvalues.55}}</td>
251 </tr>
252 <tr>
253 <td>{{beam.get_upvalues.60}}</td> <td>{{beam.get_upvalues.61}}</td> <td>{{beam.get_upvalues.62}}</td> <td>{{beam.get_upvalues.63}}</td>
254 </tr>
255 </table>
256 </td>
257 </tr>
258 </table>
259 </td>
260 </tr>
261 </table>
262
263
264 <table class="abs_tx">
265 <tr>
266 <td> <b>TX</b>
267 <table id="tx_up" class="tx">
268 <tr>
269 <td> North Quarter
270 <table align="center" class="north_quarter">
271 <tr>
272 <td>{{beam.get_tx.up.0.0}}</td> <td>{{beam.get_tx.up.0.1}}</td> <td>{{beam.get_tx.up.0.2}}</td> <td>{{beam.get_tx.up.0.3}}</td>
273 </tr>
274 <tr>
275 <td>{{beam.get_tx.up.1.0}}</td> <td>{{beam.get_tx.up.1.1}}</td> <td>{{beam.get_tx.up.1.2}}</td> <td>{{beam.get_tx.up.1.3}}</td>
276 </tr>
277 <tr>
278 <td>{{beam.get_tx.up.2.0}}</td> <td>{{beam.get_tx.up.2.1}}</td> <td>{{beam.get_tx.up.2.2}}</td> <td>{{beam.get_tx.up.2.3}}</td>
279 </tr>
280 <tr>
281 <td>{{beam.get_tx.up.3.0}}</td> <td>{{beam.get_tx.up.3.1}}</td> <td>{{beam.get_tx.up.3.2}}</td> <td>{{beam.get_tx.up.3.3}}</td>
282 </tr>
283 </table>
284 </td>
285 <td> East Quarter
286 <table align="center" class="east_quarter">
287 <tr>
288 <td>{{beam.get_tx.up.0.4}}</td> <td>{{beam.get_tx.up.0.5}}</td> <td>{{beam.get_tx.up.0.6}}</td> <td>{{beam.get_tx.up.0.7}}</td>
289 </tr>
290 <tr>
291 <td>{{beam.get_tx.up.1.4}}</td> <td>{{beam.get_tx.up.1.5}}</td> <td>{{beam.get_tx.up.1.6}}</td> <td>{{beam.get_tx.up.1.7}}</td>
292 </tr>
293 <tr>
294 <td>{{beam.get_tx.up.2.4}}</td> <td>{{beam.get_tx.up.2.5}}</td> <td>{{beam.get_tx.up.2.6}}</td> <td>{{beam.get_tx.up.2.7}}</td>
295 </tr>
296 <tr>
297 <td>{{beam.get_tx.up.3.4}}</td> <td>{{beam.get_tx.up.3.5}}</td> <td>{{beam.get_tx.up.3.6}}</td> <td>{{beam.get_tx.up.3.7}}</td>
298 </tr>
299 </table>
300 </td>
301 </tr>
302 <tr>
303 <td> West Quarter
304 <table align="center" class="west_quarter">
305 <tr>
306 <td>{{beam.get_tx.up.4.0}}</td> <td>{{beam.get_tx.up.4.1}}</td> <td>{{beam.get_tx.up.4.2}}</td> <td>{{beam.get_tx.up.4.3}}</td>
307 </tr>
308 <tr>
309 <td>{{beam.get_tx.up.5.0}}</td> <td>{{beam.get_tx.up.5.1}}</td> <td>{{beam.get_tx.up.5.2}}</td> <td>{{beam.get_tx.up.5.3}}</td>
310 </tr>
311 <tr>
312 <td>{{beam.get_tx.up.6.0}}</td> <td>{{beam.get_tx.up.6.1}}</td> <td>{{beam.get_tx.up.6.2}}</td> <td>{{beam.get_tx.up.6.3}}</td>
313 </tr>
314 <tr>
315 <td>{{beam.get_tx.up.7.0}}</td> <td>{{beam.get_tx.up.7.1}}</td> <td>{{beam.get_tx.up.7.2}}</td> <td>{{beam.get_tx.up.7.3}}</td>
316 </tr>
317 </table>
318 </td>
319 <td> South Quarter
320 <table align="center" class="south_quarter">
321 <tr>
322 <td>{{beam.get_tx.up.4.4}}</td> <td>{{beam.get_tx.up.4.5}}</td> <td>{{beam.get_tx.up.4.6}}</td> <td>{{beam.get_tx.up.4.7}}</td>
323 </tr>
324 <tr>
325 <td>{{beam.get_tx.up.5.4}}</td> <td>{{beam.get_tx.up.5.5}}</td> <td>{{beam.get_tx.up.5.6}}</td> <td>{{beam.get_tx.up.5.7}}</td>
326 </tr>
327 <tr>
328 <td>{{beam.get_tx.up.6.4}}</td> <td>{{beam.get_tx.up.6.5}}</td> <td>{{beam.get_tx.up.6.6}}</td> <td>{{beam.get_tx.up.6.7}}</td>
329 </tr>
330 <tr>
331 <td>{{beam.get_tx.up.7.4}}</td> <td>{{beam.get_tx.up.7.5}}</td> <td>{{beam.get_tx.up.7.6}}</td> <td>{{beam.get_tx.up.7.7}}</td>
332 </tr>
333 </table>
334 </td>
335 </tr>
336 </table>
337 </td>
338 </tr>
339 </table>
340
341
342 <table class="abs_rx">
343 <tr>
344 <td> <b>RX</b>
345 <table id="rx_up" class="rx">
346 <tr>
347 <td> North Quarter
348 <table align="center" class="north_quarter">
349 <tr>
350 <td>{{beam.get_rx.up.0.0}}</td> <td>{{beam.get_rx.up.0.1}}</td> <td>{{beam.get_rx.up.0.2}}</td> <td>{{beam.get_rx.up.0.3}}</td>
351 </tr>
352 <tr>
353 <td>{{beam.get_rx.up.1.0}}</td> <td>{{beam.get_rx.up.1.1}}</td> <td>{{beam.get_rx.up.1.2}}</td> <td>{{beam.get_rx.up.1.3}}</td>
354 </tr>
355 <tr>
356 <td>{{beam.get_rx.up.2.0}}</td> <td>{{beam.get_rx.up.2.1}}</td> <td>{{beam.get_rx.up.2.2}}</td> <td>{{beam.get_rx.up.2.3}}</td>
357 </tr>
358 <tr>
359 <td>{{beam.get_rx.up.3.0}}</td> <td>{{beam.get_rx.up.3.1}}</td> <td>{{beam.get_rx.up.3.2}}</td> <td>{{beam.get_rx.up.3.3}}</td>
360 </tr>
361 </table>
362 </td>
363 <td> East Quarter
364 <table align="center" class="east_quarter">
365 <tr>
366 <td>{{beam.get_rx.up.0.4}}</td> <td>{{beam.get_rx.up.0.5}}</td> <td>{{beam.get_rx.up.0.6}}</td> <td>{{beam.get_rx.up.0.7}}</td>
367 </tr>
368 <tr>
369 <td>{{beam.get_rx.up.1.4}}</td> <td>{{beam.get_rx.up.1.5}}</td> <td>{{beam.get_rx.up.1.6}}</td> <td>{{beam.get_rx.up.1.7}}</td>
370 </tr>
371 <tr>
372 <td>{{beam.get_rx.up.2.4}}</td> <td>{{beam.get_rx.up.2.5}}</td> <td>{{beam.get_rx.up.2.6}}</td> <td>{{beam.get_rx.up.2.7}}</td>
373 </tr>
374 <tr>
375 <td>{{beam.get_rx.up.3.4}}</td> <td>{{beam.get_rx.up.3.5}}</td> <td>{{beam.get_rx.up.3.6}}</td> <td>{{beam.get_rx.up.3.7}}</td>
376 </tr>
377 </table>
378 </td>
379 </tr>
380 <tr>
381 <td> West Quarter
382 <table align="center" class="west_quarter">
383 <tr>
384 <td>{{beam.get_rx.up.4.0}}</td> <td>{{beam.get_rx.up.4.1}}</td> <td>{{beam.get_rx.up.4.2}}</td> <td>{{beam.get_rx.up.4.3}}</td>
385 </tr>
386 <tr>
387 <td>{{beam.get_rx.up.5.0}}</td> <td>{{beam.get_rx.up.5.1}}</td> <td>{{beam.get_rx.up.5.2}}</td> <td>{{beam.get_rx.up.5.3}}</td>
388 </tr>
389 <tr>
390 <td>{{beam.get_rx.up.6.0}}</td> <td>{{beam.get_rx.up.6.1}}</td> <td>{{beam.get_rx.up.6.2}}</td> <td>{{beam.get_rx.up.6.3}}</td>
391 </tr>
392 <tr>
393 <td>{{beam.get_rx.up.7.0}}</td> <td>{{beam.get_rx.up.7.1}}</td> <td>{{beam.get_rx.up.7.2}}</td> <td>{{beam.get_rx.up.7.3}}</td>
394 </tr>
395 </table>
396 </td>
397 <td> South Quarter
398 <table align="center" class="south_quarter">
399 <tr>
400 <td>{{beam.get_rx.up.4.4}}</td> <td>{{beam.get_rx.up.4.5}}</td> <td>{{beam.get_rx.up.4.6}}</td> <td>{{beam.get_rx.up.4.7}}</td>
401 </tr>
402 <tr>
403 <td>{{beam.get_rx.up.5.4}}</td> <td>{{beam.get_rx.up.5.5}}</td> <td>{{beam.get_rx.up.5.6}}</td> <td>{{beam.get_rx.up.5.7}}</td>
404 </tr>
405 <tr>
406 <td>{{beam.get_rx.up.6.4}}</td> <td>{{beam.get_rx.up.6.5}}</td> <td>{{beam.get_rx.up.6.6}}</td> <td>{{beam.get_rx.up.6.7}}</td>
407 </tr>
408 <tr>
409 <td>{{beam.get_rx.up.7.4}}</td> <td>{{beam.get_rx.up.7.5}}</td> <td>{{beam.get_rx.up.7.6}}</td> <td>{{beam.get_rx.up.7.7}}</td>
410 </tr>
411 </table>
412 </td>
413 </tr>
414 </table>
415 </td>
416 </tr>
417 </table>
418
419
420
421 <br>
422
423 <div id="up_ues" style="display: inline-block">
424 Ues: {{beam.get_up_ues}}
425 </div>
426
427 <div style="margin-left: 70px; display: inline-block">
428 <input type="checkbox" id="up_onlyrx" {% if beam.get_up_onlyrx == True %} checked="True" {% endif %} disabled>
429 Only RX: {{beam.get_up_onlyrx}}
430 </input>
431 </div>
432
433 </div>
434 </div>
435 </div>
436
437 <div id="DOWN" class="panel-group">
438 <div class="panel panel-default">
439 <div class="panel-heading">DOWN</div>
440 <div class="panel-body">
441 <table class="abs">
442 <tr>
443 <td> <b>Antenna</b>
444 <table id="antenna_down" class="pattern">
445 <tr>
446 <td> <b>North Quarter</b>
447 <table class="north_quarter">
448 <tr>
449 <td>{{beam.get_downvalues.0}}</td> <td>{{beam.get_downvalues.1}}</td> <td>{{beam.get_downvalues.2}}</td> <td>{{beam.get_downvalues.3}}</td>
450 </tr>
451 <tr>
452 <td>{{beam.get_downvalues.8}}</td> <td>{{beam.get_downvalues.9}}</td> <td>{{beam.get_downvalues.10}}</td> <td>{{beam.get_downvalues.11}}</td>
453 </tr>
454 <tr>
455 <td>{{beam.get_downvalues.16}}</td> <td>{{beam.get_downvalues.17}}</td> <td>{{beam.get_downvalues.18}}</td> <td>{{beam.get_downvalues.19}}</td>
456 </tr>
457 <tr>
458 <td>{{beam.get_downvalues.24}}</td> <td>{{beam.get_downvalues.25}}</td> <td>{{beam.get_downvalues.26}}</td> <td>{{beam.get_downvalues.27}}</td>
459 </tr>
460 </table>
461 </td>
462 <td> <b>East Quarter</b>
463 <table class="east_quarter">
464 <tr>
465 <td>{{beam.get_downvalues.4}}</td> <td>{{beam.get_downvalues.5}}</td> <td>{{beam.get_downvalues.6}}</td> <td>{{beam.get_downvalues.7}}</td>
466 </tr>
467 <tr>
468 <td>{{beam.get_downvalues.12}}</td> <td>{{beam.get_downvalues.13}}</td> <td>{{beam.get_downvalues.14}}</td> <td>{{beam.get_downvalues.15}}</td>
469 </tr>
470 <tr>
471 <td>{{beam.get_downvalues.20}}</td> <td>{{beam.get_downvalues.21}}</td> <td>{{beam.get_downvalues.22}}</td> <td>{{beam.get_downvalues.23}}</td>
472 </tr>
473 <tr>
474 <td>{{beam.get_downvalues.28}}</td> <td>{{beam.get_downvalues.29}}</td> <td>{{beam.get_downvalues.30}}</td> <td>{{beam.get_downvalues.31}}</td>
475 </tr>
476 </table>
477 </td>
478 </tr>
479 <tr>
480 <td> <b>West Quarter</b>
481 <table class="west_quarter">
482 <tr>
483 <td>{{beam.get_downvalues.32}}</td> <td>{{beam.get_downvalues.33}}</td> <td>{{beam.get_downvalues.34}}</td> <td>{{beam.get_downvalues.35}}</td>
484 </tr>
485 <tr>
486 <td>{{beam.get_downvalues.40}}</td> <td>{{beam.get_downvalues.41}}</td> <td>{{beam.get_downvalues.42}}</td> <td>{{beam.get_downvalues.43}}</td>
487 </tr>
488 <tr>
489 <td>{{beam.get_downvalues.48}}</td> <td>{{beam.get_downvalues.49}}</td> <td>{{beam.get_downvalues.50}}</td> <td>{{beam.get_downvalues.51}}</td>
490 </tr>
491 <tr>
492 <td>{{beam.get_downvalues.56}}</td> <td>{{beam.get_downvalues.57}}</td> <td>{{beam.get_downvalues.58}}</td> <td>{{beam.get_downvalues.59}}</td>
493 </tr>
494 </table>
495 </td>
496 <td> <b>South Quarter</b>
497 <table class="south_quarter">
498 <tr>
499 <td>{{beam.get_downvalues.36}}</td> <td>{{beam.get_downvalues.37}}</td> <td>{{beam.get_downvalues.38}}</td> <td>{{beam.get_downvalues.39}}</td>
500 </tr>
501 <tr>
502 <td>{{beam.get_downvalues.44}}</td> <td>{{beam.get_downvalues.45}}</td> <td>{{beam.get_downvalues.46}}</td> <td>{{beam.get_downvalues.47}}</td>
503 </tr>
504 <tr>
505 <td>{{beam.get_downvalues.52}}</td> <td>{{beam.get_downvalues.53}}</td> <td>{{beam.get_downvalues.54}}</td> <td>{{beam.get_downvalues.55}}</td>
506 </tr>
507 <tr>
508 <td>{{beam.get_downvalues.60}}</td> <td>{{beam.get_downvalues.61}}</td> <td>{{beam.get_downvalues.62}}</td> <td>{{beam.get_downvalues.63}}</td>
509 </tr>
510 </table>
511 </td>
512 </tr>
513 </table>
514 </td>
515 </tr>
516 </table>
517
518 <table class="abs_tx">
519 <tr>
520 <td> <b>TX</b>
521 <table id="tx_down" class="tx">
522 <tr>
523 <td> <b>North Quarter</b>
524 <table align="center" class="north_quarter">
525 <tr>
526 <td>{{beam.get_tx.down.0.0}}</td> <td>{{beam.get_tx.down.0.1}}</td> <td>{{beam.get_tx.down.0.2}}</td> <td>{{beam.get_tx.down.0.3}}</td>
527 </tr>
528 <tr>
529 <td>{{beam.get_tx.down.1.0}}</td> <td>{{beam.get_tx.down.1.1}}</td> <td>{{beam.get_tx.down.1.2}}</td> <td>{{beam.get_tx.down.1.3}}</td>
530 </tr>
531 <tr>
532 <td>{{beam.get_tx.down.2.0}}</td> <td>{{beam.get_tx.down.2.1}}</td> <td>{{beam.get_tx.down.2.2}}</td> <td>{{beam.get_tx.down.2.3}}</td>
533 </tr>
534 <tr>
535 <td>{{beam.get_tx.down.3.0}}</td> <td>{{beam.get_tx.down.3.1}}</td> <td>{{beam.get_tx.down.3.2}}</td> <td>{{beam.get_tx.down.3.3}}</td>
536 </tr>
537 </table>
538 </td>
539 <td> <b>East Quarter</b>
540 <table align="center" class="east_quarter">
541 <tr>
542 <td>{{beam.get_tx.down.0.4}}</td> <td>{{beam.get_tx.down.0.5}}</td> <td>{{beam.get_tx.down.0.6}}</td> <td>{{beam.get_tx.down.0.7}}</td>
543 </tr>
544 <tr>
545 <td>{{beam.get_tx.down.1.4}}</td> <td>{{beam.get_tx.down.1.5}}</td> <td>{{beam.get_tx.down.1.6}}</td> <td>{{beam.get_tx.down.1.7}}</td>
546 </tr>
547 <tr>
548 <td>{{beam.get_tx.down.2.4}}</td> <td>{{beam.get_tx.down.2.5}}</td> <td>{{beam.get_tx.down.2.6}}</td> <td>{{beam.get_tx.down.2.7}}</td>
549 </tr>
550 <tr>
551 <td>{{beam.get_tx.down.3.4}}</td> <td>{{beam.get_tx.down.3.5}}</td> <td>{{beam.get_tx.down.3.6}}</td> <td>{{beam.get_tx.down.3.7}}</td>
552 </tr>
553 </table>
554 </td>
555 </tr>
556 <tr>
557 <td> <b>West Quarter</b>
558 <table align="center" class="west_quarter">
559 <tr>
560 <td>{{beam.get_tx.down.4.0}}</td> <td>{{beam.get_tx.down.4.1}}</td> <td>{{beam.get_tx.down.4.2}}</td> <td>{{beam.get_tx.down.4.3}}</td>
561 </tr>
562 <tr>
563 <td>{{beam.get_tx.down.5.0}}</td> <td>{{beam.get_tx.down.5.1}}</td> <td>{{beam.get_tx.down.5.2}}</td> <td>{{beam.get_tx.down.5.3}}</td>
564 </tr>
565 <tr>
566 <td>{{beam.get_tx.down.6.0}}</td> <td>{{beam.get_tx.down.6.1}}</td> <td>{{beam.get_tx.down.6.2}}</td> <td>{{beam.get_tx.down.6.3}}</td>
567 </tr>
568 <tr>
569 <td>{{beam.get_tx.down.7.0}}</td> <td>{{beam.get_tx.down.7.1}}</td> <td>{{beam.get_tx.down.7.2}}</td> <td>{{beam.get_tx.down.7.3}}</td>
570 </tr>
571 </table>
572 </td>
573 <td> <b>South Quarter</b>
574 <table align="center" class="south_quarter">
575 <tr>
576 <td>{{beam.get_tx.down.4.4}}</td> <td>{{beam.get_tx.down.4.5}}</td> <td>{{beam.get_tx.down.4.6}}</td> <td>{{beam.get_tx.down.4.7}}</td>
577 </tr>
578 <tr>
579 <td>{{beam.get_tx.down.5.4}}</td> <td>{{beam.get_tx.down.5.5}}</td> <td>{{beam.get_tx.down.5.6}}</td> <td>{{beam.get_tx.down.5.7}}</td>
580 </tr>
581 <tr>
582 <td>{{beam.get_tx.down.6.4}}</td> <td>{{beam.get_tx.down.6.5}}</td> <td>{{beam.get_tx.down.6.6}}</td> <td>{{beam.get_tx.down.6.7}}</td>
583 </tr>
584 <tr>
585 <td>{{beam.get_tx.down.7.4}}</td> <td>{{beam.get_tx.down.7.5}}</td> <td>{{beam.get_tx.down.7.6}}</td> <td>{{beam.get_tx.down.7.7}}</td>
586 </tr>
587 </table>
588 </td>
589 </tr>
590 </table>
591 </td>
592 </tr>
593 </table>
594
595
596 <table class="abs_rx">
597 <tr>
598 <td> <b>RX</b>
599 <table id="rx_down" class="rx">
600 <tr>
601 <td> <b>North Quarter</b>
602 <table align="center" class="north_quarter">
603 <tr>
604 <td>{{beam.get_rx.down.0.0}}</td> <td>{{beam.get_rx.down.0.1}}</td> <td>{{beam.get_rx.down.0.2}}</td> <td>{{beam.get_rx.down.0.3}}</td>
605 </tr>
606 <tr>
607 <td>{{beam.get_rx.down.1.0}}</td> <td>{{beam.get_rx.down.1.1}}</td> <td>{{beam.get_rx.down.1.2}}</td> <td>{{beam.get_rx.down.1.3}}</td>
608 </tr>
609 <tr>
610 <td>{{beam.get_rx.down.2.0}}</td> <td>{{beam.get_rx.down.2.1}}</td> <td>{{beam.get_rx.down.2.2}}</td> <td>{{beam.get_rx.down.2.3}}</td>
611 </tr>
612 <tr>
613 <td>{{beam.get_rx.down.3.0}}</td> <td>{{beam.get_rx.down.3.1}}</td> <td>{{beam.get_rx.down.3.2}}</td> <td>{{beam.get_rx.down.3.3}}</td>
614 </tr>
615 </table>
616 </td>
617 <td> <b>East Quarter</b>
618 <table align="center" class="east_quarter">
619 <tr>
620 <td>{{beam.get_rx.down.0.4}}</td> <td>{{beam.get_rx.down.0.5}}</td> <td>{{beam.get_rx.down.0.6}}</td> <td>{{beam.get_rx.down.0.7}}</td>
621 </tr>
622 <tr>
623 <td>{{beam.get_rx.down.1.4}}</td> <td>{{beam.get_rx.down.1.5}}</td> <td>{{beam.get_rx.down.1.6}}</td> <td>{{beam.get_rx.down.1.7}}</td>
624 </tr>
625 <tr>
626 <td>{{beam.get_rx.down.2.4}}</td> <td>{{beam.get_rx.down.2.5}}</td> <td>{{beam.get_rx.down.2.6}}</td> <td>{{beam.get_rx.down.2.7}}</td>
627 </tr>
628 <tr>
629 <td>{{beam.get_rx.down.3.4}}</td> <td>{{beam.get_rx.down.3.5}}</td> <td>{{beam.get_rx.down.3.6}}</td> <td>{{beam.get_rx.down.3.7}}</td>
630 </tr>
631 </table>
632 </td>
633 </tr>
634 <tr>
635 <td> <b>West Quarter</b>
636 <table align="center" class="west_quarter">
637 <tr>
638 <td>{{beam.get_rx.down.4.0}}</td> <td>{{beam.get_rx.down.4.1}}</td> <td>{{beam.get_rx.down.4.2}}</td> <td>{{beam.get_rx.down.4.3}}</td>
639 </tr>
640 <tr>
641 <td>{{beam.get_rx.down.5.0}}</td> <td>{{beam.get_rx.down.5.1}}</td> <td>{{beam.get_rx.down.5.2}}</td> <td>{{beam.get_rx.down.5.3}}</td>
642 </tr>
643 <tr>
644 <td>{{beam.get_rx.down.6.0}}</td> <td>{{beam.get_rx.down.6.1}}</td> <td>{{beam.get_rx.down.6.2}}</td> <td>{{beam.get_rx.down.6.3}}</td>
645 </tr>
646 <tr>
647 <td>{{beam.get_rx.down.7.0}}</td> <td>{{beam.get_rx.down.7.1}}</td> <td>{{beam.get_rx.down.7.2}}</td> <td>{{beam.get_rx.down.7.3}}</td>
648 </tr>
649 </table>
650 </td>
651 <td> <b>South Quarter</b>
652 <table class="south_quarter">
653 <tr>
654 <td>{{beam.get_rx.down.4.4}}</td> <td>{{beam.get_rx.down.4.5}}</td> <td>{{beam.get_rx.down.4.6}}</td> <td>{{beam.get_rx.down.4.7}}</td>
655 </tr>
656 <tr>
657 <td>{{beam.get_rx.down.5.4}}</td> <td>{{beam.get_rx.down.5.5}}</td> <td>{{beam.get_rx.down.5.6}}</td> <td>{{beam.get_rx.down.5.7}}</td>
658 </tr>
659 <tr>
660 <td>{{beam.get_rx.down.6.4}}</td> <td>{{beam.get_rx.down.6.5}}</td> <td>{{beam.get_rx.down.6.6}}</td> <td>{{beam.get_rx.down.6.7}}</td>
661 </tr>
662 <tr>
663 <td>{{beam.get_rx.down.7.4}}</td> <td>{{beam.get_rx.down.7.5}}</td> <td>{{beam.get_rx.down.7.6}}</td> <td>{{beam.get_rx.down.7.7}}</td>
664 </tr>
665 </table>
666 </td>
667 </tr>
668 </table>
669 </td>
670 </tr>
671 </table>
672
673
674
675 <br>
676
677 <div id="down_ues" style="display: inline-block">
678 Ues: {{beam.get_down_ues}}
679 </div>
680
681 <div style="margin-left: 70px; display: inline-block">
682 <input type="checkbox" id="up_onlyrx" {% if beam.get_down_onlyrx == True %} checked="True" {% endif %} disabled>
683 Only RX: {{beam.get_down_onlyrx}}
684 </input>
685 </div>
686
687 </div>
688 </div>
689 </div>
690
691 {% endblock %}
@@ -0,0 +1,42
1 {% load bootstrap3 %}
2
3 {% if abs_beams %}
4
5 <div class="pull-right">
6 <button id="bt_toggle" type="button" class="btn btn-default btn-sm" >
7 Expand/Collapse
8 </button>
9 </div><br><br>
10
11
12 {% for beam in abs_beams %}
13 <div class="panel panel-default" id="panel-{{beam.id}}">
14 <div class="panel-heading" role="tab" id="heading{{beam.id}}">
15 <h4 class="panel-title">
16 <a role="button" onclick="beam_values(beam.id)" data-toggle="collapse" data-parent="#div_lines" href="#collapse{{beam.id}}" aria-expanded="true" aria-controls="collapse{{beam.id}}">
17 #{{forloop.counter}} Name: {{beam.name}}
18 </a>
19 {% if edit %}
20 <button id="bt_remove_beam-{{ beam.id }}" type="button" class="btn-xs btn-default pull-right" name="bt_remove_beam" value="{{beam.pk}}"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span></button>
21 <button id="bt_edit_beam-{{ beam.id }}" type="button" class="btn-xs btn-default pull-right" name="bt_edit_beam" value="{{beam.pk}}"><span class="glyphicon glyphicon-pencil" aria-hidden="true"></span></button>
22 {% endif %}
23 </h4>
24 </div>
25 <div id="collapse{{beam.id}}" class="panel-collapse collapse" role="tabpanel" aria-labelledby="heading{{beam.id}}">
26 <div class="panel-body">
27 {% include "abs_beam_values.html" %}
28 {# bootstrap_form beam.form layout='horizontal' size='small' #}
29 <br>
30
31 <br>
32 <!--<button type="button" class="btn btn-sm btn-default" style="margin-left: 10px" name="bt_add_subline" value="{{line.pk}}">Add {{line.line_type.name}}</button>-->
33 {# endif #}
34
35 </div>
36 </div>
37 </div>
38 {% endfor%}
39
40 {% else %}
41 <p style="color:#b4bcc2; margin-left: 5%;"><i>No Beams...</i></p>
42 {% endif %}
@@ -0,0 +1,462
1 {% extends "dev_conf.html" %}
2
3 {% block extra-menu-actions %}
4 <li><a href="{{ dev_conf.get_absolute_url_plot }}" target="_blank"><span class="glyphicon glyphicon-picture" aria-hidden="true"></span> View Patterns </a></li>
5 <li><a href="{{ dev_conf.get_absolute_url_write }}"><span class="glyphicon glyphicon-download" aria-hidden="true"></span> Write</a></li>
6 {% endblock %}
7
8 {% block extra-content %}
9 <style>
10
11 .abs {
12 border: 2px solid #00334d;
13 vertical-align: center;
14 display: inline-block;
15 }
16 .abs tr:nth-child(1){
17 border-bottom: 1px dashed #00334d;
18 }
19 .abs tr{
20 border-bottom: 0px solid #00334d;
21 }
22 .abs td {
23 border-right: 1px dashed #00334d;
24 text-align: center;
25 padding: 5px;
26 }
27
28
29 .legend {
30 margin-left: 15px;
31 display: inline-block;
32 border: 2px solid #00334d;
33 vertical-align: top;
34 }
35 .legend th{
36 border-bottom: 1px dashed #00334d;
37 font-weight: bold;
38 vertical-align: center;
39 text-align: center;
40 }
41 .legend td {
42 padding: 2px;
43 text-align: center;
44 }
45
46
47 .north {
48 border: 2px solid #00334d;
49 vertical-align: center;
50 font-weight: bold;
51 }
52 .north tr{
53 border: 1px solid #ffffff;
54 background-color: #FF0000;
55 }
56 .north td{
57 border: 2px solid #e2e2e7;
58 text-align: center;
59 padding: 1px 15px 1px 15px;
60 }
61 .north tr:nth-child(even) td:nth-child(n){
62 border-bottom: 12px solid #e2e2e7;
63 }
64 .north td:nth-child(n) {
65 border-right: 12px solid #e2e2e7;
66 }
67 .north td:nth-last-child(4n+1) {
68 border-right: 2px solid #e2e2e7;
69 }
70 .north tr:nth-last-child(1) td:nth-child(n){
71 border-bottom: 3px solid #e2e2e7;
72 }
73
74 .north tr:nth-child(2) td:nth-child(2){
75 background-color: #00cc00;
76 }
77
78 .north tr:nth-child(2) td:nth-child(4){
79 background-color: #ee902c;
80 }
81
82
83
84 .east {
85 border: 2px solid #00334d;
86 vertical-align: center;
87 font-weight: bold;
88 }
89 .east tr{
90 border: 1px solid #ffffff;
91 background-color: #FF0000;
92 }
93 .east td{
94 border: 2px solid #e2e2e7;
95 text-align: center;
96 padding: 1px 15px 1px 15px;
97 }
98 .east tr:nth-child(even) td:nth-child(n){
99 border-bottom: 12px solid #e2e2e7;
100 }
101 .east td:nth-child(n) {
102 border-right: 12px solid #e2e2e7;
103 }
104 .east td:nth-last-child(4n+1) {
105 border-right: 2px solid #e2e2e7;
106 }
107 .east tr:nth-last-child(1) td:nth-child(n){
108 border-bottom: 3px solid #e2e2e7;
109 }
110
111 .east tr:nth-child(2) td:nth-child(2){
112 background-color: #00cc00;
113 }
114
115 .east tr:nth-child(2) td:nth-child(4){
116 background-color: #ee902c;
117 }
118
119
120 .west {
121 border: 2px solid #00334d;
122 vertical-align: center;
123 font-weight: bold;
124 }
125 .west tr{
126 border: 1px solid #ffffff;
127 background-color: #FF0000;
128 }
129 .west td{
130 border: 2px solid #e2e2e7;
131 text-align: center;
132 padding: 1px 15px 1px 15px;
133 }
134 .west tr:nth-child(even) td:nth-child(n){
135 border-bottom: 12px solid #e2e2e7;
136 }
137 .west td:nth-child(n) {
138 border-right: 12px solid #e2e2e7;
139 }
140 .west td:nth-last-child(4n+1) {
141 border-right: 2px solid #e2e2e7;
142 }
143 .west tr:nth-last-child(1) td:nth-child(n){
144 border-bottom: 3px solid #e2e2e7;
145 }
146
147 .west tr:nth-child(2) td:nth-child(2){
148 background-color: #00cc00;
149 }
150
151 .west tr:nth-child(2) td:nth-child(4){
152 background-color: #ee902c;
153 }
154
155
156 .south {
157 border: 2px solid #00334d;
158 vertical-align: center;
159 font-weight: bold;
160 }
161 .south tr{
162 border: 1px solid #ffffff;
163 background-color: #FF0000;
164 }
165 .south td{
166 border: 2px solid #e2e2e7;
167 text-align: center;
168 padding: 1px 15px 1px 15px;
169 }
170 .south tr:nth-child(even) td:nth-child(n){
171 border-bottom: 12px solid #e2e2e7;
172 }
173 .south td:nth-child(n) {
174 border-right: 12px solid #e2e2e7;
175 }
176 .south td:nth-last-child(4n+1) {
177 border-right: 2px solid #e2e2e7;
178 }
179 .south tr:nth-last-child(1) td:nth-child(n){
180 border-bottom: 3px solid #e2e2e7;
181 }
182
183 .south tr:nth-child(2) td:nth-child(2){
184 background-color: #00cc00;
185 }
186
187 .south tr:nth-child(2) td:nth-child(4){
188 background-color: #ee902c;
189 }
190
191
192
193 </style>
194
195 <h4>Beams:</h4>
196 {% if beams_id %}
197
198 <div class="container">
199 <ul class="nav nav-pills">
200
201 {% for beam in beams %}
202 <li {% if forloop.counter == 1 %} class="active" {% endif %}>
203 <a data-toggle="pill" id="button-{{ forloop.counter }}" href="#">{{ forloop.counter }}</a>
204 </li>
205 {% endfor %}
206
207 </ul>
208 </div>
209
210
211 <script>
212 $(document).ready(function() {
213
214 {% for beam in beams %}
215 $( "#button-{{ forloop.counter }}" ).click(function() {
216 //$(this).addClass('active');
217
218 var beam_upvalues = {{beam.get_upvalues}};
219 var beam_downvalues = {{beam.get_downvalues}};
220 //alert(beam_upvalues)
221 var table = document.getElementById('abs_pattern');
222 var cells = table.getElementsByTagName('td');
223 //alert(cells[99].textContent);
224
225 for (var i = 1, len = 30; i < len; i++) {
226 if ((i > 24) && (i<29)){
227 cells[i].innerHTML = beam_upvalues[i-1].toFixed(1);
228 cells[i+4].innerHTML = beam_downvalues[i-1].toFixed(1);
229 }
230 else if ((i > 16) && (i<21)){
231 cells[i].innerHTML = beam_upvalues[i-1].toFixed(1);
232 cells[i+4].innerHTML = beam_downvalues[i-1].toFixed(1);
233 }
234 else if ((i > 8) && (i<13)){
235 cells[i].innerHTML = beam_upvalues[i-1].toFixed(1);
236 cells[i+4].innerHTML = beam_downvalues[i-1].toFixed(1);
237 }
238 else if (i < 5) {
239 cells[i].innerHTML = beam_upvalues[i-1].toFixed(1);
240 cells[i+4].innerHTML = beam_downvalues[i-1].toFixed(1);
241 }
242 }
243
244 for (var i = 34, len = 63; i < len; i++) {
245 if ((i > 57) && (i<62)) {
246 cells[i].innerHTML = beam_upvalues[i-30].toFixed(1);
247 cells[i+4].innerHTML = beam_downvalues[i-30].toFixed(1);
248 }
249 if ((i > 49) && (i<54)) {
250 cells[i].innerHTML = beam_upvalues[i-30].toFixed(1);
251 cells[i+4].innerHTML = beam_downvalues[i-30].toFixed(1);
252 }
253 else if ((i > 41) && (i<46)) {
254 cells[i].innerHTML = beam_upvalues[i-30].toFixed(1);
255 cells[i+4].innerHTML = beam_downvalues[i-30].toFixed(1);
256 }
257 else if (i < 38) {
258 cells[i].innerHTML = beam_upvalues[i-30].toFixed(1);
259 cells[i+4].innerHTML = beam_downvalues[i-30].toFixed(1);
260 }
261 }
262
263 for (var i = 67, len = 96; i < len; i++) {
264 if ((i > 90) && (i<95)) {
265 cells[i].innerHTML = beam_upvalues[i-35].toFixed(1);
266 cells[i+4].innerHTML = beam_downvalues[i-35].toFixed(1);
267 }
268 else if ((i > 82) && (i<87)) {
269 cells[i].innerHTML = beam_upvalues[i-35].toFixed(1);
270 cells[i+4].innerHTML = beam_downvalues[i-35].toFixed(1);
271 }
272 else if ((i > 74) && (i<79)) {
273 cells[i].innerHTML = beam_upvalues[i-35].toFixed(1);
274 cells[i+4].innerHTML = beam_downvalues[i-35].toFixed(1);
275 }
276 else if (i < 71) {
277 cells[i].innerHTML = beam_upvalues[i-35].toFixed(1);
278 cells[i+4].innerHTML = beam_downvalues[i-35].toFixed(1);
279 }
280 }
281
282 for (var i = 100, len = 129; i < len; i++) {
283 if ((i > 123) && (i<128)) {
284 cells[i].innerHTML = beam_upvalues[i-64].toFixed(1);
285 cells[i+4].innerHTML = beam_downvalues[i-64].toFixed(1);
286 }
287 else if ((i > 115) && (i<120)) {
288 cells[i].innerHTML = beam_upvalues[i-64].toFixed(1);
289 cells[i+4].innerHTML = beam_downvalues[i-64].toFixed(1);
290 }
291 else if ((i > 107) && (i<112)) {
292 cells[i].innerHTML = beam_upvalues[i-64].toFixed(1);
293 cells[i+4].innerHTML = beam_downvalues[i-64].toFixed(1);
294 }
295 else if (i < 104) {
296 cells[i].innerHTML = beam_upvalues[i-64].toFixed(1);
297 cells[i+4].innerHTML = beam_downvalues[i-64].toFixed(1);
298 }
299 }
300
301 //$('#button-1').addClass("active");
302
303 });
304
305 {% endfor %}
306
307
308
309
310 //})
311
312 //function ChangeColor() {
313 // document.getElementById("button_1").style.backgroundColor = "#2c3e50";
314 // document.getElementById("button_1").style.color = "#ecf0f1";
315 //}
316 });
317 </script>
318
319
320
321 <br>
322
323 <table id="abs_pattern" class="abs">
324 <tr>
325 <td> <b>North Quarter</b>
326 <table class="north ">
327 <tr>
328 <td>{{beams.0.get_upvalues.0}}</td> <td>{{beams.0.get_upvalues.1}}</td> <td>{{beams.0.get_upvalues.2}}</td> <td>{{beams.0.get_upvalues.3}}</td>
329 </tr>
330 <tr>
331 <td>{{beams.0.get_downvalues.0}}</td> <td>{{beams.0.get_downvalues.1}}</td> <td>{{beams.0.get_downvalues.2}}</td> <td>{{beams.0.get_downvalues.3}}</td>
332 </tr>
333 <tr>
334 <td>{{beams.0.get_upvalues.8}}</td> <td>{{beams.0.get_upvalues.9}}</td> <td>{{beams.0.get_upvalues.10}}</td> <td>{{beams.0.get_upvalues.11}}</td>
335 </tr>
336 <tr>
337 <td>{{beams.0.get_downvalues.8}}</td> <td>{{beams.0.get_downvalues.9}}</td> <td>{{beams.0.get_downvalues.10}}</td> <td>{{beams.0.get_downvalues.11}}</td>
338 </tr>
339 <tr>
340 <td>{{beams.0.get_upvalues.16}}</td> <td>{{beams.0.get_upvalues.17}}</td> <td>{{beams.0.get_upvalues.18}}</td> <td>{{beams.0.get_upvalues.19}}</td>
341 </tr>
342 <tr>
343 <td>{{beams.0.get_downvalues.16}}</td> <td>{{beams.0.get_downvalues.17}}</td> <td>{{beams.0.get_downvalues.18}}</td> <td>{{beams.0.get_downvalues.19}}</td>
344 </tr>
345 <tr>
346 <td>{{beams.0.get_upvalues.24}}</td> <td>{{beams.0.get_upvalues.25}}</td> <td>{{beams.0.get_upvalues.26}}</td> <td>{{beams.0.get_upvalues.27}}</td>
347 </tr>
348 <tr>
349 <td>{{beams.0.get_downvalues.24}}</td> <td>{{beams.0.get_downvalues.25}}</td> <td>{{beams.0.get_downvalues.26}}</td> <td>{{beams.0.get_downvalues.27}}</td>
350 </tr>
351 </table>
352 </td>
353 <td> <b>East Quarter</b>
354 <table class="east ">
355 <tr>
356 <td>{{beams.0.get_upvalues.4}}</td> <td>{{beams.0.get_upvalues.5}}</td> <td>{{beams.0.get_upvalues.6}}</td> <td>{{beams.0.get_upvalues.7}}</td>
357 </tr>
358 <tr>
359 <td>{{beams.0.get_downvalues.4}}</td> <td>{{beams.0.get_downvalues.5}}</td> <td>{{beams.0.get_downvalues.6}}</td> <td>{{beams.0.get_downvalues.7}}</td>
360 </tr>
361 <tr>
362 <td>{{beams.0.get_upvalues.12}}</td> <td>{{beams.0.get_upvalues.13}}</td> <td>{{beams.0.get_upvalues.14}}</td> <td>{{beams.0.get_upvalues.15}}</td>
363 </tr>
364 <tr>
365 <td>{{beams.0.get_downvalues.12}}</td> <td>{{beams.0.get_downvalues.13}}</td> <td>{{beams.0.get_downvalues.14}}</td> <td>{{beams.0.get_downvalues.15}}</td>
366 </tr>
367 <tr>
368 <td>{{beams.0.get_upvalues.20}}</td> <td>{{beams.0.get_upvalues.21}}</td> <td>{{beams.0.get_upvalues.22}}</td> <td>{{beams.0.get_upvalues.23}}</td>
369 </tr>
370 <tr>
371 <td>{{beams.0.get_downvalues.20}}</td> <td>{{beams.0.get_downvalues.21}}</td> <td>{{beams.0.get_downvalues.22}}</td> <td>{{beams.0.get_downvalues.23}}</td>
372 </tr>
373 <tr>
374 <td>{{beams.0.get_upvalues.28}}</td> <td>{{beams.0.get_upvalues.29}}</td> <td>{{beams.0.get_upvalues.30}}</td> <td>{{beams.0.get_upvalues.31}}</td>
375 </tr>
376 <tr>
377 <td>{{beams.0.get_downvalues.28}}</td> <td>{{beams.0.get_downvalues.29}}</td> <td>{{beams.0.get_downvalues.30}}</td> <td>{{beams.0.get_downvalues.31}}</td>
378 </tr>
379 </table>
380 </td>
381 </tr>
382 <tr>
383 <td> <b>West Quarter</b>
384 <table class="west ">
385 <tr>
386 <td>{{beams.0.get_upvalues.32}}</td> <td>{{beams.0.get_upvalues.33}}</td> <td>{{beams.0.get_upvalues.34}}</td> <td>{{beams.0.get_upvalues.35}}</td>
387 </tr>
388 <tr>
389 <td>{{beams.0.get_downvalues.32}}</td> <td>{{beams.0.get_downvalues.33}}</td> <td>{{beams.0.get_downvalues.34}}</td> <td>{{beams.0.get_downvalues.35}}</td>
390 </tr>
391 <tr>
392 <td>{{beams.0.get_upvalues.40}}</td> <td>{{beams.0.get_upvalues.41}}</td> <td>{{beams.0.get_upvalues.42}}</td> <td>{{beams.0.get_upvalues.43}}</td>
393 </tr>
394 <tr>
395 <td>{{beams.0.get_downvalues.40}}</td> <td>{{beams.0.get_downvalues.41}}</td> <td>{{beams.0.get_downvalues.42}}</td> <td>{{beams.0.get_downvalues.43}}</td>
396 </tr>
397 <tr>
398 <td>{{beams.0.get_upvalues.48}}</td> <td>{{beams.0.get_upvalues.49}}</td> <td>{{beams.0.get_upvalues.50}}</td> <td>{{beams.0.get_upvalues.51}}</td>
399 </tr>
400 <tr>
401 <td>{{beams.0.get_downvalues.48}}</td> <td>{{beams.0.get_downvalues.49}}</td> <td>{{beams.0.get_downvalues.50}}</td> <td>{{beams.0.get_downvalues.51}}</td>
402 </tr>
403 <tr>
404 <td>{{beams.0.get_upvalues.56}}</td> <td>{{beams.0.get_upvalues.57}}</td> <td>{{beams.0.get_upvalues.58}}</td> <td>{{beams.0.get_upvalues.59}}</td>
405 </tr>
406 <tr>
407 <td>{{beams.0.get_downvalues.56}}</td> <td>{{beams.0.get_downvalues.57}}</td> <td>{{beams.0.get_downvalues.58}}</td> <td>{{beams.0.get_downvalues.59}}</td>
408 </tr>
409 </table>
410 </td>
411 <td> <b>South Quarter</b>
412 <table class="south ">
413 <tr>
414 <td>{{beams.0.get_upvalues.36}}</td> <td>{{beams.0.get_upvalues.37}}</td> <td>{{beams.0.get_upvalues.38}}</td> <td>{{beams.0.get_upvalues.39}}</td>
415 </tr>
416 <tr>
417 <td>{{beams.0.get_downvalues.36}}</td> <td>{{beams.0.get_downvalues.37}}</td> <td>{{beams.0.get_downvalues.38}}</td> <td>{{beams.0.get_downvalues.39}}</td>
418 </tr>
419 <tr>
420 <td>{{beams.0.get_upvalues.44}}</td> <td>{{beams.0.get_upvalues.45}}</td> <td>{{beams.0.get_upvalues.46}}</td> <td>{{beams.0.get_upvalues.47}}</td>
421 </tr>
422 <tr>
423 <td>{{beams.0.get_downvalues.44}}</td> <td>{{beams.0.get_downvalues.45}}</td> <td>{{beams.0.get_downvalues.46}}</td> <td>{{beams.0.get_downvalues.47}}</td>
424 </tr>
425 <tr>
426 <td>{{beams.0.get_upvalues.52}}</td> <td>{{beams.0.get_upvalues.53}}</td> <td>{{beams.0.get_upvalues.54}}</td> <td>{{beams.0.get_upvalues.55}}</td>
427 </tr>
428 <tr>
429 <td>{{beams.0.get_downvalues.52}}</td> <td>{{beams.0.get_downvalues.53}}</td> <td>{{beams.0.get_downvalues.54}}</td> <td>{{beams.0.get_downvalues.55}}</td>
430 </tr>
431 <tr>
432 <td>{{beams.0.get_upvalues.60}}</td> <td>{{beams.0.get_upvalues.61}}</td> <td>{{beams.0.get_upvalues.62}}</td> <td>{{beams.0.get_upvalues.63}}</td>
433 </tr>
434 <tr>
435 <td>{{beams.0.get_downvalues.60}}</td> <td>{{beams.0.get_downvalues.61}}</td> <td>{{beams.0.get_downvalues.62}}</td> <td>{{beams.0.get_downvalues.63}}</td>
436 </tr>
437 </table>
438 </td>
439 </tr>
440 </table>
441
442 <table class="legend">
443 <tr>
444 <th colspan="2">Legend</th>
445 </tr>
446 <tr>
447 <td style="color:#ff0000;"><i>RED</i></td><td>Disconnected</td>
448 </tr>
449 <tr>
450 <td style="color:#ee902c;"><i>ORANGE</i></td><td>Connected</td>
451 </tr>
452 <tr>
453 <td style="color:#00cc00;"><i>GREEN</i></td><td>Running</td>
454 </tr>
455 </table>
456
457 {% else %}
458 <p style="color:#b4bcc2; margin-left: 5%;"><i>No Beams...</i></p>
459 {% endif %}
460
461
462 {% endblock %}
This diff has been collapsed as it changes many lines, (876 lines changed) Show them Hide them
@@ -0,0 +1,876
1 {% load static %}
2 {% load bootstrap3 %}
3 {% load main_tags %}
4
5 {% block content %}
6 <style>
7
8 .abs {
9 border: 2px solid #00334d;
10 vertical-align: center;
11 display: inline-block;
12 font-size: 95%;
13 }
14
15 .abs tr{
16 border-bottom: 0px solid #00334d;
17 }
18
19 .abs td{
20 border-right: 0px solid #00334d;
21 text-align: center;
22 padding: 4px;
23 }
24
25 .pattern {
26 border: 2px solid #00334d;
27 vertical-align: center;
28 font-weight: bold;
29 text-align: center;
30 }
31 .pattern tr{
32 border: 1px solid #ffffff;
33 background-color: #ecf0f1;
34 }
35 .pattern td{
36 border: 2px solid #e2e2e7;
37 text-align: center;
38 }
39
40 .north_quarter{
41 border: 2px solid #00334d;
42 vertical-align: center;
43 font-weight: bold;
44 }
45 .north_quarter tr{
46 border: 1px solid #ffffff;
47 background-color: #ecf0f1;
48 }
49 .north_quarter td{
50 border: 2px solid #e2e2e7;
51 text-align: center;
52 }
53
54 .east_quarter{
55 border: 2px solid #00334d;
56 vertical-align: center;
57 font-weight: bold;
58 }
59 .east_quarter tr{
60 border: 1px solid #ffffff;
61 background-color: #ecf0f1;
62 }
63 .east_quarter td{
64 border: 2px solid #e2e2e7;
65 text-align: center;
66 }
67
68 .west_quarter{
69 border: 2px solid #00334d;
70 vertical-align: center;
71 font-weight: bold;
72 }
73 .west_quarter tr{
74 border: 1px solid #ffffff;
75 background-color: #ecf0f1;
76 }
77 .west_quarter td{
78 border: 2px solid #e2e2e7;
79 text-align: center;
80 }
81
82 .south_quarter{
83 border: 2px solid #00334d;
84 vertical-align: center;
85 font-weight: bold;
86 }
87 .south_quarter tr{
88 border: 1px solid #ffffff;
89 background-color: #ecf0f1;
90 }
91 .south_quarter td{
92 border: 2px solid #e2e2e7;
93 text-align: center;
94 }
95
96 .abs_tx {
97 border: 2px solid #00334d;
98 vertical-align: center;
99 display: inline-block;
100 vertical-align: top;
101 margin-left: 10px;
102 vertical-align: top;
103 font-size: 95%;
104 }
105
106
107 }
108 .abs_tx tr:nth-last-child(1){
109 border-bottom: 0px solid #00334d;
110 }
111 .abs_tx td {
112 text-align: center;
113 padding: 4px;
114 }
115
116 .abs_rx {
117 border: 2px solid #00334d;
118 vertical-align: center;
119 display: inline-block;
120 margin-left: 10px;
121 text-align: center;
122 font-size: 95%;
123 }
124
125
126 }
127 .abs_rx tr:nth-last-child(1){
128 border-bottom: 0px solid #00334d;
129 }
130 .abs_rx td {
131 text-align: center;
132 padding: 4px;
133 }
134
135 .tx {
136 border: 2px solid #00334d;
137 vertical-align: center;
138 font-weight: bold;
139 }
140 .tx tr{
141 border: 1px solid #ffffff;
142 background-color: #ecf0f1;
143 }
144 .tx td{
145 border: 2px solid #e2e2e7;
146 text-align: center;
147 }
148
149
150 .rx {
151 border: 2px solid #00334d;
152 vertical-align: center;
153 font-weight: bold;
154 }
155 .rx tr{
156 border: 1px solid #ffffff;
157 background-color: #ecf0f1;
158 }
159 .rx td{
160 border: 2px solid #e2e2e7;
161 text-align: center;
162 }
163
164 .pattern_image{
165 display: inline-block;
166 }
167
168 </style>
169
170 <script>
171 $(document).ready(function() {
172
173 {% for beam in abs_beams %}
174 $( "#button-{{ forloop.counter }}" ).click(function() {
175
176 var antenna_upvalues = {{beam.antenna_upvalues}};
177 var antenna_downvalues = {{beam.antenna_downvalues}};
178
179 var table_up = document.getElementById('antenna_up');
180 var cells_up = table_up.getElementsByTagName('td');
181
182 var table_down = document.getElementById('antenna_down');
183 var cells_down = table_down.getElementsByTagName('td');
184
185 //TX Tables
186 var tx_upvalues = {{beam.get_tx.up}};
187 var tx_downvalues = {{beam.get_tx.down}};
188
189 var tabletx_up = document.getElementById('tx_up');
190 var cellstx_up = tabletx_up.getElementsByTagName('td');
191 var tabletx_down = document.getElementById('tx_down');
192 var cellstx_down = tabletx_down.getElementsByTagName('td');
193
194 //RX Tables
195 var rx_upvalues = {{beam.get_rx.up}};
196 var rx_downvalues = {{beam.get_rx.down}};
197
198 var tablerx_up = document.getElementById('rx_up');
199 var cellsrx_up = tablerx_up.getElementsByTagName('td');
200 var tablerx_down = document.getElementById('rx_down');
201 var cellsrx_down = tablerx_down.getElementsByTagName('td');
202
203 //alert(cells_down[51].textContent);
204 //alert(cells_up[51].textContent);
205
206 for (var i = 1, len = 17; i < len; i++) {
207 if ((i > 12) && (i<17)){
208 cells_up[i].innerHTML = antenna_upvalues[3][i-13].toFixed(1);
209 cells_down[i].innerHTML = antenna_downvalues[3][i-13].toFixed(1);
210 cellstx_up[i].innerHTML = tx_upvalues[3][i-13];
211 cellstx_down[i].innerHTML = tx_downvalues[3][i-13];
212 cellsrx_up[i].innerHTML = rx_upvalues[3][i-13];
213 cellsrx_down[i].innerHTML = rx_downvalues[3][i-13];
214 }
215 else if ((i > 8) && (i<13)){
216 cells_up[i].innerHTML = antenna_upvalues[2][i-9].toFixed(1);
217 cells_down[i].innerHTML = antenna_downvalues[2][i-9].toFixed(1);
218 cellstx_up[i].innerHTML = tx_upvalues[2][i-9];
219 cellstx_down[i].innerHTML = tx_downvalues[2][i-9];
220 cellsrx_up[i].innerHTML = rx_upvalues[2][i-9];
221 cellsrx_down[i].innerHTML = rx_downvalues[2][i-9];
222 }
223 else if ((i > 4) && (i<9)){
224 cells_up[i].innerHTML = antenna_upvalues[1][i-5].toFixed(1);
225 cells_down[i].innerHTML = antenna_downvalues[1][i-5].toFixed(1);
226 cellstx_up[i].innerHTML = tx_upvalues[1][i-5];
227 cellstx_down[i].innerHTML = tx_downvalues[1][i-5];
228 cellsrx_up[i].innerHTML = rx_upvalues[1][i-5];
229 cellsrx_down[i].innerHTML = rx_downvalues[1][i-5];
230 }
231 else if (i < 5) {
232 cells_up[i].innerHTML = antenna_upvalues[0][i-1].toFixed(1);
233 cells_down[i].innerHTML = antenna_downvalues[0][i-1].toFixed(1);
234 cellstx_up[i].innerHTML = tx_upvalues[0][i-1];
235 cellstx_down[i].innerHTML = tx_downvalues[0][i-1];
236 cellsrx_up[i].innerHTML = rx_upvalues[0][i-1];
237 cellsrx_down[i].innerHTML = rx_downvalues[0][i-1];
238 }
239 }
240
241 for (var i = 18, len = 34; i < len; i++) {
242 if ((i > 29) && (i<34)) {
243 cells_up[i].innerHTML = antenna_upvalues[3][i-26].toFixed(1);
244 cells_down[i].innerHTML = antenna_downvalues[3][i-26].toFixed(1);
245 cellstx_up[i].innerHTML = tx_upvalues[3][i-26];
246 cellstx_down[i].innerHTML = tx_downvalues[3][i-26];
247 cellsrx_up[i].innerHTML = rx_upvalues[3][i-26];
248 cellsrx_down[i].innerHTML = rx_downvalues[3][i-26];
249 }
250 if ((i > 25) && (i<30)) {
251 cells_up[i].innerHTML = antenna_upvalues[2][i-22].toFixed(1);
252 cells_down[i].innerHTML = antenna_downvalues[2][i-22].toFixed(1);
253 cellstx_up[i].innerHTML = tx_upvalues[2][i-22];
254 cellstx_down[i].innerHTML = tx_downvalues[2][i-22];
255 cellsrx_up[i].innerHTML = rx_upvalues[2][i-22];
256 cellsrx_down[i].innerHTML = rx_downvalues[2][i-22];
257 }
258 else if ((i > 21) && (i<26)) {
259 cells_up[i].innerHTML = antenna_upvalues[1][i-18].toFixed(1);
260 cells_down[i].innerHTML = antenna_downvalues[1][i-18].toFixed(1);
261 cellstx_up[i].innerHTML = tx_upvalues[1][i-18];
262 cellstx_down[i].innerHTML = tx_downvalues[1][i-18];
263 cellsrx_up[i].innerHTML = rx_upvalues[1][i-18];
264 cellsrx_down[i].innerHTML = rx_downvalues[1][i-18];
265 }
266 else if (i < 22) {
267 cells_up[i].innerHTML = antenna_upvalues[0][i-14].toFixed(1);
268 cells_down[i].innerHTML = antenna_downvalues[0][i-14].toFixed(1);
269 cellstx_up[i].innerHTML = tx_upvalues[0][i-14];
270 cellstx_down[i].innerHTML = tx_downvalues[0][i-14];
271 cellsrx_up[i].innerHTML = rx_upvalues[0][i-14];
272 cellsrx_down[i].innerHTML = rx_downvalues[0][i-14];
273 }
274 }
275
276 for (var i = 35, len = 51; i < len; i++) {
277 if ((i > 46) && (i<51)) {
278 cells_up[i].innerHTML = antenna_upvalues[7][i-47].toFixed(1);
279 cells_down[i].innerHTML = antenna_downvalues[7][i-47].toFixed(1);
280 cellstx_up[i].innerHTML = tx_upvalues[7][i-47];
281 cellstx_down[i].innerHTML = tx_downvalues[7][i-47];
282 cellsrx_up[i].innerHTML = rx_upvalues[7][i-47];
283 cellsrx_down[i].innerHTML = rx_downvalues[7][i-47];
284 }
285 else if ((i > 42) && (i<47)) {
286 cells_up[i].innerHTML = antenna_upvalues[6][i-43].toFixed(1);
287 cells_down[i].innerHTML = antenna_downvalues[6][i-43].toFixed(1);
288 cellstx_up[i].innerHTML = tx_upvalues[6][i-43];
289 cellstx_down[i].innerHTML = tx_downvalues[6][i-43];
290 cellsrx_up[i].innerHTML = rx_upvalues[6][i-43];
291 cellsrx_down[i].innerHTML = rx_downvalues[6][i-43];
292 }
293 else if ((i > 38) && (i<43)) {
294 cells_up[i].innerHTML = antenna_upvalues[5][i-39].toFixed(1);
295 cells_down[i].innerHTML = antenna_downvalues[5][i-39].toFixed(1);
296 cellstx_up[i].innerHTML = tx_upvalues[5][i-39];
297 cellstx_down[i].innerHTML = tx_downvalues[5][i-39];
298 cellsrx_up[i].innerHTML = rx_upvalues[5][i-39];
299 cellsrx_down[i].innerHTML = rx_downvalues[5][i-39];
300 }
301 else if (i < 39) {
302 cells_up[i].innerHTML = antenna_upvalues[4][i-35].toFixed(1);
303 cells_down[i].innerHTML = antenna_downvalues[4][i-35].toFixed(1);
304 cellstx_up[i].innerHTML = tx_upvalues[4][i-35];
305 cellstx_down[i].innerHTML = tx_downvalues[4][i-35];
306 cellsrx_up[i].innerHTML = rx_upvalues[4][i-35];
307 cellsrx_down[i].innerHTML = rx_downvalues[4][i-35];
308 }
309 }
310
311 for (var i = 52, len = 68; i < len; i++) {
312 if ((i > 63) && (i<68)) {
313 cells_up[i].innerHTML = antenna_upvalues[7][i-60].toFixed(1);
314 cells_down[i].innerHTML = antenna_downvalues[7][i-60].toFixed(1);
315 cellstx_up[i].innerHTML = tx_upvalues[7][i-60];
316 cellstx_down[i].innerHTML = tx_downvalues[7][i-60];
317 cellsrx_up[i].innerHTML = rx_upvalues[7][i-60];
318 cellsrx_down[i].innerHTML = rx_downvalues[7][i-60];
319 }
320 else if ((i > 59) && (i<64)) {
321 cells_up[i].innerHTML = antenna_upvalues[6][i-56].toFixed(1);
322 cells_down[i].innerHTML = antenna_downvalues[6][i-56].toFixed(1);
323 cellstx_up[i].innerHTML = tx_upvalues[6][i-56];
324 cellstx_down[i].innerHTML = tx_downvalues[6][i-56];
325 cellsrx_up[i].innerHTML = rx_upvalues[6][i-56];
326 cellsrx_down[i].innerHTML = rx_downvalues[6][i-56];
327 }
328 else if ((i > 55) && (i<60)) {
329 cells_up[i].innerHTML = antenna_upvalues[5][i-52].toFixed(1);
330 cells_down[i].innerHTML = antenna_downvalues[5][i-52].toFixed(1);
331 cellstx_up[i].innerHTML = tx_upvalues[5][i-52];
332 cellstx_down[i].innerHTML = tx_downvalues[5][i-52];
333 cellsrx_up[i].innerHTML = rx_upvalues[5][i-52];
334 cellsrx_down[i].innerHTML = rx_downvalues[5][i-52];
335 }
336 else if (i < 56) {
337 cells_up[i].innerHTML = antenna_upvalues[4][i-48].toFixed(1);
338 cells_down[i].innerHTML = antenna_downvalues[4][i-48].toFixed(1);
339 cellstx_up[i].innerHTML = tx_upvalues[4][i-48];
340 cellstx_down[i].innerHTML = tx_downvalues[4][i-48];
341 cellsrx_up[i].innerHTML = rx_upvalues[4][i-48];
342 cellsrx_down[i].innerHTML = rx_downvalues[4][i-48];
343 }
344 }
345
346 var up_ues = document.getElementById('up_ues');
347 up_ues.innerHTML = "{{beam.get_up_ues}}";
348 var down_ues = document.getElementById('down_ues');
349 down_ues.innerHTML = "{{beam.get_down_ues}}";
350
351 });
352
353 {% endfor %}
354
355 });
356 </script>
357
358
359 <div id="UP" class="panel-group">
360 <div class="panel panel-default">
361 <div class="panel-heading">UP</div>
362 <div class="panel-body">
363 <table class="abs">
364 <tr>
365 <td> <b>Antenna</b>
366 <table id="antenna_up" class="pattern">
367 <tr>
368 <td> North Quarter
369 <table class="north_quarter">
370 <tr>
371 <td>{{abs_beams.0.get_upvalues.0}}</td> <td>{{abs_beams.0.get_upvalues.1}}</td> <td>{{abs_beams.0.get_upvalues.2}}</td> <td>{{abs_beams.0.get_upvalues.3}}</td>
372 </tr>
373 <tr>
374 <td>{{abs_beams.0.get_upvalues.8}}</td> <td>{{abs_beams.0.get_upvalues.9}}</td> <td>{{abs_beams.0.get_upvalues.10}}</td> <td>{{abs_beams.0.get_upvalues.11}}</td>
375 </tr>
376 <tr>
377 <td>{{abs_beams.0.get_upvalues.16}}</td> <td>{{abs_beams.0.get_upvalues.17}}</td> <td>{{abs_beams.0.get_upvalues.18}}</td> <td>{{abs_beams.0.get_upvalues.19}}</td>
378 </tr>
379 <tr>
380 <td>{{abs_beams.0.get_upvalues.24}}</td> <td>{{abs_beams.0.get_upvalues.25}}</td> <td>{{abs_beams.0.get_upvalues.26}}</td> <td>{{abs_beams.0.get_upvalues.27}}</td>
381 </tr>
382 </table>
383 </td>
384 <td> East Quarter
385 <table class="east_quarter">
386 <tr>
387 <td>{{abs_beams.0.get_upvalues.4}}</td> <td>{{abs_beams.0.get_upvalues.5}}</td> <td>{{abs_beams.0.get_upvalues.6}}</td> <td>{{abs_beams.0.get_upvalues.7}}</td>
388 </tr>
389 <tr>
390 <td>{{abs_beams.0.get_upvalues.12}}</td> <td>{{abs_beams.0.get_upvalues.13}}</td> <td>{{abs_beams.0.get_upvalues.14}}</td> <td>{{abs_beams.0.get_upvalues.15}}</td>
391 </tr>
392 <tr>
393 <td>{{abs_beams.0.get_upvalues.20}}</td> <td>{{abs_beams.0.get_upvalues.21}}</td> <td>{{abs_beams.0.get_upvalues.22}}</td> <td>{{abs_beams.0.get_upvalues.23}}</td>
394 </tr>
395 <tr>
396 <td>{{abs_beams.0.get_upvalues.28}}</td> <td>{{abs_beams.0.get_upvalues.29}}</td> <td>{{abs_beams.0.get_upvalues.30}}</td> <td>{{abs_beams.0.get_upvalues.31}}</td>
397 </tr>
398 </table>
399 </td>
400 </tr>
401 <tr>
402 <td> West Quarter
403 <table class="west_quarter">
404 <tr>
405 <td>{{abs_beams.0.get_upvalues.32}}</td> <td>{{abs_beams.0.get_upvalues.33}}</td> <td>{{abs_beams.0.get_upvalues.34}}</td> <td>{{abs_beams.0.get_upvalues.35}}</td>
406 </tr>
407 <tr>
408 <td>{{abs_beams.0.get_upvalues.40}}</td> <td>{{abs_beams.0.get_upvalues.41}}</td> <td>{{abs_beams.0.get_upvalues.42}}</td> <td>{{abs_beams.0.get_upvalues.43}}</td>
409 </tr>
410 <tr>
411 <td>{{abs_beams.0.get_upvalues.48}}</td> <td>{{abs_beams.0.get_upvalues.49}}</td> <td>{{abs_beams.0.get_upvalues.50}}</td> <td>{{abs_beams.0.get_upvalues.51}}</td>
412 </tr>
413 <tr>
414 <td>{{abs_beams.0.get_upvalues.56}}</td> <td>{{abs_beams.0.get_upvalues.57}}</td> <td>{{abs_beams.0.get_upvalues.58}}</td> <td>{{abs_beams.0.get_upvalues.59}}</td>
415 </tr>
416 </table>
417 </td>
418 <td> South Quarter
419 <table class="south_quarter">
420 <tr>
421 <td>{{abs_beams.0.get_upvalues.36}}</td> <td>{{abs_beams.0.get_upvalues.37}}</td> <td>{{abs_beams.0.get_upvalues.38}}</td> <td>{{abs_beams.0.get_upvalues.39}}</td>
422 </tr>
423 <tr>
424 <td>{{abs_beams.0.get_upvalues.44}}</td> <td>{{abs_beams.0.get_upvalues.45}}</td> <td>{{abs_beams.0.get_upvalues.46}}</td> <td>{{abs_beams.0.get_upvalues.47}}</td>
425 </tr>
426 <tr>
427 <td>{{abs_beams.0.get_upvalues.52}}</td> <td>{{abs_beams.0.get_upvalues.53}}</td> <td>{{abs_beams.0.get_upvalues.54}}</td> <td>{{abs_beams.0.get_upvalues.55}}</td>
428 </tr>
429 <tr>
430 <td>{{abs_beams.0.get_upvalues.60}}</td> <td>{{abs_beams.0.get_upvalues.61}}</td> <td>{{abs_beams.0.get_upvalues.62}}</td> <td>{{abs_beams.0.get_upvalues.63}}</td>
431 </tr>
432 </table>
433 </td>
434 </tr>
435 </table>
436 </td>
437 </tr>
438 </table>
439
440
441 <table class="abs_tx">
442 <tr>
443 <td> <b>TX</b>
444 <table id="tx_up" class="tx">
445 <tr>
446 <td> North Quarter
447 <table align="center" class="north_quarter">
448 <tr>
449 <td>{{abs_beams.0.get_tx.up.0.0}}</td> <td>{{abs_beams.0.get_tx.up.0.1}}</td> <td>{{abs_beams.0.get_tx.up.0.2}}</td> <td>{{abs_beams.0.get_tx.up.0.3}}</td>
450 </tr>
451 <tr>
452 <td>{{abs_beams.0.get_tx.up.1.0}}</td> <td>{{abs_beams.0.get_tx.up.1.1}}</td> <td>{{abs_beams.0.get_tx.up.1.2}}</td> <td>{{abs_beams.0.get_tx.up.1.3}}</td>
453 </tr>
454 <tr>
455 <td>{{abs_beams.0.get_tx.up.2.0}}</td> <td>{{abs_beams.0.get_tx.up.2.1}}</td> <td>{{abs_beams.0.get_tx.up.2.2}}</td> <td>{{abs_beams.0.get_tx.up.2.3}}</td>
456 </tr>
457 <tr>
458 <td>{{abs_beams.0.get_tx.up.3.0}}</td> <td>{{abs_beams.0.get_tx.up.3.1}}</td> <td>{{abs_beams.0.get_tx.up.3.2}}</td> <td>{{abs_beams.0.get_tx.up.3.3}}</td>
459 </tr>
460 </table>
461 </td>
462 <td> East Quarter
463 <table align="center" class="east_quarter">
464 <tr>
465 <td>{{abs_beams.0.get_tx.up.0.4}}</td> <td>{{abs_beams.0.get_tx.up.0.5}}</td> <td>{{abs_beams.0.get_tx.up.0.6}}</td> <td>{{abs_beams.0.get_tx.up.0.7}}</td>
466 </tr>
467 <tr>
468 <td>{{abs_beams.0.get_tx.up.1.4}}</td> <td>{{abs_beams.0.get_tx.up.1.5}}</td> <td>{{abs_beams.0.get_tx.up.1.6}}</td> <td>{{abs_beams.0.get_tx.up.1.7}}</td>
469 </tr>
470 <tr>
471 <td>{{abs_beams.0.get_tx.up.2.4}}</td> <td>{{abs_beams.0.get_tx.up.2.5}}</td> <td>{{abs_beams.0.get_tx.up.2.6}}</td> <td>{{abs_beams.0.get_tx.up.2.7}}</td>
472 </tr>
473 <tr>
474 <td>{{abs_beams.0.get_tx.up.3.4}}</td> <td>{{abs_beams.0.get_tx.up.3.5}}</td> <td>{{abs_beams.0.get_tx.up.3.6}}</td> <td>{{abs_beams.0.get_tx.up.3.7}}</td>
475 </tr>
476 </table>
477 </td>
478 </tr>
479 <tr>
480 <td> West Quarter
481 <table align="center" class="west_quarter">
482 <tr>
483 <td>{{abs_beams.0.get_tx.up.4.0}}</td> <td>{{abs_beams.0.get_tx.up.4.1}}</td> <td>{{abs_beams.0.get_tx.up.4.2}}</td> <td>{{abs_beams.0.get_tx.up.4.3}}</td>
484 </tr>
485 <tr>
486 <td>{{abs_beams.0.get_tx.up.5.0}}</td> <td>{{abs_beams.0.get_tx.up.5.1}}</td> <td>{{abs_beams.0.get_tx.up.5.2}}</td> <td>{{abs_beams.0.get_tx.up.5.3}}</td>
487 </tr>
488 <tr>
489 <td>{{abs_beams.0.get_tx.up.6.0}}</td> <td>{{abs_beams.0.get_tx.up.6.1}}</td> <td>{{abs_beams.0.get_tx.up.6.2}}</td> <td>{{abs_beams.0.get_tx.up.6.3}}</td>
490 </tr>
491 <tr>
492 <td>{{abs_beams.0.get_tx.up.7.0}}</td> <td>{{abs_beams.0.get_tx.up.7.1}}</td> <td>{{abs_beams.0.get_tx.up.7.2}}</td> <td>{{abs_beams.0.get_tx.up.7.3}}</td>
493 </tr>
494 </table>
495 </td>
496 <td> South Quarter
497 <table align="center" class="south_quarter">
498 <tr>
499 <td>{{abs_beams.0.get_tx.up.4.4}}</td> <td>{{abs_beams.0.get_tx.up.4.5}}</td> <td>{{abs_beams.0.get_tx.up.4.6}}</td> <td>{{abs_beams.0.get_tx.up.4.7}}</td>
500 </tr>
501 <tr>
502 <td>{{abs_beams.0.get_tx.up.5.4}}</td> <td>{{abs_beams.0.get_tx.up.5.5}}</td> <td>{{abs_beams.0.get_tx.up.5.6}}</td> <td>{{abs_beams.0.get_tx.up.5.7}}</td>
503 </tr>
504 <tr>
505 <td>{{abs_beams.0.get_tx.up.6.4}}</td> <td>{{abs_beams.0.get_tx.up.6.5}}</td> <td>{{abs_beams.0.get_tx.up.6.6}}</td> <td>{{abs_beams.0.get_tx.up.6.7}}</td>
506 </tr>
507 <tr>
508 <td>{{abs_beams.0.get_tx.up.7.4}}</td> <td>{{abs_beams.0.get_tx.up.7.5}}</td> <td>{{abs_beams.0.get_tx.up.7.6}}</td> <td>{{abs_beams.0.get_tx.up.7.7}}</td>
509 </tr>
510 </table>
511 </td>
512 </tr>
513 </table>
514 </td>
515 </tr>
516 </table>
517
518
519 <table class="abs_rx">
520 <tr>
521 <td> <b>RX</b>
522 <table id="rx_up" class="rx">
523 <tr>
524 <td> North Quarter
525 <table align="center" class="north_quarter">
526 <tr>
527 <td>{{abs_beams.0.get_rx.up.0.0}}</td> <td>{{abs_beams.0.get_rx.up.0.1}}</td> <td>{{abs_beams.0.get_rx.up.0.2}}</td> <td>{{abs_beams.0.get_rx.up.0.3}}</td>
528 </tr>
529 <tr>
530 <td>{{abs_beams.0.get_rx.up.1.0}}</td> <td>{{abs_beams.0.get_rx.up.1.1}}</td> <td>{{abs_beams.0.get_rx.up.1.2}}</td> <td>{{abs_beams.0.get_rx.up.1.3}}</td>
531 </tr>
532 <tr>
533 <td>{{abs_beams.0.get_rx.up.2.0}}</td> <td>{{abs_beams.0.get_rx.up.2.1}}</td> <td>{{abs_beams.0.get_rx.up.2.2}}</td> <td>{{abs_beams.0.get_rx.up.2.3}}</td>
534 </tr>
535 <tr>
536 <td>{{abs_beams.0.get_rx.up.3.0}}</td> <td>{{abs_beams.0.get_rx.up.3.1}}</td> <td>{{abs_beams.0.get_rx.up.3.2}}</td> <td>{{abs_beams.0.get_rx.up.3.3}}</td>
537 </tr>
538 </table>
539 </td>
540 <td> East Quarter
541 <table align="center" class="east_quarter">
542 <tr>
543 <td>{{abs_beams.0.get_rx.up.0.4}}</td> <td>{{abs_beams.0.get_rx.up.0.5}}</td> <td>{{abs_beams.0.get_rx.up.0.6}}</td> <td>{{abs_beams.0.get_rx.up.0.7}}</td>
544 </tr>
545 <tr>
546 <td>{{abs_beams.0.get_rx.up.1.4}}</td> <td>{{abs_beams.0.get_rx.up.1.5}}</td> <td>{{abs_beams.0.get_rx.up.1.6}}</td> <td>{{abs_beams.0.get_rx.up.1.7}}</td>
547 </tr>
548 <tr>
549 <td>{{abs_beams.0.get_rx.up.2.4}}</td> <td>{{abs_beams.0.get_rx.up.2.5}}</td> <td>{{abs_beams.0.get_rx.up.2.6}}</td> <td>{{abs_beams.0.get_rx.up.2.7}}</td>
550 </tr>
551 <tr>
552 <td>{{abs_beams.0.get_rx.up.3.4}}</td> <td>{{abs_beams.0.get_rx.up.3.5}}</td> <td>{{abs_beams.0.get_rx.up.3.6}}</td> <td>{{abs_beams.0.get_rx.up.3.7}}</td>
553 </tr>
554 </table>
555 </td>
556 </tr>
557 <tr>
558 <td> West Quarter
559 <table align="center" class="west_quarter">
560 <tr>
561 <td>{{abs_beams.0.get_rx.up.4.0}}</td> <td>{{abs_beams.0.get_rx.up.4.1}}</td> <td>{{abs_beams.0.get_rx.up.4.2}}</td> <td>{{abs_beams.0.get_rx.up.4.3}}</td>
562 </tr>
563 <tr>
564 <td>{{abs_beams.0.get_rx.up.5.0}}</td> <td>{{abs_beams.0.get_rx.up.5.1}}</td> <td>{{abs_beams.0.get_rx.up.5.2}}</td> <td>{{abs_beams.0.get_rx.up.5.3}}</td>
565 </tr>
566 <tr>
567 <td>{{abs_beams.0.get_rx.up.6.0}}</td> <td>{{abs_beams.0.get_rx.up.6.1}}</td> <td>{{abs_beams.0.get_rx.up.6.2}}</td> <td>{{abs_beams.0.get_rx.up.6.3}}</td>
568 </tr>
569 <tr>
570 <td>{{abs_beams.0.get_rx.up.7.0}}</td> <td>{{abs_beams.0.get_rx.up.7.1}}</td> <td>{{abs_beams.0.get_rx.up.7.2}}</td> <td>{{abs_beams.0.get_rx.up.7.3}}</td>
571 </tr>
572 </table>
573 </td>
574 <td> South Quarter
575 <table align="center" class="south_quarter">
576 <tr>
577 <td>{{abs_beams.0.get_rx.up.4.4}}</td> <td>{{abs_beams.0.get_rx.up.4.5}}</td> <td>{{abs_beams.0.get_rx.up.4.6}}</td> <td>{{abs_beams.0.get_rx.up.4.7}}</td>
578 </tr>
579 <tr>
580 <td>{{abs_beams.0.get_rx.up.5.4}}</td> <td>{{abs_beams.0.get_rx.up.5.5}}</td> <td>{{abs_beams.0.get_rx.up.5.6}}</td> <td>{{abs_beams.0.get_rx.up.5.7}}</td>
581 </tr>
582 <tr>
583 <td>{{abs_beams.0.get_rx.up.6.4}}</td> <td>{{abs_beams.0.get_rx.up.6.5}}</td> <td>{{abs_beams.0.get_rx.up.6.6}}</td> <td>{{abs_beams.0.get_rx.up.6.7}}</td>
584 </tr>
585 <tr>
586 <td>{{abs_beams.0.get_rx.up.7.4}}</td> <td>{{abs_beams.0.get_rx.up.7.5}}</td> <td>{{abs_beams.0.get_rx.up.7.6}}</td> <td>{{abs_beams.0.get_rx.up.7.7}}</td>
587 </tr>
588 </table>
589 </td>
590 </tr>
591 </table>
592 </td>
593 </tr>
594 </table>
595
596 {% if not edit %}
597 {% include "abs_pattern_img.html" %}
598 {% endif %}
599
600 <br>
601
602 <div id="up_ues" style="display: inline-block">
603 Ues: {{abs_beams.0.get_up_ues}}
604 </div>
605
606 <div style="margin-left: 70px; display: inline-block">
607 <input type="checkbox" id="up_onlyrx" {% if abs_beams.0.get_up_onlyrx == True %} checked="True" {% endif %} disabled>
608 Only RX: {{abs_beams.0.get_up_onlyrx}}
609 </input>
610 </div>
611
612 </div>
613 </div>
614 </div>
615
616 <div id="DOWN" class="panel-group">
617 <div class="panel panel-default">
618 <div class="panel-heading">DOWN</div>
619 <div class="panel-body">
620 <table class="abs">
621 <tr>
622 <td> <b>Antenna</b>
623 <table id="antenna_down" class="pattern">
624 <tr>
625 <td> <b>North Quarter</b>
626 <table class="north_quarter">
627 <tr>
628 <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td>
629 </tr>
630 <tr>
631 <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td>
632 </tr>
633 <tr>
634 <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td>
635 </tr>
636 <tr>
637 <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td>
638 </tr>
639 </table>
640 </td>
641 <td> <b>East Quarter</b>
642 <table class="east_quarter">
643 <tr>
644 <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td>
645 </tr>
646 <tr>
647 <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td>
648 </tr>
649 <tr>
650 <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td>
651 </tr>
652 <tr>
653 <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td>
654 </tr>
655 </table>
656 </td>
657 </tr>
658 <tr>
659 <td> <b>West Quarter</b>
660 <table class="west_quarter">
661 <tr>
662 <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td>
663 </tr>
664 <tr>
665 <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td>
666 </tr>
667 <tr>
668 <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td>
669 </tr>
670 <tr>
671 <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td>
672 </tr>
673 </table>
674 </td>
675 <td> <b>South Quarter</b>
676 <table class="south_quarter">
677 <tr>
678 <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td>
679 </tr>
680 <tr>
681 <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td>
682 </tr>
683 <tr>
684 <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td>
685 </tr>
686 <tr>
687 <td>0.0</td> <td>0.0</td> <td>0.0</td> <td>0.0</td>
688 </tr>
689 </table>
690 </td>
691 </tr>
692 </table>
693 </td>
694 </tr>
695 </table>
696
697 <table class="abs_tx">
698 <tr>
699 <td> <b>TX</b>
700 <table id="tx_down" class="tx">
701 <tr>
702 <td> <b>North Quarter</b>
703 <table align="center" class="north_quarter">
704 <tr>
705 <td>{{abs_beams.0.get_tx.down.0.0}}</td> <td>{{abs_beams.0.get_tx.down.0.1}}</td> <td>{{abs_beams.0.get_tx.down.0.2}}</td> <td>{{abs_beams.0.get_tx.down.0.3}}</td>
706 </tr>
707 <tr>
708 <td>{{abs_beams.0.get_tx.down.1.0}}</td> <td>{{abs_beams.0.get_tx.down.1.1}}</td> <td>{{abs_beams.0.get_tx.down.1.2}}</td> <td>{{abs_beams.0.get_tx.down.1.3}}</td>
709 </tr>
710 <tr>
711 <td>{{abs_beams.0.get_tx.down.2.0}}</td> <td>{{abs_beams.0.get_tx.down.2.1}}</td> <td>{{abs_beams.0.get_tx.down.2.2}}</td> <td>{{abs_beams.0.get_tx.down.2.3}}</td>
712 </tr>
713 <tr>
714 <td>{{abs_beams.0.get_tx.down.3.0}}</td> <td>{{abs_beams.0.get_tx.down.3.1}}</td> <td>{{abs_beams.0.get_tx.down.3.2}}</td> <td>{{abs_beams.0.get_tx.down.3.3}}</td>
715 </tr>
716 </table>
717 </td>
718 <td> <b>East Quarter</b>
719 <table align="center" class="east_quarter">
720 <tr>
721 <td>{{abs_beams.0.get_tx.down.0.4}}</td> <td>{{abs_beams.0.get_tx.down.0.5}}</td> <td>{{abs_beams.0.get_tx.down.0.6}}</td> <td>{{abs_beams.0.get_tx.down.0.7}}</td>
722 </tr>
723 <tr>
724 <td>{{abs_beams.0.get_tx.down.1.4}}</td> <td>{{abs_beams.0.get_tx.down.1.5}}</td> <td>{{abs_beams.0.get_tx.down.1.6}}</td> <td>{{abs_beams.0.get_tx.down.1.7}}</td>
725 </tr>
726 <tr>
727 <td>{{abs_beams.0.get_tx.down.2.4}}</td> <td>{{abs_beams.0.get_tx.down.2.5}}</td> <td>{{abs_beams.0.get_tx.down.2.6}}</td> <td>{{abs_beams.0.get_tx.down.2.7}}</td>
728 </tr>
729 <tr>
730 <td>{{abs_beams.0.get_tx.down.3.4}}</td> <td>{{abs_beams.0.get_tx.down.3.5}}</td> <td>{{abs_beams.0.get_tx.down.3.6}}</td> <td>{{abs_beams.0.get_tx.down.3.7}}</td>
731 </tr>
732 </table>
733 </td>
734 </tr>
735 <tr>
736 <td> <b>West Quarter</b>
737 <table align="center" class="west_quarter">
738 <tr>
739 <td>{{abs_beams.0.get_tx.down.4.0}}</td> <td>{{abs_beams.0.get_tx.down.4.1}}</td> <td>{{abs_beams.0.get_tx.down.4.2}}</td> <td>{{abs_beams.0.get_tx.down.4.3}}</td>
740 </tr>
741 <tr>
742 <td>{{abs_beams.0.get_tx.down.5.0}}</td> <td>{{abs_beams.0.get_tx.down.5.1}}</td> <td>{{abs_beams.0.get_tx.down.5.2}}</td> <td>{{abs_beams.0.get_tx.down.5.3}}</td>
743 </tr>
744 <tr>
745 <td>{{abs_beams.0.get_tx.down.6.0}}</td> <td>{{abs_beams.0.get_tx.down.6.1}}</td> <td>{{abs_beams.0.get_tx.down.6.2}}</td> <td>{{abs_beams.0.get_tx.down.6.3}}</td>
746 </tr>
747 <tr>
748 <td>{{abs_beams.0.get_tx.down.7.0}}</td> <td>{{abs_beams.0.get_tx.down.7.1}}</td> <td>{{abs_beams.0.get_tx.down.7.2}}</td> <td>{{abs_beams.0.get_tx.down.7.3}}</td>
749 </tr>
750 </table>
751 </td>
752 <td> <b>South Quarter</b>
753 <table align="center" class="south_quarter">
754 <tr>
755 <td>{{abs_beams.0.get_tx.down.4.4}}</td> <td>{{abs_beams.0.get_tx.down.4.5}}</td> <td>{{abs_beams.0.get_tx.down.4.6}}</td> <td>{{abs_beams.0.get_tx.down.4.7}}</td>
756 </tr>
757 <tr>
758 <td>{{abs_beams.0.get_tx.down.5.4}}</td> <td>{{abs_beams.0.get_tx.down.5.5}}</td> <td>{{abs_beams.0.get_tx.down.5.6}}</td> <td>{{abs_beams.0.get_tx.down.5.7}}</td>
759 </tr>
760 <tr>
761 <td>{{abs_beams.0.get_tx.down.6.4}}</td> <td>{{abs_beams.0.get_tx.down.6.5}}</td> <td>{{abs_beams.0.get_tx.down.6.6}}</td> <td>{{abs_beams.0.get_tx.down.6.7}}</td>
762 </tr>
763 <tr>
764 <td>{{abs_beams.0.get_tx.down.7.4}}</td> <td>{{abs_beams.0.get_tx.down.7.5}}</td> <td>{{abs_beams.0.get_tx.down.7.6}}</td> <td>{{abs_beams.0.get_tx.down.7.7}}</td>
765 </tr>
766 </table>
767 </td>
768 </tr>
769 </table>
770 </td>
771 </tr>
772 </table>
773
774
775 <table class="abs_rx">
776 <tr>
777 <td> <b>RX</b>
778 <table id="rx_down" class="rx">
779 <tr>
780 <td> <b>North Quarter</b>
781 <table align="center" class="north_quarter">
782 <tr>
783 <td>{{abs_beams.0.get_rx.down.0.0}}</td> <td>{{abs_beams.0.get_rx.down.0.1}}</td> <td>{{abs_beams.0.get_rx.down.0.2}}</td> <td>{{abs_beams.0.get_rx.down.0.3}}</td>
784 </tr>
785 <tr>
786 <td>{{abs_beams.0.get_rx.down.1.0}}</td> <td>{{abs_beams.0.get_rx.down.1.1}}</td> <td>{{abs_beams.0.get_rx.down.1.2}}</td> <td>{{abs_beams.0.get_rx.down.1.3}}</td>
787 </tr>
788 <tr>
789 <td>{{abs_beams.0.get_rx.down.2.0}}</td> <td>{{abs_beams.0.get_rx.down.2.1}}</td> <td>{{abs_beams.0.get_rx.down.2.2}}</td> <td>{{abs_beams.0.get_rx.down.2.3}}</td>
790 </tr>
791 <tr>
792 <td>{{abs_beams.0.get_rx.down.3.0}}</td> <td>{{abs_beams.0.get_rx.down.3.1}}</td> <td>{{abs_beams.0.get_rx.down.3.2}}</td> <td>{{abs_beams.0.get_rx.down.3.3}}</td>
793 </tr>
794 </table>
795 </td>
796 <td> <b>East Quarter</b>
797 <table align="center" class="east_quarter">
798 <tr>
799 <td>{{abs_beams.0.get_rx.down.0.4}}</td> <td>{{abs_beams.0.get_rx.down.0.5}}</td> <td>{{abs_beams.0.get_rx.down.0.6}}</td> <td>{{abs_beams.0.get_rx.down.0.7}}</td>
800 </tr>
801 <tr>
802 <td>{{abs_beams.0.get_rx.down.1.4}}</td> <td>{{abs_beams.0.get_rx.down.1.5}}</td> <td>{{abs_beams.0.get_rx.down.1.6}}</td> <td>{{abs_beams.0.get_rx.down.1.7}}</td>
803 </tr>
804 <tr>
805 <td>{{abs_beams.0.get_rx.down.2.4}}</td> <td>{{abs_beams.0.get_rx.down.2.5}}</td> <td>{{abs_beams.0.get_rx.down.2.6}}</td> <td>{{abs_beams.0.get_rx.down.2.7}}</td>
806 </tr>
807 <tr>
808 <td>{{abs_beams.0.get_rx.down.3.4}}</td> <td>{{abs_beams.0.get_rx.down.3.5}}</td> <td>{{abs_beams.0.get_rx.down.3.6}}</td> <td>{{abs_beams.0.get_rx.down.3.7}}</td>
809 </tr>
810 </table>
811 </td>
812 </tr>
813 <tr>
814 <td> <b>West Quarter</b>
815 <table align="center" class="west_quarter">
816 <tr>
817 <td>{{abs_beams.0.get_rx.down.4.0}}</td> <td>{{abs_beams.0.get_rx.down.4.1}}</td> <td>{{abs_beams.0.get_rx.down.4.2}}</td> <td>{{abs_beams.0.get_rx.down.4.3}}</td>
818 </tr>
819 <tr>
820 <td>{{abs_beams.0.get_rx.down.5.0}}</td> <td>{{abs_beams.0.get_rx.down.5.1}}</td> <td>{{abs_beams.0.get_rx.down.5.2}}</td> <td>{{abs_beams.0.get_rx.down.5.3}}</td>
821 </tr>
822 <tr>
823 <td>{{abs_beams.0.get_rx.down.6.0}}</td> <td>{{abs_beams.0.get_rx.down.6.1}}</td> <td>{{abs_beams.0.get_rx.down.6.2}}</td> <td>{{abs_beams.0.get_rx.down.6.3}}</td>
824 </tr>
825 <tr>
826 <td>{{abs_beams.0.get_rx.down.7.0}}</td> <td>{{abs_beams.0.get_rx.down.7.1}}</td> <td>{{abs_beams.0.get_rx.down.7.2}}</td> <td>{{abs_beams.0.get_rx.down.7.3}}</td>
827 </tr>
828 </table>
829 </td>
830 <td> <b>South Quarter</b>
831 <table class="south_quarter">
832 <tr>
833 <td>{{abs_beams.0.get_rx.down.4.4}}</td> <td>{{abs_beams.0.get_rx.down.4.5}}</td> <td>{{abs_beams.0.get_rx.down.4.6}}</td> <td>{{abs_beams.0.get_rx.down.4.7}}</td>
834 </tr>
835 <tr>
836 <td>{{abs_beams.0.get_rx.down.5.4}}</td> <td>{{abs_beams.0.get_rx.down.5.5}}</td> <td>{{abs_beams.0.get_rx.down.5.6}}</td> <td>{{abs_beams.0.get_rx.down.5.7}}</td>
837 </tr>
838 <tr>
839 <td>{{abs_beams.0.get_rx.down.6.4}}</td> <td>{{abs_beams.0.get_rx.down.6.5}}</td> <td>{{abs_beams.0.get_rx.down.6.6}}</td> <td>{{abs_beams.0.get_rx.down.6.7}}</td>
840 </tr>
841 <tr>
842 <td>{{abs_beams.0.get_rx.down.7.4}}</td> <td>{{abs_beams.0.get_rx.down.7.5}}</td> <td>{{abs_beams.0.get_rx.down.7.6}}</td> <td>{{abs_beams.0.get_rx.down.7.7}}</td>
843 </tr>
844 </table>
845 </td>
846 </tr>
847 </table>
848 </td>
849 </tr>
850 </table>
851
852 {% if not edit %}
853 {% include "abs_pattern_img.html" %}
854 {% endif %}
855
856 <br>
857
858 <div id="down_ues" style="display: inline-block">
859 Ues: {{abs_beams.0.get_down_ues}}
860 </div>
861
862 <div style="margin-left: 70px; display: inline-block">
863 <input type="checkbox" id="up_onlyrx" {% if abs_beams.0.get_down_onlyrx == True %} checked="True" {% endif %} disabled>
864 Only RX: {{abs_beams.0.get_down_onlyrx}}
865 </input>
866 </div>
867
868 </div>
869 </div>
870 </div>
871
872 {% endblock %}
873
874 <script>
875
876 </script>
@@ -0,0 +1,47
1 {% extends "dev_conf.html" %}
2 {% load static %}
3 {% load bootstrap3 %}
4 {% load main_tags %}
5
6 {% block content %}
7 <style>
8
9 </style>
10
11 {% if abs_beams %}
12 <div>
13 <h4>Beams:</h4>
14
15 <div class="container">
16 <ul class="nav nav-pills">
17
18 {% for beam in abs_beams %}
19 <li {% if forloop.counter == 1 %} class="active" {% endif %}>
20 <a data-toggle="pill" id="button-{{ forloop.counter }}" href="#">{{ forloop.counter }}</a>
21 </li>
22 {% endfor %}
23
24 </ul>
25 </div>
26
27 </div>
28
29 <br>
30 {% include "abs_pattern.html" %}
31 <br>
32
33 {% else %}
34 <div>
35 <h4>Beams:</h4>
36 <p style="color:#b4bcc2; margin-left: 5%;"><i>No Beams...</i></p>
37 </div>
38 {% endif %}
39
40 {% endblock %}
41
42 <script>
43 function ChangeColor() {
44 document.getElementById("button_1").style.backgroundColor = "#2c3e50";
45 document.getElementById("button_1").style.color = "#ecf0f1";
46 }
47 </script>
@@ -1,8 +1,56
1 1 from django import forms
2 from .models import ABSConfiguration
2 from .models import ABSConfiguration, ABSBeam
3 from .widgets import UpDataWidget, DownDataWidget, EditUpDataWidget, EditDownDataWidget
4 from apps.main.models import Configuration
3 5
4 6 class ABSConfigurationForm(forms.ModelForm):
5
7 def __init__(self, *args, **kwargs):
8 super(ABSConfigurationForm, self).__init__(*args, **kwargs)
9 #instance = getattr(self, 'instance', None)
10
11 #if instance and instance.pk:
12 # devices = Device.objects.filter(device_type__name='abs')
13
14 #if instance.experiment:
15 # experiments = Experiment.objects.filter(pk=instance.experiment.id)
16 # self.fields['experiment'].widget.choices = [(experiment.id, experiment) for experiment in experiments]
17
6 18 class Meta:
7 19 model = ABSConfiguration
8 fields = ('experiment',)
20 exclude = ('type', 'status', 'parameters', 'beams', 'module_status')
21
22 class ABSBeamAddForm(forms.Form):
23
24 #abs_conf = forms.CharField(widget=forms.HiddenInput)
25 #name = forms.CharField(max_length=60)
26 up_data = forms.CharField(widget=UpDataWidget, label='')
27 down_data = forms.CharField(widget=DownDataWidget, label='')
28
29 def __init__(self, *args, **kwargs):
30 super(ABSBeamAddForm, self).__init__(*args, **kwargs)
31 #if 'abs_conf' in self.initial:
32 # self.fields['abs_conf'].initial = self.initial['abs_conf']
33 #self.fields['name'].initial = 'Beam'
34 # self.fields['up_data'].initial = self.initial['abs_conf']
35 # self.fields['down_data'].initial = self.initial['abs_conf']
36 #self.fields['abs_conf'].initial = self.initial['abs_conf']
37 #self.fields['name'].initial = 'Beam'
38 #self.fields['up_data'].initial = self.initial['abs_conf']
39 #self.fields['down_data'].initial = self.initial['abs_conf']
40
41
42
43 class ABSBeamEditForm(forms.Form):
44
45 #abs_conf = forms.CharField(widget=forms.HiddenInput)
46 up_data = forms.CharField(widget=EditUpDataWidget, label='')
47 down_data = forms.CharField(widget=EditDownDataWidget, label='')
48
49 def __init__(self, *args, **kwargs):
50 super(ABSBeamEditForm, self).__init__(*args, **kwargs)
51
52 if 'initial' in kwargs:
53 if 'beam' in self.initial:
54 #self.fields['abs_conf'].initial = self.initial['beam'].abs_conf
55 self.fields['up_data'].initial = self.initial['beam']
56 self.fields['down_data'].initial = self.initial['beam']
@@ -1,878 +1,940
1 1 from django.db import models
2 2 from apps.main.models import Configuration
3 3 from django.core.urlresolvers import reverse
4 4 # Create your models here.
5 5
6 6 import ast
7 7 import socket
8 8 import json
9 9 import requests
10 10 import struct
11 11 import sys, time
12 12
13 13 import multiprocessing
14 14
15 15
16 16 antenna_default = json.dumps({
17 17 "antenna_up": [[0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
18 18 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
19 19 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
20 20 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
21 21 [0.5,0.5,0.5,0.5,1.0,1.0,1.0,1.0],
22 22 [0.5,0.5,0.5,0.5,1.0,1.0,1.0,1.0],
23 23 [0.5,0.5,0.5,0.5,1.0,1.0,1.0,1.0],
24 24 [0.5,0.5,0.5,0.5,1.0,1.0,1.0,1.0]
25 25 ]
26 26 ,
27 27 "antenna_down": [[0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
28 28 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
29 29 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
30 30 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
31 31 [0.5,0.5,0.5,0.5,3.0,3.0,3.0,3.0],
32 32 [0.5,0.5,0.5,0.5,3.0,3.0,3.0,3.0],
33 33 [0.5,0.5,0.5,0.5,3.0,3.0,3.0,3.0],
34 34 [0.5,0.5,0.5,0.5,3.0,3.0,3.0,3.0]],
35 35 })
36 36
37 37
38 38 tx_default = json.dumps({
39 39 "up": [[1,1,1,1,0,0,0,0],
40 40 [1,1,1,1,0,0,0,0],
41 41 [1,1,1,1,0,0,0,0],
42 42 [1,1,1,1,0,0,0,0],
43 43 [0,0,0,0,1,1,1,1],
44 44 [0,0,0,0,1,1,1,1],
45 45 [0,0,0,0,1,1,1,1],
46 46 [0,0,0,0,1,1,1,1]],
47 47
48 48 "down": [[1,1,1,1,0,0,0,0],
49 49 [1,1,1,1,0,0,0,0],
50 50 [1,1,1,1,0,0,0,0],
51 51 [1,1,1,1,0,0,0,0],
52 52 [0,0,0,0,1,1,1,1],
53 53 [0,0,0,0,1,1,1,1],
54 54 [0,0,0,0,1,1,1,1],
55 55 [0,0,0,0,1,1,1,1]],
56 56 })
57 57
58 58 rx_default = json.dumps({
59 59 "up": [[1,1,1,1,0,0,0,0],
60 60 [1,1,1,1,0,0,0,0],
61 61 [1,1,1,1,0,0,0,0],
62 62 [1,1,1,1,0,0,0,0],
63 63 [0,0,0,0,1,1,1,1],
64 64 [0,0,0,0,1,1,1,1],
65 65 [0,0,0,0,1,1,1,1],
66 66 [0,0,0,0,1,1,1,1]],
67 67
68 68 "down": [[1,1,1,1,0,0,0,0],
69 69 [1,1,1,1,0,0,0,0],
70 70 [1,1,1,1,0,0,0,0],
71 71 [1,1,1,1,0,0,0,0],
72 72 [0,0,0,0,1,1,1,1],
73 73 [0,0,0,0,1,1,1,1],
74 74 [0,0,0,0,1,1,1,1],
75 75 [0,0,0,0,1,1,1,1]],
76 76 })
77 77
78 78 conf_default = {}
79 79 status_default = {}
80 80 for i in range(1,65):
81 81 conf_default[str(i)] = ""
82 82 status_default[str(i)] = 0
83 83
84 84 ues_default = json.dumps({
85 85 "up": [0.533333,0.00000,1.06667,0.00000],
86 86 "down": [0.533333,0.00000,1.06667,0.00000]
87 87 })
88 88
89 89 onlyrx_default = json.dumps({
90 90 "up": False,
91 91 "down": False
92 92 })
93 93
94 94 def up_convertion(cadena):
95 95 valores = []
96 96 for c in cadena:
97 97 if c == 1.0: valores=valores+['000']
98 98 if c == 2.0: valores=valores+['001']
99 99 if c == 3.0: valores=valores+['010']
100 100 if c == 0.0: valores=valores+['011']
101 101 if c == 0.5: valores=valores+['100']
102 102 if c == 1.5: valores=valores+['101']
103 103 if c == 2.5: valores=valores+['110']
104 104 if c == 3.5: valores=valores+['111']
105 105
106 106 return valores
107 107
108 108 def up_conv_bits(value):
109 109
110 110 if value == 1.0: bits="000"
111 111 if value == 2.0: bits="001"
112 112 if value == 3.0: bits="010"
113 113 if value == 0.0: bits="011"
114 114 if value == 0.5: bits="100"
115 115 if value == 1.5: bits="101"
116 116 if value == 2.5: bits="110"
117 117 if value == 3.5: bits="111"
118 118
119 119 return bits
120 120
121 121 def down_convertion(cadena):
122 122 valores = []
123 123 for c in cadena:
124 124 if c == 1.0: valores=valores+['000']
125 125 if c == 2.0: valores=valores+['001']
126 126 if c == 3.0: valores=valores+['010']
127 127 if c == 0.0: valores=valores+['011']
128 128 if c == 0.5: valores=valores+['100']
129 129 if c == 1.5: valores=valores+['101']
130 130 if c == 2.5: valores=valores+['110']
131 131 if c == 3.5: valores=valores+['111']
132 132
133 133 return valores
134 134
135 135 def down_conv_bits(value):
136 136
137 137 if value == 1.0: bits="000"
138 138 if value == 2.0: bits="001"
139 139 if value == 3.0: bits="010"
140 140 if value == 0.0: bits="011"
141 141 if value == 0.5: bits="100"
142 142 if value == 1.5: bits="101"
143 143 if value == 2.5: bits="110"
144 144 if value == 3.5: bits="111"
145 145
146 146 return bits
147 147
148 148 def ip2position(module_number):
149 149 j=0
150 150 i=0
151 151 for x in range(0,module_number-1):
152 152 j=j+1
153 153 if j==8:
154 154 i=i+1
155 155 j=0
156 156
157 157 pos = [i,j]
158 158 return pos
159 159
160 160
161 161 def change_beam_for_multiprocessing(module):
162 162
163 163 for i in range (1,50):
164 164 beam_pos = 0
165 165 module_address = ('192.168.1.'+str(module), 5500)
166 166 header = 'JROABSCeCnModCnMod0100000'
167 167 numbers = len(str(beam_pos))
168 168 function = 'CHGB'
169 169
170 170 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
171 171
172 172 # Create the datagram socket
173 173 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
174 174 sock.connect(module_address)
175 175
176 176 sock.send(message_tx)
177 177 #t = sock.recv(1024)
178 178 sock.close()
179 179 sock = None
180 180
181 181
182 182 time.sleep(0.2)
183 183
184 184
185 185 beam_pos = 1
186 186 numbers = len(str(beam_pos))
187 187
188 188 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
189 189
190 190 # Create the datagram socket
191 191 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
192 192 sock.connect(module_address)
193 193 sock.send(message_tx)
194 194 sock.close()
195 195 sock = None
196 196
197 197 time.sleep(0.2)
198 198
199 199
200 200
201 201 class ABSConfiguration(Configuration):
202 202 beams = models.CharField(verbose_name='Beams', max_length=20000, default="{}")
203 203 module_status = models.CharField(verbose_name='Module Status', max_length=10000, default=json.dumps(status_default))
204 204
205 205 class Meta:
206 206 db_table = 'abs_configurations'
207 207
208 208 def get_absolute_url_plot(self):
209 209 return reverse('url_plot_abs_patterns', args=[str(self.id)])
210 210
211 211
212 212 def parms_to_dict(self):
213 213
214 214 parameters = {}
215 215
216 216 parameters['device_id'] = self.device.id
217 217 parameters['name'] = self.name
218 218 parameters['beams'] = {}
219 219
220 220 beams = ast.literal_eval(self.beams)
221 221 b=1
222 222 for beam in beams:
223 223 absbeam = ABSBeam.objects.get(pk=beams[beam])
224 224 parameters['beams']['beam'+str(b)] = absbeam.parms_to_dict()
225 225 b+=1
226 226
227 227 return parameters
228 228
229 229
230 230 def module_conf(self, module_num, beams):
231 231 """
232 232 This function creates beam configurations for one abs module.
233 233 """
234 234 ip_address = self.device.ip_address
235 235 ip_address = ip_address.split('.')
236 236 module_seq = (ip_address[0],ip_address[1],ip_address[2])
237 237 dot = '.'
238 238 module_ip = dot.join(module_seq)+'.'+str(module_num)
239 239 module_port = self.device.port_address
240 240 write_route = 'http://'+module_ip+':'+str(module_port)+'/configure'
241 241
242 242 header = 'JROABSCeCnModCnMod01000108SNDFexperimento1.ab1'
243 243 module = 'ABS_'+str(module_num)
244 244 bs = {}
245 245 i=1
246 246 #beams = {1: '001000', 2: '010001', 3: '010010', 4: '000011', 5: '101100', 6: '101101',
247 247 # 7: '110110', 8: '111111', 9: '000000', 10: '001001', 11: '010010', 12: '011011'}
248 248 for beam in beams:
249 249 bs[i] = beam.module_6bits(module_num)
250 250 i=i+1
251 251
252 252 beams = bs
253 253
254 254 parameters = {}
255 255 parameters['header'] = header
256 256 parameters['module'] = module
257 257 parameters['beams'] = json.dumps(beams)
258 258
259 259 answer = ''
260 260
261 261 try:
262 262 r_write = requests.post(write_route, parameters, timeout=0.5)
263 263 answer = r_write.json()
264 264 self.message = answer['message']
265 265 except:
266 266 self.message = "Could not write ABS parameters"
267 267 return 0
268 268 return 1
269 269
270 270
271 271 def read_module(self, module):
272 272
273 273 """
274 274 Read out-bits (up-down) of 1 abs module NOT for Configuration
275 275 """
276 276
277 277 parameters = {}
278 278 ip_address = self.device.ip_address
279 279 ip_address = ip_address.split('.')
280 280 module_seq = (ip_address[0],ip_address[1],ip_address[2])
281 281 dot = '.'
282 282 module_ip = dot.join(module_seq)+'.'+str(module)
283 283 module_port = self.device.port_address
284 284 read_route = 'http://'+module_ip+':'+str(module_port)+'/read'
285 285
286 286 print read_route
287 287
288 288 answer = ''
289 289 module_bits = ''
290 290
291 291 try:
292 292 r_write = requests.get(read_route, timeout=0.7)
293 293 answer = r_write.json()
294 294 message = answer['message']
295 295 module_bits = answer['allbits']
296 296 except:
297 297 message = "Could not read ABS parameters"
298 298 return 0
299 299
300 300 return module_bits
301 301
302 302
303 303 def write_device(self):
304 304 """
305 305 This function sends the beams list to every abs module.
306 306 """
307 307
308 308 beams_list = ast.literal_eval(self.beams)
309 309 beams = []
310 310
311 311 for bl in range(1,len(beams_list)+1):
312 312 b = ABSBeam.objects.get(pk=beams_list['beam'+str(bl)])
313 313 beams.append(b)
314 314
315 315 #---Write each abs module---
316 316 beams_status = ast.literal_eval(self.module_status)
317 317 for i in range(62,65):
318 318 try:
319 319 self.module_conf(i, beams)
320 320 beams_status[str(i)] = 1
321 321 self.module_status = json.dumps(beams_status)
322 322 self.save()
323 323 #self.module_conf(63,beams)
324 324 #beams_status[str(63)] = 1
325 325 #self.module_status = json.dumps(beams_status)
326 326 except:
327 327 beams_status[str(i)] = 0
328 328 self.module_status = json.dumps(beams_status)
329 329 self.save()
330 330 #return 0
331 331
332 332 #self.device.status = 1
333 333 self.save()
334 334 return 1
335 335
336 336
337 337 def write_module(self, module):
338 338
339 339 """
340 340 Send configuration to one abs module
341 341 """
342 342
343 343 parameters = {}
344 344 ip_address = self.abs_conf.device.ip_address
345 345 ip_address = ip_address.split('.')
346 346 module_seq = (ip_address[0],ip_address[1],ip_address[2])
347 347 dot = '.'
348 348 module_ip = dot.join(module_seq)+'.'+str(module)
349 349 module_port = self.abs_conf.device.port_address
350 350 write_route = 'http://'+module_ip+':'+str(module_port)+'/configure'
351 351
352 352 #print write_route
353 353
354 354 header = 'JROABSCeCnModCnMod01000108SNDFexperimento1.ab1'
355 355 module = 'ABS_'+str(module)
356 356 beams = {1: '001000', 2: '010001', 3: '010010', 4: '000011', 5: '101100', 6: '101101',
357 357 7: '110110', 8: '111111', 9: '000000', 10: '001001', 11: '010010', 12: '011011'}
358 358
359 359 parameters['header'] = header
360 360 parameters['module'] = module
361 361 parameters['beams'] = json.dumps(beams)
362 362
363 363 answer = ''
364 364
365 365 try:
366 366 r_write = requests.post(write_route, parameters, timeout=0.5)
367 367 answer = r_write.json()
368 368 self.message = answer['message']
369 369 except:
370 370 self.message = "Could not write ABS parameters"
371 371 return 0
372 372
373 373
374 374 #self.device.status = int(answer['status'])
375 375
376 376 return 1
377 377
378 378
379 379 def beam_selector(self, module, beam_pos):
380 380 """
381 381 This function selects the beam number for one absmodule.
382 382 """
383 383
384 384 if beam_pos > 0:
385 385 beam_pos = beam_pos - 1
386 386 else:
387 387 beam_pos = 0
388 388
389 389 #El indice del apunte debe ser menor que el numero total de apuntes
390 390 #El servidor tcp en el embebido comienza a contar desde 0
391 391 beams_list = ast.literal_eval(self.beams)
392 392 if len(beams_list) < beam_pos:
393 393 return 0
394 394
395 395 flag = 1
396 396 if beam_pos>9:
397 397 flag = 2
398 398
399 399 module_address = ('192.168.1.'+str(module), 5500)
400 400 header = 'JROABSCeCnModCnMod0100000'
401 401 numbers = len(str(beam_pos))
402 402 function = 'CHGB'
403 403
404 404 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
405 405
406 406 # Create the datagram socket
407 407 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
408 408 #sock.connect(module_address)
409 409 try:
410 410 sock.connect(module_address)
411 411 sock.send(message_tx)
412 412 sock.close()
413 413 print "Writing abs module:"+module_address[0]+"..."
414 414 except:
415 415 sock = None
416 416 print "Problem writing abs module:"+module_address[0]
417 417 return 0
418 418
419 419 return 1
420 420
421 421
422 422 def change_beam(self, beam_pos):
423 423 """
424 424 This function selects the beam number for all absmodules.
425 425 """
426 426 for i in range(1,65):
427 427 try:
428 428 self.beam_selector(i,beam_pos)
429 429 except:
430 430 print "Problem with module: 192.168.1."+str(i)
431 431 self.message = "Problem with module: 192.168.1."+str(i)
432 432 #return 0
433 433 return 1
434 434
435 435
436 436 def send_beam_num(self, beam_pos):
437 437 """
438 438 This function connects to a multicast group and sends the beam number
439 439 to all abs modules.
440 440 """
441 441
442 442 if beam_pos > 0:
443 443 beam_pos = beam_pos - 1
444 444 else:
445 445 beam_pos = 0
446 446
447 447 #El indice del apunte debe ser menor que el numero total de apuntes
448 448 #El servidor tcp en el embebido comienza a contar desde 0
449 449 beams_list = ast.literal_eval(self.beams)
450 450 if len(beams_list) < beam_pos:
451 451 return 0
452 452
453 453 flag = 1
454 454 if beam_pos>9:
455 455 flag = 2
456 456
457 457 header = 'JROABSCeCnModCnMod0100000'
458 458 flag = str(flag)
459 459 function = 'CHGB'
460 460 message_tx = header+flag+function+str(beam_pos)+'0'
461 461
462 462 multicast_group = '224.3.29.71'
463 463 server_address = ('',10000)
464 464
465 465 # Create the socket
466 466 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
467 467 # Bind to the server address
468 468 sock.bind(server_address)
469 469 # Telling the OS add the socket to the multicast on all interfaces
470 470 group = socket.inet_aton(multicast_group)
471 471 mreq = struct.pack('4sL', group, socket.INADDR_ANY)
472 472 sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
473 473
474 474 #print 'sending acknowledgement to all: \n' + message_tx
475 475 sock.sendto(message_tx, (multicast_group, 10000))
476 476 sock.close()
477 477 sock = None
478 478
479 479 return 1
480 480
481 481 def test1(self):
482 482 t1 = time.time()
483 483 t2 = 0
484 484 while (t2-t1)<300:
485 485 t2 = time.time()
486 486 self.send_beam_num(1)
487 487 time.sleep(0.04)
488 488 self.send_beam_num(2)
489 489 time.sleep(0.04)
490 490 return
491 491
492 492 def change_procs_test1(self, module):
493 493
494 494 for i in range (1,300):
495 495 beam_pos = 0
496 496 module_address = ('192.168.1.'+str(module), 5500)
497 497 header = 'JROABSCeCnModCnMod0100000'
498 498 numbers = len(str(beam_pos))
499 499 function = 'CHGB'
500 500
501 501 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
502 502
503 503 # Create the datagram socket
504 504 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
505 505 sock.connect(module_address)
506 506
507 507 sock.send(message_tx)
508 508 #t = sock.recv(1024)
509 509 sock.close()
510 510 sock = None
511 511
512 512
513 513 time.sleep(0.2)
514 514
515 515
516 516 beam_pos = 1
517 517 numbers = len(str(beam_pos))
518 518
519 519 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
520 520
521 521 # Create the datagram socket
522 522 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
523 523 sock.connect(module_address)
524 524 sock.send(message_tx)
525 525 sock.close()
526 526 sock = None
527 527
528 528 time.sleep(0.2)
529 529
530 530
531 531 def multi_procs_test1(self):
532 532
533 533 #if __name__ == "__main__":
534 534 size = 10000000 # Number of random numbers to add
535 535 procs = 65 # (Number-1) of processes to create
536 536
537 537 # Create a list of jobs and then iterate through
538 538 # the number of processes appending each process to
539 539 # the job list
540 540 jobs = []
541 541 for i in range(62, procs):
542 542
543 543 process = multiprocessing.Process(target=self.change_procs_test1,args=(i,))
544 544 jobs.append(process)
545 545 #print jobs
546 546
547 547 # Start the processes (i.e. calculate the random number lists)
548 548 for j in jobs:
549 549 #time.sleep(0.4)
550 550 #print j
551 551 j.start()
552 552
553 553 # Ensure all of the processes have finished
554 554 for j in jobs:
555 555 j.join()
556 556
557 557 print "List processing complete."
558 558 return 1
559 559
560 560
561 561 def status_device(self):
562 562
563 563 return 1
564 564
565 565
566 566
567 567 class ABSBeam(models.Model):
568 568
569 569 name = models.CharField(max_length=60, default='Beam')
570 570 antenna = models.CharField(verbose_name='Antenna', max_length=1000, default=antenna_default)
571 571 abs_conf = models.ForeignKey(ABSConfiguration, null=True, verbose_name='ABS Configuration')
572 572 tx = models.CharField(verbose_name='Tx', max_length=1000, default=tx_default)
573 573 rx = models.CharField(verbose_name='Rx', max_length=1000, default=rx_default)
574 574 s_time = models.TimeField(verbose_name='Star Time', default='00:00:00')
575 575 e_time = models.TimeField(verbose_name='End Time', default='23:59:59')
576 576 modules_conf = models.CharField(verbose_name='Modules', max_length=2000, default=json.dumps(conf_default))
577 577 ues = models.CharField(verbose_name='Ues', max_length=100, default=ues_default)
578 578 only_rx = models.CharField(verbose_name='Only RX', max_length=40, default=onlyrx_default)
579 579
580 580 class Meta:
581 581 db_table = 'abs_beams'
582 582
583 583 def __unicode__(self):
584 584 return u'%s' % (self.name)
585 585
586 586 def parms_to_dict(self):
587 587
588 588 #Update data
589 589 self.modules_6bits()
590 590
591 591 parameters = {}
592 592
593 593 parameters['name'] = self.name
594 594 parameters['antenna'] = ast.literal_eval(self.antenna)
595 595 parameters['abs_conf'] = self.abs_conf.name
596 596 parameters['tx'] = ast.literal_eval(self.tx)
597 597 parameters['rx'] = ast.literal_eval(self.rx)
598 598 parameters['s_time'] = self.s_time.strftime("%H:%M:%S")
599 599 parameters['e_time'] = self.e_time.strftime("%H:%M:%S")
600 600 parameters['configuration'] = ast.literal_eval(self.modules_conf)
601 601 parameters['ues'] = ast.literal_eval(self.ues)
602 602 parameters['only_rx'] = json.loads(self.only_rx)
603 603
604 604 return parameters
605 605
606 606 def dict_to_parms(self, parameters):
607 607
608 608 self.name = parameters['name']
609 609 self.antenna = json.dumps(parameters['antenna'])
610 610 #self.abs_conf = parameters['abs_conf']
611 611 self.tx = json.dumps(parameters['tx'])
612 612 self.rx = json.dumps(parameters['rx'])
613 613 #parameters['s_time']
614 614 #parameters['e_time']
615 615 self.ues = json.dumps(parameters['ues'])
616 616 self.only_rx = json.dumps(parameters['only_rx'])
617 617
618 618 self.modules_6bits()
619 619 self.save()
620 620
621 621 return parameters
622
622
623 623
624 624 def change_beam(self, beam_pos=0):
625 625
626 626 module_63 = ('192.168.1.63', 5500)
627 627 header = 'JROABSCeCnModCnMod0100000'
628 628 numbers = len(str(beam_pos))
629 629 function = 'CHGB'
630 630
631 631 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
632 632
633 633 # Create the datagram socket
634 634 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
635 635 sock.connect(module_63)
636 636 sock.send(message_tx)
637 637 sock.close()
638 638 return message_tx
639 639
640 640 def change_module_beam(self, module=61,beam_pos=0):
641 641
642 642 module_address = ('192.168.1.'+str(module), 5500)
643 643 header = 'JROABSCeCnModCnMod0100000'
644 644 numbers = len(str(beam_pos))
645 645 function = 'CHGB'
646 646
647 647 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
648 648
649 649 # Create the datagram socket
650 650 try:
651 651 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
652 652 sock.connect(module_address)
653 653 sock.send(message_tx)
654 654 sock.close()
655 655 except:
656 656 return 0
657 657 return message_tx
658 658
659 659 def write_device(self):
660 660
661 661 parameters = {}
662 662
663 663 module_ip = '192.168.1.63'
664 664 write_route = 'http://192.168.1.63:8080/configure'
665 665
666 666 header = 'JROABSCeCnModCnMod01000108SNDFexperimento1.ab1'
667 667 module = 'ABS_63'
668 668 beams = {1: '001000', 2: '010001', 3: '010010', 4: '000011', 5: '101100', 6: '101101',
669 669 7: '110110', 8: '111111', 9: '000000', 10: '001001', 11: '010010', 12: '011011'}
670 670
671 671 parameters['header'] = header
672 672 parameters['module'] = module
673 673 parameters['beams'] = json.dumps(beams)
674 674
675 675 answer = ''
676 676
677 677 try:
678 678 r_write = requests.post(write_route, parameters, timeout=0.5)
679 679 answer = r_write.json()
680 680 self.message = answer['message']
681 681 except:
682 682 self.message = "Could not write ABS parameters"
683 683 return 0
684 684
685 685
686 686 #self.device.status = int(answer['status'])
687 687
688 688 return 1
689 689
690 690
691 691
692 692 def module_6bits(self, module):
693 693 """
694 694 This function reads antenna pattern and choose 6bits (upbits-downbits) for one abs module
695 695 """
696 696 if module > 64:
697 697 beam_bits = ""
698 698 return beam_bits
699 699
700 700 data = ast.literal_eval(self.antenna)
701 701 up_data = data['antenna_up']
702 702 down_data = data['antenna_down']
703 703
704 704 pos = ip2position(module)
705 705 up_value = up_data[pos[0]][pos[1]]
706 706 down_value = down_data[pos[0]][pos[1]]
707 707
708 708 up_bits = up_conv_bits(up_value)
709 709 down_bits = down_conv_bits(down_value)
710 710 beam_bits = up_bits+down_bits
711 711
712 712 return beam_bits
713 713
714 714 def modules_6bits(self):
715 715 """
716 716 This function returns 6bits from every abs module (1-64) in a dict
717 717 """
718 718 modules_configuration = ast.literal_eval(self.modules_conf)
719 719
720 720 for i in range(1,65):
721 721 modules_configuration[str(i)] = self.module_6bits(i)
722 722
723 723 self.modules_conf = json.dumps(modules_configuration)
724 724 self.save()
725 725
726 726 return self.modules_conf
727 727
728 728 def add_beam2list(self):
729 729 """
730 730 This function adds a beam to the beams list of ABS Configuration.
731 731 """
732 732 beams = ast.literal_eval(self.abs_conf.beams)
733 733 if any(beams):
734 734 for beam in beams:
735 735 if beams[beam] == self.id:
736 736 return
737 737 i = len(beams)+1
738 738 beams['beam'+str(i)] = self.id
739 739 else:
740 740 beams['beam1'] = self.id
741 741
742 742 self.abs_conf.beams = json.dumps(beams)
743 743 self.abs_conf.save()
744 744
745 745 return
746 746
747 747 def remove_beamfromlist(self):
748 748 """
749 749 This function removes current beam from the beams list of ABS Configuration.
750 750 """
751 751 beams = ast.literal_eval(self.abs_conf.beams)
752 752 dict_position = ''
753 753
754 754 if any(beams):
755 755 for beam in beams:
756 756 if beams[beam] == self.id:
757 757 dict_position = beam
758 758 if dict_position != '':
759 759 beams.pop(str(dict_position),None)
760 760 else:
761 761 return
762 762
763 763 self.abs_conf.beams = json.dumps(beams)
764 764 self.abs_conf.save()
765 765
766 766 return
767 767
768 768 @property
769 769 def get_upvalues(self):
770 770 """
771 771 This function reads antenna pattern and show the up-value of one abs module
772 772 """
773 773
774 774 data = ast.literal_eval(self.antenna)
775 775 up_data = data['antenna_up']
776 776
777 777 up_values = []
778 778 for data in up_data:
779 779 for i in range(0,8):
780 780 up_values.append(data[i])
781 781
782 782 return up_values
783 783
784 784 @property
785 785 def antenna_upvalues(self):
786 786 """
787 787 This function reads antenna pattern and show the up - values of one abs beam
788 788 in a particular order
789 789 """
790 790 data = ast.literal_eval(self.antenna)
791 791 up_data = data['antenna_up']
792 792
793 793 return up_data
794 794
795 795 @property
796 796 def antenna_downvalues(self):
797 797 """
798 798 This function reads antenna pattern and show the down - values of one abs beam
799 799 in a particular order
800 800 """
801 801 data = ast.literal_eval(self.antenna)
802 802 down_data = data['antenna_down']
803 803
804 804 return down_data
805 805
806 806 @property
807 807 def get_downvalues(self):
808 808 """
809 809 This function reads antenna pattern and show the down-value of one abs module
810 810 """
811 811
812 812 data = ast.literal_eval(self.antenna)
813 813 down_data = data['antenna_down']
814 814
815 815 down_values = []
816 816 for data in down_data:
817 817 for i in range(0,8):
818 818 down_values.append(data[i])
819 819
820 820 return down_values
821 821
822 822 @property
823 823 def get_up_ues(self):
824 824 """
825 825 This function shows the up-ues-value of one beam
826 826 """
827 827 data = ast.literal_eval(self.ues)
828 828 up_ues = data['up']
829 829
830 830 return up_ues
831 831
832 832 @property
833 833 def get_down_ues(self):
834 834 """
835 835 This function shows the down-ues-value of one beam
836 836 """
837 837 data = ast.literal_eval(self.ues)
838 838 down_ues = data['down']
839 839
840 840 return down_ues
841 841
842 842 @property
843 843 def get_up_onlyrx(self):
844 844 """
845 845 This function shows the up-onlyrx-value of one beam
846 846 """
847 847 data = json.loads(self.only_rx)
848 848 up_onlyrx = data['up']
849 849
850 850 return up_onlyrx
851 851
852 852 @property
853 853 def get_down_onlyrx(self):
854 854 """
855 855 This function shows the down-onlyrx-value of one beam
856 856 """
857 857 data = json.loads(self.only_rx)
858 858 down_onlyrx = data['down']
859 859
860 860 return down_onlyrx
861 861
862 862 @property
863 863 def get_tx(self):
864 864 """
865 865 This function shows the tx-values of one beam
866 866 """
867 867 data = json.loads(self.tx)
868 868
869 869 return data
870 870
871 871 @property
872 def get_uptx(self):
873 """
874 This function shows the up-tx-values of one beam
875 """
876 data = json.loads(self.tx)
877 up_data = data['up']
878
879 up_values = []
880 for data in up_data:
881 for i in range(0,8):
882 up_values.append(data[i])
883
884 return up_values
885
886 @property
887 def get_downtx(self):
888 """
889 This function shows the down-tx-values of one beam
890 """
891 data = json.loads(self.tx)
892 down_data = data['down']
893
894 down_values = []
895 for data in down_data:
896 for i in range(0,8):
897 down_values.append(data[i])
898
899 return down_values
900
901
902
903 @property
872 904 def get_rx(self):
873 905 """
874 906 This function shows the rx-values of one beam
875 907 """
876 908 data = json.loads(self.rx)
877 909
878 910 return data
911
912 @property
913 def get_uprx(self):
914 """
915 This function shows the up-rx-values of one beam
916 """
917 data = json.loads(self.rx)
918 up_data = data['up']
919
920 up_values = []
921 for data in up_data:
922 for i in range(0,8):
923 up_values.append(data[i])
924
925 return up_values
926
927 @property
928 def get_downrx(self):
929 """
930 This function shows the down-rx-values of one beam
931 """
932 data = json.loads(self.rx)
933 down_data = data['down']
934
935 down_values = []
936 for data in down_data:
937 for i in range(0,8):
938 down_values.append(data[i])
939
940 return down_values
@@ -1,6 +1,13
1 1 from django.conf.urls import url
2 2
3 3 urlpatterns = (
4 url(r'^(?P<id_conf>-?\d+)/$', 'apps.main.views.dev_conf', name='url_abs_conf'),
5 url(r'^(?P<id_conf>-?\d+)/edit/$', 'apps.main.views.dev_conf_edit', name='url_edit_abs_conf'),
4 url(r'^(?P<id_conf>-?\d+)/$', 'apps.abs.views.abs_conf', name='url_abs_conf'),
5 url(r'^(?P<id_conf>-?\d+)/edit/$', 'apps.abs.views.abs_conf_edit', name='url_edit_abs_conf'),
6 url(r'^(?P<id_conf>-?\d+)/read/$', 'apps.main.views.dev_conf_read', name='url_read_abs_conf'),
7 url(r'^(?P<id_conf>-?\d+)/import/$', 'apps.main.views.dev_conf_import', name='url_import_abs_conf'),
8 url(r'^(?P<id_conf>-?\d+)/export/$', 'apps.main.views.dev_conf_export', name='url_export_abs_conf'),
9 url(r'^(?P<id_conf>-?\d+)/plot/$', 'apps.abs.views.plot_patterns', name='url_plot_abs_patterns'),
10 url(r'^(?P<id_conf>-?\d+)/add_beam/$', 'apps.abs.views.add_beam', name='url_add_abs_beam'),
11 url(r'^(?P<id_conf>-?\d+)/beam/(?P<id_beam>-?\d+)/delete/$', 'apps.abs.views.remove_beam', name='url_remove_abs_beam'),
12 url(r'^(?P<id_conf>-?\d+)/beam/(?P<id_beam>-?\d+)/edit/$', 'apps.abs.views.edit_beam', name='url_edit_abs_beam'),
6 13 )
@@ -1,3 +1,327
1 from django.shortcuts import render
1 from django.shortcuts import render_to_response
2 from django.template import RequestContext
3 from django.shortcuts import redirect, render, get_object_or_404
4 from django.contrib import messages
2 5
6 from apps.main.models import Device, Configuration
7 from apps.main.views import sidebar
8
9 from .models import ABSConfiguration, ABSBeam
10 from .forms import ABSConfigurationForm, ABSBeamEditForm, ABSBeamAddForm
3 11 # Create your views here.
12 import json, ast
13
14
15 def get_values_from_form(form_data):
16
17 sublistup = []
18 sublistdown = []
19 subtxlistup = []
20 subtxlistdown = []
21 subrxlistup = []
22 subrxlistdown = []
23
24 up_values_list = []
25 down_values_list = []
26 up_txvalues_list = []
27 down_txvalues_list = []
28 up_rxvalues_list = []
29 down_rxvalues_list = []
30
31 values_list = {}
32 cont = 1
33
34 for i in range(1,65):
35 x = float(form_data['abs_up'+str(i)])
36 y = float(form_data['abs_down'+str(i)])
37 sublistup.append(x)
38 sublistdown.append(y)
39
40 if str(i) in form_data.getlist('uptx_checks'):
41 subtxlistup.append(1)
42 else:
43 subtxlistup.append(0)
44 if str(i) in form_data.getlist('downtx_checks'):
45 subtxlistdown.append(1)
46 else:
47 subtxlistdown.append(0)
48
49 if str(i) in form_data.getlist('uprx_checks'):
50 subrxlistup.append(1)
51 else:
52 subrxlistup.append(0)
53 if str(i) in form_data.getlist('downrx_checks'):
54 subrxlistdown.append(1)
55 else:
56 subrxlistdown.append(0)
57
58 cont = cont+1
59
60 if cont == 9:
61 up_values_list.append(sublistup)
62 down_values_list.append(sublistdown)
63 sublistup = []
64 sublistdown = []
65
66 up_txvalues_list.append(subtxlistup)
67 down_txvalues_list.append(subtxlistdown)
68 subtxlistup = []
69 subtxlistdown = []
70 up_rxvalues_list.append(subrxlistup)
71 down_rxvalues_list.append(subrxlistdown)
72 subrxlistup = []
73 subrxlistdown = []
74 cont = 1
75
76
77 list_uesup = []
78 list_uesdown = []
79 for i in range(1,5):
80 if form_data['ues_up'+str(i)] == '':
81 list_uesup.append(0.0)
82 else:
83 list_uesup.append(float(form_data['ues_up'+str(i)]))
84
85 if form_data['ues_down'+str(i)] == '':
86 list_uesdown.append(0.0)
87 else:
88 list_uesdown.append(float(form_data['ues_down'+str(i)]))
89
90 onlyrx_list = form_data.getlist('onlyrx')
91 only_rx = {}
92 if '1' in onlyrx_list:
93 only_rx['up'] = True
94 else:
95 only_rx['up'] = False
96 if '2' in onlyrx_list:
97 only_rx['down'] = True
98 else:
99 only_rx['down'] = False
100
101 antenna = {'antenna_up': up_values_list, 'antenna_down': down_values_list}
102 tx = {'up': up_txvalues_list, 'down': down_txvalues_list}
103 rx = {'up': up_rxvalues_list, 'down': down_rxvalues_list}
104 ues = {'up': list_uesup, 'down': list_uesdown}
105 name = str(form_data['beam_name'])
106
107 beam_data = {'name': name, 'antenna': antenna, 'tx': tx, 'rx': rx, 'ues': ues, 'only_rx': only_rx}
108
109 return beam_data
110
111
112
113 def abs_conf(request, id_conf):
114
115 conf = get_object_or_404(ABSConfiguration, pk=id_conf)
116
117 beams_dict = ast.literal_eval(conf.beams)
118 beams = []
119 for beam_id in range(1,len(beams_dict)+1):
120 beam = ABSBeam.objects.get(pk=beams_dict['beam'+str(beam_id)])
121 beams.append(beam)
122
123 beams_id = ast.literal_eval(conf.beams)
124
125 ip=conf.device.ip_address
126 port=conf.device.port_address
127
128 kwargs = {}
129 kwargs['status'] = conf.device.get_status_display()
130
131
132 kwargs['dev_conf'] = conf
133 kwargs['dev_conf_keys'] = ['name',]
134
135 kwargs['title'] = 'ABS Configuration'
136 kwargs['suptitle'] = 'Details'
137 kwargs['no_play'] = True
138
139 kwargs['button'] = 'Edit Configuration'
140
141 #kwargs['no_play'] = True
142 kwargs['beams_id'] = beams_id
143 kwargs['beams'] = beams
144 kwargs['beam_selector'] = 0
145 #kwargs['my_data'] = simplejson.dumps(beams)
146
147 kwargs['only_stop'] = True
148
149 ###### SIDEBAR ######
150 kwargs.update(sidebar(conf=conf))
151
152 return render(request, 'abs_conf.html', kwargs)
153
154 def abs_conf_edit(request, id_conf):
155
156 conf = get_object_or_404(ABSConfiguration, pk=id_conf)
157 beams_list = ast.literal_eval(conf.beams)
158 i = 1
159 beams = []
160 for b in beams_list:
161 beam = ABSBeam.objects.get(pk=beams_list['beam'+str(i)])
162 beams.append(beam)
163 i=i+1
164
165 if request.method=='GET':
166 form = ABSConfigurationForm(instance=conf)
167
168 if request.method=='POST':
169 form = ABSConfigurationForm(request.POST, instance=conf)
170
171 if form.is_valid():
172 conf = form.save(commit=False)
173 conf.save()
174 return redirect('url_abs_conf', id_conf=conf.id)
175
176 ###### SIDEBAR ######
177 kwargs = {}
178
179 kwargs['dev_conf'] = conf
180 #kwargs['id_dev'] = conf.id
181 kwargs['id_conf'] = conf.id
182 kwargs['form'] = form
183 kwargs['abs_beams'] = beams
184 kwargs['title'] = 'Device Configuration'
185 kwargs['suptitle'] = 'Edit'
186 kwargs['button'] = 'Save'
187
188 kwargs['edit'] = True
189
190 return render(request, 'abs_conf_edit.html', kwargs)
191
192
193 def plot_patterns(request, id_conf):
194
195 conf = get_object_or_404(ABSConfiguration, pk=id_conf)
196 beams_list = ast.literal_eval(conf.beams)
197 i = 1
198 beams = []
199 for b in beams_list:
200 beam = ABSBeam.objects.get(pk=beams_list['beam'+str(i)])
201 beams.append(beam)
202 i=i+1
203
204 ###### SIDEBAR ######
205 kwargs = {}
206
207 kwargs['dev_conf'] = conf.device
208 kwargs['id_dev'] = conf.device
209 kwargs['id_conf'] = conf.id
210 kwargs['abs_beams'] = beams
211 kwargs['title'] = 'ABS Patterns'
212 kwargs['suptitle'] = conf.name
213 kwargs['no_sidebar'] = True
214
215 return render(request, 'abs_patterns.html', kwargs)
216
217 def add_beam(request, id_conf):
218
219 conf = get_object_or_404(ABSConfiguration, pk=id_conf)
220 confs = Configuration.objects.all()
221
222 if request.method=='GET':
223 #form = ABSBeamEditForm()
224 form = ABSBeamAddForm()
225
226 if request.method=='POST':
227 form = ABSBeamAddForm(request.POST)
228
229 beam_data = get_values_from_form(request.POST)
230
231 new_beam = ABSBeam(
232 name =beam_data['name'],
233 antenna =json.dumps(beam_data['antenna']),
234 abs_conf=conf,
235 tx =json.dumps(beam_data['tx']),
236 rx =json.dumps(beam_data['rx']),
237 ues =json.dumps(beam_data['ues']),
238 only_rx =json.dumps(beam_data['only_rx'])
239 )
240 new_beam.save()
241 #---Update 6bits configuration and add beam to abs configuration beams list.
242 new_beam.modules_6bits()
243 new_beam.add_beam2list()
244 messages.success(request, 'Beam: "%s" has been added.' % new_beam.name)
245
246 return redirect('url_edit_abs_conf', conf.id)
247
248 ###### SIDEBAR ######
249 kwargs = {}
250
251 #kwargs['dev_conf'] = conf.device
252 #kwargs['id_dev'] = conf.device
253 kwargs['id_conf'] = conf.id
254 kwargs['form'] = form
255 kwargs['title'] = 'ABS Beams'
256 kwargs['suptitle'] = 'Add Beam'
257 kwargs['button'] = 'Add'
258 kwargs['no_sidebar'] = True
259
260 #kwargs['previous'] = conf.get_absolute_url_edit()
261 kwargs['edit'] = True
262
263 return render(request, 'abs_add_beam.html', kwargs)
264
265
266 def edit_beam(request, id_conf, id_beam):
267
268 conf = get_object_or_404(ABSConfiguration, pk=id_conf)
269 beam = get_object_or_404(ABSBeam, pk=id_beam)
270
271 if request.method=='GET':
272 form = ABSBeamEditForm(initial={'beam': beam})
273
274 if request.method=='POST':
275 form = ABSBeamEditForm(request.POST)
276
277 beam_data = get_values_from_form(request.POST)
278
279 beam.dict_to_parms(beam_data)
280 beam.save()
281
282 messages.success(request, 'Beam: "%s" has been updated.' % beam.name)
283
284 return redirect('url_edit_abs_conf', conf.id)
285
286 ###### SIDEBAR ######
287 kwargs = {}
288
289 kwargs['id_conf'] = conf.id
290 kwargs['form'] = form
291 kwargs['title'] = 'ABS Beams'
292 kwargs['suptitle'] = 'Edit Beam'
293 kwargs['button'] = 'Save'
294 kwargs['no_sidebar'] = True
295
296 #kwargs['previous'] = conf.get_absolute_url_edit()
297 kwargs['edit'] = True
298
299 return render(request, 'abs_add_beam.html', kwargs)
300
301
302
303 def remove_beam(request, id_conf, id_beam):
304
305 conf = get_object_or_404(ABSConfiguration, pk=id_conf)
306 beam = get_object_or_404(ABSBeam, pk=id_beam)
307
308 if request.method=='POST':
309 if beam:
310 try:
311 beam.remove_beamfromlist()
312 beam.delete()
313 messages.success(request, 'Beam: "%s" has been deleted.' % beam)
314 except:
315 messages.error(request, 'Unable to delete beam: "%s".' % beam)
316
317 return redirect('url_edit_abs_conf', conf.id)
318
319 ###### SIDEBAR ######
320 kwargs = {}
321
322 kwargs['object'] = beam
323 kwargs['delete'] = True
324 kwargs['title'] = 'Delete'
325 kwargs['suptitle'] = 'Beam'
326 kwargs['previous'] = conf.get_absolute_url_edit()
327 return render(request, 'confirm.html', kwargs)
1 NO CONTENT: file was removed
General Comments 0
You need to be logged in to leave comments. Login now