##// 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 from django import forms
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 class ABSConfigurationForm(forms.ModelForm):
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 class Meta:
18 class Meta:
7 model = ABSConfiguration
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 from django.db import models
1 from django.db import models
2 from apps.main.models import Configuration
2 from apps.main.models import Configuration
3 from django.core.urlresolvers import reverse
3 from django.core.urlresolvers import reverse
4 # Create your models here.
4 # Create your models here.
5
5
6 import ast
6 import ast
7 import socket
7 import socket
8 import json
8 import json
9 import requests
9 import requests
10 import struct
10 import struct
11 import sys, time
11 import sys, time
12
12
13 import multiprocessing
13 import multiprocessing
14
14
15
15
16 antenna_default = json.dumps({
16 antenna_default = json.dumps({
17 "antenna_up": [[0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
17 "antenna_up": [[0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
18 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
18 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
19 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
19 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
20 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
20 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
21 [0.5,0.5,0.5,0.5,1.0,1.0,1.0,1.0],
21 [0.5,0.5,0.5,0.5,1.0,1.0,1.0,1.0],
22 [0.5,0.5,0.5,0.5,1.0,1.0,1.0,1.0],
22 [0.5,0.5,0.5,0.5,1.0,1.0,1.0,1.0],
23 [0.5,0.5,0.5,0.5,1.0,1.0,1.0,1.0],
23 [0.5,0.5,0.5,0.5,1.0,1.0,1.0,1.0],
24 [0.5,0.5,0.5,0.5,1.0,1.0,1.0,1.0]
24 [0.5,0.5,0.5,0.5,1.0,1.0,1.0,1.0]
25 ]
25 ]
26 ,
26 ,
27 "antenna_down": [[0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
27 "antenna_down": [[0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
28 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
28 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
29 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
29 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
30 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
30 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
31 [0.5,0.5,0.5,0.5,3.0,3.0,3.0,3.0],
31 [0.5,0.5,0.5,0.5,3.0,3.0,3.0,3.0],
32 [0.5,0.5,0.5,0.5,3.0,3.0,3.0,3.0],
32 [0.5,0.5,0.5,0.5,3.0,3.0,3.0,3.0],
33 [0.5,0.5,0.5,0.5,3.0,3.0,3.0,3.0],
33 [0.5,0.5,0.5,0.5,3.0,3.0,3.0,3.0],
34 [0.5,0.5,0.5,0.5,3.0,3.0,3.0,3.0]],
34 [0.5,0.5,0.5,0.5,3.0,3.0,3.0,3.0]],
35 })
35 })
36
36
37
37
38 tx_default = json.dumps({
38 tx_default = json.dumps({
39 "up": [[1,1,1,1,0,0,0,0],
39 "up": [[1,1,1,1,0,0,0,0],
40 [1,1,1,1,0,0,0,0],
40 [1,1,1,1,0,0,0,0],
41 [1,1,1,1,0,0,0,0],
41 [1,1,1,1,0,0,0,0],
42 [1,1,1,1,0,0,0,0],
42 [1,1,1,1,0,0,0,0],
43 [0,0,0,0,1,1,1,1],
43 [0,0,0,0,1,1,1,1],
44 [0,0,0,0,1,1,1,1],
44 [0,0,0,0,1,1,1,1],
45 [0,0,0,0,1,1,1,1],
45 [0,0,0,0,1,1,1,1],
46 [0,0,0,0,1,1,1,1]],
46 [0,0,0,0,1,1,1,1]],
47
47
48 "down": [[1,1,1,1,0,0,0,0],
48 "down": [[1,1,1,1,0,0,0,0],
49 [1,1,1,1,0,0,0,0],
49 [1,1,1,1,0,0,0,0],
50 [1,1,1,1,0,0,0,0],
50 [1,1,1,1,0,0,0,0],
51 [1,1,1,1,0,0,0,0],
51 [1,1,1,1,0,0,0,0],
52 [0,0,0,0,1,1,1,1],
52 [0,0,0,0,1,1,1,1],
53 [0,0,0,0,1,1,1,1],
53 [0,0,0,0,1,1,1,1],
54 [0,0,0,0,1,1,1,1],
54 [0,0,0,0,1,1,1,1],
55 [0,0,0,0,1,1,1,1]],
55 [0,0,0,0,1,1,1,1]],
56 })
56 })
57
57
58 rx_default = json.dumps({
58 rx_default = json.dumps({
59 "up": [[1,1,1,1,0,0,0,0],
59 "up": [[1,1,1,1,0,0,0,0],
60 [1,1,1,1,0,0,0,0],
60 [1,1,1,1,0,0,0,0],
61 [1,1,1,1,0,0,0,0],
61 [1,1,1,1,0,0,0,0],
62 [1,1,1,1,0,0,0,0],
62 [1,1,1,1,0,0,0,0],
63 [0,0,0,0,1,1,1,1],
63 [0,0,0,0,1,1,1,1],
64 [0,0,0,0,1,1,1,1],
64 [0,0,0,0,1,1,1,1],
65 [0,0,0,0,1,1,1,1],
65 [0,0,0,0,1,1,1,1],
66 [0,0,0,0,1,1,1,1]],
66 [0,0,0,0,1,1,1,1]],
67
67
68 "down": [[1,1,1,1,0,0,0,0],
68 "down": [[1,1,1,1,0,0,0,0],
69 [1,1,1,1,0,0,0,0],
69 [1,1,1,1,0,0,0,0],
70 [1,1,1,1,0,0,0,0],
70 [1,1,1,1,0,0,0,0],
71 [1,1,1,1,0,0,0,0],
71 [1,1,1,1,0,0,0,0],
72 [0,0,0,0,1,1,1,1],
72 [0,0,0,0,1,1,1,1],
73 [0,0,0,0,1,1,1,1],
73 [0,0,0,0,1,1,1,1],
74 [0,0,0,0,1,1,1,1],
74 [0,0,0,0,1,1,1,1],
75 [0,0,0,0,1,1,1,1]],
75 [0,0,0,0,1,1,1,1]],
76 })
76 })
77
77
78 conf_default = {}
78 conf_default = {}
79 status_default = {}
79 status_default = {}
80 for i in range(1,65):
80 for i in range(1,65):
81 conf_default[str(i)] = ""
81 conf_default[str(i)] = ""
82 status_default[str(i)] = 0
82 status_default[str(i)] = 0
83
83
84 ues_default = json.dumps({
84 ues_default = json.dumps({
85 "up": [0.533333,0.00000,1.06667,0.00000],
85 "up": [0.533333,0.00000,1.06667,0.00000],
86 "down": [0.533333,0.00000,1.06667,0.00000]
86 "down": [0.533333,0.00000,1.06667,0.00000]
87 })
87 })
88
88
89 onlyrx_default = json.dumps({
89 onlyrx_default = json.dumps({
90 "up": False,
90 "up": False,
91 "down": False
91 "down": False
92 })
92 })
93
93
94 def up_convertion(cadena):
94 def up_convertion(cadena):
95 valores = []
95 valores = []
96 for c in cadena:
96 for c in cadena:
97 if c == 1.0: valores=valores+['000']
97 if c == 1.0: valores=valores+['000']
98 if c == 2.0: valores=valores+['001']
98 if c == 2.0: valores=valores+['001']
99 if c == 3.0: valores=valores+['010']
99 if c == 3.0: valores=valores+['010']
100 if c == 0.0: valores=valores+['011']
100 if c == 0.0: valores=valores+['011']
101 if c == 0.5: valores=valores+['100']
101 if c == 0.5: valores=valores+['100']
102 if c == 1.5: valores=valores+['101']
102 if c == 1.5: valores=valores+['101']
103 if c == 2.5: valores=valores+['110']
103 if c == 2.5: valores=valores+['110']
104 if c == 3.5: valores=valores+['111']
104 if c == 3.5: valores=valores+['111']
105
105
106 return valores
106 return valores
107
107
108 def up_conv_bits(value):
108 def up_conv_bits(value):
109
109
110 if value == 1.0: bits="000"
110 if value == 1.0: bits="000"
111 if value == 2.0: bits="001"
111 if value == 2.0: bits="001"
112 if value == 3.0: bits="010"
112 if value == 3.0: bits="010"
113 if value == 0.0: bits="011"
113 if value == 0.0: bits="011"
114 if value == 0.5: bits="100"
114 if value == 0.5: bits="100"
115 if value == 1.5: bits="101"
115 if value == 1.5: bits="101"
116 if value == 2.5: bits="110"
116 if value == 2.5: bits="110"
117 if value == 3.5: bits="111"
117 if value == 3.5: bits="111"
118
118
119 return bits
119 return bits
120
120
121 def down_convertion(cadena):
121 def down_convertion(cadena):
122 valores = []
122 valores = []
123 for c in cadena:
123 for c in cadena:
124 if c == 1.0: valores=valores+['000']
124 if c == 1.0: valores=valores+['000']
125 if c == 2.0: valores=valores+['001']
125 if c == 2.0: valores=valores+['001']
126 if c == 3.0: valores=valores+['010']
126 if c == 3.0: valores=valores+['010']
127 if c == 0.0: valores=valores+['011']
127 if c == 0.0: valores=valores+['011']
128 if c == 0.5: valores=valores+['100']
128 if c == 0.5: valores=valores+['100']
129 if c == 1.5: valores=valores+['101']
129 if c == 1.5: valores=valores+['101']
130 if c == 2.5: valores=valores+['110']
130 if c == 2.5: valores=valores+['110']
131 if c == 3.5: valores=valores+['111']
131 if c == 3.5: valores=valores+['111']
132
132
133 return valores
133 return valores
134
134
135 def down_conv_bits(value):
135 def down_conv_bits(value):
136
136
137 if value == 1.0: bits="000"
137 if value == 1.0: bits="000"
138 if value == 2.0: bits="001"
138 if value == 2.0: bits="001"
139 if value == 3.0: bits="010"
139 if value == 3.0: bits="010"
140 if value == 0.0: bits="011"
140 if value == 0.0: bits="011"
141 if value == 0.5: bits="100"
141 if value == 0.5: bits="100"
142 if value == 1.5: bits="101"
142 if value == 1.5: bits="101"
143 if value == 2.5: bits="110"
143 if value == 2.5: bits="110"
144 if value == 3.5: bits="111"
144 if value == 3.5: bits="111"
145
145
146 return bits
146 return bits
147
147
148 def ip2position(module_number):
148 def ip2position(module_number):
149 j=0
149 j=0
150 i=0
150 i=0
151 for x in range(0,module_number-1):
151 for x in range(0,module_number-1):
152 j=j+1
152 j=j+1
153 if j==8:
153 if j==8:
154 i=i+1
154 i=i+1
155 j=0
155 j=0
156
156
157 pos = [i,j]
157 pos = [i,j]
158 return pos
158 return pos
159
159
160
160
161 def change_beam_for_multiprocessing(module):
161 def change_beam_for_multiprocessing(module):
162
162
163 for i in range (1,50):
163 for i in range (1,50):
164 beam_pos = 0
164 beam_pos = 0
165 module_address = ('192.168.1.'+str(module), 5500)
165 module_address = ('192.168.1.'+str(module), 5500)
166 header = 'JROABSCeCnModCnMod0100000'
166 header = 'JROABSCeCnModCnMod0100000'
167 numbers = len(str(beam_pos))
167 numbers = len(str(beam_pos))
168 function = 'CHGB'
168 function = 'CHGB'
169
169
170 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
170 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
171
171
172 # Create the datagram socket
172 # Create the datagram socket
173 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
173 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
174 sock.connect(module_address)
174 sock.connect(module_address)
175
175
176 sock.send(message_tx)
176 sock.send(message_tx)
177 #t = sock.recv(1024)
177 #t = sock.recv(1024)
178 sock.close()
178 sock.close()
179 sock = None
179 sock = None
180
180
181
181
182 time.sleep(0.2)
182 time.sleep(0.2)
183
183
184
184
185 beam_pos = 1
185 beam_pos = 1
186 numbers = len(str(beam_pos))
186 numbers = len(str(beam_pos))
187
187
188 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
188 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
189
189
190 # Create the datagram socket
190 # Create the datagram socket
191 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
191 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
192 sock.connect(module_address)
192 sock.connect(module_address)
193 sock.send(message_tx)
193 sock.send(message_tx)
194 sock.close()
194 sock.close()
195 sock = None
195 sock = None
196
196
197 time.sleep(0.2)
197 time.sleep(0.2)
198
198
199
199
200
200
201 class ABSConfiguration(Configuration):
201 class ABSConfiguration(Configuration):
202 beams = models.CharField(verbose_name='Beams', max_length=20000, default="{}")
202 beams = models.CharField(verbose_name='Beams', max_length=20000, default="{}")
203 module_status = models.CharField(verbose_name='Module Status', max_length=10000, default=json.dumps(status_default))
203 module_status = models.CharField(verbose_name='Module Status', max_length=10000, default=json.dumps(status_default))
204
204
205 class Meta:
205 class Meta:
206 db_table = 'abs_configurations'
206 db_table = 'abs_configurations'
207
207
208 def get_absolute_url_plot(self):
208 def get_absolute_url_plot(self):
209 return reverse('url_plot_abs_patterns', args=[str(self.id)])
209 return reverse('url_plot_abs_patterns', args=[str(self.id)])
210
210
211
211
212 def parms_to_dict(self):
212 def parms_to_dict(self):
213
213
214 parameters = {}
214 parameters = {}
215
215
216 parameters['device_id'] = self.device.id
216 parameters['device_id'] = self.device.id
217 parameters['name'] = self.name
217 parameters['name'] = self.name
218 parameters['beams'] = {}
218 parameters['beams'] = {}
219
219
220 beams = ast.literal_eval(self.beams)
220 beams = ast.literal_eval(self.beams)
221 b=1
221 b=1
222 for beam in beams:
222 for beam in beams:
223 absbeam = ABSBeam.objects.get(pk=beams[beam])
223 absbeam = ABSBeam.objects.get(pk=beams[beam])
224 parameters['beams']['beam'+str(b)] = absbeam.parms_to_dict()
224 parameters['beams']['beam'+str(b)] = absbeam.parms_to_dict()
225 b+=1
225 b+=1
226
226
227 return parameters
227 return parameters
228
228
229
229
230 def module_conf(self, module_num, beams):
230 def module_conf(self, module_num, beams):
231 """
231 """
232 This function creates beam configurations for one abs module.
232 This function creates beam configurations for one abs module.
233 """
233 """
234 ip_address = self.device.ip_address
234 ip_address = self.device.ip_address
235 ip_address = ip_address.split('.')
235 ip_address = ip_address.split('.')
236 module_seq = (ip_address[0],ip_address[1],ip_address[2])
236 module_seq = (ip_address[0],ip_address[1],ip_address[2])
237 dot = '.'
237 dot = '.'
238 module_ip = dot.join(module_seq)+'.'+str(module_num)
238 module_ip = dot.join(module_seq)+'.'+str(module_num)
239 module_port = self.device.port_address
239 module_port = self.device.port_address
240 write_route = 'http://'+module_ip+':'+str(module_port)+'/configure'
240 write_route = 'http://'+module_ip+':'+str(module_port)+'/configure'
241
241
242 header = 'JROABSCeCnModCnMod01000108SNDFexperimento1.ab1'
242 header = 'JROABSCeCnModCnMod01000108SNDFexperimento1.ab1'
243 module = 'ABS_'+str(module_num)
243 module = 'ABS_'+str(module_num)
244 bs = {}
244 bs = {}
245 i=1
245 i=1
246 #beams = {1: '001000', 2: '010001', 3: '010010', 4: '000011', 5: '101100', 6: '101101',
246 #beams = {1: '001000', 2: '010001', 3: '010010', 4: '000011', 5: '101100', 6: '101101',
247 # 7: '110110', 8: '111111', 9: '000000', 10: '001001', 11: '010010', 12: '011011'}
247 # 7: '110110', 8: '111111', 9: '000000', 10: '001001', 11: '010010', 12: '011011'}
248 for beam in beams:
248 for beam in beams:
249 bs[i] = beam.module_6bits(module_num)
249 bs[i] = beam.module_6bits(module_num)
250 i=i+1
250 i=i+1
251
251
252 beams = bs
252 beams = bs
253
253
254 parameters = {}
254 parameters = {}
255 parameters['header'] = header
255 parameters['header'] = header
256 parameters['module'] = module
256 parameters['module'] = module
257 parameters['beams'] = json.dumps(beams)
257 parameters['beams'] = json.dumps(beams)
258
258
259 answer = ''
259 answer = ''
260
260
261 try:
261 try:
262 r_write = requests.post(write_route, parameters, timeout=0.5)
262 r_write = requests.post(write_route, parameters, timeout=0.5)
263 answer = r_write.json()
263 answer = r_write.json()
264 self.message = answer['message']
264 self.message = answer['message']
265 except:
265 except:
266 self.message = "Could not write ABS parameters"
266 self.message = "Could not write ABS parameters"
267 return 0
267 return 0
268 return 1
268 return 1
269
269
270
270
271 def read_module(self, module):
271 def read_module(self, module):
272
272
273 """
273 """
274 Read out-bits (up-down) of 1 abs module NOT for Configuration
274 Read out-bits (up-down) of 1 abs module NOT for Configuration
275 """
275 """
276
276
277 parameters = {}
277 parameters = {}
278 ip_address = self.device.ip_address
278 ip_address = self.device.ip_address
279 ip_address = ip_address.split('.')
279 ip_address = ip_address.split('.')
280 module_seq = (ip_address[0],ip_address[1],ip_address[2])
280 module_seq = (ip_address[0],ip_address[1],ip_address[2])
281 dot = '.'
281 dot = '.'
282 module_ip = dot.join(module_seq)+'.'+str(module)
282 module_ip = dot.join(module_seq)+'.'+str(module)
283 module_port = self.device.port_address
283 module_port = self.device.port_address
284 read_route = 'http://'+module_ip+':'+str(module_port)+'/read'
284 read_route = 'http://'+module_ip+':'+str(module_port)+'/read'
285
285
286 print read_route
286 print read_route
287
287
288 answer = ''
288 answer = ''
289 module_bits = ''
289 module_bits = ''
290
290
291 try:
291 try:
292 r_write = requests.get(read_route, timeout=0.7)
292 r_write = requests.get(read_route, timeout=0.7)
293 answer = r_write.json()
293 answer = r_write.json()
294 message = answer['message']
294 message = answer['message']
295 module_bits = answer['allbits']
295 module_bits = answer['allbits']
296 except:
296 except:
297 message = "Could not read ABS parameters"
297 message = "Could not read ABS parameters"
298 return 0
298 return 0
299
299
300 return module_bits
300 return module_bits
301
301
302
302
303 def write_device(self):
303 def write_device(self):
304 """
304 """
305 This function sends the beams list to every abs module.
305 This function sends the beams list to every abs module.
306 """
306 """
307
307
308 beams_list = ast.literal_eval(self.beams)
308 beams_list = ast.literal_eval(self.beams)
309 beams = []
309 beams = []
310
310
311 for bl in range(1,len(beams_list)+1):
311 for bl in range(1,len(beams_list)+1):
312 b = ABSBeam.objects.get(pk=beams_list['beam'+str(bl)])
312 b = ABSBeam.objects.get(pk=beams_list['beam'+str(bl)])
313 beams.append(b)
313 beams.append(b)
314
314
315 #---Write each abs module---
315 #---Write each abs module---
316 beams_status = ast.literal_eval(self.module_status)
316 beams_status = ast.literal_eval(self.module_status)
317 for i in range(62,65):
317 for i in range(62,65):
318 try:
318 try:
319 self.module_conf(i, beams)
319 self.module_conf(i, beams)
320 beams_status[str(i)] = 1
320 beams_status[str(i)] = 1
321 self.module_status = json.dumps(beams_status)
321 self.module_status = json.dumps(beams_status)
322 self.save()
322 self.save()
323 #self.module_conf(63,beams)
323 #self.module_conf(63,beams)
324 #beams_status[str(63)] = 1
324 #beams_status[str(63)] = 1
325 #self.module_status = json.dumps(beams_status)
325 #self.module_status = json.dumps(beams_status)
326 except:
326 except:
327 beams_status[str(i)] = 0
327 beams_status[str(i)] = 0
328 self.module_status = json.dumps(beams_status)
328 self.module_status = json.dumps(beams_status)
329 self.save()
329 self.save()
330 #return 0
330 #return 0
331
331
332 #self.device.status = 1
332 #self.device.status = 1
333 self.save()
333 self.save()
334 return 1
334 return 1
335
335
336
336
337 def write_module(self, module):
337 def write_module(self, module):
338
338
339 """
339 """
340 Send configuration to one abs module
340 Send configuration to one abs module
341 """
341 """
342
342
343 parameters = {}
343 parameters = {}
344 ip_address = self.abs_conf.device.ip_address
344 ip_address = self.abs_conf.device.ip_address
345 ip_address = ip_address.split('.')
345 ip_address = ip_address.split('.')
346 module_seq = (ip_address[0],ip_address[1],ip_address[2])
346 module_seq = (ip_address[0],ip_address[1],ip_address[2])
347 dot = '.'
347 dot = '.'
348 module_ip = dot.join(module_seq)+'.'+str(module)
348 module_ip = dot.join(module_seq)+'.'+str(module)
349 module_port = self.abs_conf.device.port_address
349 module_port = self.abs_conf.device.port_address
350 write_route = 'http://'+module_ip+':'+str(module_port)+'/configure'
350 write_route = 'http://'+module_ip+':'+str(module_port)+'/configure'
351
351
352 #print write_route
352 #print write_route
353
353
354 header = 'JROABSCeCnModCnMod01000108SNDFexperimento1.ab1'
354 header = 'JROABSCeCnModCnMod01000108SNDFexperimento1.ab1'
355 module = 'ABS_'+str(module)
355 module = 'ABS_'+str(module)
356 beams = {1: '001000', 2: '010001', 3: '010010', 4: '000011', 5: '101100', 6: '101101',
356 beams = {1: '001000', 2: '010001', 3: '010010', 4: '000011', 5: '101100', 6: '101101',
357 7: '110110', 8: '111111', 9: '000000', 10: '001001', 11: '010010', 12: '011011'}
357 7: '110110', 8: '111111', 9: '000000', 10: '001001', 11: '010010', 12: '011011'}
358
358
359 parameters['header'] = header
359 parameters['header'] = header
360 parameters['module'] = module
360 parameters['module'] = module
361 parameters['beams'] = json.dumps(beams)
361 parameters['beams'] = json.dumps(beams)
362
362
363 answer = ''
363 answer = ''
364
364
365 try:
365 try:
366 r_write = requests.post(write_route, parameters, timeout=0.5)
366 r_write = requests.post(write_route, parameters, timeout=0.5)
367 answer = r_write.json()
367 answer = r_write.json()
368 self.message = answer['message']
368 self.message = answer['message']
369 except:
369 except:
370 self.message = "Could not write ABS parameters"
370 self.message = "Could not write ABS parameters"
371 return 0
371 return 0
372
372
373
373
374 #self.device.status = int(answer['status'])
374 #self.device.status = int(answer['status'])
375
375
376 return 1
376 return 1
377
377
378
378
379 def beam_selector(self, module, beam_pos):
379 def beam_selector(self, module, beam_pos):
380 """
380 """
381 This function selects the beam number for one absmodule.
381 This function selects the beam number for one absmodule.
382 """
382 """
383
383
384 if beam_pos > 0:
384 if beam_pos > 0:
385 beam_pos = beam_pos - 1
385 beam_pos = beam_pos - 1
386 else:
386 else:
387 beam_pos = 0
387 beam_pos = 0
388
388
389 #El indice del apunte debe ser menor que el numero total de apuntes
389 #El indice del apunte debe ser menor que el numero total de apuntes
390 #El servidor tcp en el embebido comienza a contar desde 0
390 #El servidor tcp en el embebido comienza a contar desde 0
391 beams_list = ast.literal_eval(self.beams)
391 beams_list = ast.literal_eval(self.beams)
392 if len(beams_list) < beam_pos:
392 if len(beams_list) < beam_pos:
393 return 0
393 return 0
394
394
395 flag = 1
395 flag = 1
396 if beam_pos>9:
396 if beam_pos>9:
397 flag = 2
397 flag = 2
398
398
399 module_address = ('192.168.1.'+str(module), 5500)
399 module_address = ('192.168.1.'+str(module), 5500)
400 header = 'JROABSCeCnModCnMod0100000'
400 header = 'JROABSCeCnModCnMod0100000'
401 numbers = len(str(beam_pos))
401 numbers = len(str(beam_pos))
402 function = 'CHGB'
402 function = 'CHGB'
403
403
404 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
404 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
405
405
406 # Create the datagram socket
406 # Create the datagram socket
407 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
407 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
408 #sock.connect(module_address)
408 #sock.connect(module_address)
409 try:
409 try:
410 sock.connect(module_address)
410 sock.connect(module_address)
411 sock.send(message_tx)
411 sock.send(message_tx)
412 sock.close()
412 sock.close()
413 print "Writing abs module:"+module_address[0]+"..."
413 print "Writing abs module:"+module_address[0]+"..."
414 except:
414 except:
415 sock = None
415 sock = None
416 print "Problem writing abs module:"+module_address[0]
416 print "Problem writing abs module:"+module_address[0]
417 return 0
417 return 0
418
418
419 return 1
419 return 1
420
420
421
421
422 def change_beam(self, beam_pos):
422 def change_beam(self, beam_pos):
423 """
423 """
424 This function selects the beam number for all absmodules.
424 This function selects the beam number for all absmodules.
425 """
425 """
426 for i in range(1,65):
426 for i in range(1,65):
427 try:
427 try:
428 self.beam_selector(i,beam_pos)
428 self.beam_selector(i,beam_pos)
429 except:
429 except:
430 print "Problem with module: 192.168.1."+str(i)
430 print "Problem with module: 192.168.1."+str(i)
431 self.message = "Problem with module: 192.168.1."+str(i)
431 self.message = "Problem with module: 192.168.1."+str(i)
432 #return 0
432 #return 0
433 return 1
433 return 1
434
434
435
435
436 def send_beam_num(self, beam_pos):
436 def send_beam_num(self, beam_pos):
437 """
437 """
438 This function connects to a multicast group and sends the beam number
438 This function connects to a multicast group and sends the beam number
439 to all abs modules.
439 to all abs modules.
440 """
440 """
441
441
442 if beam_pos > 0:
442 if beam_pos > 0:
443 beam_pos = beam_pos - 1
443 beam_pos = beam_pos - 1
444 else:
444 else:
445 beam_pos = 0
445 beam_pos = 0
446
446
447 #El indice del apunte debe ser menor que el numero total de apuntes
447 #El indice del apunte debe ser menor que el numero total de apuntes
448 #El servidor tcp en el embebido comienza a contar desde 0
448 #El servidor tcp en el embebido comienza a contar desde 0
449 beams_list = ast.literal_eval(self.beams)
449 beams_list = ast.literal_eval(self.beams)
450 if len(beams_list) < beam_pos:
450 if len(beams_list) < beam_pos:
451 return 0
451 return 0
452
452
453 flag = 1
453 flag = 1
454 if beam_pos>9:
454 if beam_pos>9:
455 flag = 2
455 flag = 2
456
456
457 header = 'JROABSCeCnModCnMod0100000'
457 header = 'JROABSCeCnModCnMod0100000'
458 flag = str(flag)
458 flag = str(flag)
459 function = 'CHGB'
459 function = 'CHGB'
460 message_tx = header+flag+function+str(beam_pos)+'0'
460 message_tx = header+flag+function+str(beam_pos)+'0'
461
461
462 multicast_group = '224.3.29.71'
462 multicast_group = '224.3.29.71'
463 server_address = ('',10000)
463 server_address = ('',10000)
464
464
465 # Create the socket
465 # Create the socket
466 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
466 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
467 # Bind to the server address
467 # Bind to the server address
468 sock.bind(server_address)
468 sock.bind(server_address)
469 # Telling the OS add the socket to the multicast on all interfaces
469 # Telling the OS add the socket to the multicast on all interfaces
470 group = socket.inet_aton(multicast_group)
470 group = socket.inet_aton(multicast_group)
471 mreq = struct.pack('4sL', group, socket.INADDR_ANY)
471 mreq = struct.pack('4sL', group, socket.INADDR_ANY)
472 sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
472 sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
473
473
474 #print 'sending acknowledgement to all: \n' + message_tx
474 #print 'sending acknowledgement to all: \n' + message_tx
475 sock.sendto(message_tx, (multicast_group, 10000))
475 sock.sendto(message_tx, (multicast_group, 10000))
476 sock.close()
476 sock.close()
477 sock = None
477 sock = None
478
478
479 return 1
479 return 1
480
480
481 def test1(self):
481 def test1(self):
482 t1 = time.time()
482 t1 = time.time()
483 t2 = 0
483 t2 = 0
484 while (t2-t1)<300:
484 while (t2-t1)<300:
485 t2 = time.time()
485 t2 = time.time()
486 self.send_beam_num(1)
486 self.send_beam_num(1)
487 time.sleep(0.04)
487 time.sleep(0.04)
488 self.send_beam_num(2)
488 self.send_beam_num(2)
489 time.sleep(0.04)
489 time.sleep(0.04)
490 return
490 return
491
491
492 def change_procs_test1(self, module):
492 def change_procs_test1(self, module):
493
493
494 for i in range (1,300):
494 for i in range (1,300):
495 beam_pos = 0
495 beam_pos = 0
496 module_address = ('192.168.1.'+str(module), 5500)
496 module_address = ('192.168.1.'+str(module), 5500)
497 header = 'JROABSCeCnModCnMod0100000'
497 header = 'JROABSCeCnModCnMod0100000'
498 numbers = len(str(beam_pos))
498 numbers = len(str(beam_pos))
499 function = 'CHGB'
499 function = 'CHGB'
500
500
501 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
501 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
502
502
503 # Create the datagram socket
503 # Create the datagram socket
504 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
504 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
505 sock.connect(module_address)
505 sock.connect(module_address)
506
506
507 sock.send(message_tx)
507 sock.send(message_tx)
508 #t = sock.recv(1024)
508 #t = sock.recv(1024)
509 sock.close()
509 sock.close()
510 sock = None
510 sock = None
511
511
512
512
513 time.sleep(0.2)
513 time.sleep(0.2)
514
514
515
515
516 beam_pos = 1
516 beam_pos = 1
517 numbers = len(str(beam_pos))
517 numbers = len(str(beam_pos))
518
518
519 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
519 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
520
520
521 # Create the datagram socket
521 # Create the datagram socket
522 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
522 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
523 sock.connect(module_address)
523 sock.connect(module_address)
524 sock.send(message_tx)
524 sock.send(message_tx)
525 sock.close()
525 sock.close()
526 sock = None
526 sock = None
527
527
528 time.sleep(0.2)
528 time.sleep(0.2)
529
529
530
530
531 def multi_procs_test1(self):
531 def multi_procs_test1(self):
532
532
533 #if __name__ == "__main__":
533 #if __name__ == "__main__":
534 size = 10000000 # Number of random numbers to add
534 size = 10000000 # Number of random numbers to add
535 procs = 65 # (Number-1) of processes to create
535 procs = 65 # (Number-1) of processes to create
536
536
537 # Create a list of jobs and then iterate through
537 # Create a list of jobs and then iterate through
538 # the number of processes appending each process to
538 # the number of processes appending each process to
539 # the job list
539 # the job list
540 jobs = []
540 jobs = []
541 for i in range(62, procs):
541 for i in range(62, procs):
542
542
543 process = multiprocessing.Process(target=self.change_procs_test1,args=(i,))
543 process = multiprocessing.Process(target=self.change_procs_test1,args=(i,))
544 jobs.append(process)
544 jobs.append(process)
545 #print jobs
545 #print jobs
546
546
547 # Start the processes (i.e. calculate the random number lists)
547 # Start the processes (i.e. calculate the random number lists)
548 for j in jobs:
548 for j in jobs:
549 #time.sleep(0.4)
549 #time.sleep(0.4)
550 #print j
550 #print j
551 j.start()
551 j.start()
552
552
553 # Ensure all of the processes have finished
553 # Ensure all of the processes have finished
554 for j in jobs:
554 for j in jobs:
555 j.join()
555 j.join()
556
556
557 print "List processing complete."
557 print "List processing complete."
558 return 1
558 return 1
559
559
560
560
561 def status_device(self):
561 def status_device(self):
562
562
563 return 1
563 return 1
564
564
565
565
566
566
567 class ABSBeam(models.Model):
567 class ABSBeam(models.Model):
568
568
569 name = models.CharField(max_length=60, default='Beam')
569 name = models.CharField(max_length=60, default='Beam')
570 antenna = models.CharField(verbose_name='Antenna', max_length=1000, default=antenna_default)
570 antenna = models.CharField(verbose_name='Antenna', max_length=1000, default=antenna_default)
571 abs_conf = models.ForeignKey(ABSConfiguration, null=True, verbose_name='ABS Configuration')
571 abs_conf = models.ForeignKey(ABSConfiguration, null=True, verbose_name='ABS Configuration')
572 tx = models.CharField(verbose_name='Tx', max_length=1000, default=tx_default)
572 tx = models.CharField(verbose_name='Tx', max_length=1000, default=tx_default)
573 rx = models.CharField(verbose_name='Rx', max_length=1000, default=rx_default)
573 rx = models.CharField(verbose_name='Rx', max_length=1000, default=rx_default)
574 s_time = models.TimeField(verbose_name='Star Time', default='00:00:00')
574 s_time = models.TimeField(verbose_name='Star Time', default='00:00:00')
575 e_time = models.TimeField(verbose_name='End Time', default='23:59:59')
575 e_time = models.TimeField(verbose_name='End Time', default='23:59:59')
576 modules_conf = models.CharField(verbose_name='Modules', max_length=2000, default=json.dumps(conf_default))
576 modules_conf = models.CharField(verbose_name='Modules', max_length=2000, default=json.dumps(conf_default))
577 ues = models.CharField(verbose_name='Ues', max_length=100, default=ues_default)
577 ues = models.CharField(verbose_name='Ues', max_length=100, default=ues_default)
578 only_rx = models.CharField(verbose_name='Only RX', max_length=40, default=onlyrx_default)
578 only_rx = models.CharField(verbose_name='Only RX', max_length=40, default=onlyrx_default)
579
579
580 class Meta:
580 class Meta:
581 db_table = 'abs_beams'
581 db_table = 'abs_beams'
582
582
583 def __unicode__(self):
583 def __unicode__(self):
584 return u'%s' % (self.name)
584 return u'%s' % (self.name)
585
585
586 def parms_to_dict(self):
586 def parms_to_dict(self):
587
587
588 #Update data
588 #Update data
589 self.modules_6bits()
589 self.modules_6bits()
590
590
591 parameters = {}
591 parameters = {}
592
592
593 parameters['name'] = self.name
593 parameters['name'] = self.name
594 parameters['antenna'] = ast.literal_eval(self.antenna)
594 parameters['antenna'] = ast.literal_eval(self.antenna)
595 parameters['abs_conf'] = self.abs_conf.name
595 parameters['abs_conf'] = self.abs_conf.name
596 parameters['tx'] = ast.literal_eval(self.tx)
596 parameters['tx'] = ast.literal_eval(self.tx)
597 parameters['rx'] = ast.literal_eval(self.rx)
597 parameters['rx'] = ast.literal_eval(self.rx)
598 parameters['s_time'] = self.s_time.strftime("%H:%M:%S")
598 parameters['s_time'] = self.s_time.strftime("%H:%M:%S")
599 parameters['e_time'] = self.e_time.strftime("%H:%M:%S")
599 parameters['e_time'] = self.e_time.strftime("%H:%M:%S")
600 parameters['configuration'] = ast.literal_eval(self.modules_conf)
600 parameters['configuration'] = ast.literal_eval(self.modules_conf)
601 parameters['ues'] = ast.literal_eval(self.ues)
601 parameters['ues'] = ast.literal_eval(self.ues)
602 parameters['only_rx'] = json.loads(self.only_rx)
602 parameters['only_rx'] = json.loads(self.only_rx)
603
603
604 return parameters
604 return parameters
605
605
606 def dict_to_parms(self, parameters):
606 def dict_to_parms(self, parameters):
607
607
608 self.name = parameters['name']
608 self.name = parameters['name']
609 self.antenna = json.dumps(parameters['antenna'])
609 self.antenna = json.dumps(parameters['antenna'])
610 #self.abs_conf = parameters['abs_conf']
610 #self.abs_conf = parameters['abs_conf']
611 self.tx = json.dumps(parameters['tx'])
611 self.tx = json.dumps(parameters['tx'])
612 self.rx = json.dumps(parameters['rx'])
612 self.rx = json.dumps(parameters['rx'])
613 #parameters['s_time']
613 #parameters['s_time']
614 #parameters['e_time']
614 #parameters['e_time']
615 self.ues = json.dumps(parameters['ues'])
615 self.ues = json.dumps(parameters['ues'])
616 self.only_rx = json.dumps(parameters['only_rx'])
616 self.only_rx = json.dumps(parameters['only_rx'])
617
617
618 self.modules_6bits()
618 self.modules_6bits()
619 self.save()
619 self.save()
620
620
621 return parameters
621 return parameters
622
622
623
623
624 def change_beam(self, beam_pos=0):
624 def change_beam(self, beam_pos=0):
625
625
626 module_63 = ('192.168.1.63', 5500)
626 module_63 = ('192.168.1.63', 5500)
627 header = 'JROABSCeCnModCnMod0100000'
627 header = 'JROABSCeCnModCnMod0100000'
628 numbers = len(str(beam_pos))
628 numbers = len(str(beam_pos))
629 function = 'CHGB'
629 function = 'CHGB'
630
630
631 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
631 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
632
632
633 # Create the datagram socket
633 # Create the datagram socket
634 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
634 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
635 sock.connect(module_63)
635 sock.connect(module_63)
636 sock.send(message_tx)
636 sock.send(message_tx)
637 sock.close()
637 sock.close()
638 return message_tx
638 return message_tx
639
639
640 def change_module_beam(self, module=61,beam_pos=0):
640 def change_module_beam(self, module=61,beam_pos=0):
641
641
642 module_address = ('192.168.1.'+str(module), 5500)
642 module_address = ('192.168.1.'+str(module), 5500)
643 header = 'JROABSCeCnModCnMod0100000'
643 header = 'JROABSCeCnModCnMod0100000'
644 numbers = len(str(beam_pos))
644 numbers = len(str(beam_pos))
645 function = 'CHGB'
645 function = 'CHGB'
646
646
647 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
647 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
648
648
649 # Create the datagram socket
649 # Create the datagram socket
650 try:
650 try:
651 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
651 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
652 sock.connect(module_address)
652 sock.connect(module_address)
653 sock.send(message_tx)
653 sock.send(message_tx)
654 sock.close()
654 sock.close()
655 except:
655 except:
656 return 0
656 return 0
657 return message_tx
657 return message_tx
658
658
659 def write_device(self):
659 def write_device(self):
660
660
661 parameters = {}
661 parameters = {}
662
662
663 module_ip = '192.168.1.63'
663 module_ip = '192.168.1.63'
664 write_route = 'http://192.168.1.63:8080/configure'
664 write_route = 'http://192.168.1.63:8080/configure'
665
665
666 header = 'JROABSCeCnModCnMod01000108SNDFexperimento1.ab1'
666 header = 'JROABSCeCnModCnMod01000108SNDFexperimento1.ab1'
667 module = 'ABS_63'
667 module = 'ABS_63'
668 beams = {1: '001000', 2: '010001', 3: '010010', 4: '000011', 5: '101100', 6: '101101',
668 beams = {1: '001000', 2: '010001', 3: '010010', 4: '000011', 5: '101100', 6: '101101',
669 7: '110110', 8: '111111', 9: '000000', 10: '001001', 11: '010010', 12: '011011'}
669 7: '110110', 8: '111111', 9: '000000', 10: '001001', 11: '010010', 12: '011011'}
670
670
671 parameters['header'] = header
671 parameters['header'] = header
672 parameters['module'] = module
672 parameters['module'] = module
673 parameters['beams'] = json.dumps(beams)
673 parameters['beams'] = json.dumps(beams)
674
674
675 answer = ''
675 answer = ''
676
676
677 try:
677 try:
678 r_write = requests.post(write_route, parameters, timeout=0.5)
678 r_write = requests.post(write_route, parameters, timeout=0.5)
679 answer = r_write.json()
679 answer = r_write.json()
680 self.message = answer['message']
680 self.message = answer['message']
681 except:
681 except:
682 self.message = "Could not write ABS parameters"
682 self.message = "Could not write ABS parameters"
683 return 0
683 return 0
684
684
685
685
686 #self.device.status = int(answer['status'])
686 #self.device.status = int(answer['status'])
687
687
688 return 1
688 return 1
689
689
690
690
691
691
692 def module_6bits(self, module):
692 def module_6bits(self, module):
693 """
693 """
694 This function reads antenna pattern and choose 6bits (upbits-downbits) for one abs module
694 This function reads antenna pattern and choose 6bits (upbits-downbits) for one abs module
695 """
695 """
696 if module > 64:
696 if module > 64:
697 beam_bits = ""
697 beam_bits = ""
698 return beam_bits
698 return beam_bits
699
699
700 data = ast.literal_eval(self.antenna)
700 data = ast.literal_eval(self.antenna)
701 up_data = data['antenna_up']
701 up_data = data['antenna_up']
702 down_data = data['antenna_down']
702 down_data = data['antenna_down']
703
703
704 pos = ip2position(module)
704 pos = ip2position(module)
705 up_value = up_data[pos[0]][pos[1]]
705 up_value = up_data[pos[0]][pos[1]]
706 down_value = down_data[pos[0]][pos[1]]
706 down_value = down_data[pos[0]][pos[1]]
707
707
708 up_bits = up_conv_bits(up_value)
708 up_bits = up_conv_bits(up_value)
709 down_bits = down_conv_bits(down_value)
709 down_bits = down_conv_bits(down_value)
710 beam_bits = up_bits+down_bits
710 beam_bits = up_bits+down_bits
711
711
712 return beam_bits
712 return beam_bits
713
713
714 def modules_6bits(self):
714 def modules_6bits(self):
715 """
715 """
716 This function returns 6bits from every abs module (1-64) in a dict
716 This function returns 6bits from every abs module (1-64) in a dict
717 """
717 """
718 modules_configuration = ast.literal_eval(self.modules_conf)
718 modules_configuration = ast.literal_eval(self.modules_conf)
719
719
720 for i in range(1,65):
720 for i in range(1,65):
721 modules_configuration[str(i)] = self.module_6bits(i)
721 modules_configuration[str(i)] = self.module_6bits(i)
722
722
723 self.modules_conf = json.dumps(modules_configuration)
723 self.modules_conf = json.dumps(modules_configuration)
724 self.save()
724 self.save()
725
725
726 return self.modules_conf
726 return self.modules_conf
727
727
728 def add_beam2list(self):
728 def add_beam2list(self):
729 """
729 """
730 This function adds a beam to the beams list of ABS Configuration.
730 This function adds a beam to the beams list of ABS Configuration.
731 """
731 """
732 beams = ast.literal_eval(self.abs_conf.beams)
732 beams = ast.literal_eval(self.abs_conf.beams)
733 if any(beams):
733 if any(beams):
734 for beam in beams:
734 for beam in beams:
735 if beams[beam] == self.id:
735 if beams[beam] == self.id:
736 return
736 return
737 i = len(beams)+1
737 i = len(beams)+1
738 beams['beam'+str(i)] = self.id
738 beams['beam'+str(i)] = self.id
739 else:
739 else:
740 beams['beam1'] = self.id
740 beams['beam1'] = self.id
741
741
742 self.abs_conf.beams = json.dumps(beams)
742 self.abs_conf.beams = json.dumps(beams)
743 self.abs_conf.save()
743 self.abs_conf.save()
744
744
745 return
745 return
746
746
747 def remove_beamfromlist(self):
747 def remove_beamfromlist(self):
748 """
748 """
749 This function removes current beam from the beams list of ABS Configuration.
749 This function removes current beam from the beams list of ABS Configuration.
750 """
750 """
751 beams = ast.literal_eval(self.abs_conf.beams)
751 beams = ast.literal_eval(self.abs_conf.beams)
752 dict_position = ''
752 dict_position = ''
753
753
754 if any(beams):
754 if any(beams):
755 for beam in beams:
755 for beam in beams:
756 if beams[beam] == self.id:
756 if beams[beam] == self.id:
757 dict_position = beam
757 dict_position = beam
758 if dict_position != '':
758 if dict_position != '':
759 beams.pop(str(dict_position),None)
759 beams.pop(str(dict_position),None)
760 else:
760 else:
761 return
761 return
762
762
763 self.abs_conf.beams = json.dumps(beams)
763 self.abs_conf.beams = json.dumps(beams)
764 self.abs_conf.save()
764 self.abs_conf.save()
765
765
766 return
766 return
767
767
768 @property
768 @property
769 def get_upvalues(self):
769 def get_upvalues(self):
770 """
770 """
771 This function reads antenna pattern and show the up-value of one abs module
771 This function reads antenna pattern and show the up-value of one abs module
772 """
772 """
773
773
774 data = ast.literal_eval(self.antenna)
774 data = ast.literal_eval(self.antenna)
775 up_data = data['antenna_up']
775 up_data = data['antenna_up']
776
776
777 up_values = []
777 up_values = []
778 for data in up_data:
778 for data in up_data:
779 for i in range(0,8):
779 for i in range(0,8):
780 up_values.append(data[i])
780 up_values.append(data[i])
781
781
782 return up_values
782 return up_values
783
783
784 @property
784 @property
785 def antenna_upvalues(self):
785 def antenna_upvalues(self):
786 """
786 """
787 This function reads antenna pattern and show the up - values of one abs beam
787 This function reads antenna pattern and show the up - values of one abs beam
788 in a particular order
788 in a particular order
789 """
789 """
790 data = ast.literal_eval(self.antenna)
790 data = ast.literal_eval(self.antenna)
791 up_data = data['antenna_up']
791 up_data = data['antenna_up']
792
792
793 return up_data
793 return up_data
794
794
795 @property
795 @property
796 def antenna_downvalues(self):
796 def antenna_downvalues(self):
797 """
797 """
798 This function reads antenna pattern and show the down - values of one abs beam
798 This function reads antenna pattern and show the down - values of one abs beam
799 in a particular order
799 in a particular order
800 """
800 """
801 data = ast.literal_eval(self.antenna)
801 data = ast.literal_eval(self.antenna)
802 down_data = data['antenna_down']
802 down_data = data['antenna_down']
803
803
804 return down_data
804 return down_data
805
805
806 @property
806 @property
807 def get_downvalues(self):
807 def get_downvalues(self):
808 """
808 """
809 This function reads antenna pattern and show the down-value of one abs module
809 This function reads antenna pattern and show the down-value of one abs module
810 """
810 """
811
811
812 data = ast.literal_eval(self.antenna)
812 data = ast.literal_eval(self.antenna)
813 down_data = data['antenna_down']
813 down_data = data['antenna_down']
814
814
815 down_values = []
815 down_values = []
816 for data in down_data:
816 for data in down_data:
817 for i in range(0,8):
817 for i in range(0,8):
818 down_values.append(data[i])
818 down_values.append(data[i])
819
819
820 return down_values
820 return down_values
821
821
822 @property
822 @property
823 def get_up_ues(self):
823 def get_up_ues(self):
824 """
824 """
825 This function shows the up-ues-value of one beam
825 This function shows the up-ues-value of one beam
826 """
826 """
827 data = ast.literal_eval(self.ues)
827 data = ast.literal_eval(self.ues)
828 up_ues = data['up']
828 up_ues = data['up']
829
829
830 return up_ues
830 return up_ues
831
831
832 @property
832 @property
833 def get_down_ues(self):
833 def get_down_ues(self):
834 """
834 """
835 This function shows the down-ues-value of one beam
835 This function shows the down-ues-value of one beam
836 """
836 """
837 data = ast.literal_eval(self.ues)
837 data = ast.literal_eval(self.ues)
838 down_ues = data['down']
838 down_ues = data['down']
839
839
840 return down_ues
840 return down_ues
841
841
842 @property
842 @property
843 def get_up_onlyrx(self):
843 def get_up_onlyrx(self):
844 """
844 """
845 This function shows the up-onlyrx-value of one beam
845 This function shows the up-onlyrx-value of one beam
846 """
846 """
847 data = json.loads(self.only_rx)
847 data = json.loads(self.only_rx)
848 up_onlyrx = data['up']
848 up_onlyrx = data['up']
849
849
850 return up_onlyrx
850 return up_onlyrx
851
851
852 @property
852 @property
853 def get_down_onlyrx(self):
853 def get_down_onlyrx(self):
854 """
854 """
855 This function shows the down-onlyrx-value of one beam
855 This function shows the down-onlyrx-value of one beam
856 """
856 """
857 data = json.loads(self.only_rx)
857 data = json.loads(self.only_rx)
858 down_onlyrx = data['down']
858 down_onlyrx = data['down']
859
859
860 return down_onlyrx
860 return down_onlyrx
861
861
862 @property
862 @property
863 def get_tx(self):
863 def get_tx(self):
864 """
864 """
865 This function shows the tx-values of one beam
865 This function shows the tx-values of one beam
866 """
866 """
867 data = json.loads(self.tx)
867 data = json.loads(self.tx)
868
868
869 return data
869 return data
870
870
871 @property
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 def get_rx(self):
904 def get_rx(self):
873 """
905 """
874 This function shows the rx-values of one beam
906 This function shows the rx-values of one beam
875 """
907 """
876 data = json.loads(self.rx)
908 data = json.loads(self.rx)
877
909
878 return data
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 from django.conf.urls import url
1 from django.conf.urls import url
2
2
3 urlpatterns = (
3 urlpatterns = (
4 url(r'^(?P<id_conf>-?\d+)/$', 'apps.main.views.dev_conf', name='url_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.main.views.dev_conf_edit', name='url_edit_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 # Create your views here.
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
NO CONTENT: file was removed
General Comments 0
You need to be logged in to leave comments. Login now