##// END OF EJS Templates
Fix prints for python 3...
Juan C. Espinoza -
r174:fe01c8eee39a
parent child
Show More
@@ -1,940 +1,940
1 1 from django.db import models
2 2 from apps.main.models import Configuration
3 3 from django.core.urlresolvers import reverse
4 4 # Create your models here.
5 5
6 6 import ast
7 7 import socket
8 8 import json
9 9 import requests
10 10 import struct
11 11 import sys, time
12 12
13 13 import multiprocessing
14 14
15 15
16 16 antenna_default = json.dumps({
17 17 "antenna_up": [[0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
18 18 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
19 19 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
20 20 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
21 21 [0.5,0.5,0.5,0.5,1.0,1.0,1.0,1.0],
22 22 [0.5,0.5,0.5,0.5,1.0,1.0,1.0,1.0],
23 23 [0.5,0.5,0.5,0.5,1.0,1.0,1.0,1.0],
24 24 [0.5,0.5,0.5,0.5,1.0,1.0,1.0,1.0]
25 25 ]
26 26 ,
27 27 "antenna_down": [[0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
28 28 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
29 29 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
30 30 [0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5],
31 31 [0.5,0.5,0.5,0.5,3.0,3.0,3.0,3.0],
32 32 [0.5,0.5,0.5,0.5,3.0,3.0,3.0,3.0],
33 33 [0.5,0.5,0.5,0.5,3.0,3.0,3.0,3.0],
34 34 [0.5,0.5,0.5,0.5,3.0,3.0,3.0,3.0]],
35 35 })
36 36
37 37
38 38 tx_default = json.dumps({
39 39 "up": [[1,1,1,1,0,0,0,0],
40 40 [1,1,1,1,0,0,0,0],
41 41 [1,1,1,1,0,0,0,0],
42 42 [1,1,1,1,0,0,0,0],
43 43 [0,0,0,0,1,1,1,1],
44 44 [0,0,0,0,1,1,1,1],
45 45 [0,0,0,0,1,1,1,1],
46 46 [0,0,0,0,1,1,1,1]],
47 47
48 48 "down": [[1,1,1,1,0,0,0,0],
49 49 [1,1,1,1,0,0,0,0],
50 50 [1,1,1,1,0,0,0,0],
51 51 [1,1,1,1,0,0,0,0],
52 52 [0,0,0,0,1,1,1,1],
53 53 [0,0,0,0,1,1,1,1],
54 54 [0,0,0,0,1,1,1,1],
55 55 [0,0,0,0,1,1,1,1]],
56 56 })
57 57
58 58 rx_default = json.dumps({
59 59 "up": [[1,1,1,1,0,0,0,0],
60 60 [1,1,1,1,0,0,0,0],
61 61 [1,1,1,1,0,0,0,0],
62 62 [1,1,1,1,0,0,0,0],
63 63 [0,0,0,0,1,1,1,1],
64 64 [0,0,0,0,1,1,1,1],
65 65 [0,0,0,0,1,1,1,1],
66 66 [0,0,0,0,1,1,1,1]],
67 67
68 68 "down": [[1,1,1,1,0,0,0,0],
69 69 [1,1,1,1,0,0,0,0],
70 70 [1,1,1,1,0,0,0,0],
71 71 [1,1,1,1,0,0,0,0],
72 72 [0,0,0,0,1,1,1,1],
73 73 [0,0,0,0,1,1,1,1],
74 74 [0,0,0,0,1,1,1,1],
75 75 [0,0,0,0,1,1,1,1]],
76 76 })
77 77
78 78 conf_default = {}
79 79 status_default = {}
80 80 for i in range(1,65):
81 81 conf_default[str(i)] = ""
82 82 status_default[str(i)] = 0
83 83
84 84 ues_default = json.dumps({
85 85 "up": [0.533333,0.00000,1.06667,0.00000],
86 86 "down": [0.533333,0.00000,1.06667,0.00000]
87 87 })
88 88
89 89 onlyrx_default = json.dumps({
90 90 "up": False,
91 91 "down": False
92 92 })
93 93
94 94 def up_convertion(cadena):
95 95 valores = []
96 96 for c in cadena:
97 97 if c == 1.0: valores=valores+['000']
98 98 if c == 2.0: valores=valores+['001']
99 99 if c == 3.0: valores=valores+['010']
100 100 if c == 0.0: valores=valores+['011']
101 101 if c == 0.5: valores=valores+['100']
102 102 if c == 1.5: valores=valores+['101']
103 103 if c == 2.5: valores=valores+['110']
104 104 if c == 3.5: valores=valores+['111']
105 105
106 106 return valores
107 107
108 108 def up_conv_bits(value):
109 109
110 110 if value == 1.0: bits="000"
111 111 if value == 2.0: bits="001"
112 112 if value == 3.0: bits="010"
113 113 if value == 0.0: bits="011"
114 114 if value == 0.5: bits="100"
115 115 if value == 1.5: bits="101"
116 116 if value == 2.5: bits="110"
117 117 if value == 3.5: bits="111"
118 118
119 119 return bits
120 120
121 121 def down_convertion(cadena):
122 122 valores = []
123 123 for c in cadena:
124 124 if c == 1.0: valores=valores+['000']
125 125 if c == 2.0: valores=valores+['001']
126 126 if c == 3.0: valores=valores+['010']
127 127 if c == 0.0: valores=valores+['011']
128 128 if c == 0.5: valores=valores+['100']
129 129 if c == 1.5: valores=valores+['101']
130 130 if c == 2.5: valores=valores+['110']
131 131 if c == 3.5: valores=valores+['111']
132 132
133 133 return valores
134 134
135 135 def down_conv_bits(value):
136 136
137 137 if value == 1.0: bits="000"
138 138 if value == 2.0: bits="001"
139 139 if value == 3.0: bits="010"
140 140 if value == 0.0: bits="011"
141 141 if value == 0.5: bits="100"
142 142 if value == 1.5: bits="101"
143 143 if value == 2.5: bits="110"
144 144 if value == 3.5: bits="111"
145 145
146 146 return bits
147 147
148 148 def ip2position(module_number):
149 149 j=0
150 150 i=0
151 151 for x in range(0,module_number-1):
152 152 j=j+1
153 153 if j==8:
154 154 i=i+1
155 155 j=0
156 156
157 157 pos = [i,j]
158 158 return pos
159 159
160 160
161 161 def change_beam_for_multiprocessing(module):
162 162
163 163 for i in range (1,50):
164 164 beam_pos = 0
165 165 module_address = ('192.168.1.'+str(module), 5500)
166 166 header = 'JROABSCeCnModCnMod0100000'
167 167 numbers = len(str(beam_pos))
168 168 function = 'CHGB'
169 169
170 170 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
171 171
172 172 # Create the datagram socket
173 173 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
174 174 sock.connect(module_address)
175 175
176 176 sock.send(message_tx)
177 177 #t = sock.recv(1024)
178 178 sock.close()
179 179 sock = None
180 180
181 181
182 182 time.sleep(0.2)
183 183
184 184
185 185 beam_pos = 1
186 186 numbers = len(str(beam_pos))
187 187
188 188 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
189 189
190 190 # Create the datagram socket
191 191 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
192 192 sock.connect(module_address)
193 193 sock.send(message_tx)
194 194 sock.close()
195 195 sock = None
196 196
197 197 time.sleep(0.2)
198 198
199 199
200 200
201 201 class ABSConfiguration(Configuration):
202 202 beams = models.CharField(verbose_name='Beams', max_length=20000, default="{}")
203 203 module_status = models.CharField(verbose_name='Module Status', max_length=10000, default=json.dumps(status_default))
204 204
205 205 class Meta:
206 206 db_table = 'abs_configurations'
207 207
208 208 def get_absolute_url_plot(self):
209 209 return reverse('url_plot_abs_patterns', args=[str(self.id)])
210 210
211 211
212 212 def parms_to_dict(self):
213 213
214 214 parameters = {}
215 215
216 216 parameters['device_id'] = self.device.id
217 217 parameters['name'] = self.name
218 218 parameters['beams'] = {}
219 219
220 220 beams = ast.literal_eval(self.beams)
221 221 b=1
222 222 for beam in beams:
223 223 absbeam = ABSBeam.objects.get(pk=beams[beam])
224 224 parameters['beams']['beam'+str(b)] = absbeam.parms_to_dict()
225 225 b+=1
226 226
227 227 return parameters
228 228
229 229
230 230 def module_conf(self, module_num, beams):
231 231 """
232 232 This function creates beam configurations for one abs module.
233 233 """
234 234 ip_address = self.device.ip_address
235 235 ip_address = ip_address.split('.')
236 236 module_seq = (ip_address[0],ip_address[1],ip_address[2])
237 237 dot = '.'
238 238 module_ip = dot.join(module_seq)+'.'+str(module_num)
239 239 module_port = self.device.port_address
240 240 write_route = 'http://'+module_ip+':'+str(module_port)+'/configure'
241 241
242 242 header = 'JROABSCeCnModCnMod01000108SNDFexperimento1.ab1'
243 243 module = 'ABS_'+str(module_num)
244 244 bs = {}
245 245 i=1
246 246 #beams = {1: '001000', 2: '010001', 3: '010010', 4: '000011', 5: '101100', 6: '101101',
247 247 # 7: '110110', 8: '111111', 9: '000000', 10: '001001', 11: '010010', 12: '011011'}
248 248 for beam in beams:
249 249 bs[i] = beam.module_6bits(module_num)
250 250 i=i+1
251 251
252 252 beams = bs
253 253
254 254 parameters = {}
255 255 parameters['header'] = header
256 256 parameters['module'] = module
257 257 parameters['beams'] = json.dumps(beams)
258 258
259 259 answer = ''
260 260
261 261 try:
262 262 r_write = requests.post(write_route, parameters, timeout=0.5)
263 263 answer = r_write.json()
264 264 self.message = answer['message']
265 265 except:
266 266 self.message = "Could not write ABS parameters"
267 267 return 0
268 268 return 1
269 269
270 270
271 271 def read_module(self, module):
272 272
273 273 """
274 274 Read out-bits (up-down) of 1 abs module NOT for Configuration
275 275 """
276 276
277 277 parameters = {}
278 278 ip_address = self.device.ip_address
279 279 ip_address = ip_address.split('.')
280 280 module_seq = (ip_address[0],ip_address[1],ip_address[2])
281 281 dot = '.'
282 282 module_ip = dot.join(module_seq)+'.'+str(module)
283 283 module_port = self.device.port_address
284 284 read_route = 'http://'+module_ip+':'+str(module_port)+'/read'
285 285
286 print read_route
286 print(read_route)
287 287
288 288 answer = ''
289 289 module_bits = ''
290 290
291 291 try:
292 292 r_write = requests.get(read_route, timeout=0.7)
293 293 answer = r_write.json()
294 294 message = answer['message']
295 295 module_bits = answer['allbits']
296 296 except:
297 297 message = "Could not read ABS parameters"
298 298 return 0
299 299
300 300 return module_bits
301 301
302 302
303 303 def write_device(self):
304 304 """
305 305 This function sends the beams list to every abs module.
306 306 """
307 307
308 308 beams_list = ast.literal_eval(self.beams)
309 309 beams = []
310 310
311 311 for bl in range(1,len(beams_list)+1):
312 312 b = ABSBeam.objects.get(pk=beams_list['beam'+str(bl)])
313 313 beams.append(b)
314 314
315 315 #---Write each abs module---
316 316 beams_status = ast.literal_eval(self.module_status)
317 317 for i in range(62,65):
318 318 try:
319 319 self.module_conf(i, beams)
320 320 beams_status[str(i)] = 1
321 321 self.module_status = json.dumps(beams_status)
322 322 self.save()
323 323 #self.module_conf(63,beams)
324 324 #beams_status[str(63)] = 1
325 325 #self.module_status = json.dumps(beams_status)
326 326 except:
327 327 beams_status[str(i)] = 0
328 328 self.module_status = json.dumps(beams_status)
329 329 self.save()
330 330 #return 0
331 331
332 332 #self.device.status = 1
333 333 self.save()
334 334 return 1
335 335
336 336
337 337 def write_module(self, module):
338 338
339 339 """
340 340 Send configuration to one abs module
341 341 """
342 342
343 343 parameters = {}
344 344 ip_address = self.abs_conf.device.ip_address
345 345 ip_address = ip_address.split('.')
346 346 module_seq = (ip_address[0],ip_address[1],ip_address[2])
347 347 dot = '.'
348 348 module_ip = dot.join(module_seq)+'.'+str(module)
349 349 module_port = self.abs_conf.device.port_address
350 350 write_route = 'http://'+module_ip+':'+str(module_port)+'/configure'
351 351
352 352 #print write_route
353 353
354 354 header = 'JROABSCeCnModCnMod01000108SNDFexperimento1.ab1'
355 355 module = 'ABS_'+str(module)
356 356 beams = {1: '001000', 2: '010001', 3: '010010', 4: '000011', 5: '101100', 6: '101101',
357 357 7: '110110', 8: '111111', 9: '000000', 10: '001001', 11: '010010', 12: '011011'}
358 358
359 359 parameters['header'] = header
360 360 parameters['module'] = module
361 361 parameters['beams'] = json.dumps(beams)
362 362
363 363 answer = ''
364 364
365 365 try:
366 366 r_write = requests.post(write_route, parameters, timeout=0.5)
367 367 answer = r_write.json()
368 368 self.message = answer['message']
369 369 except:
370 370 self.message = "Could not write ABS parameters"
371 371 return 0
372 372
373 373
374 374 #self.device.status = int(answer['status'])
375 375
376 376 return 1
377 377
378 378
379 379 def beam_selector(self, module, beam_pos):
380 380 """
381 381 This function selects the beam number for one absmodule.
382 382 """
383 383
384 384 if beam_pos > 0:
385 385 beam_pos = beam_pos - 1
386 386 else:
387 387 beam_pos = 0
388 388
389 389 #El indice del apunte debe ser menor que el numero total de apuntes
390 390 #El servidor tcp en el embebido comienza a contar desde 0
391 391 beams_list = ast.literal_eval(self.beams)
392 392 if len(beams_list) < beam_pos:
393 393 return 0
394 394
395 395 flag = 1
396 396 if beam_pos>9:
397 397 flag = 2
398 398
399 399 module_address = ('192.168.1.'+str(module), 5500)
400 400 header = 'JROABSCeCnModCnMod0100000'
401 401 numbers = len(str(beam_pos))
402 402 function = 'CHGB'
403 403
404 404 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
405 405
406 406 # Create the datagram socket
407 407 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
408 408 #sock.connect(module_address)
409 409 try:
410 410 sock.connect(module_address)
411 411 sock.send(message_tx)
412 412 sock.close()
413 print "Writing abs module:"+module_address[0]+"..."
413 print("Writing abs module:"+module_address[0]+"...")
414 414 except:
415 415 sock = None
416 print "Problem writing abs module:"+module_address[0]
416 print("Problem writing abs module:"+module_address[0])
417 417 return 0
418 418
419 419 return 1
420 420
421 421
422 422 def change_beam(self, beam_pos):
423 423 """
424 424 This function selects the beam number for all absmodules.
425 425 """
426 426 for i in range(1,65):
427 427 try:
428 428 self.beam_selector(i,beam_pos)
429 429 except:
430 print "Problem with module: 192.168.1."+str(i)
430 print("Problem with module: 192.168.1."+str(i))
431 431 self.message = "Problem with module: 192.168.1."+str(i)
432 432 #return 0
433 433 return 1
434 434
435 435
436 436 def send_beam_num(self, beam_pos):
437 437 """
438 438 This function connects to a multicast group and sends the beam number
439 439 to all abs modules.
440 440 """
441 441
442 442 if beam_pos > 0:
443 443 beam_pos = beam_pos - 1
444 444 else:
445 445 beam_pos = 0
446 446
447 447 #El indice del apunte debe ser menor que el numero total de apuntes
448 448 #El servidor tcp en el embebido comienza a contar desde 0
449 449 beams_list = ast.literal_eval(self.beams)
450 450 if len(beams_list) < beam_pos:
451 451 return 0
452 452
453 453 flag = 1
454 454 if beam_pos>9:
455 455 flag = 2
456 456
457 457 header = 'JROABSCeCnModCnMod0100000'
458 458 flag = str(flag)
459 459 function = 'CHGB'
460 460 message_tx = header+flag+function+str(beam_pos)+'0'
461 461
462 462 multicast_group = '224.3.29.71'
463 463 server_address = ('',10000)
464 464
465 465 # Create the socket
466 466 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
467 467 # Bind to the server address
468 468 sock.bind(server_address)
469 469 # Telling the OS add the socket to the multicast on all interfaces
470 470 group = socket.inet_aton(multicast_group)
471 471 mreq = struct.pack('4sL', group, socket.INADDR_ANY)
472 472 sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
473 473
474 474 #print 'sending acknowledgement to all: \n' + message_tx
475 475 sock.sendto(message_tx, (multicast_group, 10000))
476 476 sock.close()
477 477 sock = None
478 478
479 479 return 1
480 480
481 481 def test1(self):
482 482 t1 = time.time()
483 483 t2 = 0
484 484 while (t2-t1)<300:
485 485 t2 = time.time()
486 486 self.send_beam_num(1)
487 487 time.sleep(0.04)
488 488 self.send_beam_num(2)
489 489 time.sleep(0.04)
490 490 return
491 491
492 492 def change_procs_test1(self, module):
493 493
494 494 for i in range (1,300):
495 495 beam_pos = 0
496 496 module_address = ('192.168.1.'+str(module), 5500)
497 497 header = 'JROABSCeCnModCnMod0100000'
498 498 numbers = len(str(beam_pos))
499 499 function = 'CHGB'
500 500
501 501 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
502 502
503 503 # Create the datagram socket
504 504 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
505 505 sock.connect(module_address)
506 506
507 507 sock.send(message_tx)
508 508 #t = sock.recv(1024)
509 509 sock.close()
510 510 sock = None
511 511
512 512
513 513 time.sleep(0.2)
514 514
515 515
516 516 beam_pos = 1
517 517 numbers = len(str(beam_pos))
518 518
519 519 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
520 520
521 521 # Create the datagram socket
522 522 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
523 523 sock.connect(module_address)
524 524 sock.send(message_tx)
525 525 sock.close()
526 526 sock = None
527 527
528 528 time.sleep(0.2)
529 529
530 530
531 531 def multi_procs_test1(self):
532 532
533 533 #if __name__ == "__main__":
534 534 size = 10000000 # Number of random numbers to add
535 535 procs = 65 # (Number-1) of processes to create
536 536
537 537 # Create a list of jobs and then iterate through
538 538 # the number of processes appending each process to
539 539 # the job list
540 540 jobs = []
541 541 for i in range(62, procs):
542 542
543 543 process = multiprocessing.Process(target=self.change_procs_test1,args=(i,))
544 544 jobs.append(process)
545 545 #print jobs
546 546
547 547 # Start the processes (i.e. calculate the random number lists)
548 548 for j in jobs:
549 549 #time.sleep(0.4)
550 550 #print j
551 551 j.start()
552 552
553 553 # Ensure all of the processes have finished
554 554 for j in jobs:
555 555 j.join()
556 556
557 print "List processing complete."
557 print("List processing complete.")
558 558 return 1
559 559
560 560
561 561 def status_device(self):
562 562
563 563 return 1
564 564
565 565
566 566
567 567 class ABSBeam(models.Model):
568 568
569 569 name = models.CharField(max_length=60, default='Beam')
570 570 antenna = models.CharField(verbose_name='Antenna', max_length=1000, default=antenna_default)
571 571 abs_conf = models.ForeignKey(ABSConfiguration, null=True, verbose_name='ABS Configuration')
572 572 tx = models.CharField(verbose_name='Tx', max_length=1000, default=tx_default)
573 573 rx = models.CharField(verbose_name='Rx', max_length=1000, default=rx_default)
574 574 s_time = models.TimeField(verbose_name='Star Time', default='00:00:00')
575 575 e_time = models.TimeField(verbose_name='End Time', default='23:59:59')
576 576 modules_conf = models.CharField(verbose_name='Modules', max_length=2000, default=json.dumps(conf_default))
577 577 ues = models.CharField(verbose_name='Ues', max_length=100, default=ues_default)
578 578 only_rx = models.CharField(verbose_name='Only RX', max_length=40, default=onlyrx_default)
579 579
580 580 class Meta:
581 581 db_table = 'abs_beams'
582 582
583 583 def __unicode__(self):
584 584 return u'%s' % (self.name)
585 585
586 586 def parms_to_dict(self):
587 587
588 588 #Update data
589 589 self.modules_6bits()
590 590
591 591 parameters = {}
592 592
593 593 parameters['name'] = self.name
594 594 parameters['antenna'] = ast.literal_eval(self.antenna)
595 595 parameters['abs_conf'] = self.abs_conf.name
596 596 parameters['tx'] = ast.literal_eval(self.tx)
597 597 parameters['rx'] = ast.literal_eval(self.rx)
598 598 parameters['s_time'] = self.s_time.strftime("%H:%M:%S")
599 599 parameters['e_time'] = self.e_time.strftime("%H:%M:%S")
600 600 parameters['configuration'] = ast.literal_eval(self.modules_conf)
601 601 parameters['ues'] = ast.literal_eval(self.ues)
602 602 parameters['only_rx'] = json.loads(self.only_rx)
603 603
604 604 return parameters
605 605
606 606 def dict_to_parms(self, parameters):
607 607
608 608 self.name = parameters['name']
609 609 self.antenna = json.dumps(parameters['antenna'])
610 610 #self.abs_conf = parameters['abs_conf']
611 611 self.tx = json.dumps(parameters['tx'])
612 612 self.rx = json.dumps(parameters['rx'])
613 613 #parameters['s_time']
614 614 #parameters['e_time']
615 615 self.ues = json.dumps(parameters['ues'])
616 616 self.only_rx = json.dumps(parameters['only_rx'])
617 617
618 618 self.modules_6bits()
619 619 self.save()
620 620
621 621 return parameters
622 622
623 623
624 624 def change_beam(self, beam_pos=0):
625 625
626 626 module_63 = ('192.168.1.63', 5500)
627 627 header = 'JROABSCeCnModCnMod0100000'
628 628 numbers = len(str(beam_pos))
629 629 function = 'CHGB'
630 630
631 631 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
632 632
633 633 # Create the datagram socket
634 634 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
635 635 sock.connect(module_63)
636 636 sock.send(message_tx)
637 637 sock.close()
638 638 return message_tx
639 639
640 640 def change_module_beam(self, module=61,beam_pos=0):
641 641
642 642 module_address = ('192.168.1.'+str(module), 5500)
643 643 header = 'JROABSCeCnModCnMod0100000'
644 644 numbers = len(str(beam_pos))
645 645 function = 'CHGB'
646 646
647 647 message_tx = header+str(numbers)+function+str(beam_pos)+'0'
648 648
649 649 # Create the datagram socket
650 650 try:
651 651 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
652 652 sock.connect(module_address)
653 653 sock.send(message_tx)
654 654 sock.close()
655 655 except:
656 656 return 0
657 657 return message_tx
658 658
659 659 def write_device(self):
660 660
661 661 parameters = {}
662 662
663 663 module_ip = '192.168.1.63'
664 664 write_route = 'http://192.168.1.63:8080/configure'
665 665
666 666 header = 'JROABSCeCnModCnMod01000108SNDFexperimento1.ab1'
667 667 module = 'ABS_63'
668 668 beams = {1: '001000', 2: '010001', 3: '010010', 4: '000011', 5: '101100', 6: '101101',
669 669 7: '110110', 8: '111111', 9: '000000', 10: '001001', 11: '010010', 12: '011011'}
670 670
671 671 parameters['header'] = header
672 672 parameters['module'] = module
673 673 parameters['beams'] = json.dumps(beams)
674 674
675 675 answer = ''
676 676
677 677 try:
678 678 r_write = requests.post(write_route, parameters, timeout=0.5)
679 679 answer = r_write.json()
680 680 self.message = answer['message']
681 681 except:
682 682 self.message = "Could not write ABS parameters"
683 683 return 0
684 684
685 685
686 686 #self.device.status = int(answer['status'])
687 687
688 688 return 1
689 689
690 690
691 691
692 692 def module_6bits(self, module):
693 693 """
694 694 This function reads antenna pattern and choose 6bits (upbits-downbits) for one abs module
695 695 """
696 696 if module > 64:
697 697 beam_bits = ""
698 698 return beam_bits
699 699
700 700 data = ast.literal_eval(self.antenna)
701 701 up_data = data['antenna_up']
702 702 down_data = data['antenna_down']
703 703
704 704 pos = ip2position(module)
705 705 up_value = up_data[pos[0]][pos[1]]
706 706 down_value = down_data[pos[0]][pos[1]]
707 707
708 708 up_bits = up_conv_bits(up_value)
709 709 down_bits = down_conv_bits(down_value)
710 710 beam_bits = up_bits+down_bits
711 711
712 712 return beam_bits
713 713
714 714 def modules_6bits(self):
715 715 """
716 716 This function returns 6bits from every abs module (1-64) in a dict
717 717 """
718 718 modules_configuration = ast.literal_eval(self.modules_conf)
719 719
720 720 for i in range(1,65):
721 721 modules_configuration[str(i)] = self.module_6bits(i)
722 722
723 723 self.modules_conf = json.dumps(modules_configuration)
724 724 self.save()
725 725
726 726 return self.modules_conf
727 727
728 728 def add_beam2list(self):
729 729 """
730 730 This function adds a beam to the beams list of ABS Configuration.
731 731 """
732 732 beams = ast.literal_eval(self.abs_conf.beams)
733 733 if any(beams):
734 734 for beam in beams:
735 735 if beams[beam] == self.id:
736 736 return
737 737 i = len(beams)+1
738 738 beams['beam'+str(i)] = self.id
739 739 else:
740 740 beams['beam1'] = self.id
741 741
742 742 self.abs_conf.beams = json.dumps(beams)
743 743 self.abs_conf.save()
744 744
745 745 return
746 746
747 747 def remove_beamfromlist(self):
748 748 """
749 749 This function removes current beam from the beams list of ABS Configuration.
750 750 """
751 751 beams = ast.literal_eval(self.abs_conf.beams)
752 752 dict_position = ''
753 753
754 754 if any(beams):
755 755 for beam in beams:
756 756 if beams[beam] == self.id:
757 757 dict_position = beam
758 758 if dict_position != '':
759 759 beams.pop(str(dict_position),None)
760 760 else:
761 761 return
762 762
763 763 self.abs_conf.beams = json.dumps(beams)
764 764 self.abs_conf.save()
765 765
766 766 return
767 767
768 768 @property
769 769 def get_upvalues(self):
770 770 """
771 771 This function reads antenna pattern and show the up-value of one abs module
772 772 """
773 773
774 774 data = ast.literal_eval(self.antenna)
775 775 up_data = data['antenna_up']
776 776
777 777 up_values = []
778 778 for data in up_data:
779 779 for i in range(0,8):
780 780 up_values.append(data[i])
781 781
782 782 return up_values
783 783
784 784 @property
785 785 def antenna_upvalues(self):
786 786 """
787 787 This function reads antenna pattern and show the up - values of one abs beam
788 788 in a particular order
789 789 """
790 790 data = ast.literal_eval(self.antenna)
791 791 up_data = data['antenna_up']
792 792
793 793 return up_data
794 794
795 795 @property
796 796 def antenna_downvalues(self):
797 797 """
798 798 This function reads antenna pattern and show the down - values of one abs beam
799 799 in a particular order
800 800 """
801 801 data = ast.literal_eval(self.antenna)
802 802 down_data = data['antenna_down']
803 803
804 804 return down_data
805 805
806 806 @property
807 807 def get_downvalues(self):
808 808 """
809 809 This function reads antenna pattern and show the down-value of one abs module
810 810 """
811 811
812 812 data = ast.literal_eval(self.antenna)
813 813 down_data = data['antenna_down']
814 814
815 815 down_values = []
816 816 for data in down_data:
817 817 for i in range(0,8):
818 818 down_values.append(data[i])
819 819
820 820 return down_values
821 821
822 822 @property
823 823 def get_up_ues(self):
824 824 """
825 825 This function shows the up-ues-value of one beam
826 826 """
827 827 data = ast.literal_eval(self.ues)
828 828 up_ues = data['up']
829 829
830 830 return up_ues
831 831
832 832 @property
833 833 def get_down_ues(self):
834 834 """
835 835 This function shows the down-ues-value of one beam
836 836 """
837 837 data = ast.literal_eval(self.ues)
838 838 down_ues = data['down']
839 839
840 840 return down_ues
841 841
842 842 @property
843 843 def get_up_onlyrx(self):
844 844 """
845 845 This function shows the up-onlyrx-value of one beam
846 846 """
847 847 data = json.loads(self.only_rx)
848 848 up_onlyrx = data['up']
849 849
850 850 return up_onlyrx
851 851
852 852 @property
853 853 def get_down_onlyrx(self):
854 854 """
855 855 This function shows the down-onlyrx-value of one beam
856 856 """
857 857 data = json.loads(self.only_rx)
858 858 down_onlyrx = data['down']
859 859
860 860 return down_onlyrx
861 861
862 862 @property
863 863 def get_tx(self):
864 864 """
865 865 This function shows the tx-values of one beam
866 866 """
867 867 data = json.loads(self.tx)
868 868
869 869 return data
870 870
871 871 @property
872 872 def get_uptx(self):
873 873 """
874 874 This function shows the up-tx-values of one beam
875 875 """
876 876 data = json.loads(self.tx)
877 877 up_data = data['up']
878 878
879 879 up_values = []
880 880 for data in up_data:
881 881 for i in range(0,8):
882 882 up_values.append(data[i])
883 883
884 884 return up_values
885 885
886 886 @property
887 887 def get_downtx(self):
888 888 """
889 889 This function shows the down-tx-values of one beam
890 890 """
891 891 data = json.loads(self.tx)
892 892 down_data = data['down']
893 893
894 894 down_values = []
895 895 for data in down_data:
896 896 for i in range(0,8):
897 897 down_values.append(data[i])
898 898
899 899 return down_values
900 900
901 901
902 902
903 903 @property
904 904 def get_rx(self):
905 905 """
906 906 This function shows the rx-values of one beam
907 907 """
908 908 data = json.loads(self.rx)
909 909
910 910 return data
911 911
912 912 @property
913 913 def get_uprx(self):
914 914 """
915 915 This function shows the up-rx-values of one beam
916 916 """
917 917 data = json.loads(self.rx)
918 918 up_data = data['up']
919 919
920 920 up_values = []
921 921 for data in up_data:
922 922 for i in range(0,8):
923 923 up_values.append(data[i])
924 924
925 925 return up_values
926 926
927 927 @property
928 928 def get_downrx(self):
929 929 """
930 930 This function shows the down-rx-values of one beam
931 931 """
932 932 data = json.loads(self.rx)
933 933 down_data = data['down']
934 934
935 935 down_values = []
936 936 for data in down_data:
937 937 for i in range(0,8):
938 938 down_values.append(data[i])
939 939
940 940 return down_values
@@ -1,15 +1,15
1 1 from django.conf.urls import url
2 2
3 import views
3 from apps.abs import views
4 4
5 5 urlpatterns = (
6 6 url(r'^(?P<id_conf>-?\d+)/$', views.abs_conf, name='url_abs_conf'),
7 7 url(r'^(?P<id_conf>-?\d+)/edit/$', views.abs_conf_edit, name='url_edit_abs_conf'),
8 8 #url(r'^(?P<id_conf>-?\d+)/read/$', views.dev_conf_read, name='url_read_abs_conf'),
9 9 #url(r'^(?P<id_conf>-?\d+)/import/$', views.dev_conf_import, name='url_import_abs_conf'),
10 10 #url(r'^(?P<id_conf>-?\d+)/export/$', views.dev_conf_export, name='url_export_abs_conf'),
11 11 url(r'^(?P<id_conf>-?\d+)/plot/$', views.plot_patterns, name='url_plot_abs_patterns'),
12 12 url(r'^(?P<id_conf>-?\d+)/add_beam/$', views.add_beam, name='url_add_abs_beam'),
13 13 url(r'^(?P<id_conf>-?\d+)/beam/(?P<id_beam>-?\d+)/delete/$', views.remove_beam, name='url_remove_abs_beam'),
14 14 url(r'^(?P<id_conf>-?\d+)/beam/(?P<id_beam>-?\d+)/edit/$', views.edit_beam, name='url_edit_abs_beam'),
15 15 )
@@ -1,2092 +1,2091
1 1 import ast
2 2 import json
3 3 from itertools import chain
4 4
5 5 from django import forms
6 6 from django.utils.safestring import mark_safe
7 from django.utils.encoding import force_unicode
8 7 from django.utils.html import conditional_escape
9 8
10 9 style = """<style>
11 10
12 11 .abs {
13 12 border: 2px solid #00334d;
14 13 vertical-align: top;
15 14 display: inline-block;
16 15 font-size: 85%;
17 16 }
18 17
19 18 .abs tr:nth-child(n) {
20 19 border-bottom: 1px dashed #00334d;
21 20 }
22 21 .abs tr:nth-child(3) {
23 22 border-bottom: 0px solid #00334d;
24 23 }
25 24
26 25 .abs td:nth-child(1){
27 26 border-right: 1px dashed #00334d;
28 27 text-align: center;
29 28 padding: 1px;
30 29 }
31 30 .abs tr:nth-child(1) td:nth-child(1) {
32 31 border-right: 0px solid #00334d;
33 32 }
34 33 .abs td{
35 34 border-right: 0px solid #00334d;
36 35 text-align: center;
37 36 padding: 1px;
38 37 }
39 38
40 39
41 40 .north_quarter{
42 41 border: 2px solid #00334d;
43 42 vertical-align: center;
44 43 font-weight: bold;
45 44 }
46 45 .north_quarter tr{
47 46 border: 1px solid #ffffff;
48 47 background-color: #ecf0f1;
49 48 }
50 49 .north_quarter td{
51 50 border: 2px solid #e2e2e7;
52 51 text-align: center;
53 52 }
54 53
55 54 .east_quarter{
56 55 border: 2px solid #00334d;
57 56 vertical-align: center;
58 57 font-weight: bold;
59 58 }
60 59 .east_quarter tr{
61 60 border: 1px solid #ffffff;
62 61 background-color: #ecf0f1;
63 62 }
64 63 .east_quarter td{
65 64 border: 2px solid #e2e2e7;
66 65 text-align: center;
67 66 }
68 67
69 68 .west_quarter{
70 69 border: 2px solid #00334d;
71 70 vertical-align: center;
72 71 font-weight: bold;
73 72 }
74 73 .west_quarter tr{
75 74 border: 1px solid #ffffff;
76 75 background-color: #ecf0f1;
77 76 }
78 77 .west_quarter td{
79 78 border: 2px solid #e2e2e7;
80 79 text-align: center;
81 80 }
82 81
83 82 .south_quarter{
84 83 border: 2px solid #00334d;
85 84 vertical-align: center;
86 85 font-weight: bold;
87 86 }
88 87 .south_quarter tr{
89 88 border: 1px solid #ffffff;
90 89 background-color: #ecf0f1;
91 90 }
92 91 .south_quarter td{
93 92 border: 2px solid #e2e2e7;
94 93 text-align: center;
95 94 }
96 95
97 96
98 97
99 98
100 99
101 100
102 101 .abs_tx {
103 102 border: 2px solid #00334d;
104 103 vertical-align: top;
105 104 display: inline-block;
106 105 font-size: 85%;
107 106 margin-left: 30px;
108 107 }
109 108
110 109 .abs_tx tr:nth-child(n) {
111 110 border-bottom: 1px dashed #00334d;
112 111 }
113 112 .abs_tx tr:nth-child(3) {
114 113 border-bottom: 0px solid #00334d;
115 114 }
116 115
117 116 .abs_tx td:nth-child(1){
118 117 border-right: 1px dashed #00334d;
119 118 text-align: center;
120 119 padding: 1px;
121 120 }
122 121 .abs_tx tr:nth-child(1) td:nth-child(1) {
123 122 border-right: 0px solid #00334d;
124 123 }
125 124 .abs_tx td{
126 125 border-right: 0px solid #00334d;
127 126 text-align: center;
128 127 padding: 1px;
129 128 }
130 129
131 130
132 131 .tx_north_quarter{
133 132 border: 2px solid #00334d;
134 133 vertical-align: center;
135 134 font-weight: bold;
136 135 }
137 136 .tx_north_quarter tr{
138 137 border: 1px solid #ffffff;
139 138 background-color: #ecf0f1;
140 139 }
141 140 .tx_north_quarter td{
142 141 border: 2px solid #e2e2e7;
143 142 text-align: center;
144 143 }
145 144
146 145
147 146 .tx_east_quarter{
148 147 border: 2px solid #00334d;
149 148 vertical-align: center;
150 149 font-weight: bold;
151 150 }
152 151 .tx_east_quarter tr{
153 152 border: 1px solid #ffffff;
154 153 background-color: #ecf0f1;
155 154 }
156 155 .tx_east_quarter td{
157 156 border: 2px solid #e2e2e7;
158 157 text-align: center;
159 158 }
160 159
161 160
162 161 .tx_west_quarter{
163 162 border: 2px solid #00334d;
164 163 vertical-align: center;
165 164 font-weight: bold;
166 165 }
167 166 .tx_west_quarter tr{
168 167 border: 1px solid #ffffff;
169 168 background-color: #ecf0f1;
170 169 }
171 170 .tx_west_quarter td{
172 171 border: 2px solid #e2e2e7;
173 172 text-align: center;
174 173 }
175 174
176 175
177 176 .tx_south_quarter{
178 177 border: 2px solid #00334d;
179 178 vertical-align: center;
180 179 font-weight: bold;
181 180 }
182 181 .tx_south_quarter tr{
183 182 border: 1px solid #ffffff;
184 183 background-color: #ecf0f1;
185 184 }
186 185 .tx_south_quarter td{
187 186 border: 2px solid #e2e2e7;
188 187 text-align: center;
189 188 }
190 189
191 190
192 191
193 192
194 193 .abs_rx {
195 194 border: 2px solid #00334d;
196 195 vertical-align: top;
197 196 display: inline-block;
198 197 font-size: 85%;
199 198 margin-left: 30px;
200 199 }
201 200
202 201 .abs_rx tr:nth-child(n) {
203 202 border-bottom: 1px dashed #00334d;
204 203 }
205 204 .abs_rx tr:nth-child(3) {
206 205 border-bottom: 0px solid #00334d;
207 206 }
208 207
209 208 .abs_rx td:nth-child(1){
210 209 border-right: 1px dashed #00334d;
211 210 text-align: center;
212 211 padding: 1px;
213 212 }
214 213 .abs_rx tr:nth-child(1) td:nth-child(1) {
215 214 border-right: 0px solid #00334d;
216 215 }
217 216 .abs_rx td{
218 217 border-right: 0px solid #00334d;
219 218 text-align: center;
220 219 padding: 1px;
221 220 }
222 221
223 222
224 223 .rx_north_quarter{
225 224 border: 2px solid #00334d;
226 225 vertical-align: center;
227 226 font-weight: bold;
228 227 }
229 228 .rx_north_quarter tr{
230 229 border: 1px solid #ffffff;
231 230 background-color: #ecf0f1;
232 231 }
233 232 .rx_north_quarter td{
234 233 border: 2px solid #e2e2e7;
235 234 text-align: center;
236 235 }
237 236
238 237
239 238 .rx_east_quarter{
240 239 border: 2px solid #00334d;
241 240 vertical-align: center;
242 241 font-weight: bold;
243 242 }
244 243 .rx_east_quarter tr{
245 244 border: 1px solid #ffffff;
246 245 background-color: #ecf0f1;
247 246 }
248 247 .rx_east_quarter td{
249 248 border: 2px solid #e2e2e7;
250 249 text-align: center;
251 250 }
252 251
253 252
254 253 .rx_west_quarter{
255 254 border: 2px solid #00334d;
256 255 vertical-align: center;
257 256 font-weight: bold;
258 257 }
259 258 .rx_west_quarter tr{
260 259 border: 1px solid #ffffff;
261 260 background-color: #ecf0f1;
262 261 }
263 262 .rx_west_quarter td{
264 263 border: 2px solid #e2e2e7;
265 264 text-align: center;
266 265 }
267 266
268 267
269 268 .rx_south_quarter{
270 269 border: 2px solid #00334d;
271 270 vertical-align: center;
272 271 font-weight: bold;
273 272 }
274 273 .rx_south_quarter tr{
275 274 border: 1px solid #ffffff;
276 275 background-color: #ecf0f1;
277 276 }
278 277 .rx_south_quarter td{
279 278 border: 2px solid #e2e2e7;
280 279 text-align: center;
281 280 }
282 281
283 282
284 283
285 284 .tx {
286 285 border: 2px solid #00334d;
287 286 vertical-align: center;
288 287 font-weight: bold;
289 288 }
290 289 .tx tr{
291 290 border: 1px solid #ffffff;
292 291 background-color: #ecf0f1;
293 292 }
294 293 .tx td{
295 294 border: 2px solid #e2e2e7;
296 295 text-align: center;
297 296 }
298 297
299 298
300 299 .rx {
301 300 border: 2px solid #00334d;
302 301 vertical-align: center;
303 302 font-weight: bold;
304 303 }
305 304 .rx tr{
306 305 border: 1px solid #ffffff;
307 306 background-color: #ecf0f1;
308 307 }
309 308 .rx td{
310 309 border: 2px solid #e2e2e7;
311 310 text-align: center;
312 311 }
313 312
314 313 input[type="checkbox"] {
315 314 margin-top: 0px;
316 315 line-height: normal;
317 316 margin-bottom: 0px;
318 317 vertical-align: middle;
319 318 }
320 319
321 320 </style>"""
322 321
323 322
324 323 class EditUpDataWidget(forms.widgets.TextInput):
325 324
326 325 def render(self, label, value, attrs=None):
327 326
328 327 try:
329 328 beam = attrs.get('beam', value)
330 329 except:
331 330 return
332 331
333 332 checked_tx = {}
334 333 for i in range(1,65):
335 334 checked_tx['']=''
336 335
337 336 checked_onlyrx = ''
338 337 if beam.get_up_onlyrx == True:
339 338 checked_onlyrx = 'checked="True"'
340 339
341 340
342 341 html = '''
343 342
344 343 <div class="container">
345 344 <div style="display:inline-block">
346 345 Name:
347 346 <label style="display:inline-block"><input value="{beam.name}" style="display:inline-block" name="beam_name" class="form-control" id="id_name" type="text"></label>
348 347 </div>
349 348 </div>
350 349
351 350 <br>
352 351 <div class="panel-group">
353 352 <div style="display: inline-block" id="UP" class="panel panel-default">
354 353
355 354 <div class="panel-heading">UP</div>
356 355
357 356
358 357 <div class="panel-body">
359 358
360 359 <table class="abs">
361 360 <tr>
362 361 <td colspan="2"> <b>Antenna</b> </td>
363 362 </tr>
364 363 <tr>
365 364 <td> <b>North Quarter</b>
366 365 <table class="north_quarter">
367 366 <tr>
368 367 <td><select id="abs_value1" name="abs_up1"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
369 368 <td><select id="abs_value2" name="abs_up2"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
370 369 <td><select id="abs_value3" name="abs_up3"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
371 370 <td><select id="abs_value4" name="abs_up4"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
372 371 </tr>
373 372 <tr>
374 373 <td><select id="abs_value9" name="abs_up9"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
375 374 <td><select id="abs_value10" name="abs_up10"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
376 375 <td><select id="abs_value11" name="abs_up11"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
377 376 <td><select id="abs_value12" name="abs_up12"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
378 377 </tr>
379 378 <tr>
380 379 <td><select id="abs_value17" name="abs_up17"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
381 380 <td><select id="abs_value18" name="abs_up18"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
382 381 <td><select id="abs_value19" name="abs_up19"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
383 382 <td><select id="abs_value20" name="abs_up20"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
384 383 </tr>
385 384 <tr>
386 385 <td><select id="abs_value25" name="abs_up25"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
387 386 <td><select id="abs_value26" name="abs_up26"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
388 387 <td><select id="abs_value27" name="abs_up27"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
389 388 <td><select id="abs_value28" name="abs_up28"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
390 389 </tr>
391 390 </table>
392 391 </td>
393 392 <td> <b>East Quarter</b>
394 393 <table class="east_quarter">
395 394 <tr>
396 395 <td><select id="abs_value5" name="abs_up5"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
397 396 <td><select id="abs_value6" name="abs_up6"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
398 397 <td><select id="abs_value7" name="abs_up7"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
399 398 <td><select id="abs_value8" name="abs_up8"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
400 399 </tr>
401 400 <tr>
402 401 <td><select id="abs_value13" name="abs_up13"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
403 402 <td><select id="abs_value14" name="abs_up14"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
404 403 <td><select id="abs_value15" name="abs_up15"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
405 404 <td><select id="abs_value16" name="abs_up16"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
406 405 </tr>
407 406 <tr>
408 407 <td><select id="abs_value21" name="abs_up21"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
409 408 <td><select id="abs_value22" name="abs_up22"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
410 409 <td><select id="abs_value23" name="abs_up23"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
411 410 <td><select id="abs_value24" name="abs_up24"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
412 411 </tr>
413 412 <tr>
414 413 <td><select id="abs_value29" name="abs_up29"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
415 414 <td><select id="abs_value30" name="abs_up30"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
416 415 <td><select id="abs_value31" name="abs_up31"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
417 416 <td><select id="abs_value32" name="abs_up32"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
418 417 </tr>
419 418 </table>
420 419 </td>
421 420 </tr>
422 421 <tr>
423 422 <td> <b>West Quarter</b>
424 423 <table class="west_quarter">
425 424 <tr>
426 425 <td><select id="abs_value33" name="abs_up33"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
427 426 <td><select id="abs_value34" name="abs_up34"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
428 427 <td><select id="abs_value35" name="abs_up35"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
429 428 <td><select id="abs_value36" name="abs_up36"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
430 429 </tr>
431 430 <tr>
432 431 <td><select id="abs_value41" name="abs_up41"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
433 432 <td><select id="abs_value42" name="abs_up42"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
434 433 <td><select id="abs_value43" name="abs_up43"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
435 434 <td><select id="abs_value44" name="abs_up44"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
436 435 </tr>
437 436 <tr>
438 437 <td><select id="abs_value49" name="abs_up49"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
439 438 <td><select id="abs_value50" name="abs_up50"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
440 439 <td><select id="abs_value51" name="abs_up51"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
441 440 <td><select id="abs_value52" name="abs_up52"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
442 441 </tr>
443 442 <tr>
444 443 <td><select id="abs_value57" name="abs_up57"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
445 444 <td><select id="abs_value58" name="abs_up58"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
446 445 <td><select id="abs_value59" name="abs_up59"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
447 446 <td><select id="abs_value60" name="abs_up60"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
448 447 </tr>
449 448 </table>
450 449 </td>
451 450 <td> <b>South Quarter</b>
452 451 <table class="south_quarter">
453 452 <tr>
454 453 <td><select id="abs_value37" name="abs_up37"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
455 454 <td><select id="abs_value38" name="abs_up38"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
456 455 <td><select id="abs_value39" name="abs_up39"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
457 456 <td><select id="abs_value40" name="abs_up40"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
458 457 </tr>
459 458 <tr>
460 459 <td><select id="abs_value45" name="abs_up45"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
461 460 <td><select id="abs_value46" name="abs_up46"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
462 461 <td><select id="abs_value47" name="abs_up47"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
463 462 <td><select id="abs_value48" name="abs_up48"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
464 463 </tr>
465 464 <tr>
466 465 <td><select id="abs_value53" name="abs_up53"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
467 466 <td><select id="abs_value54" name="abs_up54"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
468 467 <td><select id="abs_value55" name="abs_up55"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
469 468 <td><select id="abs_value56" name="abs_up56"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
470 469 </tr>
471 470 <tr>
472 471 <td><select id="abs_value61" name="abs_up61"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
473 472 <td><select id="abs_value62" name="abs_up62"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
474 473 <td><select id="abs_value63" name="abs_up63"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
475 474 <td><select id="abs_value64" name="abs_up64"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
476 475 </tr>
477 476 </table>
478 477 </td>
479 478 </tr>
480 479 </table>
481 480
482 481
483 482
484 483 <table class="abs_tx">
485 484 <tr>
486 485 <td colspan="2"> <b>TX</b> </td>
487 486 </tr>
488 487 <tr>
489 488 <td> <b>North Quarter</b>
490 489 <table align="center" class="tx_north_quarter">
491 490 <tr>
492 491 <td> <input id="uptx1" name="uptx_checks" type="checkbox" value=1> </td>
493 492 <td> <input id="uptx2" name="uptx_checks" type="checkbox" value=2> </td>
494 493 <td> <input id="uptx3" name="uptx_checks" type="checkbox" value=3> </td>
495 494 <td> <input id="uptx4" name="uptx_checks" type="checkbox" value=4> </td>
496 495 </tr>
497 496 <tr>
498 497 <td> <input id="uptx9" name="uptx_checks" type="checkbox" value=9> </td>
499 498 <td> <input id="uptx10" name="uptx_checks" type="checkbox" value=10> </td>
500 499 <td> <input id="uptx11" name="uptx_checks" type="checkbox" value=11> </td>
501 500 <td> <input id="uptx12" name="uptx_checks" type="checkbox" value=12> </td>
502 501 </tr>
503 502 <tr>
504 503 <td> <input id="uptx17" name="uptx_checks" type="checkbox" value=17> </td>
505 504 <td> <input id="uptx18" name="uptx_checks" type="checkbox" value=18> </td>
506 505 <td> <input id="uptx19" name="uptx_checks" type="checkbox" value=19> </td>
507 506 <td> <input id="uptx20" name="uptx_checks" type="checkbox" value=20> </td>
508 507 </tr>
509 508 <tr>
510 509 <td> <input id="uptx25" name="uptx_checks" type="checkbox" value=25> </td>
511 510 <td> <input id="uptx26" name="uptx_checks" type="checkbox" value=26> </td>
512 511 <td> <input id="uptx27" name="uptx_checks" type="checkbox" value=27> </td>
513 512 <td> <input id="uptx28" name="uptx_checks" type="checkbox" value=28> </td>
514 513 </tr>
515 514 </table>
516 515 </td>
517 516 <td> <b>East Quarter</b>
518 517 <table align="center" class="tx_east_quarter">
519 518 <tr>
520 519 <td> <input id="uptx5" name="uptx_checks" type="checkbox" value=5> </td>
521 520 <td> <input id="uptx6" name="uptx_checks" type="checkbox" value=6> </td>
522 521 <td> <input id="uptx7" name="uptx_checks" type="checkbox" value=7> </td>
523 522 <td> <input id="uptx8" name="uptx_checks" type="checkbox" value=8> </td>
524 523 </tr>
525 524 <tr>
526 525 <td> <input id="uptx13" name="uptx_checks" type="checkbox" value=13> </td>
527 526 <td> <input id="uptx14" name="uptx_checks" type="checkbox" value=14> </td>
528 527 <td> <input id="uptx15" name="uptx_checks" type="checkbox" value=15> </td>
529 528 <td> <input id="uptx16" name="uptx_checks" type="checkbox" value=16></td>
530 529 </tr>
531 530 <tr>
532 531 <td> <input id="uptx21" name="uptx_checks" type="checkbox" value=21> </td>
533 532 <td> <input id="uptx22" name="uptx_checks" type="checkbox" value=22> </td>
534 533 <td> <input id="uptx23" name="uptx_checks" type="checkbox" value=23> </td>
535 534 <td> <input id="uptx24" name="uptx_checks" type="checkbox" value=24> </td>
536 535 </tr>
537 536 <tr>
538 537 <td> <input id="uptx29" name="uptx_checks" type="checkbox" value=29> </td>
539 538 <td> <input id="uptx30" name="uptx_checks" type="checkbox" value=30> </td>
540 539 <td> <input id="uptx31" name="uptx_checks" type="checkbox" value=31> </td>
541 540 <td> <input id="uptx32" name="uptx_checks" type="checkbox" value=32> </td>
542 541 </tr>
543 542 </table>
544 543 </td>
545 544 </tr>
546 545 <tr>
547 546 <td> <b>West Quarter</b>
548 547 <table align="center" class="tx_west_quarter">
549 548 <tr>
550 549 <td> <input id="uptx33" name="uptx_checks" type="checkbox" value=33> </td> <!--class="checkbox-inline"--->
551 550 <td> <input id="uptx34" name="uptx_checks" type="checkbox" value=34> </td>
552 551 <td> <input id="uptx35" name="uptx_checks" type="checkbox" value=35> </td>
553 552 <td> <input id="uptx36" name="uptx_checks" type="checkbox" value=36> </td>
554 553 </tr>
555 554 <tr>
556 555 <td> <input id="uptx41" name="uptx_checks" type="checkbox" value=41> </td>
557 556 <td> <input id="uptx42" name="uptx_checks" type="checkbox" value=42> </td>
558 557 <td> <input id="uptx43" name="uptx_checks" type="checkbox" value=43> </td>
559 558 <td> <input id="uptx44" name="uptx_checks" type="checkbox" value=44> </td>
560 559 </tr>
561 560 <tr>
562 561 <td> <input id="uptx49" name="uptx_checks" type="checkbox" value=49> </td>
563 562 <td> <input id="uptx50" name="uptx_checks" type="checkbox" value=50> </td>
564 563 <td> <input id="uptx51" name="uptx_checks" type="checkbox" value=51> </td>
565 564 <td> <input id="uptx52" name="uptx_checks" type="checkbox" value=52> </td>
566 565 </tr>
567 566 <tr>
568 567 <td> <input id="uptx57" name="uptx_checks" type="checkbox" value=57> </td>
569 568 <td> <input id="uptx58" name="uptx_checks" type="checkbox" value=58> </td>
570 569 <td> <input id="uptx59" name="uptx_checks" type="checkbox" value=59> </td>
571 570 <td> <input id="uptx60" name="uptx_checks" type="checkbox" value=60> </td>
572 571 </tr>
573 572 </table>
574 573 </td>
575 574 <td> <b>South Quarter</b>
576 575 <table align="center" class="tx_south_quarter">
577 576 <tr>
578 577 <td> <input id="uptx37" name="uptx_checks" type="checkbox" value=37> </td>
579 578 <td> <input id="uptx38" name="uptx_checks" type="checkbox" value=38> </td>
580 579 <td> <input id="uptx39" name="uptx_checks" type="checkbox" value=39> </td>
581 580 <td> <input id="uptx40" name="uptx_checks" type="checkbox" value=40> </td>
582 581 </tr>
583 582 <tr>
584 583 <td> <input id="uptx45" name="uptx_checks" type="checkbox" value=45> </td>
585 584 <td> <input id="uptx46" name="uptx_checks" type="checkbox" value=46> </td>
586 585 <td> <input id="uptx47" name="uptx_checks" type="checkbox" value=47> </td>
587 586 <td> <input id="uptx48" name="uptx_checks" type="checkbox" value=48> </td>
588 587 </tr>
589 588 <tr>
590 589 <td> <input id="uptx53" name="uptx_checks" type="checkbox" value=53> </td>
591 590 <td> <input id="uptx54" name="uptx_checks" type="checkbox" value=54> </td>
592 591 <td> <input id="uptx55" name="uptx_checks" type="checkbox" value=55> </td>
593 592 <td> <input id="uptx56" name="uptx_checks" type="checkbox" value=56> </td>
594 593 </tr>
595 594 <tr>
596 595 <td> <input id="uptx61" name="uptx_checks" type="checkbox" value=61> </td>
597 596 <td> <input id="uptx62" name="uptx_checks" type="checkbox" value=62> </td>
598 597 <td> <input id="uptx63" name="uptx_checks" type="checkbox" value=63> </td>
599 598 <td> <input id="uptx64" name="uptx_checks" type="checkbox" value=64> </td>
600 599 </tr>
601 600 </table>
602 601 </td>
603 602 </tr>
604 603 </table>
605 604
606 605 <table class="abs_rx">
607 606 <tr>
608 607 <td colspan="2"> <b>RX</b> </td>
609 608 </tr>
610 609 <tr>
611 610 <td> <b>North Quarter</b>
612 611 <table align="center" class="rx_north_quarter">
613 612 <tr>
614 613 <td> <input id="uprx1" name="uprx_checks" type="checkbox" value=1> </td>
615 614 <td> <input id="uprx2" name="uprx_checks" type="checkbox" value=2> </td>
616 615 <td> <input id="uprx3" name="uprx_checks" type="checkbox" value=3> </td>
617 616 <td> <input id="uprx4" name="uprx_checks" type="checkbox" value=4> </td>
618 617 </tr>
619 618 <tr>
620 619 <td> <input id="uprx9" name="uprx_checks" type="checkbox" value=9> </td>
621 620 <td> <input id="uprx10" name="uprx_checks" type="checkbox" value=10> </td>
622 621 <td> <input id="uprx11" name="uprx_checks" type="checkbox" value=11> </td>
623 622 <td> <input id="uprx12" name="uprx_checks" type="checkbox" value=12> </td>
624 623 </tr>
625 624 <tr>
626 625 <td> <input id="uprx17" name="uprx_checks" type="checkbox" value=17> </td>
627 626 <td> <input id="uprx18" name="uprx_checks" type="checkbox" value=18> </td>
628 627 <td> <input id="uprx19" name="uprx_checks" type="checkbox" value=19> </td>
629 628 <td> <input id="uprx20" name="uprx_checks" type="checkbox" value=20> </td>
630 629 </tr>
631 630 <tr>
632 631 <td> <input id="uprx25" name="uprx_checks" type="checkbox" value=25> </td>
633 632 <td> <input id="uprx26" name="uprx_checks" type="checkbox" value=26> </td>
634 633 <td> <input id="uprx27" name="uprx_checks" type="checkbox" value=27> </td>
635 634 <td> <input id="uprx28" name="uprx_checks" type="checkbox" value=28> </td>
636 635 </tr>
637 636 </table>
638 637 </td>
639 638 <td> <b>East Quarter</b>
640 639 <table align="center" class="rx_east_quarter">
641 640 <tr>
642 641 <td> <input id="uprx5" name="uprx_checks" type="checkbox" value=5> </td>
643 642 <td> <input id="uprx6" name="uprx_checks" type="checkbox" value=6> </td>
644 643 <td> <input id="uprx7" name="uprx_checks" type="checkbox" value=7> </td>
645 644 <td> <input id="uprx8" name="uprx_checks" type="checkbox" value=8> </td>
646 645 </tr>
647 646 <tr>
648 647 <td> <input id="uprx13" name="uprx_checks" type="checkbox" value=13> </td>
649 648 <td> <input id="uprx14" name="uprx_checks" type="checkbox" value=14> </td>
650 649 <td> <input id="uprx15" name="uprx_checks" type="checkbox" value=15> </td>
651 650 <td> <input id="uprx16" name="uprx_checks" type="checkbox" value=16></td>
652 651 </tr>
653 652 <tr>
654 653 <td> <input id="uprx21" name="uprx_checks" type="checkbox" value=21> </td>
655 654 <td> <input id="uprx22" name="uprx_checks" type="checkbox" value=22> </td>
656 655 <td> <input id="uprx23" name="uprx_checks" type="checkbox" value=23> </td>
657 656 <td> <input id="uprx24" name="uprx_checks" type="checkbox" value=24> </td>
658 657 </tr>
659 658 <tr>
660 659 <td> <input id="uprx29" name="uprx_checks" type="checkbox" value=29> </td>
661 660 <td> <input id="uprx30" name="uprx_checks" type="checkbox" value=30> </td>
662 661 <td> <input id="uprx31" name="uprx_checks" type="checkbox" value=31> </td>
663 662 <td> <input id="uprx32" name="uprx_checks" type="checkbox" value=32> </td>
664 663 </tr>
665 664 </table>
666 665 </td>
667 666 </tr>
668 667 <tr>
669 668 <td> <b>West Quarter</b>
670 669 <table align="center" class="rx_west_quarter">
671 670 <tr>
672 671 <td> <input id="uprx33" name="uprx_checks" type="checkbox" value=33> </td> <!--class="checkbox-inline"--->
673 672 <td> <input id="uprx34" name="uprx_checks" type="checkbox" value=34> </td>
674 673 <td> <input id="uprx35" name="uprx_checks" type="checkbox" value=35> </td>
675 674 <td> <input id="uprx36" name="uprx_checks" type="checkbox" value=36> </td>
676 675 </tr>
677 676 <tr>
678 677 <td> <input id="uprx41" name="uprx_checks" type="checkbox" value=41> </td>
679 678 <td> <input id="uprx42" name="uprx_checks" type="checkbox" value=42> </td>
680 679 <td> <input id="uprx43" name="uprx_checks" type="checkbox" value=43> </td>
681 680 <td> <input id="uprx44" name="uprx_checks" type="checkbox" value=44> </td>
682 681 </tr>
683 682 <tr>
684 683 <td> <input id="uprx49" name="uprx_checks" type="checkbox" value=49> </td>
685 684 <td> <input id="uprx50" name="uprx_checks" type="checkbox" value=50> </td>
686 685 <td> <input id="uprx51" name="uprx_checks" type="checkbox" value=51> </td>
687 686 <td> <input id="uprx52" name="uprx_checks" type="checkbox" value=52> </td>
688 687 </tr>
689 688 <tr>
690 689 <td> <input id="uprx57" name="uprx_checks" type="checkbox" value=57> </td>
691 690 <td> <input id="uprx58" name="uprx_checks" type="checkbox" value=58> </td>
692 691 <td> <input id="uprx59" name="uprx_checks" type="checkbox" value=59> </td>
693 692 <td> <input id="uprx60" name="uprx_checks" type="checkbox" value=60> </td>
694 693 </tr>
695 694 </table>
696 695 </td>
697 696 <td> <b>South Quarter</b>
698 697 <table align="center" class="rx_south_quarter">
699 698 <tr>
700 699 <td> <input id="uprx37" name="uprx_checks" type="checkbox" value=37> </td>
701 700 <td> <input id="uprx38" name="uprx_checks" type="checkbox" value=38> </td>
702 701 <td> <input id="uprx39" name="uprx_checks" type="checkbox" value=39> </td>
703 702 <td> <input id="uprx40" name="uprx_checks" type="checkbox" value=40> </td>
704 703 </tr>
705 704 <tr>
706 705 <td> <input id="uprx45" name="uprx_checks" type="checkbox" value=45> </td>
707 706 <td> <input id="uprx46" name="uprx_checks" type="checkbox" value=46> </td>
708 707 <td> <input id="uprx47" name="uprx_checks" type="checkbox" value=47> </td>
709 708 <td> <input id="uprx48" name="uprx_checks" type="checkbox" value=48> </td>
710 709 </tr>
711 710 <tr>
712 711 <td> <input id="uprx53" name="uprx_checks" type="checkbox" value=53> </td>
713 712 <td> <input id="uprx54" name="uprx_checks" type="checkbox" value=54> </td>
714 713 <td> <input id="uprx55" name="uprx_checks" type="checkbox" value=55> </td>
715 714 <td> <input id="uprx56" name="uprx_checks" type="checkbox" value=56> </td>
716 715 </tr>
717 716 <tr>
718 717 <td> <input id="uprx61" name="uprx_checks" type="checkbox" value=61> </td>
719 718 <td> <input id="uprx62" name="uprx_checks" type="checkbox" value=62> </td>
720 719 <td> <input id="uprx63" name="uprx_checks" type="checkbox" value=63> </td>
721 720 <td> <input id="uprx64" name="uprx_checks" type="checkbox" value=64> </td>
722 721 </tr>
723 722 </table>
724 723 </td>
725 724 </tr>
726 725 </table>
727 726
728 727
729 728 <div id="id_ues_up" class="container">
730 729 <h5>Ues</h5>
731 730 <div class="col-xs-2">
732 731 <input name="ues_up1" value="{beam.get_up_ues[0]}" class="form-control" id="input1" type="number" step="any">
733 732 </div>
734 733 <div class="col-xs-2">
735 734 <input name="ues_up2" value="{beam.get_up_ues[1]}" class="form-control" id="input2" type="number" step="any">
736 735 </div>
737 736 <div class="col-xs-2">
738 737 <input name="ues_up3" value="{beam.get_up_ues[2]}" class="form-control" id="input3" type="number" step="any">
739 738 </div>
740 739 <div class="col-xs-2">
741 740 <input name="ues_up4" value="{beam.get_up_ues[3]}" class="form-control" id="input4" type="number" step="any">
742 741 </div>
743 742 <div style="vertical-align:center; margin-top:20px;">
744 743 <label class="checkbox-inline"><input name="onlyrx" {checked_onlyrx} style="vertical-align:bottom" id="onlyrx_up" type="checkbox" value=1>Only RX</label>
745 744 </div>
746 745 </div>
747 746
748 747
749 748 </div>
750 749
751 750
752 751
753 752 </div>
754 753 </div>
755 754 '''.format(beam=beam, checked_onlyrx=checked_onlyrx)
756 755
757 756 script = '''
758 757
759 758 <script type="text/javascript">
760 759 $(document).ready(function () {{
761 760
762 761 var antenna_upvalues = {beam.get_upvalues};
763 762 var tx_upvalues = {beam.get_uptx};
764 763 var rx_upvalues = {beam.get_uprx};
765 764
766 765 for (var i = 1, len = 65; i < len; i++) {{
767 766 var abs_select = "abs_value"+i.toString()
768 767 document.getElementById(abs_select).value = antenna_upvalues[i-1];
769 768
770 769 var abs_uptx = "uptx"+i.toString()
771 770 if (tx_upvalues[i-1]==1){{
772 771 document.getElementById(abs_uptx).checked = true;
773 772 }}
774 773
775 774 var abs_uprx = "uprx"+i.toString()
776 775 if (rx_upvalues[i-1]==1){{
777 776 document.getElementById(abs_uprx).checked = true;
778 777 }}
779 778 }}
780 779
781 780
782 781 for (var i = 1, len = 65; i < len; i++) {{
783 782
784 783 }}
785 784
786 785
787 786
788 787 }});
789 788 </script>
790 789
791 790 '''.format(beam=beam)
792 791
793 792 return mark_safe(style+html+script)
794 793
795 794
796 795 class EditDownDataWidget(forms.widgets.TextInput):
797 796
798 797 def render(self, label, value, attrs=None):
799 798
800 799 try:
801 800 beam = attrs.get('beam', value)
802 801 except:
803 802 return
804 803
805 804 checked_onlyrx = ''
806 805 if beam.get_down_onlyrx == True:
807 806 checked_onlyrx = 'checked="True"'
808 807
809 808 html = '''
810 809 <br>
811 810 <div class="panel-group">
812 811 <div style="display: inline-block" id="DOWN" class="panel panel-default">
813 812
814 813 <div class="panel-heading">Down</div>
815 814
816 815
817 816 <div class="panel-body">
818 817
819 818 <table class="abs">
820 819 <tr>
821 820 <td colspan="2"> <b>Antenna</b> </td>
822 821 </tr>
823 822 <tr>
824 823 <td> <b>North Quarter</b>
825 824 <table class="north_quarter">
826 825 <tr>
827 826 <td><select id="abs_dvalue1" name="abs_down1"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
828 827 <td><select id="abs_dvalue2" name="abs_down2"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
829 828 <td><select id="abs_dvalue3" name="abs_down3"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
830 829 <td><select id="abs_dvalue4" name="abs_down4"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
831 830 </tr>
832 831 <tr>
833 832 <td><select id="abs_dvalue9" name="abs_down9"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
834 833 <td><select id="abs_dvalue10" name="abs_down10"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
835 834 <td><select id="abs_dvalue11" name="abs_down11"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
836 835 <td><select id="abs_dvalue12" name="abs_down12"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
837 836 </tr>
838 837 <tr>
839 838 <td><select id="abs_dvalue17" name="abs_down17"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
840 839 <td><select id="abs_dvalue18" name="abs_down18"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
841 840 <td><select id="abs_dvalue19" name="abs_down19"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
842 841 <td><select id="abs_dvalue20" name="abs_down20"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
843 842 </tr>
844 843 <tr>
845 844 <td><select id="abs_dvalue25" name="abs_down25"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
846 845 <td><select id="abs_dvalue26" name="abs_down26"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
847 846 <td><select id="abs_dvalue27" name="abs_down27"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
848 847 <td><select id="abs_dvalue28" name="abs_down28"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
849 848 </tr>
850 849 </table>
851 850 </td>
852 851 <td> <b>East Quarter</b>
853 852 <table class="east_quarter">
854 853 <tr>
855 854 <td><select id="abs_dvalue5" name="abs_down5"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
856 855 <td><select id="abs_dvalue6" name="abs_down6"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
857 856 <td><select id="abs_dvalue7" name="abs_down7"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
858 857 <td><select id="abs_dvalue8" name="abs_down8"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
859 858 </tr>
860 859 <tr>
861 860 <td><select id="abs_dvalue13" name="abs_down13"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
862 861 <td><select id="abs_dvalue14" name="abs_down14"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
863 862 <td><select id="abs_dvalue15" name="abs_down15"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
864 863 <td><select id="abs_dvalue16" name="abs_down16"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
865 864 </tr>
866 865 <tr>
867 866 <td><select id="abs_dvalue21" name="abs_down21"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
868 867 <td><select id="abs_dvalue22" name="abs_down22"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
869 868 <td><select id="abs_dvalue23" name="abs_down23"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
870 869 <td><select id="abs_dvalue24" name="abs_down24"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
871 870 </tr>
872 871 <tr>
873 872 <td><select id="abs_dvalue29" name="abs_down29"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
874 873 <td><select id="abs_dvalue30" name="abs_down30"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
875 874 <td><select id="abs_dvalue31" name="abs_down31"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
876 875 <td><select id="abs_dvalue32" name="abs_down32"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
877 876 </tr>
878 877 </table>
879 878 </td>
880 879 </tr>
881 880 <tr>
882 881 <td> <b>West Quarter</b>
883 882 <table class="west_quarter">
884 883 <tr>
885 884 <td><select id="abs_dvalue33" name="abs_down33"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
886 885 <td><select id="abs_dvalue34" name="abs_down34"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
887 886 <td><select id="abs_dvalue35" name="abs_down35"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
888 887 <td><select id="abs_dvalue36" name="abs_down36"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
889 888 </tr>
890 889 <tr>
891 890 <td><select id="abs_dvalue41" name="abs_down41"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
892 891 <td><select id="abs_dvalue42" name="abs_down42"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
893 892 <td><select id="abs_dvalue43" name="abs_down43"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
894 893 <td><select id="abs_dvalue44" name="abs_down44"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
895 894 </tr>
896 895 <tr>
897 896 <td><select id="abs_dvalue49" name="abs_down49"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
898 897 <td><select id="abs_dvalue50" name="abs_down50"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
899 898 <td><select id="abs_dvalue51" name="abs_down51"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
900 899 <td><select id="abs_dvalue52" name="abs_down52"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
901 900 </tr>
902 901 <tr>
903 902 <td><select id="abs_dvalue57" name="abs_down57"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
904 903 <td><select id="abs_dvalue58" name="abs_down58"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
905 904 <td><select id="abs_dvalue59" name="abs_down59"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
906 905 <td><select id="abs_dvalue60" name="abs_down60"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
907 906 </tr>
908 907 </table>
909 908 </td>
910 909 <td> <b>South Quarter</b>
911 910 <table class="south_quarter">
912 911 <tr>
913 912 <td><select id="abs_dvalue37" name="abs_down37"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
914 913 <td><select id="abs_dvalue38" name="abs_down38"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
915 914 <td><select id="abs_dvalue39" name="abs_down39"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
916 915 <td><select id="abs_dvalue40" name="abs_down40"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
917 916 </tr>
918 917 <tr>
919 918 <td><select id="abs_dvalue45" name="abs_down45"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
920 919 <td><select id="abs_dvalue46" name="abs_down46"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
921 920 <td><select id="abs_dvalue47" name="abs_down47"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
922 921 <td><select id="abs_dvalue48" name="abs_down48"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
923 922 </tr>
924 923 <tr>
925 924 <td><select id="abs_dvalue53" name="abs_down53"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
926 925 <td><select id="abs_dvalue54" name="abs_down54"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
927 926 <td><select id="abs_dvalue55" name="abs_down55"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
928 927 <td><select id="abs_dvalue56" name="abs_down56"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
929 928 </tr>
930 929 <tr>
931 930 <td><select id="abs_dvalue61" name="abs_down61"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
932 931 <td><select id="abs_dvalue62" name="abs_down62"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
933 932 <td><select id="abs_dvalue63" name="abs_down63"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
934 933 <td><select id="abs_dvalue64" name="abs_down64"> <option value=0>0.0</option> <option value=0.5>0.5</option> <option value=1>1.0</option> <option value=1.5>1.5</option> <option value=2>2.0</option> <option value=2.5>2.5</option> <option value=3>3.0</option> <option value=3.5>3.5</option> </select></td>
935 934 </tr>
936 935 </table>
937 936 </td>
938 937 </tr>
939 938 </table>
940 939
941 940
942 941
943 942 <table class="abs_tx">
944 943 <tr>
945 944 <td colspan="2"> <b>TX</b> </td>
946 945 </tr>
947 946 <tr>
948 947 <td> <b>North Quarter</b>
949 948 <table align="center" class="tx_north_quarter">
950 949 <tr>
951 950 <td> <input id="downtx1" name="downtx_checks" type="checkbox" value=1> </td>
952 951 <td> <input id="downtx2" name="downtx_checks" type="checkbox" value=2> </td>
953 952 <td> <input id="downtx3" name="downtx_checks" type="checkbox" value=3> </td>
954 953 <td> <input id="downtx4" name="downtx_checks" type="checkbox" value=4> </td>
955 954 </tr>
956 955 <tr>
957 956 <td> <input id="downtx9" name="downtx_checks" type="checkbox" value=9> </td>
958 957 <td> <input id="downtx10" name="downtx_checks" type="checkbox" value=10> </td>
959 958 <td> <input id="downtx11" name="downtx_checks" type="checkbox" value=11> </td>
960 959 <td> <input id="downtx12" name="downtx_checks" type="checkbox" value=12> </td>
961 960 </tr>
962 961 <tr>
963 962 <td> <input id="downtx17" name="downtx_checks" type="checkbox" value=17> </td>
964 963 <td> <input id="downtx18" name="downtx_checks" type="checkbox" value=18> </td>
965 964 <td> <input id="downtx19" name="downtx_checks" type="checkbox" value=19> </td>
966 965 <td> <input id="downtx20" name="downtx_checks" type="checkbox" value=20> </td>
967 966 </tr>
968 967 <tr>
969 968 <td> <input id="downtx25" name="downtx_checks" type="checkbox" value=25> </td>
970 969 <td> <input id="downtx26" name="downtx_checks" type="checkbox" value=26> </td>
971 970 <td> <input id="downtx27" name="downtx_checks" type="checkbox" value=27> </td>
972 971 <td> <input id="downtx28" name="downtx_checks" type="checkbox" value=28> </td>
973 972 </tr>
974 973 </table>
975 974 </td>
976 975 <td> <b>East Quarter</b>
977 976 <table align="center" class="tx_east_quarter">
978 977 <tr>
979 978 <td> <input id="downtx5" name="downtx_checks" type="checkbox" value=5> </td>
980 979 <td> <input id="downtx6" name="downtx_checks" type="checkbox" value=6> </td>
981 980 <td> <input id="downtx7" name="downtx_checks" type="checkbox" value=7> </td>
982 981 <td> <input id="downtx8" name="downtx_checks" type="checkbox" value=8> </td>
983 982 </tr>
984 983 <tr>
985 984 <td> <input id="downtx13" name="downtx_checks" type="checkbox" value=13> </td>
986 985 <td> <input id="downtx14" name="downtx_checks" type="checkbox" value=14> </td>
987 986 <td> <input id="downtx15" name="downtx_checks" type="checkbox" value=15> </td>
988 987 <td> <input id="downtx16" name="downtx_checks" type="checkbox" value=16> </td>
989 988 </tr>
990 989 <tr>
991 990 <td> <input id="downtx21" name="downtx_checks" type="checkbox" value=21> </td>
992 991 <td> <input id="downtx22" name="downtx_checks" type="checkbox" value=22> </td>
993 992 <td> <input id="downtx23" name="downtx_checks" type="checkbox" value=23> </td>
994 993 <td> <input id="downtx24" name="downtx_checks" type="checkbox" value=24> </td>
995 994 </tr>
996 995 <tr>
997 996 <td> <input id="downtx29" name="downtx_checks" type="checkbox" value=29> </td>
998 997 <td> <input id="downtx30" name="downtx_checks" type="checkbox" value=30> </td>
999 998 <td> <input id="downtx31" name="downtx_checks" type="checkbox" value=31> </td>
1000 999 <td> <input id="downtx32" name="downtx_checks" type="checkbox" value=32> </td>
1001 1000 </tr>
1002 1001 </table>
1003 1002 </td>
1004 1003 </tr>
1005 1004 <tr>
1006 1005 <td> <b>West Quarter</b>
1007 1006 <table align="center" class="tx_west_quarter">
1008 1007 <tr>
1009 1008 <td> <input id="downtx33" name="downtx_checks" type="checkbox" value=33> </td> <!--class="checkbox-inline"--->
1010 1009 <td> <input id="downtx34" name="downtx_checks" type="checkbox" value=34> </td>
1011 1010 <td> <input id="downtx35" name="downtx_checks" type="checkbox" value=35> </td>
1012 1011 <td> <input id="downtx36" name="downtx_checks" type="checkbox" value=36> </td>
1013 1012 </tr>
1014 1013 <tr>
1015 1014 <td> <input id="downtx41" name="downtx_checks" type="checkbox" value=41> </td>
1016 1015 <td> <input id="downtx42" name="downtx_checks" type="checkbox" value=42> </td>
1017 1016 <td> <input id="downtx43" name="downtx_checks" type="checkbox" value=43> </td>
1018 1017 <td> <input id="downtx44"name="downtx_checks" type="checkbox" value=44> </td>
1019 1018 </tr>
1020 1019 <tr>
1021 1020 <td> <input id="downtx49" name="downtx_checks" type="checkbox" value=49> </td>
1022 1021 <td> <input id="downtx50" name="downtx_checks" type="checkbox" value=50> </td>
1023 1022 <td> <input id="downtx51" name="downtx_checks" type="checkbox" value=51> </td>
1024 1023 <td> <input id="downtx52" name="downtx_checks" type="checkbox" value=52> </td>
1025 1024 </tr>
1026 1025 <tr>
1027 1026 <td> <input id="downtx57" name="downtx_checks" type="checkbox" value=57> </td>
1028 1027 <td> <input id="downtx58" name="downtx_checks" type="checkbox" value=58> </td>
1029 1028 <td> <input id="downtx59" name="downtx_checks" type="checkbox" value=59> </td>
1030 1029 <td> <input id="downtx60" name="downtx_checks" type="checkbox" value=60> </td>
1031 1030 </tr>
1032 1031 </table>
1033 1032 </td>
1034 1033 <td> <b>South Quarter</b>
1035 1034 <table align="center" class="tx_south_quarter">
1036 1035 <tr>
1037 1036 <td> <input id="downtx37" name="downtx_checks" type="checkbox" value=37> </td> <!--class="checkbox-inline"--->
1038 1037 <td> <input id="downtx38" name="downtx_checks" type="checkbox" value=38> </td>
1039 1038 <td> <input id="downtx39" name="downtx_checks" type="checkbox" value=39> </td>
1040 1039 <td> <input id="downtx40" name="downtx_checks" type="checkbox" value=40> </td>
1041 1040 </tr>
1042 1041 <tr>
1043 1042 <td> <input id="downtx45" name="downtx_checks" type="checkbox" value=45> </td>
1044 1043 <td> <input id="downtx46" name="downtx_checks" type="checkbox" value=46> </td>
1045 1044 <td> <input id="downtx47" name="downtx_checks" type="checkbox" value=47> </td>
1046 1045 <td> <input id="downtx48" name="downtx_checks" type="checkbox" value=48> </td>
1047 1046 </tr>
1048 1047 <tr>
1049 1048 <td> <input id="downtx53" name="downtx_checks" type="checkbox" value=53> </td>
1050 1049 <td> <input id="downtx54" name="downtx_checks" type="checkbox" value=54> </td>
1051 1050 <td> <input id="downtx55" name="downtx_checks" type="checkbox" value=55> </td>
1052 1051 <td> <input id="downtx56" name="downtx_checks" type="checkbox" value=56> </td>
1053 1052 </tr>
1054 1053 <tr>
1055 1054 <td> <input id="downtx61" name="downtx_checks" type="checkbox" value=61> </td>
1056 1055 <td> <input id="downtx62" name="downtx_checks" type="checkbox" value=62> </td>
1057 1056 <td> <input id="downtx63" name="downtx_checks" type="checkbox" value=63> </td>
1058 1057 <td> <input id="downtx64" name="downtx_checks" type="checkbox" value=64> </td>
1059 1058 </tr>
1060 1059 </table>
1061 1060 </td>
1062 1061 </tr>
1063 1062 </table>
1064 1063
1065 1064 <table class="abs_rx">
1066 1065 <tr>
1067 1066 <td colspan="2"> <b>RX</b> </td>
1068 1067 </tr>
1069 1068 <tr>
1070 1069 <td> <b>North Quarter</b>
1071 1070 <table align="center" class="rx_north_quarter">
1072 1071 <tr>
1073 1072 <td> <input id="downrx1" name="downrx_checks" type="checkbox" value=1> </td>
1074 1073 <td> <input id="downrx2" name="downrx_checks" type="checkbox" value=2> </td>
1075 1074 <td> <input id="downrx3" name="downrx_checks" type="checkbox" value=3> </td>
1076 1075 <td> <input id="downrx4" name="downrx_checks" type="checkbox" value=4> </td>
1077 1076 </tr>
1078 1077 <tr>
1079 1078 <td> <input id="downrx9" name="downrx_checks" type="checkbox" value=9> </td>
1080 1079 <td> <input id="downrx10" name="downrx_checks" type="checkbox" value=10> </td>
1081 1080 <td> <input id="downrx11" name="downrx_checks" type="checkbox" value=11> </td>
1082 1081 <td> <input id="downrx12" name="downrx_checks" type="checkbox" value=12> </td>
1083 1082 </tr>
1084 1083 <tr>
1085 1084 <td> <input id="downrx17" name="downrx_checks" type="checkbox" value=17> </td>
1086 1085 <td> <input id="downrx18" name="downrx_checks" type="checkbox" value=18> </td>
1087 1086 <td> <input id="downrx19" name="downrx_checks" type="checkbox" value=19> </td>
1088 1087 <td> <input id="downrx20" name="downrx_checks" type="checkbox" value=20> </td>
1089 1088 </tr>
1090 1089 <tr>
1091 1090 <td> <input id="downrx25" name="downrx_checks" type="checkbox" value=25> </td>
1092 1091 <td> <input id="downrx26" name="downrx_checks" type="checkbox" value=26> </td>
1093 1092 <td> <input id="downrx27" name="downrx_checks" type="checkbox" value=27> </td>
1094 1093 <td> <input id="downrx28" name="downrx_checks" type="checkbox" value=28> </td>
1095 1094 </tr>
1096 1095 </table>
1097 1096 </td>
1098 1097 <td> <b>East Quarter</b>
1099 1098 <table align="center" class="rx_east_quarter">
1100 1099 <tr>
1101 1100 <td> <input id="downrx5" name="downrx_checks" type="checkbox" value=5> </td>
1102 1101 <td> <input id="downrx6" name="downrx_checks" type="checkbox" value=6> </td>
1103 1102 <td> <input id="downrx7" name="downrx_checks" type="checkbox" value=7> </td>
1104 1103 <td> <input id="downrx8" name="downrx_checks" type="checkbox" value=8> </td>
1105 1104 </tr>
1106 1105 <tr>
1107 1106 <td> <input id="downrx13" name="downrx_checks" type="checkbox" value=13> </td>
1108 1107 <td> <input id="downrx14" name="downrx_checks" type="checkbox" value=14> </td>
1109 1108 <td> <input id="downrx15" name="downrx_checks" type="checkbox" value=15> </td>
1110 1109 <td> <input id="downrx16" name="downrx_checks" type="checkbox" value=16> </td>
1111 1110 </tr>
1112 1111 <tr>
1113 1112 <td> <input id="downrx21" name="downrx_checks" type="checkbox" value=21> </td>
1114 1113 <td> <input id="downrx22" name="downrx_checks" type="checkbox" value=22> </td>
1115 1114 <td> <input id="downrx23" name="downrx_checks" type="checkbox" value=23> </td>
1116 1115 <td> <input id="downrx24" name="downrx_checks" type="checkbox" value=24> </td>
1117 1116 </tr>
1118 1117 <tr>
1119 1118 <td> <input id="downrx29" name="downrx_checks" type="checkbox" value=29> </td>
1120 1119 <td> <input id="downrx30" name="downrx_checks" type="checkbox" value=30> </td>
1121 1120 <td> <input id="downrx31" name="downrx_checks" type="checkbox" value=31> </td>
1122 1121 <td> <input id="downrx32" name="downrx_checks" type="checkbox" value=32> </td>
1123 1122 </tr>
1124 1123 </table>
1125 1124 </td>
1126 1125 </tr>
1127 1126 <tr>
1128 1127 <td> <b>West Quarter</b>
1129 1128 <table align="center" class="rx_west_quarter">
1130 1129 <tr>
1131 1130 <td> <input id="downrx33" name="downrx_checks" type="checkbox" value=33> </td>
1132 1131 <td> <input id="downrx34" name="downrx_checks" type="checkbox" value=34> </td>
1133 1132 <td> <input id="downrx35" name="downrx_checks" type="checkbox" value=35> </td>
1134 1133 <td> <input id="downrx36" name="downrx_checks" type="checkbox" value=36> </td>
1135 1134 </tr>
1136 1135 <tr>
1137 1136 <td> <input id="downrx41" name="downrx_checks" type="checkbox" value=41> </td>
1138 1137 <td> <input id="downrx42" name="downrx_checks" type="checkbox" value=42> </td>
1139 1138 <td> <input id="downrx43" name="downrx_checks" type="checkbox" value=43> </td>
1140 1139 <td> <input id="downrx44" name="downrx_checks" type="checkbox" value=44> </td>
1141 1140 </tr>
1142 1141 <tr>
1143 1142 <td> <input id="downrx49" name="downrx_checks" type="checkbox" value=49> </td>
1144 1143 <td> <input id="downrx50" name="downrx_checks" type="checkbox" value=50> </td>
1145 1144 <td> <input id="downrx51" name="downrx_checks" type="checkbox" value=51> </td>
1146 1145 <td> <input id="downrx52" name="downrx_checks" type="checkbox" value=52> </td>
1147 1146 </tr>
1148 1147 <tr>
1149 1148 <td> <input id="downrx57" name="downrx_checks" type="checkbox" value=57> </td>
1150 1149 <td> <input id="downrx58" name="downrx_checks" type="checkbox" value=58> </td>
1151 1150 <td> <input id="downrx59" name="downrx_checks" type="checkbox" value=59> </td>
1152 1151 <td> <input id="downrx60" name="downrx_checks" type="checkbox" value=60> </td>
1153 1152 </tr>
1154 1153 </table>
1155 1154 </td>
1156 1155 <td> <b>South Quarter</b>
1157 1156 <table align="center" class="rx_south_quarter">
1158 1157 <tr>
1159 1158 <td> <input id="downrx37" name="downrx_checks" type="checkbox" value=37> </td>
1160 1159 <td> <input id="downrx38" name="downrx_checks" type="checkbox" value=38> </td>
1161 1160 <td> <input id="downrx39" name="downrx_checks" type="checkbox" value=39> </td>
1162 1161 <td> <input id="downrx40" name="downrx_checks" type="checkbox" value=40> </td>
1163 1162 </tr>
1164 1163 <tr>
1165 1164 <td> <input id="downrx45" name="downrx_checks" type="checkbox" value=45> </td>
1166 1165 <td> <input id="downrx46" name="downrx_checks" type="checkbox" value=46> </td>
1167 1166 <td> <input id="downrx47" name="downrx_checks" type="checkbox" value=47> </td>
1168 1167 <td> <input id="downrx48" name="downrx_checks" type="checkbox" value=48> </td>
1169 1168 </tr>
1170 1169 <tr>
1171 1170 <td> <input id="downrx53" name="downrx_checks" type="checkbox" value=53> </td>
1172 1171 <td> <input id="downrx54" name="downrx_checks" type="checkbox" value=54> </td>
1173 1172 <td> <input id="downrx55" name="downrx_checks" type="checkbox" value=55> </td>
1174 1173 <td> <input id="downrx56" name="downrx_checks" type="checkbox" value=56> </td>
1175 1174 </tr>
1176 1175 <tr>
1177 1176 <td> <input id="downrx61" name="downrx_checks" type="checkbox" value=61> </td>
1178 1177 <td> <input id="downrx62" name="downrx_checks" type="checkbox" value=62> </td>
1179 1178 <td> <input id="downrx63" name="downrx_checks" type="checkbox" value=63> </td>
1180 1179 <td> <input id="downrx64" name="downrx_checks" type="checkbox" value=64> </td>
1181 1180 </tr>
1182 1181 </table>
1183 1182 </td>
1184 1183 </tr>
1185 1184 </table>
1186 1185
1187 1186
1188 1187 <div id="id_ues_down" class="container">
1189 1188 <h5>Ues</h5>
1190 1189 <div class="col-xs-2">
1191 1190 <input name="ues_down1" value="{beam.get_down_ues[0]}" class="form-control" id="input1_down" type="number" step="any">
1192 1191 </div>
1193 1192 <div class="col-xs-2">
1194 1193 <input name="ues_down2" value="{beam.get_down_ues[1]}" class="form-control" id="input2_down" type="number" step="any">
1195 1194 </div>
1196 1195 <div class="col-xs-2">
1197 1196 <input name="ues_down3" value="{beam.get_down_ues[2]}" class="form-control" id="input3_down" type="number" step="any">
1198 1197 </div>
1199 1198 <div class="col-xs-2">
1200 1199 <input name="ues_down4" value="{beam.get_down_ues[3]}" class="form-control" id="input4_down" type="number" step="any">
1201 1200 </div>
1202 1201 <div style="vertical-align:center; margin-top:20px;">
1203 1202 <label class="checkbox-inline"><input style="vertical-align:bottom" {checked_onlyrx} name="onlyrx" id="onlyrx_down" type="checkbox" value=2>Only RX</label>
1204 1203 </div>
1205 1204 </div>
1206 1205
1207 1206
1208 1207 </div>
1209 1208
1210 1209
1211 1210 </div>
1212 1211 </div>
1213 1212 '''.format(beam=beam, checked_onlyrx=checked_onlyrx)
1214 1213
1215 1214 script = '''
1216 1215
1217 1216 <script type="text/javascript">
1218 1217 $(document).ready(function () {{
1219 1218 var antenna_downvalues = {beam.get_downvalues};
1220 1219 var tx_downvalues = {beam.get_downtx};
1221 1220 var rx_downvalues = {beam.get_downrx};
1222 1221
1223 1222 for (var i = 1, len = 65; i < len; i++) {{
1224 1223 var abs_dselect = "abs_dvalue"+i.toString()
1225 1224 document.getElementById(abs_dselect).value = antenna_downvalues[i-1];
1226 1225
1227 1226 var abs_downtx = "downtx"+i.toString()
1228 1227 if (tx_downvalues[i-1]==1){{
1229 1228 document.getElementById(abs_downtx).checked = true;
1230 1229 }}
1231 1230
1232 1231 var abs_downrx = "downrx"+i.toString()
1233 1232 if (rx_downvalues[i-1]==1){{
1234 1233 document.getElementById(abs_downrx).checked = true;
1235 1234 }}
1236 1235 }}
1237 1236
1238 1237 }});
1239 1238 </script>
1240 1239
1241 1240 '''.format(beam=beam)
1242 1241
1243 1242
1244 1243
1245 1244 return mark_safe(style+html+script)
1246 1245
1247 1246
1248 1247
1249 1248 class UpDataWidget(forms.widgets.TextInput):
1250 1249
1251 1250 def render(self, label, value, attrs=None):
1252 1251
1253 1252
1254 1253 html = '''
1255 1254
1256 1255 <div class="container">
1257 1256 <div style="display:inline-block">
1258 1257 Name:
1259 1258 <label style="display:inline-block"><input value="Beam" style="display:inline-block" name="beam_name" class="form-control" id="id_name" type="text"></label>
1260 1259 </div>
1261 1260 </div>
1262 1261
1263 1262 <br>
1264 1263 <div class="panel-group">
1265 1264 <div style="display: inline-block" id="UP" class="panel panel-default">
1266 1265
1267 1266 <div class="panel-heading">UP</div>
1268 1267
1269 1268
1270 1269 <div class="panel-body">
1271 1270
1272 1271 <table class="abs">
1273 1272 <tr>
1274 1273 <td colspan="2"> <b>Antenna</b> </td>
1275 1274 </tr>
1276 1275 <tr>
1277 1276 <td> <b>North Quarter</b>
1278 1277 <table class="north_quarter">
1279 1278 <tr>
1280 1279 <td><select name="abs_up1"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1281 1280 <td><select name="abs_up2"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1282 1281 <td><select name="abs_up3"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1283 1282 <td><select name="abs_up4"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1284 1283 </tr>
1285 1284 <tr>
1286 1285 <td><select name="abs_up9"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1287 1286 <td><select name="abs_up10"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1288 1287 <td><select name="abs_up11"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1289 1288 <td><select name="abs_up12"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1290 1289 </tr>
1291 1290 <tr>
1292 1291 <td><select name="abs_up17"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1293 1292 <td><select name="abs_up18"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1294 1293 <td><select name="abs_up19"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1295 1294 <td><select name="abs_up20"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1296 1295 </tr>
1297 1296 <tr>
1298 1297 <td><select name="abs_up25"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1299 1298 <td><select name="abs_up26"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1300 1299 <td><select name="abs_up27"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1301 1300 <td><select name="abs_up28"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1302 1301 </tr>
1303 1302 </table>
1304 1303 </td>
1305 1304 <td> <b>East Quarter</b>
1306 1305 <table class="east_quarter">
1307 1306 <tr>
1308 1307 <td><select name="abs_up5"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1309 1308 <td><select name="abs_up6"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1310 1309 <td><select name="abs_up7"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1311 1310 <td><select name="abs_up8"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1312 1311 </tr>
1313 1312 <tr>
1314 1313 <td><select name="abs_up13"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1315 1314 <td><select name="abs_up14"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1316 1315 <td><select name="abs_up15"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1317 1316 <td><select name="abs_up16"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1318 1317 </tr>
1319 1318 <tr>
1320 1319 <td><select name="abs_up21"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1321 1320 <td><select name="abs_up22"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1322 1321 <td><select name="abs_up23"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1323 1322 <td><select name="abs_up24"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1324 1323 </tr>
1325 1324 <tr>
1326 1325 <td><select name="abs_up29"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1327 1326 <td><select name="abs_up30"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1328 1327 <td><select name="abs_up31"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1329 1328 <td><select name="abs_up32"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1330 1329 </tr>
1331 1330 </table>
1332 1331 </td>
1333 1332 </tr>
1334 1333 <tr>
1335 1334 <td> <b>West Quarter</b>
1336 1335 <table class="west_quarter">
1337 1336 <tr>
1338 1337 <td><select name="abs_up33"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1339 1338 <td><select name="abs_up34"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1340 1339 <td><select name="abs_up35"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1341 1340 <td><select name="abs_up36"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1342 1341 </tr>
1343 1342 <tr>
1344 1343 <td><select name="abs_up41"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1345 1344 <td><select name="abs_up42"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1346 1345 <td><select name="abs_up43"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1347 1346 <td><select name="abs_up44"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1348 1347 </tr>
1349 1348 <tr>
1350 1349 <td><select name="abs_up49"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1351 1350 <td><select name="abs_up50"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1352 1351 <td><select name="abs_up51"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1353 1352 <td><select name="abs_up52"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1354 1353 </tr>
1355 1354 <tr>
1356 1355 <td><select name="abs_up57"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1357 1356 <td><select name="abs_up58"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1358 1357 <td><select name="abs_up59"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1359 1358 <td><select name="abs_up60"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1360 1359 </tr>
1361 1360 </table>
1362 1361 </td>
1363 1362 <td> <b>South Quarter</b>
1364 1363 <table class="south_quarter">
1365 1364 <tr>
1366 1365 <td><select name="abs_up37"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1367 1366 <td><select name="abs_up38"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1368 1367 <td><select name="abs_up39"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1369 1368 <td><select name="abs_up40"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1370 1369 </tr>
1371 1370 <tr>
1372 1371 <td><select name="abs_up45"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1373 1372 <td><select name="abs_up46"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1374 1373 <td><select name="abs_up47"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1375 1374 <td><select name="abs_up48"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1376 1375 </tr>
1377 1376 <tr>
1378 1377 <td><select name="abs_up53"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1379 1378 <td><select name="abs_up54"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1380 1379 <td><select name="abs_up55"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1381 1380 <td><select name="abs_up56"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1382 1381 </tr>
1383 1382 <tr>
1384 1383 <td><select name="abs_up61"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1385 1384 <td><select name="abs_up62"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1386 1385 <td><select name="abs_up63"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1387 1386 <td><select name="abs_up64"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1388 1387 </tr>
1389 1388 </table>
1390 1389 </td>
1391 1390 </tr>
1392 1391 </table>
1393 1392
1394 1393
1395 1394
1396 1395 <table class="abs_tx">
1397 1396 <tr>
1398 1397 <td colspan="2"> <b>TX</b> </td>
1399 1398 </tr>
1400 1399 <tr>
1401 1400 <td> <b>North Quarter</b>
1402 1401 <table align="center" class="tx_north_quarter">
1403 1402 <tr>
1404 1403 <td> <input name="uptx_checks" type="checkbox" value=1> </td>
1405 1404 <td> <input name="uptx_checks" type="checkbox" value=2> </td>
1406 1405 <td> <input name="uptx_checks" type="checkbox" value=3> </td>
1407 1406 <td> <input name="uptx_checks" type="checkbox" value=4> </td>
1408 1407 </tr>
1409 1408 <tr>
1410 1409 <td> <input name="uptx_checks" type="checkbox" value=9> </td>
1411 1410 <td> <input name="uptx_checks" type="checkbox" value=10> </td>
1412 1411 <td> <input name="uptx_checks" type="checkbox" value=11> </td>
1413 1412 <td> <input name="uptx_checks" type="checkbox" value=12> </td>
1414 1413 </tr>
1415 1414 <tr>
1416 1415 <td> <input name="uptx_checks" type="checkbox" value=17> </td>
1417 1416 <td> <input name="uptx_checks" type="checkbox" value=18> </td>
1418 1417 <td> <input name="uptx_checks" type="checkbox" value=19> </td>
1419 1418 <td> <input name="uptx_checks" type="checkbox" value=20> </td>
1420 1419 </tr>
1421 1420 <tr>
1422 1421 <td> <input name="uptx_checks" type="checkbox" value=25> </td>
1423 1422 <td> <input name="uptx_checks" type="checkbox" value=26> </td>
1424 1423 <td> <input name="uptx_checks" type="checkbox" value=27> </td>
1425 1424 <td> <input name="uptx_checks" type="checkbox" value=28> </td>
1426 1425 </tr>
1427 1426 </table>
1428 1427 </td>
1429 1428 <td> <b>East Quarter</b>
1430 1429 <table align="center" class="tx_east_quarter">
1431 1430 <tr>
1432 1431 <td> <input name="uptx_checks" type="checkbox" value=5> </td>
1433 1432 <td> <input name="uptx_checks" type="checkbox" value=6> </td>
1434 1433 <td> <input name="uptx_checks" type="checkbox" value=7> </td>
1435 1434 <td> <input name="uptx_checks" type="checkbox" value=8> </td>
1436 1435 </tr>
1437 1436 <tr>
1438 1437 <td> <input name="uptx_checks" type="checkbox" value=13> </td>
1439 1438 <td> <input name="uptx_checks" type="checkbox" value=14> </td>
1440 1439 <td> <input name="uptx_checks" type="checkbox" value=15> </td>
1441 1440 <td> <input name="uptx_checks" type="checkbox" value=16></td>
1442 1441 </tr>
1443 1442 <tr>
1444 1443 <td> <input name="uptx_checks" type="checkbox" value=21> </td>
1445 1444 <td> <input name="uptx_checks" type="checkbox" value=22> </td>
1446 1445 <td> <input name="uptx_checks" type="checkbox" value=23> </td>
1447 1446 <td> <input name="uptx_checks" type="checkbox" value=24> </td>
1448 1447 </tr>
1449 1448 <tr>
1450 1449 <td> <input name="uptx_checks" type="checkbox" value=29> </td>
1451 1450 <td> <input name="uptx_checks" type="checkbox" value=30> </td>
1452 1451 <td> <input name="uptx_checks" type="checkbox" value=31> </td>
1453 1452 <td> <input name="uptx_checks" type="checkbox" value=32> </td>
1454 1453 </tr>
1455 1454 </table>
1456 1455 </td>
1457 1456 </tr>
1458 1457 <tr>
1459 1458 <td> <b>West Quarter</b>
1460 1459 <table align="center" class="tx_west_quarter">
1461 1460 <tr>
1462 1461 <td> <input name="uptx_checks" type="checkbox" value=33> </td> <!--class="checkbox-inline"--->
1463 1462 <td> <input name="uptx_checks" type="checkbox" value=34> </td>
1464 1463 <td> <input name="uptx_checks" type="checkbox" value=35> </td>
1465 1464 <td> <input name="uptx_checks" type="checkbox" value=36> </td>
1466 1465 </tr>
1467 1466 <tr>
1468 1467 <td> <input name="uptx_checks" type="checkbox" value=41> </td>
1469 1468 <td> <input name="uptx_checks" type="checkbox" value=42> </td>
1470 1469 <td> <input name="uptx_checks" type="checkbox" value=43> </td>
1471 1470 <td> <input name="uptx_checks" type="checkbox" value=44> </td>
1472 1471 </tr>
1473 1472 <tr>
1474 1473 <td> <input name="uptx_checks" type="checkbox" value=49> </td>
1475 1474 <td> <input name="uptx_checks" type="checkbox" value=50> </td>
1476 1475 <td> <input name="uptx_checks" type="checkbox" value=51> </td>
1477 1476 <td> <input name="uptx_checks" type="checkbox" value=52> </td>
1478 1477 </tr>
1479 1478 <tr>
1480 1479 <td> <input name="uptx_checks" type="checkbox" value=57> </td>
1481 1480 <td> <input name="uptx_checks" type="checkbox" value=58> </td>
1482 1481 <td> <input name="uptx_checks" type="checkbox" value=59> </td>
1483 1482 <td> <input name="uptx_checks" type="checkbox" value=60> </td>
1484 1483 </tr>
1485 1484 </table>
1486 1485 </td>
1487 1486 <td> <b>South Quarter</b>
1488 1487 <table align="center" class="tx_south_quarter">
1489 1488 <tr>
1490 1489 <td> <input name="uptx_checks" type="checkbox" value=37> </td>
1491 1490 <td> <input name="uptx_checks" type="checkbox" value=38> </td>
1492 1491 <td> <input name="uptx_checks" type="checkbox" value=39> </td>
1493 1492 <td> <input name="uptx_checks" type="checkbox" value=40> </td>
1494 1493 </tr>
1495 1494 <tr>
1496 1495 <td> <input name="uptx_checks" type="checkbox" value=45> </td>
1497 1496 <td> <input name="uptx_checks" type="checkbox" value=46> </td>
1498 1497 <td> <input name="uptx_checks" type="checkbox" value=47> </td>
1499 1498 <td> <input name="uptx_checks" type="checkbox" value=48> </td>
1500 1499 </tr>
1501 1500 <tr>
1502 1501 <td> <input name="uptx_checks" type="checkbox" value=53> </td>
1503 1502 <td> <input name="uptx_checks" type="checkbox" value=54> </td>
1504 1503 <td> <input name="uptx_checks" type="checkbox" value=55> </td>
1505 1504 <td> <input name="uptx_checks" type="checkbox" value=56> </td>
1506 1505 </tr>
1507 1506 <tr>
1508 1507 <td> <input name="uptx_checks" type="checkbox" value=61> </td>
1509 1508 <td> <input name="uptx_checks" type="checkbox" value=62> </td>
1510 1509 <td> <input name="uptx_checks" type="checkbox" value=63> </td>
1511 1510 <td> <input name="uptx_checks" type="checkbox" value=64> </td>
1512 1511 </tr>
1513 1512 </table>
1514 1513 </td>
1515 1514 </tr>
1516 1515 </table>
1517 1516
1518 1517 <table class="abs_rx">
1519 1518 <tr>
1520 1519 <td colspan="2"> <b>RX</b> </td>
1521 1520 </tr>
1522 1521 <tr>
1523 1522 <td> <b>North Quarter</b>
1524 1523 <table align="center" class="rx_north_quarter">
1525 1524 <tr>
1526 1525 <td> <input name="uprx_checks" type="checkbox" value=1> </td>
1527 1526 <td> <input name="uprx_checks" type="checkbox" value=2> </td>
1528 1527 <td> <input name="uprx_checks" type="checkbox" value=3> </td>
1529 1528 <td> <input name="uprx_checks" type="checkbox" value=4> </td>
1530 1529 </tr>
1531 1530 <tr>
1532 1531 <td> <input name="uprx_checks" type="checkbox" value=9> </td>
1533 1532 <td> <input name="uprx_checks" type="checkbox" value=10> </td>
1534 1533 <td> <input name="uprx_checks" type="checkbox" value=11> </td>
1535 1534 <td> <input name="uprx_checks" type="checkbox" value=12> </td>
1536 1535 </tr>
1537 1536 <tr>
1538 1537 <td> <input name="uprx_checks" type="checkbox" value=17> </td>
1539 1538 <td> <input name="uprx_checks" type="checkbox" value=18> </td>
1540 1539 <td> <input name="uprx_checks" type="checkbox" value=19> </td>
1541 1540 <td> <input name="uprx_checks" type="checkbox" value=20> </td>
1542 1541 </tr>
1543 1542 <tr>
1544 1543 <td> <input name="uprx_checks" type="checkbox" value=25> </td>
1545 1544 <td> <input name="uprx_checks" type="checkbox" value=26> </td>
1546 1545 <td> <input name="uprx_checks" type="checkbox" value=27> </td>
1547 1546 <td> <input name="uprx_checks" type="checkbox" value=28> </td>
1548 1547 </tr>
1549 1548 </table>
1550 1549 </td>
1551 1550 <td> <b>East Quarter</b>
1552 1551 <table align="center" class="rx_east_quarter">
1553 1552 <tr>
1554 1553 <td> <input name="uprx_checks" type="checkbox" value=5> </td>
1555 1554 <td> <input name="uprx_checks" type="checkbox" value=6> </td>
1556 1555 <td> <input name="uprx_checks" type="checkbox" value=7> </td>
1557 1556 <td> <input name="uprx_checks" type="checkbox" value=8> </td>
1558 1557 </tr>
1559 1558 <tr>
1560 1559 <td> <input name="uprx_checks" type="checkbox" value=13> </td>
1561 1560 <td> <input name="uprx_checks" type="checkbox" value=14> </td>
1562 1561 <td> <input name="uprx_checks" type="checkbox" value=15> </td>
1563 1562 <td> <input name="uprx_checks" type="checkbox" value=16></td>
1564 1563 </tr>
1565 1564 <tr>
1566 1565 <td> <input name="uprx_checks" type="checkbox" value=21> </td>
1567 1566 <td> <input name="uprx_checks" type="checkbox" value=22> </td>
1568 1567 <td> <input name="uprx_checks" type="checkbox" value=23> </td>
1569 1568 <td> <input name="uprx_checks" type="checkbox" value=24> </td>
1570 1569 </tr>
1571 1570 <tr>
1572 1571 <td> <input name="uprx_checks" type="checkbox" value=29> </td>
1573 1572 <td> <input name="uprx_checks" type="checkbox" value=30> </td>
1574 1573 <td> <input name="uprx_checks" type="checkbox" value=31> </td>
1575 1574 <td> <input name="uprx_checks" type="checkbox" value=32> </td>
1576 1575 </tr>
1577 1576 </table>
1578 1577 </td>
1579 1578 </tr>
1580 1579 <tr>
1581 1580 <td> <b>West Quarter</b>
1582 1581 <table align="center" class="rx_west_quarter">
1583 1582 <tr>
1584 1583 <td> <input name="uprx_checks" type="checkbox" value=33> </td> <!--class="checkbox-inline"--->
1585 1584 <td> <input name="uprx_checks" type="checkbox" value=34> </td>
1586 1585 <td> <input name="uprx_checks" type="checkbox" value=35> </td>
1587 1586 <td> <input name="uprx_checks" type="checkbox" value=36> </td>
1588 1587 </tr>
1589 1588 <tr>
1590 1589 <td> <input name="uprx_checks" type="checkbox" value=41> </td>
1591 1590 <td> <input name="uprx_checks" type="checkbox" value=42> </td>
1592 1591 <td> <input name="uprx_checks" type="checkbox" value=43> </td>
1593 1592 <td> <input name="uprx_checks" type="checkbox" value=44> </td>
1594 1593 </tr>
1595 1594 <tr>
1596 1595 <td> <input name="uprx_checks" type="checkbox" value=49> </td>
1597 1596 <td> <input name="uprx_checks" type="checkbox" value=50> </td>
1598 1597 <td> <input name="uprx_checks" type="checkbox" value=51> </td>
1599 1598 <td> <input name="uprx_checks" type="checkbox" value=52> </td>
1600 1599 </tr>
1601 1600 <tr>
1602 1601 <td> <input name="uprx_checks" type="checkbox" value=57> </td>
1603 1602 <td> <input name="uprx_checks" type="checkbox" value=58> </td>
1604 1603 <td> <input name="uprx_checks" type="checkbox" value=59> </td>
1605 1604 <td> <input name="uprx_checks" type="checkbox" value=60> </td>
1606 1605 </tr>
1607 1606 </table>
1608 1607 </td>
1609 1608 <td> <b>South Quarter</b>
1610 1609 <table align="center" class="rx_south_quarter">
1611 1610 <tr>
1612 1611 <td> <input name="uprx_checks" type="checkbox" value=37> </td>
1613 1612 <td> <input name="uprx_checks" type="checkbox" value=38> </td>
1614 1613 <td> <input name="uprx_checks" type="checkbox" value=39> </td>
1615 1614 <td> <input name="uprx_checks" type="checkbox" value=40> </td>
1616 1615 </tr>
1617 1616 <tr>
1618 1617 <td> <input name="uprx_checks" type="checkbox" value=45> </td>
1619 1618 <td> <input name="uprx_checks" type="checkbox" value=46> </td>
1620 1619 <td> <input name="uprx_checks" type="checkbox" value=47> </td>
1621 1620 <td> <input name="uprx_checks" type="checkbox" value=48> </td>
1622 1621 </tr>
1623 1622 <tr>
1624 1623 <td> <input name="uprx_checks" type="checkbox" value=53> </td>
1625 1624 <td> <input name="uprx_checks" type="checkbox" value=54> </td>
1626 1625 <td> <input name="uprx_checks" type="checkbox" value=55> </td>
1627 1626 <td> <input name="uprx_checks" type="checkbox" value=56> </td>
1628 1627 </tr>
1629 1628 <tr>
1630 1629 <td> <input name="uprx_checks" type="checkbox" value=61> </td>
1631 1630 <td> <input name="uprx_checks" type="checkbox" value=62> </td>
1632 1631 <td> <input name="uprx_checks" type="checkbox" value=63> </td>
1633 1632 <td> <input name="uprx_checks" type="checkbox" value=64> </td>
1634 1633 </tr>
1635 1634 </table>
1636 1635 </td>
1637 1636 </tr>
1638 1637 </table>
1639 1638
1640 1639
1641 1640 <div id="id_ues_up" class="container">
1642 1641 <h5>Ues</h5>
1643 1642 <div class="col-xs-2">
1644 1643 <input name="ues_up1" value="0" class="form-control" id="input1" type="number" step="any">
1645 1644 </div>
1646 1645 <div class="col-xs-2">
1647 1646 <input name="ues_up2" value="0" class="form-control" id="input2" type="number" step="any">
1648 1647 </div>
1649 1648 <div class="col-xs-2">
1650 1649 <input name="ues_up3" value="0" class="form-control" id="input3" type="number" step="any">
1651 1650 </div>
1652 1651 <div class="col-xs-2">
1653 1652 <input name="ues_up4" value="0" class="form-control" id="input4" type="number" step="any">
1654 1653 </div>
1655 1654 <div style="vertical-align:center; margin-top:20px;">
1656 1655 <label class="checkbox-inline"><input name="onlyrx" style="vertical-align:bottom" id="onlyrx_up" type="checkbox" value=1>Only RX</label>
1657 1656 </div>
1658 1657 </div>
1659 1658
1660 1659
1661 1660 </div>
1662 1661
1663 1662
1664 1663 </div>
1665 1664 </div>
1666 1665 '''
1667 1666
1668 1667 script = '''
1669 1668
1670 1669 '''
1671 1670
1672 1671 return mark_safe(style+html+script)
1673 1672
1674 1673
1675 1674 class DownDataWidget(forms.widgets.TextInput):
1676 1675
1677 1676 def render(self, label, value, attrs=None):
1678 1677
1679 1678 html = '''
1680 1679 <br>
1681 1680 <div class="panel-group">
1682 1681 <div style="display: inline-block" id="DOWN" class="panel panel-default">
1683 1682
1684 1683 <div class="panel-heading">Down</div>
1685 1684
1686 1685
1687 1686 <div class="panel-body">
1688 1687
1689 1688 <table class="abs">
1690 1689 <tr>
1691 1690 <td colspan="2"> <b>Antenna</b> </td>
1692 1691 </tr>
1693 1692 <tr>
1694 1693 <td> <b>North Quarter</b>
1695 1694 <table class="north_quarter">
1696 1695 <tr>
1697 1696 <td><select name="abs_down1"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1698 1697 <td><select name="abs_down2"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1699 1698 <td><select name="abs_down3"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1700 1699 <td><select name="abs_down4"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1701 1700 </tr>
1702 1701 <tr>
1703 1702 <td><select name="abs_down9"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1704 1703 <td><select name="abs_down10"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1705 1704 <td><select name="abs_down11"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1706 1705 <td><select name="abs_down12"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1707 1706 </tr>
1708 1707 <tr>
1709 1708 <td><select name="abs_down17"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1710 1709 <td><select name="abs_down18"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1711 1710 <td><select name="abs_down19"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1712 1711 <td><select name="abs_down20"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1713 1712 </tr>
1714 1713 <tr>
1715 1714 <td><select name="abs_down25"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1716 1715 <td><select name="abs_down26"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1717 1716 <td><select name="abs_down27"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1718 1717 <td><select name="abs_down28"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1719 1718 </tr>
1720 1719 </table>
1721 1720 </td>
1722 1721 <td> <b>East Quarter</b>
1723 1722 <table class="east_quarter">
1724 1723 <tr>
1725 1724 <td><select name="abs_down5"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1726 1725 <td><select name="abs_down6"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1727 1726 <td><select name="abs_down7"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1728 1727 <td><select name="abs_down8"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1729 1728 </tr>
1730 1729 <tr>
1731 1730 <td><select name="abs_down13"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1732 1731 <td><select name="abs_down14"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1733 1732 <td><select name="abs_down15"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1734 1733 <td><select name="abs_down16"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1735 1734 </tr>
1736 1735 <tr>
1737 1736 <td><select name="abs_down21"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1738 1737 <td><select name="abs_down22"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1739 1738 <td><select name="abs_down23"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1740 1739 <td><select name="abs_down24"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1741 1740 </tr>
1742 1741 <tr>
1743 1742 <td><select name="abs_down29"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1744 1743 <td><select name="abs_down30"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1745 1744 <td><select name="abs_down31"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1746 1745 <td><select name="abs_down32"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1747 1746 </tr>
1748 1747 </table>
1749 1748 </td>
1750 1749 </tr>
1751 1750 <tr>
1752 1751 <td> <b>West Quarter</b>
1753 1752 <table class="west_quarter">
1754 1753 <tr>
1755 1754 <td><select name="abs_down33"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1756 1755 <td><select name="abs_down34"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1757 1756 <td><select name="abs_down35"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1758 1757 <td><select name="abs_down36"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1759 1758 </tr>
1760 1759 <tr>
1761 1760 <td><select name="abs_down41"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1762 1761 <td><select name="abs_down42"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1763 1762 <td><select name="abs_down43"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1764 1763 <td><select name="abs_down44"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1765 1764 </tr>
1766 1765 <tr>
1767 1766 <td><select name="abs_down49"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1768 1767 <td><select name="abs_down50"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1769 1768 <td><select name="abs_down51"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1770 1769 <td><select name="abs_down52"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1771 1770 </tr>
1772 1771 <tr>
1773 1772 <td><select name="abs_down57"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1774 1773 <td><select name="abs_down58"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1775 1774 <td><select name="abs_down59"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1776 1775 <td><select name="abs_down60"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1777 1776 </tr>
1778 1777 </table>
1779 1778 </td>
1780 1779 <td> <b>South Quarter</b>
1781 1780 <table class="south_quarter">
1782 1781 <tr>
1783 1782 <td><select name="abs_down37"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1784 1783 <td><select name="abs_down38"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1785 1784 <td><select name="abs_down39"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1786 1785 <td><select name="abs_down40"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1787 1786 </tr>
1788 1787 <tr>
1789 1788 <td><select name="abs_down45"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1790 1789 <td><select name="abs_down46"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1791 1790 <td><select name="abs_down47"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1792 1791 <td><select name="abs_down48"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1793 1792 </tr>
1794 1793 <tr>
1795 1794 <td><select name="abs_down53"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1796 1795 <td><select name="abs_down54"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1797 1796 <td><select name="abs_down55"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1798 1797 <td><select name="abs_down56"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1799 1798 </tr>
1800 1799 <tr>
1801 1800 <td><select name="abs_down61"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1802 1801 <td><select name="abs_down62"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1803 1802 <td><select name="abs_down63"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1804 1803 <td><select name="abs_down64"> <option value=0.0>0.0</option> <option value=0.5>0.5</option> <option value=1.0>1.0</option> <option value=1.5>1.5</option> <option value=2.0>2.0</option> <option value=2.5>2.5</option> <option value=3.0>3.0</option> <option value=3.5>3.5</option> </select></td>
1805 1804 </tr>
1806 1805 </table>
1807 1806 </td>
1808 1807 </tr>
1809 1808 </table>
1810 1809
1811 1810
1812 1811
1813 1812 <table class="abs_tx">
1814 1813 <tr>
1815 1814 <td colspan="2"> <b>TX</b> </td>
1816 1815 </tr>
1817 1816 <tr>
1818 1817 <td> <b>North Quarter</b>
1819 1818 <table align="center" class="tx_north_quarter">
1820 1819 <tr>
1821 1820 <td> <input name="downtx_checks" type="checkbox" value=1> </td>
1822 1821 <td> <input name="downtx_checks" type="checkbox" value=2> </td>
1823 1822 <td> <input name="downtx_checks" type="checkbox" value=3> </td>
1824 1823 <td> <input name="downtx_checks" type="checkbox" value=4> </td>
1825 1824 </tr>
1826 1825 <tr>
1827 1826 <td> <input name="downtx_checks" type="checkbox" value=9> </td>
1828 1827 <td> <input name="downtx_checks" type="checkbox" value=10> </td>
1829 1828 <td> <input name="downtx_checks" type="checkbox" value=11> </td>
1830 1829 <td> <input name="downtx_checks" type="checkbox" value=12> </td>
1831 1830 </tr>
1832 1831 <tr>
1833 1832 <td> <input name="downtx_checks" type="checkbox" value=17> </td>
1834 1833 <td> <input name="downtx_checks" type="checkbox" value=18> </td>
1835 1834 <td> <input name="downtx_checks" type="checkbox" value=19> </td>
1836 1835 <td> <input name="downtx_checks" type="checkbox" value=20> </td>
1837 1836 </tr>
1838 1837 <tr>
1839 1838 <td> <input name="downtx_checks" type="checkbox" value=25> </td>
1840 1839 <td> <input name="downtx_checks" type="checkbox" value=26> </td>
1841 1840 <td> <input name="downtx_checks" type="checkbox" value=27> </td>
1842 1841 <td> <input name="downtx_checks" type="checkbox" value=28> </td>
1843 1842 </tr>
1844 1843 </table>
1845 1844 </td>
1846 1845 <td> <b>East Quarter</b>
1847 1846 <table align="center" class="tx_east_quarter">
1848 1847 <tr>
1849 1848 <td> <input name="downtx_checks" type="checkbox" value=4> </td>
1850 1849 <td> <input name="downtx_checks" type="checkbox" value=6> </td>
1851 1850 <td> <input name="downtx_checks" type="checkbox" value=7> </td>
1852 1851 <td> <input name="downtx_checks" type="checkbox" value=8> </td>
1853 1852 </tr>
1854 1853 <tr>
1855 1854 <td> <input name="downtx_checks" type="checkbox" value=13> </td>
1856 1855 <td> <input name="downtx_checks" type="checkbox" value=14> </td>
1857 1856 <td> <input name="downtx_checks" type="checkbox" value=15> </td>
1858 1857 <td> <input name="downtx_checks" type="checkbox" value=16> </td>
1859 1858 </tr>
1860 1859 <tr>
1861 1860 <td> <input name="downtx_checks" type="checkbox" value=21> </td>
1862 1861 <td> <input name="downtx_checks" type="checkbox" value=22> </td>
1863 1862 <td> <input name="downtx_checks" type="checkbox" value=23> </td>
1864 1863 <td> <input name="downtx_checks" type="checkbox" value=24> </td>
1865 1864 </tr>
1866 1865 <tr>
1867 1866 <td> <input name="downtx_checks" type="checkbox" value=29> </td>
1868 1867 <td> <input name="downtx_checks" type="checkbox" value=30> </td>
1869 1868 <td> <input name="downtx_checks" type="checkbox" value=31> </td>
1870 1869 <td> <input name="downtx_checks" type="checkbox" value=32> </td>
1871 1870 </tr>
1872 1871 </table>
1873 1872 </td>
1874 1873 </tr>
1875 1874 <tr>
1876 1875 <td> <b>West Quarter</b>
1877 1876 <table align="center" class="tx_west_quarter">
1878 1877 <tr>
1879 1878 <td> <input name="downtx_checks" type="checkbox" value=33> </td> <!--class="checkbox-inline"--->
1880 1879 <td> <input name="downtx_checks" type="checkbox" value=34> </td>
1881 1880 <td> <input name="downtx_checks" type="checkbox" value=35> </td>
1882 1881 <td> <input name="downtx_checks" type="checkbox" value=36> </td>
1883 1882 </tr>
1884 1883 <tr>
1885 1884 <td> <input name="downtx_checks" type="checkbox" value=41> </td>
1886 1885 <td> <input name="downtx_checks" type="checkbox" value=42> </td>
1887 1886 <td> <input name="downtx_checks" type="checkbox" value=43> </td>
1888 1887 <td> <input name="downtx_checks" type="checkbox" value=44> </td>
1889 1888 </tr>
1890 1889 <tr>
1891 1890 <td> <input name="downtx_checks" type="checkbox" value=49> </td>
1892 1891 <td> <input name="downtx_checks" type="checkbox" value=50> </td>
1893 1892 <td> <input name="downtx_checks" type="checkbox" value=51> </td>
1894 1893 <td> <input name="downtx_checks" type="checkbox" value=52> </td>
1895 1894 </tr>
1896 1895 <tr>
1897 1896 <td> <input name="downtx_checks" type="checkbox" value=57> </td>
1898 1897 <td> <input name="downtx_checks" type="checkbox" value=58> </td>
1899 1898 <td> <input name="downtx_checks" type="checkbox" value=59> </td>
1900 1899 <td> <input name="downtx_checks" type="checkbox" value=60> </td>
1901 1900 </tr>
1902 1901 </table>
1903 1902 </td>
1904 1903 <td> <b>South Quarter</b>
1905 1904 <table align="center" class="tx_south_quarter">
1906 1905 <tr>
1907 1906 <td> <input name="downtx_checks" type="checkbox" value=37> </td> <!--class="checkbox-inline"--->
1908 1907 <td> <input name="downtx_checks" type="checkbox" value=38> </td>
1909 1908 <td> <input name="downtx_checks" type="checkbox" value=39> </td>
1910 1909 <td> <input name="downtx_checks" type="checkbox" value=40> </td>
1911 1910 </tr>
1912 1911 <tr>
1913 1912 <td> <input name="downtx_checks" type="checkbox" value=45> </td>
1914 1913 <td> <input name="downtx_checks" type="checkbox" value=46> </td>
1915 1914 <td> <input name="downtx_checks" type="checkbox" value=47> </td>
1916 1915 <td> <input name="downtx_checks" type="checkbox" value=48> </td>
1917 1916 </tr>
1918 1917 <tr>
1919 1918 <td> <input name="downtx_checks" type="checkbox" value=53> </td>
1920 1919 <td> <input name="downtx_checks" type="checkbox" value=54> </td>
1921 1920 <td> <input name="downtx_checks" type="checkbox" value=55> </td>
1922 1921 <td> <input name="downtx_checks" type="checkbox" value=56> </td>
1923 1922 </tr>
1924 1923 <tr>
1925 1924 <td> <input name="downtx_checks" type="checkbox" value=61> </td>
1926 1925 <td> <input name="downtx_checks" type="checkbox" value=62> </td>
1927 1926 <td> <input name="downtx_checks" type="checkbox" value=63> </td>
1928 1927 <td> <input name="downtx_checks" type="checkbox" value=64> </td>
1929 1928 </tr>
1930 1929 </table>
1931 1930 </td>
1932 1931 </tr>
1933 1932 </table>
1934 1933
1935 1934 <table class="abs_rx">
1936 1935 <tr>
1937 1936 <td colspan="2"> <b>RX</b> </td>
1938 1937 </tr>
1939 1938 <tr>
1940 1939 <td> <b>North Quarter</b>
1941 1940 <table align="center" class="rx_north_quarter">
1942 1941 <tr>
1943 1942 <td> <input name="downrx_checks" type="checkbox" value=1> </td>
1944 1943 <td> <input name="downrx_checks" type="checkbox" value=2> </td>
1945 1944 <td> <input name="downrx_checks" type="checkbox" value=3> </td>
1946 1945 <td> <input name="downrx_checks" type="checkbox" value=4> </td>
1947 1946 </tr>
1948 1947 <tr>
1949 1948 <td> <input name="downrx_checks" type="checkbox" value=9> </td>
1950 1949 <td> <input name="downrx_checks" type="checkbox" value=10> </td>
1951 1950 <td> <input name="downrx_checks" type="checkbox" value=11> </td>
1952 1951 <td> <input name="downrx_checks" type="checkbox" value=12> </td>
1953 1952 </tr>
1954 1953 <tr>
1955 1954 <td> <input name="downrx_checks" type="checkbox" value=17> </td>
1956 1955 <td> <input name="downrx_checks" type="checkbox" value=18> </td>
1957 1956 <td> <input name="downrx_checks" type="checkbox" value=19> </td>
1958 1957 <td> <input name="downrx_checks" type="checkbox" value=20> </td>
1959 1958 </tr>
1960 1959 <tr>
1961 1960 <td> <input name="downrx_checks" type="checkbox" value=25> </td>
1962 1961 <td> <input name="downrx_checks" type="checkbox" value=26> </td>
1963 1962 <td> <input name="downrx_checks" type="checkbox" value=27> </td>
1964 1963 <td> <input name="downrx_checks" type="checkbox" value=28> </td>
1965 1964 </tr>
1966 1965 </table>
1967 1966 </td>
1968 1967 <td> <b>East Quarter</b>
1969 1968 <table align="center" class="rx_east_quarter">
1970 1969 <tr>
1971 1970 <td> <input name="downrx_checks" type="checkbox" value=5> </td>
1972 1971 <td> <input name="downrx_checks" type="checkbox" value=6> </td>
1973 1972 <td> <input name="downrx_checks" type="checkbox" value=7> </td>
1974 1973 <td> <input name="downrx_checks" type="checkbox" value=8> </td>
1975 1974 </tr>
1976 1975 <tr>
1977 1976 <td> <input name="downrx_checks" type="checkbox" value=13> </td>
1978 1977 <td> <input name="downrx_checks" type="checkbox" value=14> </td>
1979 1978 <td> <input name="downrx_checks" type="checkbox" value=15> </td>
1980 1979 <td> <input name="downrx_checks" type="checkbox" value=16> </td>
1981 1980 </tr>
1982 1981 <tr>
1983 1982 <td> <input name="downrx_checks" type="checkbox" value=21> </td>
1984 1983 <td> <input name="downrx_checks" type="checkbox" value=22> </td>
1985 1984 <td> <input name="downrx_checks" type="checkbox" value=23> </td>
1986 1985 <td> <input name="downrx_checks" type="checkbox" value=24> </td>
1987 1986 </tr>
1988 1987 <tr>
1989 1988 <td> <input name="downrx_checks" type="checkbox" value=29> </td>
1990 1989 <td> <input name="downrx_checks" type="checkbox" value=30> </td>
1991 1990 <td> <input name="downrx_checks" type="checkbox" value=31> </td>
1992 1991 <td> <input name="downrx_checks" type="checkbox" value=32> </td>
1993 1992 </tr>
1994 1993 </table>
1995 1994 </td>
1996 1995 </tr>
1997 1996 <tr>
1998 1997 <td> <b>West Quarter</b>
1999 1998 <table align="center" class="rx_west_quarter">
2000 1999 <tr>
2001 2000 <td> <input name="downrx_checks" type="checkbox" value=33> </td>
2002 2001 <td> <input name="downrx_checks" type="checkbox" value=34> </td>
2003 2002 <td> <input name="downrx_checks" type="checkbox" value=35> </td>
2004 2003 <td> <input name="downrx_checks" type="checkbox" value=36> </td>
2005 2004 </tr>
2006 2005 <tr>
2007 2006 <td> <input name="downrx_checks" type="checkbox" value=41> </td>
2008 2007 <td> <input name="downrx_checks" type="checkbox" value=42> </td>
2009 2008 <td> <input name="downrx_checks" type="checkbox" value=43> </td>
2010 2009 <td> <input name="downrx_checks" type="checkbox" value=44> </td>
2011 2010 </tr>
2012 2011 <tr>
2013 2012 <td> <input name="downrx_checks" type="checkbox" value=49> </td>
2014 2013 <td> <input name="downrx_checks" type="checkbox" value=50> </td>
2015 2014 <td> <input name="downrx_checks" type="checkbox" value=51> </td>
2016 2015 <td> <input name="downrx_checks" type="checkbox" value=52> </td>
2017 2016 </tr>
2018 2017 <tr>
2019 2018 <td> <input name="downrx_checks" type="checkbox" value=57> </td>
2020 2019 <td> <input name="downrx_checks" type="checkbox" value=58> </td>
2021 2020 <td> <input name="downrx_checks" type="checkbox" value=59> </td>
2022 2021 <td> <input name="downrx_checks" type="checkbox" value=60> </td>
2023 2022 </tr>
2024 2023 </table>
2025 2024 </td>
2026 2025 <td> <b>South Quarter</b>
2027 2026 <table align="center" class="rx_south_quarter">
2028 2027 <tr>
2029 2028 <td> <input name="downrx_checks" type="checkbox" value=37> </td>
2030 2029 <td> <input name="downrx_checks" type="checkbox" value=38> </td>
2031 2030 <td> <input name="downrx_checks" type="checkbox" value=39> </td>
2032 2031 <td> <input name="downrx_checks" type="checkbox" value=40> </td>
2033 2032 </tr>
2034 2033 <tr>
2035 2034 <td> <input name="downrx_checks" type="checkbox" value=45> </td>
2036 2035 <td> <input name="downrx_checks" type="checkbox" value=46> </td>
2037 2036 <td> <input name="downrx_checks" type="checkbox" value=47> </td>
2038 2037 <td> <input name="downrx_checks" type="checkbox" value=48> </td>
2039 2038 </tr>
2040 2039 <tr>
2041 2040 <td> <input name="downrx_checks" type="checkbox" value=53> </td>
2042 2041 <td> <input name="downrx_checks" type="checkbox" value=54> </td>
2043 2042 <td> <input name="downrx_checks" type="checkbox" value=55> </td>
2044 2043 <td> <input name="downrx_checks" type="checkbox" value=56> </td>
2045 2044 </tr>
2046 2045 <tr>
2047 2046 <td> <input name="downrx_checks" type="checkbox" value=61> </td>
2048 2047 <td> <input name="downrx_checks" type="checkbox" value=62> </td>
2049 2048 <td> <input name="downrx_checks" type="checkbox" value=63> </td>
2050 2049 <td> <input name="downrx_checks" type="checkbox" value=64> </td>
2051 2050 </tr>
2052 2051 </table>
2053 2052 </td>
2054 2053 </tr>
2055 2054 </table>
2056 2055
2057 2056
2058 2057 <div id="id_ues_down" class="container">
2059 2058 <h5>Ues</h5>
2060 2059 <div class="col-xs-2">
2061 2060 <input name="ues_down1" value="0" class="form-control" id="input1_down" type="number" step="any">
2062 2061 </div>
2063 2062 <div class="col-xs-2">
2064 2063 <input name="ues_down2" value="0" class="form-control" id="input2_down" type="number" step="any">
2065 2064 </div>
2066 2065 <div class="col-xs-2">
2067 2066 <input name="ues_down3" value="0" class="form-control" id="input3_down" type="number" step="any">
2068 2067 </div>
2069 2068 <div class="col-xs-2">
2070 2069 <input name="ues_down4" value="0" class="form-control" id="input4_down" type="number" step="any">
2071 2070 </div>
2072 2071 <div style="vertical-align:center; margin-top:20px;">
2073 2072 <label class="checkbox-inline"><input style="vertical-align:bottom" name="onlyrx" id="onlyrx_down" type="checkbox" value=2>Only RX</label>
2074 2073 </div>
2075 2074 </div>
2076 2075
2077 2076
2078 2077 </div>
2079 2078
2080 2079
2081 2080 </div>
2082 2081 </div>
2083 2082 '''
2084 2083
2085 2084 script = '''
2086 2085
2087 2086
2088 2087 '''
2089 2088
2090 2089
2091 2090
2092 2091 return mark_safe(style+html+script)
@@ -1,1589 +1,1587
1 1 from django.shortcuts import render, redirect, get_object_or_404, HttpResponse
2 2 from django.utils.safestring import mark_safe
3 3 from django.http import HttpResponseRedirect
4 4 from django.core.urlresolvers import reverse
5 5 from django.db.models import Q
6 6 from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
7 7 from django.contrib import messages
8 8 from django.http.request import QueryDict
9 9 from datetime import datetime
10 10
11 11 try:
12 12 from urllib.parse import urlencode
13 13 except ImportError:
14 14 from urllib import urlencode
15 15
16 16 from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm, LocationForm, UploadFileForm, DownloadFileForm, OperationForm, NewForm
17 17 from .forms import OperationSearchForm, FilterForm
18 18
19 19 from apps.rc.forms import RCConfigurationForm
20 20 from apps.dds.forms import DDSConfigurationForm
21 21 from apps.jars.forms import JARSConfigurationForm
22 22 from apps.cgs.forms import CGSConfigurationForm
23 23 from apps.abs.forms import ABSConfigurationForm
24 24 from apps.usrp.forms import USRPConfigurationForm
25 25
26 26 from .models import Campaign, Experiment, Device, Configuration, Location, RunningExperiment
27 27 from apps.cgs.models import CGSConfiguration
28 28 from apps.jars.models import JARSConfiguration, EXPERIMENT_TYPE
29 29 from apps.usrp.models import USRPConfiguration
30 30 from apps.abs.models import ABSConfiguration
31 31 from apps.rc.models import RCConfiguration, RCLine, RCLineType
32 32 from apps.dds.models import DDSConfiguration
33 33 from django.http.request import QueryDict
34 34 #from __builtin__ import False
35 35
36 36 # Create your views here.
37 37
38 38 CONF_FORMS = {
39 39 'rc': RCConfigurationForm,
40 40 'dds': DDSConfigurationForm,
41 41 'jars': JARSConfigurationForm,
42 42 'cgs': CGSConfigurationForm,
43 43 'abs': ABSConfigurationForm,
44 44 'usrp': USRPConfigurationForm,
45 45 }
46 46
47 47 CONF_MODELS = {
48 48 'rc': RCConfiguration,
49 49 'dds': DDSConfiguration,
50 50 'jars': JARSConfiguration,
51 51 'cgs': CGSConfiguration,
52 52 'abs': ABSConfiguration,
53 53 'usrp': USRPConfiguration,
54 54 }
55 55
56 56 MIX_MODES = {
57 57 '0': 'P',
58 58 '1': 'S',
59 59 }
60 60
61 61 MIX_OPERATIONS = {
62 62 '0': 'OR',
63 63 '1': 'XOR',
64 64 '2': 'AND',
65 65 '3': 'NAND',
66 66 }
67 67
68 68
69 69 def index(request):
70 70 kwargs = {}
71 71
72 72 return render(request, 'index.html', kwargs)
73 73
74 74
75 75 def locations(request):
76 76
77 77 page = request.GET.get('page')
78 78 order = ('name',)
79 79
80 80 kwargs = get_paginator(Location, page, order)
81 81
82 82 kwargs['keys'] = ['name', 'description']
83 83 kwargs['title'] = 'Radar System'
84 84 kwargs['suptitle'] = 'List'
85 85
86 86 return render(request, 'base_list.html', kwargs)
87 87
88 88
89 89 def location(request, id_loc):
90 90
91 91 location = get_object_or_404(Location, pk=id_loc)
92 92
93 93 kwargs = {}
94 94 kwargs['location'] = location
95 95 kwargs['location_keys'] = ['name', 'description']
96 96
97 97 kwargs['title'] = 'Location'
98 98 kwargs['suptitle'] = 'Details'
99 99
100 100 return render(request, 'location.html', kwargs)
101 101
102 102
103 103 def location_new(request):
104 104
105 105 if request.method == 'GET':
106 106 form = LocationForm()
107 107
108 108 if request.method == 'POST':
109 109 form = LocationForm(request.POST)
110 110
111 111 if form.is_valid():
112 112 form.save()
113 113 return redirect('url_locations')
114 114
115 115 kwargs = {}
116 116 kwargs['form'] = form
117 117 kwargs['title'] = 'Radar System'
118 118 kwargs['suptitle'] = 'New'
119 119 kwargs['button'] = 'Create'
120 120
121 121 return render(request, 'base_edit.html', kwargs)
122 122
123 123
124 124 def location_edit(request, id_loc):
125 125
126 126 location = get_object_or_404(Location, pk=id_loc)
127 127
128 128 if request.method=='GET':
129 129 form = LocationForm(instance=location)
130 130
131 131 if request.method=='POST':
132 132 form = LocationForm(request.POST, instance=location)
133 133
134 134 if form.is_valid():
135 135 form.save()
136 136 return redirect('url_locations')
137 137
138 138 kwargs = {}
139 139 kwargs['form'] = form
140 140 kwargs['title'] = 'Location'
141 141 kwargs['suptitle'] = 'Edit'
142 142 kwargs['button'] = 'Update'
143 143
144 144 return render(request, 'base_edit.html', kwargs)
145 145
146 146
147 147 def location_delete(request, id_loc):
148 148
149 149 location = get_object_or_404(Location, pk=id_loc)
150 150
151 151 if request.method=='POST':
152 152
153 153 if request.user.is_staff:
154 154 location.delete()
155 155 return redirect('url_locations')
156 156
157 157 messages.error(request, 'Not enough permission to delete this object')
158 158 return redirect(location.get_absolute_url())
159 159
160 160 kwargs = {
161 161 'title': 'Delete',
162 162 'suptitle': 'Location',
163 163 'object': location,
164 164 'previous': location.get_absolute_url(),
165 165 'delete': True
166 166 }
167 167
168 168 return render(request, 'confirm.html', kwargs)
169 169
170 170
171 171 def devices(request):
172 172
173 173 page = request.GET.get('page')
174 174 order = ('device_type', 'name')
175 175
176 176 kwargs = get_paginator(Device, page, order)
177 177 kwargs['keys'] = ['name', 'ip_address', 'port_address', 'device_type']
178 178 kwargs['title'] = 'Device'
179 179 kwargs['suptitle'] = 'List'
180 180
181 181 return render(request, 'base_list.html', kwargs)
182 182
183 183
184 184 def device(request, id_dev):
185 185
186 186 device = get_object_or_404(Device, pk=id_dev)
187 187
188 188 kwargs = {}
189 189 kwargs['device'] = device
190 190 kwargs['device_keys'] = ['device_type', 'name', 'ip_address', 'port_address', 'description']
191 191
192 192 kwargs['title'] = 'Device'
193 193 kwargs['suptitle'] = 'Details'
194 194
195 195 return render(request, 'device.html', kwargs)
196 196
197 197
198 198 def device_new(request):
199 199
200 200 if request.method == 'GET':
201 201 form = DeviceForm()
202 202
203 203 if request.method == 'POST':
204 204 form = DeviceForm(request.POST)
205 205
206 206 if form.is_valid():
207 207 form.save()
208 208 return redirect('url_devices')
209 209
210 210 kwargs = {}
211 211 kwargs['form'] = form
212 212 kwargs['title'] = 'Device'
213 213 kwargs['suptitle'] = 'New'
214 214 kwargs['button'] = 'Create'
215 215
216 216 return render(request, 'base_edit.html', kwargs)
217 217
218 218
219 219 def device_edit(request, id_dev):
220 220
221 221 device = get_object_or_404(Device, pk=id_dev)
222 222
223 223 if request.method=='GET':
224 224 form = DeviceForm(instance=device)
225 225
226 226 if request.method=='POST':
227 227 form = DeviceForm(request.POST, instance=device)
228 228
229 229 if form.is_valid():
230 230 form.save()
231 231 return redirect(device.get_absolute_url())
232 232
233 233 kwargs = {}
234 234 kwargs['form'] = form
235 235 kwargs['title'] = 'Device'
236 236 kwargs['suptitle'] = 'Edit'
237 237 kwargs['button'] = 'Update'
238 238
239 239 return render(request, 'base_edit.html', kwargs)
240 240
241 241
242 242 def device_delete(request, id_dev):
243 243
244 244 device = get_object_or_404(Device, pk=id_dev)
245 245
246 246 if request.method=='POST':
247 247
248 248 if request.user.is_staff:
249 249 device.delete()
250 250 return redirect('url_devices')
251 251
252 252 messages.error(request, 'Not enough permission to delete this object')
253 253 return redirect(device.get_absolute_url())
254 254
255 255 kwargs = {
256 256 'title': 'Delete',
257 257 'suptitle': 'Device',
258 258 'object': device,
259 259 'previous': device.get_absolute_url(),
260 260 'delete': True
261 261 }
262 262
263 263 return render(request, 'confirm.html', kwargs)
264 264
265 265
266 266 def campaigns(request):
267 267
268 268 page = request.GET.get('page')
269 269 order = ('start_date',)
270 270 filters = request.GET.copy()
271 271
272 272 kwargs = get_paginator(Campaign, page, order, filters)
273 273
274 274 form = FilterForm(initial=request.GET, extra_fields=['range_date', 'tags','template'])
275 275 kwargs['keys'] = ['name', 'start_date', 'end_date']
276 276 kwargs['title'] = 'Campaign'
277 277 kwargs['suptitle'] = 'List'
278 278 kwargs['form'] = form
279 279 filters.pop('page', None)
280 280 kwargs['q'] = urlencode(filters)
281 281
282 282 return render(request, 'base_list.html', kwargs)
283 283
284 284
285 285 def campaign(request, id_camp):
286 286
287 287 campaign = get_object_or_404(Campaign, pk=id_camp)
288 288 experiments = Experiment.objects.filter(campaign=campaign)
289 289
290 290 form = CampaignForm(instance=campaign)
291 291
292 292 kwargs = {}
293 293 kwargs['campaign'] = campaign
294 294 kwargs['campaign_keys'] = ['template', 'name', 'start_date', 'end_date', 'tags', 'description']
295 295
296 296 kwargs['experiments'] = experiments
297 297 kwargs['experiment_keys'] = ['name', 'radar_system', 'start_time', 'end_time']
298 298
299 299 kwargs['title'] = 'Campaign'
300 300 kwargs['suptitle'] = 'Details'
301 301
302 302 kwargs['form'] = form
303 303 kwargs['button'] = 'Add Experiment'
304 304
305 305 return render(request, 'campaign.html', kwargs)
306 306
307 307
308 308 def campaign_new(request):
309 309
310 310 kwargs = {}
311 311
312 312 if request.method == 'GET':
313 313
314 314 if 'template' in request.GET:
315 315 if request.GET['template']=='0':
316 316 form = NewForm(initial={'create_from':2},
317 317 template_choices=Campaign.objects.filter(template=True).values_list('id', 'name'))
318 318 else:
319 319 kwargs['button'] = 'Create'
320 320 kwargs['experiments'] = Configuration.objects.filter(experiment=request.GET['template'])
321 321 kwargs['experiment_keys'] = ['name', 'start_time', 'end_time']
322 322 camp = Campaign.objects.get(pk=request.GET['template'])
323 323 form = CampaignForm(instance=camp,
324 324 initial={'name':'{} [{:%Y/%m/%d}]'.format(camp.name, datetime.now()),
325 325 'template':False})
326 326 elif 'blank' in request.GET:
327 327 kwargs['button'] = 'Create'
328 328 form = CampaignForm()
329 329 else:
330 330 form = NewForm()
331 331
332 332 if request.method == 'POST':
333 333 kwargs['button'] = 'Create'
334 334 post = request.POST.copy()
335 335 experiments = []
336 336
337 337 for id_exp in post.getlist('experiments'):
338 338 exp = Experiment.objects.get(pk=id_exp)
339 339 new_exp = exp.clone(template=False)
340 340 experiments.append(new_exp)
341 341
342 342 post.setlist('experiments', [])
343 343
344 344 form = CampaignForm(post)
345 345
346 346 if form.is_valid():
347 347 campaign = form.save()
348 348 for exp in experiments:
349 349 campaign.experiments.add(exp)
350 350 campaign.save()
351 351 return redirect('url_campaign', id_camp=campaign.id)
352 352
353 353 kwargs['form'] = form
354 354 kwargs['title'] = 'Campaign'
355 355 kwargs['suptitle'] = 'New'
356 356
357 357 return render(request, 'campaign_edit.html', kwargs)
358 358
359 359
360 360 def campaign_edit(request, id_camp):
361 361
362 362 campaign = get_object_or_404(Campaign, pk=id_camp)
363 363
364 364 if request.method=='GET':
365 365 form = CampaignForm(instance=campaign)
366 366
367 367 if request.method=='POST':
368 368 exps = campaign.experiments.all().values_list('pk', flat=True)
369 369 post = request.POST.copy()
370 370 new_exps = post.getlist('experiments')
371 371 post.setlist('experiments', [])
372 372 form = CampaignForm(post, instance=campaign)
373 373
374 374 if form.is_valid():
375 375 camp = form.save()
376 376 for id_exp in new_exps:
377 377 if int(id_exp) in exps:
378 378 exps.pop(id_exp)
379 379 else:
380 380 exp = Experiment.objects.get(pk=id_exp)
381 381 if exp.template:
382 382 camp.experiments.add(exp.clone(template=False))
383 383 else:
384 384 camp.experiments.add(exp)
385 385
386 386 for id_exp in exps:
387 387 camp.experiments.remove(Experiment.objects.get(pk=id_exp))
388 388
389 389 return redirect('url_campaign', id_camp=id_camp)
390 390
391 391 kwargs = {}
392 392 kwargs['form'] = form
393 393 kwargs['title'] = 'Campaign'
394 394 kwargs['suptitle'] = 'Edit'
395 395 kwargs['button'] = 'Update'
396 396
397 397 return render(request, 'campaign_edit.html', kwargs)
398 398
399 399
400 400 def campaign_delete(request, id_camp):
401 401
402 402 campaign = get_object_or_404(Campaign, pk=id_camp)
403 403
404 404 if request.method=='POST':
405 405 if request.user.is_staff:
406 406
407 407 for exp in campaign.experiments.all():
408 408 for conf in Configuration.objects.filter(experiment=exp):
409 409 conf.delete()
410 410 exp.delete()
411 411 campaign.delete()
412 412
413 413 return redirect('url_campaigns')
414 414
415 415 messages.error(request, 'Not enough permission to delete this object')
416 416 return redirect(campaign.get_absolute_url())
417 417
418 418 kwargs = {
419 419 'title': 'Delete',
420 420 'suptitle': 'Campaign',
421 421 'object': campaign,
422 422 'previous': campaign.get_absolute_url(),
423 423 'delete': True
424 424 }
425 425
426 426 return render(request, 'confirm.html', kwargs)
427 427
428 428 def campaign_export(request, id_camp):
429 429
430 430 campaign = get_object_or_404(Campaign, pk=id_camp)
431 431 content = campaign.parms_to_dict()
432 432 content_type = 'application/json'
433 433 filename = '%s_%s.json' %(campaign.name, campaign.id)
434 434
435 435 response = HttpResponse(content_type=content_type)
436 436 response['Content-Disposition'] = 'attachment; filename="%s"' %filename
437 437 response.write(content)
438 438
439 439 return response
440 440
441 441
442 442 def campaign_import(request, id_camp):
443 443
444 444 campaign = get_object_or_404(Campaign, pk=id_camp)
445 445
446 446 if request.method == 'GET':
447 447 file_form = UploadFileForm()
448 448
449 449 if request.method == 'POST':
450 450 file_form = UploadFileForm(request.POST, request.FILES)
451 451
452 452 if file_form.is_valid():
453 453
454 454 parms = campaign.import_from_file(request.FILES['file'])
455 455
456 456 if parms:
457 457 parms['name'] = parms['campaign']
458 458
459 459 new_camp = campaign.dict_to_parms(parms, CONF_MODELS)
460 460
461 461 messages.success(request, "Parameters imported from: '%s'." %request.FILES['file'].name)
462 462
463 463 return redirect(new_camp.get_absolute_url_edit())
464 464
465 465 messages.error(request, "Could not import parameters from file")
466 466
467 467 kwargs = {}
468 468 kwargs['title'] = 'Campaign'
469 469 kwargs['form'] = file_form
470 470 kwargs['suptitle'] = 'Importing file'
471 471 kwargs['button'] = 'Import'
472 472
473 473 return render(request, 'campaign_import.html', kwargs)
474 474
475 475
476 476 def experiments(request):
477 477
478 478 page = request.GET.get('page')
479 479 order = ('location',)
480 480 filters = request.GET.copy()
481 481
482 482 kwargs = get_paginator(Experiment, page, order, filters)
483 483
484 484 form = FilterForm(initial=request.GET, extra_fields=['tags','template'])
485 485
486 486 kwargs['keys'] = ['name', 'radar_system', 'start_time', 'end_time']
487 487 kwargs['title'] = 'Experiment'
488 488 kwargs['suptitle'] = 'List'
489 489 kwargs['form'] = form
490 490 filters.pop('page', None)
491 491 kwargs['q'] = urlencode(filters)
492 492
493 493 return render(request, 'base_list.html', kwargs)
494 494
495 495
496 496 def experiment(request, id_exp):
497 497
498 498 experiment = get_object_or_404(Experiment, pk=id_exp)
499 499
500 500 configurations = Configuration.objects.filter(experiment=experiment, type=0)
501 501
502 502 kwargs = {}
503 503
504 504 kwargs['experiment_keys'] = ['template', 'radar_system', 'name', 'start_time', 'end_time']
505 505 kwargs['experiment'] = experiment
506 506
507 507 kwargs['configuration_keys'] = ['name', 'device__ip_address', 'device__port_address', 'device__status']
508 508 kwargs['configurations'] = configurations
509 509
510 510 kwargs['title'] = 'Experiment'
511 511 kwargs['suptitle'] = 'Details'
512 512
513 513 kwargs['button'] = 'Add Configuration'
514 514
515 515 ###### SIDEBAR ######
516 516 kwargs.update(sidebar(experiment=experiment))
517 517
518 518 return render(request, 'experiment.html', kwargs)
519 519
520 520
521 521 def experiment_new(request, id_camp=None):
522 522
523 523 kwargs = {}
524 524
525 525 if request.method == 'GET':
526 526 if 'template' in request.GET:
527 527 if request.GET['template']=='0':
528 528 form = NewForm(initial={'create_from':2},
529 529 template_choices=Experiment.objects.filter(template=True).values_list('id', 'name'))
530 530 else:
531 531 kwargs['button'] = 'Create'
532 532 kwargs['configurations'] = Configuration.objects.filter(experiment=request.GET['template'])
533 533 kwargs['configuration_keys'] = ['name', 'device__name', 'device__ip_address', 'device__port_address']
534 534 exp=Experiment.objects.get(pk=request.GET['template'])
535 535 form = ExperimentForm(instance=exp,
536 536 initial={'name': '{} [{:%Y/%m/%d}]'.format(exp.name, datetime.now()),
537 537 'template': False})
538 538 elif 'blank' in request.GET:
539 539 kwargs['button'] = 'Create'
540 540 form = ExperimentForm()
541 541 else:
542 542 form = NewForm()
543 543
544 544 if request.method == 'POST':
545 545 form = ExperimentForm(request.POST)
546 546 if form.is_valid():
547 547 experiment = form.save()
548 548
549 549 if 'template' in request.GET:
550 550 configurations = Configuration.objects.filter(experiment=request.GET['template'], type=0)
551 551 for conf in configurations:
552 552 conf.clone(experiment=experiment, template=False)
553 553
554 554 return redirect('url_experiment', id_exp=experiment.id)
555 555
556 556 kwargs['form'] = form
557 557 kwargs['title'] = 'Experiment'
558 558 kwargs['suptitle'] = 'New'
559 559
560 560 return render(request, 'experiment_edit.html', kwargs)
561 561
562 562
563 563 def experiment_edit(request, id_exp):
564 564
565 565 experiment = get_object_or_404(Experiment, pk=id_exp)
566 566
567 567 if request.method == 'GET':
568 568 form = ExperimentForm(instance=experiment)
569 569
570 570 if request.method=='POST':
571 571 form = ExperimentForm(request.POST, instance=experiment)
572 572
573 573 if form.is_valid():
574 574 experiment = form.save()
575 575 return redirect('url_experiment', id_exp=experiment.id)
576 576
577 577 kwargs = {}
578 578 kwargs['form'] = form
579 579 kwargs['title'] = 'Experiment'
580 580 kwargs['suptitle'] = 'Edit'
581 581 kwargs['button'] = 'Update'
582 582
583 583 return render(request, 'experiment_edit.html', kwargs)
584 584
585 585
586 586 def experiment_delete(request, id_exp):
587 587
588 588 experiment = get_object_or_404(Experiment, pk=id_exp)
589 589
590 590 if request.method=='POST':
591 591 if request.user.is_staff:
592 592 for conf in Configuration.objects.filter(experiment=experiment):
593 593 conf.delete()
594 594 experiment.delete()
595 595 return redirect('url_experiments')
596 596
597 597 messages.error(request, 'Not enough permission to delete this object')
598 598 return redirect(experiment.get_absolute_url())
599 599
600 600 kwargs = {
601 601 'title': 'Delete',
602 602 'suptitle': 'Experiment',
603 603 'object': experiment,
604 604 'previous': experiment.get_absolute_url(),
605 605 'delete': True
606 606 }
607 607
608 608 return render(request, 'confirm.html', kwargs)
609 609
610 610
611 611 def experiment_export(request, id_exp):
612 612
613 613 experiment = get_object_or_404(Experiment, pk=id_exp)
614 614 content = experiment.parms_to_dict()
615 615 content_type = 'application/json'
616 616 filename = '%s_%s.json' %(experiment.name, experiment.id)
617 617
618 618 response = HttpResponse(content_type=content_type)
619 619 response['Content-Disposition'] = 'attachment; filename="%s"' %filename
620 620 response.write(content)
621 621
622 622 return response
623 623
624 624 def experiment_import(request, id_exp):
625 625
626 626 experiment = get_object_or_404(Experiment, pk=id_exp)
627 627 configurations = Configuration.objects.filter(experiment=experiment)
628 628
629 629 if request.method == 'GET':
630 630 file_form = UploadFileForm()
631 631
632 632 if request.method == 'POST':
633 633 file_form = UploadFileForm(request.POST, request.FILES)
634 634
635 635 if file_form.is_valid():
636 636
637 637 parms = experiment.import_from_file(request.FILES['file'])
638 638
639 639 if parms:
640 640
641 641 new_exp = experiment.dict_to_parms(parms, CONF_MODELS)
642 642
643 643 messages.success(request, "Parameters imported from: '%s'." %request.FILES['file'].name)
644 644
645 645 return redirect(new_exp.get_absolute_url_edit())
646 646
647 647 messages.error(request, "Could not import parameters from file")
648 648
649 649 kwargs = {}
650 650 kwargs['title'] = 'Experiment'
651 651 kwargs['form'] = file_form
652 652 kwargs['suptitle'] = 'Importing file'
653 653 kwargs['button'] = 'Import'
654 654
655 655 kwargs.update(sidebar(experiment=experiment))
656 656
657 657 return render(request, 'experiment_import.html', kwargs)
658 658
659 659 def experiment_mix(request, id_exp):
660 660
661 661 experiment = get_object_or_404(Experiment, pk=id_exp)
662 662 rc_confs = [conf for conf in RCConfiguration.objects.filter(experiment=id_exp,
663 663 mix=False)]
664 664
665 665 if len(rc_confs)<2:
666 666 messages.warning(request, 'You need at least two RC Configurations to make a mix')
667 667 return redirect(experiment.get_absolute_url())
668 668
669 669 mix_confs = RCConfiguration.objects.filter(experiment=id_exp, mix=True)
670 670
671 671 if mix_confs:
672 672 mix = mix_confs[0]
673 673 else:
674 674 mix = RCConfiguration(experiment=experiment,
675 675 device=rc_confs[0].device,
676 676 ipp=rc_confs[0].ipp,
677 677 clock_in=rc_confs[0].clock_in,
678 678 clock_divider=rc_confs[0].clock_divider,
679 679 mix=True,
680 680 parameters='')
681 681 mix.save()
682 682
683 683 line_type = RCLineType.objects.get(name='mix')
684 684 for i in range(len(rc_confs[0].get_lines())):
685 685 line = RCLine(rc_configuration=mix, line_type=line_type, channel=i)
686 686 line.save()
687 687
688 688 initial = {'name': mix.name,
689 689 'result': parse_mix_result(mix.parameters),
690 690 'delay': 0,
691 691 'mask': [0,1,2,3,4,5,6,7]
692 692 }
693 693
694 694 if request.method=='GET':
695 695 form = RCMixConfigurationForm(confs=rc_confs, initial=initial)
696 696
697 697 if request.method=='POST':
698 698 result = mix.parameters
699 699
700 700 if '{}|'.format(request.POST['experiment']) in result:
701 701 messages.error(request, 'Configuration already added')
702 702 else:
703 703 if 'operation' in request.POST:
704 704 operation = MIX_OPERATIONS[request.POST['operation']]
705 705 else:
706 706 operation = ' '
707 707
708 708 mode = MIX_MODES[request.POST['mode']]
709 709
710 710 if result:
711 711 result = '{}-{}|{}|{}|{}|{}'.format(mix.parameters,
712 712 request.POST['experiment'],
713 713 mode,
714 714 operation,
715 715 float(request.POST['delay']),
716 716 parse_mask(request.POST.getlist('mask'))
717 717 )
718 718 else:
719 719 result = '{}|{}|{}|{}|{}'.format(request.POST['experiment'],
720 720 mode,
721 721 operation,
722 722 float(request.POST['delay']),
723 723 parse_mask(request.POST.getlist('mask'))
724 724 )
725 725
726 726 mix.parameters = result
727 727 mix.name = request.POST['name']
728 728 mix.save()
729 729 mix.update_pulses()
730 730
731 731 initial['result'] = parse_mix_result(result)
732 732 initial['name'] = mix.name
733 733
734 734 form = RCMixConfigurationForm(initial=initial, confs=rc_confs)
735 735
736 736
737 737 kwargs = {
738 738 'title': 'Experiment',
739 739 'suptitle': 'Mix Configurations',
740 740 'form' : form,
741 741 'extra_button': 'Delete',
742 742 'button': 'Add',
743 743 'cancel': 'Back',
744 744 'previous': experiment.get_absolute_url(),
745 745 'id_exp':id_exp,
746 746
747 747 }
748 748
749 749 return render(request, 'experiment_mix.html', kwargs)
750 750
751 751
752 752 def experiment_mix_delete(request, id_exp):
753 753
754 754 conf = RCConfiguration.objects.get(experiment=id_exp, mix=True)
755 755 values = conf.parameters.split('-')
756 756 conf.parameters = '-'.join(values[:-1])
757 757 conf.save()
758 758
759 759 return redirect('url_mix_experiment', id_exp=id_exp)
760 760
761 761
762 762 def experiment_summary(request, id_exp):
763 763
764 764 import json
765 765 import ast
766 766
767 767 experiment = get_object_or_404(Experiment, pk=id_exp)
768 768 experiment_data = json.loads(experiment.parms_to_dict())
769 769 configurations = Configuration.objects.filter(experiment=experiment, type=0)
770 770
771 771 kwargs = {}
772 772
773 773 kwargs['experiment_keys'] = ['template', 'radar_system', 'name', 'start_time', 'end_time']
774 774 kwargs['experiment'] = experiment
775 775
776 776 kwargs['configuration_keys'] = ['name', 'device__ip_address', 'device__port_address', 'device__status']
777 777 kwargs['configurations'] = configurations
778 778 kwargs['experiment_data'] = experiment_data
779 779
780 780 kwargs['title'] = 'Experiment Summary'
781 781 kwargs['suptitle'] = 'Details'
782 782
783 783 kwargs['button'] = 'Verify Parameters'
784 784
785 785 jars_conf = False
786 786 rc_conf = False
787 787
788 788 for configuration in configurations:
789 789 #-------------------- JARS -----------------------:
790 790 if configuration.device.device_type.name == 'jars':
791 791 jars_conf = True
792 792 kwargs['jars_conf'] = jars_conf
793 793 kwargs['exp_type'] = EXPERIMENT_TYPE[configuration.exp_type][1]
794 794 channels_number = configuration.channels_number
795 795 exp_type = configuration.exp_type
796 796 fftpoints = configuration.fftpoints
797 797 filter_parms = configuration.filter_parms
798 798 filter_parms = ast.literal_eval(filter_parms)
799 799 spectral_number = configuration.spectral_number
800 800
801 801 #--------------------- RC ----------------------:
802 802 if configuration.device.device_type.name == 'rc':
803 803 rc_conf = True
804 804 kwargs['rc_conf'] = rc_conf
805 805 rc_lines = experiment_data['configurations']['rc']['lines']
806 806 ipp = configuration.ipp
807 807 if experiment_data['configurations']['rc']['mix'] == 'True':
808 808 tx = ''
809 809 code = ''
810 810 window = ''
811 811 else:
812 812 code = rc_lines[3]['code']
813 813
814 814 window_data = rc_lines[6]['params'][0]
815 815 h0 = str(window_data['first_height'])
816 816 dh = str(window_data['resolution'])
817 817 nsa = str(window_data['number_of_samples'])
818 818 window = 'Ho='+h0+'km\nDH='+dh+'km\nNSA='+nsa
819 819
820 820 tx = ''
821 821 if float(rc_lines[1]['delays']) == 0:
822 822 tx = rc_lines[2]['pulse_width']
823 823 elif float(rc_lines[2]['delays']) == 0:
824 824 tx = rc_lines[1]['pulse_width']
825 825 else:
826 826 tx = rc_lines[1]['pulse_width']+' | '+rc_lines[2]['pulse_width']
827 827
828 828 kwargs['tx'] = tx
829 829 kwargs['code'] = code
830 830 kwargs['window'] = window
831 831
832 832 #-------------------- DDS -----------------------:
833 833 if configuration.device.device_type.name == 'dds':
834 834 dds_conf = True
835 835 kwargs['dds_conf'] = dds_conf
836 836
837 837 #------ RC & JARS ------:
838 838 ipp = 937.5 #
839 839 nsa = 200#
840 840 dh = 1.5 #
841 841 channels_number = 5 #
842 842
843 843 if rc_conf and jars_conf:
844 844 if exp_type == 0: #Short
845 845 bytes = 2
846 846 b = nsa*2*bytes*channels_number
847 847 else: #Float
848 848 bytes = 4
849 849 channels = channels_number + spectral_number
850 850 b = nsa*2*bytes*fftpoints*channels
851 851
852 852 ipps = (ipp*pow(10,-6))/0.15
853 853 GB = 1048576.0*1024.0
854 854 Hour = 3600
855 855 rate = b/ipps
856 856 rate = rate *(1/GB)*(Hour)
857 857 kwargs['rate'] = str(rate)+" GB/h"
858 858 else:
859 859 kwargs['rate'] = ''
860 860
861 861 ###### SIDEBAR ######
862 862 kwargs.update(sidebar(experiment=experiment))
863 863
864 864 return render(request, 'experiment_summary.html', kwargs)
865 865
866 866 def experiment_verify(request, id_exp):
867 867
868 868 import json
869 869 import ast
870 870
871 871 experiment = get_object_or_404(Experiment, pk=id_exp)
872 872 experiment_data = json.loads(experiment.parms_to_dict())
873 873 configurations = Configuration.objects.filter(experiment=experiment, type=0)
874 874
875 875 kwargs = {}
876 876
877 877 kwargs['experiment_keys'] = ['template', 'radar_system', 'name', 'start_time', 'end_time']
878 878 kwargs['experiment'] = experiment
879 879
880 880 kwargs['configuration_keys'] = ['name', 'device__ip_address', 'device__port_address', 'device__status']
881 881 kwargs['configurations'] = configurations
882 882 kwargs['experiment_data'] = experiment_data
883 883
884 884 kwargs['title'] = 'Verify Experiment'
885 885 kwargs['suptitle'] = 'Parameters'
886 886
887 887 kwargs['button'] = 'Update'
888 888
889 889 jars_conf = False
890 890 rc_conf = False
891 891 dds_conf = False
892 892
893 893 for configuration in configurations:
894 894 #-------------------- JARS -----------------------:
895 895 if configuration.device.device_type.name == 'jars':
896 896 jars_conf = True
897 897 kwargs['jars_conf'] = jars_conf
898 898 filter_parms = configuration.filter_parms
899 899 filter_parms = ast.literal_eval(filter_parms)
900 900 kwargs['filter_parms'] = filter_parms
901 901 #--Sampling Frequency
902 902 clock = filter_parms['clock']
903 903 filter_2 = filter_parms['filter_2']
904 904 filter_5 = filter_parms['filter_5']
905 905 filter_fir = filter_parms['filter_fir']
906 906 samp_freq_jars = clock/filter_2/filter_5/filter_fir
907 907
908 908 kwargs['samp_freq_jars'] = samp_freq_jars
909 909 kwargs['jars'] = configuration
910 910
911 911 #--------------------- RC ----------------------:
912 912 if configuration.device.device_type.name == 'rc':
913 913 rc_conf = True
914 914 rc_parms = configuration.parms_to_dict()
915 915 if rc_parms['mix'] == 'True':
916 916 pass
917 917 else:
918 918 rc_lines = rc_parms['lines']
919 919 dh = rc_lines[6]['params'][0]['resolution']
920 920 #--Sampling Frequency
921 921 samp_freq_rc = 0.15/dh
922 922 kwargs['samp_freq_rc'] = samp_freq_rc
923 923
924 924 kwargs['rc_conf'] = rc_conf
925 925 kwargs['rc'] = configuration
926 926
927 927 #-------------------- DDS ----------------------:
928 928 if configuration.device.device_type.name == 'dds':
929 929 dds_conf = True
930 930 dds_parms = configuration.parms_to_dict()
931 931
932 932 kwargs['dds_conf'] = dds_conf
933 933 kwargs['dds'] = configuration
934 934
935 935
936 936 #------------Validation------------:
937 937 #Clock
938 938 if dds_conf and rc_conf and jars_conf:
939 939 if filter_parms['clock'] != rc_parms['clock_in'] and rc_parms['clock_in'] != dds_parms['clock']:
940 940 messages.warning(request, "Devices don't have the same clock.")
941 941 elif rc_conf and jars_conf:
942 942 if filter_parms['clock'] != rc_parms['clock_in']:
943 943 messages.warning(request, "Devices don't have the same clock.")
944 944 elif rc_conf and dds_conf:
945 945 if rc_parms['clock_in'] != dds_parms['clock']:
946 946 messages.warning(request, "Devices don't have the same clock.")
947 947 if float(samp_freq_rc) != float(dds_parms['frequencyA']):
948 948 messages.warning(request, "Devices don't have the same Frequency A.")
949 949
950 950
951 951
952 952 ###### SIDEBAR ######
953 953 kwargs.update(sidebar(experiment=experiment))
954 954
955 955
956 956
957 957
958 958
959 959 return render(request, 'experiment_verify.html', kwargs)
960 960
961 961
962 962 def parse_mix_result(s):
963 963
964 964 values = s.split('-')
965 965 html = 'EXP MOD OPE DELAY MASK\r\n'
966 966
967 967 if not values or values[0] in ('', ' '):
968 968 return mark_safe(html)
969 969
970 970 for i, value in enumerate(values):
971 971 if not value:
972 972 continue
973 973 pk, mode, operation, delay, mask = value.split('|')
974 974 conf = RCConfiguration.objects.get(pk=pk)
975 975 if i==0:
976 976 html += '{:20.18}{:3}{:4}{:9}km{:>6}\r\n'.format(
977 977 conf.name,
978 978 mode,
979 979 ' ',
980 980 delay,
981 981 mask)
982 982 else:
983 983 html += '{:20.18}{:3}{:4}{:9}km{:>6}\r\n'.format(
984 984 conf.name,
985 985 mode,
986 986 operation,
987 987 delay,
988 988 mask)
989 989
990 990 return mark_safe(html)
991 991
992 992 def parse_mask(l):
993 993
994 994 values = []
995 995
996 996 for x in range(8):
997 997 if '{}'.format(x) in l:
998 998 values.append(1)
999 999 else:
1000 1000 values.append(0)
1001 1001
1002 1002 values.reverse()
1003 1003
1004 1004 return int(''.join([str(x) for x in values]), 2)
1005 1005
1006 1006
1007 1007 def dev_confs(request):
1008 1008
1009 1009
1010 1010 page = request.GET.get('page')
1011 1011 order = ('type', 'device__device_type', 'experiment')
1012 1012 filters = request.GET.copy()
1013 1013
1014 1014 kwargs = get_paginator(Configuration, page, order, filters)
1015 1015
1016 1016 form = FilterForm(initial=request.GET, extra_fields=['tags','template'])
1017 1017 kwargs['keys'] = ['name', 'experiment', 'type', 'programmed_date']
1018 1018 kwargs['title'] = 'Configuration'
1019 1019 kwargs['suptitle'] = 'List'
1020 1020 kwargs['form'] = form
1021 1021 filters.pop('page', None)
1022 1022 kwargs['q'] = urlencode(filters)
1023 1023
1024 1024 return render(request, 'base_list.html', kwargs)
1025 1025
1026 1026
1027 1027 def dev_conf(request, id_conf):
1028 1028
1029 1029 conf = get_object_or_404(Configuration, pk=id_conf)
1030 1030
1031 1031 return redirect(conf.get_absolute_url())
1032 1032
1033 1033
1034 1034 def dev_conf_new(request, id_exp=0, id_dev=0):
1035 1035
1036 1036 initial = {}
1037 1037 kwargs = {}
1038 1038
1039 1039 if id_exp!=0:
1040 1040 initial['experiment'] = id_exp
1041 1041
1042 1042 if id_dev!=0:
1043 1043 initial['device'] = id_dev
1044 1044
1045 1045 if request.method == 'GET':
1046 1046
1047 1047 if id_dev:
1048 1048 kwargs['button'] = 'Create'
1049 1049 device = Device.objects.get(pk=id_dev)
1050 1050 DevConfForm = CONF_FORMS[device.device_type.name]
1051 1051 initial['name'] = request.GET['name']
1052 1052 form = DevConfForm(initial=initial)
1053 1053 else:
1054 1054 if 'template' in request.GET:
1055 1055 if request.GET['template']=='0':
1056 1056 choices = [(conf.pk, '{}'.format(conf)) for conf in Configuration.objects.filter(template=True)]
1057 1057 form = NewForm(initial={'create_from':2},
1058 1058 template_choices=choices)
1059 1059 else:
1060 1060 kwargs['button'] = 'Create'
1061 1061 conf = Configuration.objects.get(pk=request.GET['template'])
1062 1062 id_dev = conf.device.pk
1063 1063 DevConfForm = CONF_FORMS[conf.device.device_type.name]
1064 1064 form = DevConfForm(instance=conf,
1065 1065 initial={'name': '{} [{:%Y/%m/%d}]'.format(conf.name, datetime.now()),
1066 1066 'template': False,
1067 1067 'experiment':id_exp})
1068 1068 elif 'blank' in request.GET:
1069 1069 kwargs['button'] = 'Create'
1070 1070 form = ConfigurationForm(initial=initial)
1071 1071 else:
1072 1072 form = NewForm()
1073 1073
1074 1074 if request.method == 'POST':
1075 1075
1076 1076 device = Device.objects.get(pk=request.POST['device'])
1077 1077 DevConfForm = CONF_FORMS[device.device_type.name]
1078 1078
1079 1079 form = DevConfForm(request.POST)
1080 1080 kwargs['button'] = 'Create'
1081 1081 if form.is_valid():
1082 1082 conf = form.save()
1083 1083
1084 1084 if 'template' in request.GET and conf.device.device_type.name=='rc':
1085 1085 lines = RCLine.objects.filter(rc_configuration=request.GET['template'])
1086 1086 for line in lines:
1087 1087 line.clone(rc_configuration=conf)
1088 1088
1089 1089 if conf.device.device_type.name=='jars':
1090 1090 conf.add_parms_to_filter()
1091 1091
1092 1092 return redirect('url_dev_conf', id_conf=conf.pk)
1093 1093
1094 1094 kwargs['id_exp'] = id_exp
1095 1095 kwargs['form'] = form
1096 1096 kwargs['title'] = 'Configuration'
1097 1097 kwargs['suptitle'] = 'New'
1098 1098
1099 1099
1100 1100 if id_dev != 0:
1101 1101 device = Device.objects.get(pk=id_dev)
1102 1102 kwargs['device'] = device.device_type.name
1103 1103
1104 1104 return render(request, 'dev_conf_edit.html', kwargs)
1105 1105
1106 1106
1107 1107 def dev_conf_edit(request, id_conf):
1108 1108
1109 1109 conf = get_object_or_404(Configuration, pk=id_conf)
1110 1110
1111 1111 DevConfForm = CONF_FORMS[conf.device.device_type.name]
1112 1112
1113 1113 if request.method=='GET':
1114 1114 form = DevConfForm(instance=conf)
1115 1115
1116 1116 if request.method=='POST':
1117 1117 form = DevConfForm(request.POST, instance=conf)
1118 1118
1119 1119 if form.is_valid():
1120 1120 form.save()
1121 1121 return redirect('url_dev_conf', id_conf=id_conf)
1122 1122
1123 1123 kwargs = {}
1124 1124 kwargs['form'] = form
1125 1125 kwargs['title'] = 'Device Configuration'
1126 1126 kwargs['suptitle'] = 'Edit'
1127 1127 kwargs['button'] = 'Update'
1128 1128
1129 1129 ###### SIDEBAR ######
1130 1130 kwargs.update(sidebar(conf=conf))
1131 1131
1132 1132 return render(request, '%s_conf_edit.html' % conf.device.device_type.name, kwargs)
1133 1133
1134 1134
1135 1135 def dev_conf_start(request, id_conf):
1136 1136
1137 1137 conf = get_object_or_404(Configuration, pk=id_conf)
1138 1138
1139 1139 if conf.start_device():
1140 1140 messages.success(request, conf.message)
1141 1141 else:
1142 1142 messages.error(request, conf.message)
1143 1143
1144 1144 conf.status_device()
1145 1145
1146 1146 return redirect(conf.get_absolute_url())
1147 1147
1148 1148
1149 1149 def dev_conf_stop(request, id_conf):
1150 1150
1151 1151 conf = get_object_or_404(Configuration, pk=id_conf)
1152 1152
1153 1153 if conf.stop_device():
1154 1154 messages.success(request, conf.message)
1155 1155 else:
1156 1156 messages.error(request, conf.message)
1157 1157
1158 1158 conf.status_device()
1159 1159
1160 1160 return redirect(conf.get_absolute_url())
1161 1161
1162 1162
1163 1163 def dev_conf_status(request, id_conf):
1164 1164
1165 1165 conf = get_object_or_404(Configuration, pk=id_conf)
1166 1166
1167 1167 if conf.status_device():
1168 1168 messages.success(request, conf.message)
1169 1169 else:
1170 1170 messages.error(request, conf.message)
1171 1171
1172 1172 return redirect(conf.get_absolute_url())
1173 1173
1174 1174
1175 1175 def dev_conf_write(request, id_conf):
1176 1176
1177 1177 conf = get_object_or_404(Configuration, pk=id_conf)
1178 1178
1179 1179 answer = conf.write_device()
1180 1180 conf.status_device()
1181 1181
1182 1182 if answer:
1183 1183 messages.success(request, conf.message)
1184 1184
1185 1185 #Creating a historical configuration
1186 1186 conf.clone(type=1, template=False)
1187 1187
1188 1188 #Original configuration
1189 1189 conf = DevConfModel.objects.get(pk=id_conf)
1190 1190 else:
1191 1191 messages.error(request, conf.message)
1192 1192
1193 1193 return redirect(conf.get_absolute_url())
1194 1194
1195 1195
1196 1196 def dev_conf_read(request, id_conf):
1197 1197
1198 1198 conf = get_object_or_404(Configuration, pk=id_conf)
1199 1199
1200 1200 DevConfForm = CONF_FORMS[conf.device.device_type.name]
1201 1201
1202 1202 if request.method=='GET':
1203 1203
1204 1204 parms = conf.read_device()
1205 1205 conf.status_device()
1206 1206
1207 1207 if not parms:
1208 1208 messages.error(request, conf.message)
1209 1209 return redirect(conf.get_absolute_url())
1210 1210
1211 1211 form = DevConfForm(initial=parms, instance=conf)
1212 1212
1213 1213 if request.method=='POST':
1214 1214 form = DevConfForm(request.POST, instance=conf)
1215 1215
1216 1216 if form.is_valid():
1217 1217 form.save()
1218 1218 return redirect(conf.get_absolute_url())
1219 1219
1220 1220 messages.error(request, "Parameters could not be saved")
1221 1221
1222 1222 kwargs = {}
1223 1223 kwargs['id_dev'] = conf.id
1224 1224 kwargs['form'] = form
1225 1225 kwargs['title'] = 'Device Configuration'
1226 1226 kwargs['suptitle'] = 'Parameters read from device'
1227 1227 kwargs['button'] = 'Save'
1228 1228
1229 1229 ###### SIDEBAR ######
1230 1230 kwargs.update(sidebar(conf=conf))
1231 1231
1232 1232 return render(request, '%s_conf_edit.html' %conf.device.device_type.name, kwargs)
1233 1233
1234 1234
1235 1235 def dev_conf_import(request, id_conf):
1236 1236
1237 1237 conf = get_object_or_404(Configuration, pk=id_conf)
1238 1238 DevConfForm = CONF_FORMS[conf.device.device_type.name]
1239 1239
1240 1240 if request.method == 'GET':
1241 1241 file_form = UploadFileForm()
1242 1242
1243 1243 if request.method == 'POST':
1244 1244 file_form = UploadFileForm(request.POST, request.FILES)
1245 1245
1246 1246 if file_form.is_valid():
1247 1247
1248 1248 parms = conf.import_from_file(request.FILES['file'])
1249 1249
1250 1250 if parms:
1251 1251 messages.success(request, "Parameters imported from: '%s'." %request.FILES['file'].name)
1252 1252 form = DevConfForm(initial=parms, instance=conf)
1253 1253
1254 1254 kwargs = {}
1255 1255 kwargs['id_dev'] = conf.id
1256 1256 kwargs['form'] = form
1257 1257 kwargs['title'] = 'Device Configuration'
1258 1258 kwargs['suptitle'] = 'Parameters imported'
1259 1259 kwargs['button'] = 'Save'
1260 1260 kwargs['action'] = conf.get_absolute_url_edit()
1261 1261 kwargs['previous'] = conf.get_absolute_url()
1262 1262
1263 1263 ###### SIDEBAR ######
1264 1264 kwargs.update(sidebar(conf=conf))
1265 1265
1266 1266 return render(request, '%s_conf_edit.html' % conf.device.device_type.name, kwargs)
1267 1267
1268 1268 messages.error(request, "Could not import parameters from file")
1269 1269
1270 1270 kwargs = {}
1271 1271 kwargs['id_dev'] = conf.id
1272 1272 kwargs['title'] = 'Device Configuration'
1273 1273 kwargs['form'] = file_form
1274 1274 kwargs['suptitle'] = 'Importing file'
1275 1275 kwargs['button'] = 'Import'
1276 1276
1277 1277 kwargs.update(sidebar(conf=conf))
1278 1278
1279 1279 return render(request, 'dev_conf_import.html', kwargs)
1280 1280
1281 1281
1282 1282 def dev_conf_export(request, id_conf):
1283 1283
1284 1284 conf = get_object_or_404(Configuration, pk=id_conf)
1285 1285
1286 1286 if request.method == 'GET':
1287 1287 file_form = DownloadFileForm(conf.device.device_type.name)
1288 1288
1289 1289 if request.method == 'POST':
1290 1290 file_form = DownloadFileForm(conf.device.device_type.name, request.POST)
1291 1291
1292 1292 if file_form.is_valid():
1293 1293 fields = conf.export_to_file(format = file_form.cleaned_data['format'])
1294 1294
1295 1295 response = HttpResponse(content_type=fields['content_type'])
1296 1296 response['Content-Disposition'] = 'attachment; filename="%s"' %fields['filename']
1297 1297 response.write(fields['content'])
1298 1298
1299 1299 return response
1300 1300
1301 1301 messages.error(request, "Could not export parameters")
1302 1302
1303 1303 kwargs = {}
1304 1304 kwargs['id_dev'] = conf.id
1305 1305 kwargs['title'] = 'Device Configuration'
1306 1306 kwargs['form'] = file_form
1307 1307 kwargs['suptitle'] = 'Exporting file'
1308 1308 kwargs['button'] = 'Export'
1309 1309
1310 1310 return render(request, 'dev_conf_export.html', kwargs)
1311 1311
1312 1312
1313 1313 def dev_conf_delete(request, id_conf):
1314 1314
1315 1315 conf = get_object_or_404(Configuration, pk=id_conf)
1316 1316
1317 1317 if request.method=='POST':
1318 1318 if request.user.is_staff:
1319 1319 conf.delete()
1320 1320 return redirect('url_dev_confs')
1321 1321
1322 1322 messages.error(request, 'Not enough permission to delete this object')
1323 1323 return redirect(conf.get_absolute_url())
1324 1324
1325 1325 kwargs = {
1326 1326 'title': 'Delete',
1327 1327 'suptitle': 'Experiment',
1328 1328 'object': conf,
1329 1329 'previous': conf.get_absolute_url(),
1330 1330 'delete': True
1331 1331 }
1332 1332
1333 1333 return render(request, 'confirm.html', kwargs)
1334 1334
1335 1335
1336 1336 def sidebar(**kwargs):
1337 1337
1338 1338 side_data = {}
1339 1339
1340 1340 conf = kwargs.get('conf', None)
1341 1341 experiment = kwargs.get('experiment', None)
1342 1342
1343 1343 if not experiment:
1344 1344 experiment = conf.experiment
1345 1345
1346 1346 if experiment:
1347 1347 side_data['experiment'] = experiment
1348 1348 campaign = experiment.campaign_set.all()
1349 1349 if campaign:
1350 1350 side_data['campaign'] = campaign[0]
1351 1351 experiments = campaign[0].experiments.all()
1352 1352 else:
1353 1353 experiments = [experiment]
1354 1354 configurations = experiment.configuration_set.filter(type=0)
1355 1355 side_data['side_experiments'] = experiments
1356 1356 side_data['side_configurations'] = configurations
1357 1357
1358 1358 return side_data
1359 1359
1360 1360 def get_paginator(model, page, order, filters={}, n=10):
1361 1361
1362 1362 kwargs = {}
1363 1363 query = Q()
1364 1364 if isinstance(filters, QueryDict):
1365 1365 filters = filters.dict()
1366 1366 [filters.pop(key) for key in filters.keys() if filters[key] in ('', ' ')]
1367 1367 filters.pop('page', None)
1368 1368
1369 1369 if 'start_date' in filters:
1370 1370 filters['start_date__gte'] = filters.pop('start_date')
1371 1371 if 'end_date' in filters:
1372 1372 filters['start_date__lte'] = filters.pop('end_date')
1373 1373 if 'tags' in filters:
1374 1374 tags = filters.pop('tags')
1375 1375 if 'tags' in model._meta.get_all_field_names():
1376 1376 query = query | Q(tags__icontains=tags)
1377 1377 if 'name' in model._meta.get_all_field_names():
1378 1378 query = query | Q(name__icontains=tags)
1379 1379 if 'location' in model._meta.get_all_field_names():
1380 1380 query = query | Q(location__name__icontains=tags)
1381 1381 if 'device' in model._meta.get_all_field_names():
1382 1382 query = query | Q(device__name__icontains=tags)
1383 1383
1384 1384 object_list = model.objects.filter(query, **filters).order_by(*order)
1385 1385 paginator = Paginator(object_list, n)
1386 1386
1387 1387 try:
1388 1388 objects = paginator.page(page)
1389 1389 except PageNotAnInteger:
1390 1390 objects = paginator.page(1)
1391 1391 except EmptyPage:
1392 1392 objects = paginator.page(paginator.num_pages)
1393 1393
1394 1394 kwargs['objects'] = objects
1395 1395 kwargs['offset'] = (int(page)-1)*n if page else 0
1396 1396
1397 1397 return kwargs
1398 1398
1399 1399 def operation(request, id_camp=None):
1400 1400
1401 1401 kwargs = {}
1402 1402 campaigns = Campaign.objects.filter(start_date__lte=datetime.now(),
1403 1403 end_date__gte=datetime.now()).order_by('-start_date')
1404
1405
1404
1405
1406 1406 if id_camp:
1407 1407 campaign = get_object_or_404(Campaign, pk = id_camp)
1408 1408 form = OperationForm(initial={'campaign': campaign.id}, campaigns=campaigns)
1409 1409 kwargs['campaign'] = campaign
1410 1410 else:
1411 1411 form = OperationForm(campaigns=campaigns)
1412 1412 kwargs['form'] = form
1413 1413 return render(request, 'operation.html', kwargs)
1414 1414
1415
1416
1415
1416
1417 1417 #---Experiment
1418 1418 keys = ['id', 'name', 'start_time', 'end_time', 'status']
1419 1419 kwargs['experiment_keys'] = keys[1:]
1420 1420 kwargs['experiments'] = experiments
1421 1421 #---Radar
1422 1422 kwargs['locations'] = campaign.get_experiments_by_location()
1423 print kwargs['locations']
1424 1423 #---Else
1425 1424 kwargs['title'] = 'Campaign'
1426 1425 kwargs['suptitle'] = campaign.name
1427 kwargs['form'] = form
1426 kwargs['form'] = form
1428 1427
1429 1428 return render(request, 'operation.html', kwargs)
1430 1429
1431 1430
1432 1431 def operation_search(request, id_camp=None):
1433 1432
1434 1433
1435 1434 if not id_camp:
1436 1435 campaigns = Campaign.objects.all().order_by('-start_date')
1437 1436
1438 1437 if not campaigns:
1439 1438 return render(request, 'operation.html', {})
1440 1439
1441 1440 id_camp = campaigns[0].id
1442 1441 campaign = get_object_or_404(Campaign, pk = id_camp)
1443 1442
1444 1443 if request.method=='GET':
1445 1444 form = OperationSearchForm(initial={'campaign': campaign.id})
1446 1445
1447 1446 if request.method=='POST':
1448 1447 form = OperationSearchForm(request.POST, initial={'campaign':campaign.id})
1449 1448
1450 1449 if form.is_valid():
1451 1450 return redirect('url_operation', id_camp=campaign.id)
1452 1451
1453 1452 #locations = Location.objects.filter(experiment__campaign__pk = campaign.id).distinct()
1454 1453 experiments = Experiment.objects.filter(campaign__pk=campaign.id)
1455 1454 #for exs in experiments:
1456 1455 # exs.get_status()
1457 1456 locations= Location.objects.filter(experiment=experiments).distinct()
1458 1457 form = OperationSearchForm(initial={'campaign': campaign.id})
1459 1458
1460 1459 kwargs = {}
1461 1460 #---Campaign
1462 1461 kwargs['campaign'] = campaign
1463 1462 kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
1464 1463 #---Experiment
1465 1464 keys = ['id', 'name', 'start_time', 'end_time', 'status']
1466 1465 kwargs['experiment_keys'] = keys[1:]
1467 1466 kwargs['experiments'] = experiments
1468 1467 #---Radar
1469 1468 kwargs['locations'] = locations
1470 1469 #---Else
1471 1470 kwargs['title'] = 'Campaign'
1472 1471 kwargs['suptitle'] = campaign.name
1473 1472 kwargs['form'] = form
1474 1473 kwargs['button'] = 'Select'
1475 1474 kwargs['details'] = True
1476 1475 kwargs['search_button'] = False
1477 1476
1478 1477 return render(request, 'operation.html', kwargs)
1479 1478
1480 1479
1481 1480 def radar_play(request, id_camp, id_radar):
1482 1481 campaign = get_object_or_404(Campaign, pk = id_camp)
1483 1482 radar = get_object_or_404(Location, pk = id_radar)
1484 1483 today = datetime.today()
1485 1484 now = today.time()
1486 1485
1487 1486 #--Clear Old Experiments From RunningExperiment Object
1488 1487 running_experiment = RunningExperiment.objects.filter(radar=radar)
1489 1488 if running_experiment:
1490 1489 running_experiment = running_experiment[0]
1491 1490 running_experiment.running_experiment.clear()
1492 1491 running_experiment.save()
1493 1492
1494 1493 #--If campaign datetime is ok:
1495 1494 if today >= campaign.start_date and today <= campaign.end_date:
1496 1495 experiments = Experiment.objects.filter(campaign=campaign).filter(location=radar)
1497 1496 for exp in experiments:
1498 1497 #--If experiment time is ok:
1499 1498 if now >= exp.start_time and now <= exp.end_time:
1500 1499 configurations = Configuration.objects.filter(experiment = exp)
1501 1500 for conf in configurations:
1502 1501 if 'cgs' in conf.device.device_type.name:
1503 1502 conf.status_device()
1504 1503 else:
1505 1504 answer = conf.start_device()
1506 1505 conf.status_device()
1507 1506 #--Running Experiment
1508 1507 old_running_experiment = RunningExperiment.objects.filter(radar=radar)
1509 1508 #--If RunningExperiment element exists
1510 1509 if old_running_experiment:
1511 1510 old_running_experiment = old_running_experiment[0]
1512 1511 old_running_experiment.running_experiment.add(exp)
1513 1512 old_running_experiment.status = 3
1514 1513 old_running_experiment.save()
1515 1514 #--Create a new Running_Experiment Object
1516 1515 else:
1517 1516 new_running_experiment = RunningExperiment(
1518 1517 radar = radar,
1519 1518 status = 3,
1520 1519 )
1521 1520 new_running_experiment.save()
1522 1521 new_running_experiment.running_experiment.add(exp)
1523 1522 new_running_experiment.save()
1524 1523
1525 1524 if answer:
1526 1525 messages.success(request, conf.message)
1527 1526 exp.status=2
1528 1527 exp.save()
1529 1528 else:
1530 1529 messages.error(request, conf.message)
1531 1530 else:
1532 1531 if exp.status == 1 or exp.status == 3:
1533 1532 exp.status=3
1534 1533 exp.save()
1535 1534
1536 1535
1537 1536 route = request.META['HTTP_REFERER']
1538 1537 route = str(route)
1539 1538 if 'search' in route:
1540 1539 return HttpResponseRedirect(reverse('url_operation_search', args=[id_camp]))
1541 1540 else:
1542 1541 return HttpResponseRedirect(reverse('url_operation', args=[id_camp]))
1543 1542
1544 1543
1545 1544 def radar_stop(request, id_camp, id_radar):
1546 1545 campaign = get_object_or_404(Campaign, pk = id_camp)
1547 1546 radar = get_object_or_404(Location, pk = id_radar)
1548 1547 experiments = Experiment.objects.filter(campaign=campaign).filter(location=radar)
1549 1548
1550 1549 for exp in experiments:
1551 1550 configurations = Configuration.objects.filter(experiment = exp)
1552 1551 for conf in configurations:
1553 1552 if 'cgs' in conf.device.device_type.name:
1554 1553 conf.status_device()
1555 1554 else:
1556 1555 answer = conf.stop_device()
1557 1556 conf.status_device()
1558 1557
1559 1558 if answer:
1560 1559 messages.success(request, conf.message)
1561 1560 exp.status=1
1562 1561 exp.save()
1563 1562 else:
1564 1563 messages.error(request, conf.message)
1565 1564
1566 1565
1567 1566 route = request.META['HTTP_REFERER']
1568 1567 route = str(route)
1569 1568 if 'search' in route:
1570 1569 return HttpResponseRedirect(reverse('url_operation_search', args=[id_camp]))
1571 1570 else:
1572 1571 return HttpResponseRedirect(reverse('url_operation', args=[id_camp]))
1573 1572
1574 1573
1575 1574 def radar_refresh(request, id_camp, id_radar):
1576 1575
1577 1576 campaign = get_object_or_404(Campaign, pk = id_camp)
1578 1577 radar = get_object_or_404(Location, pk = id_radar)
1579 1578 experiments = Experiment.objects.filter(campaign=campaign).filter(location=radar)
1580 1579 for exs in experiments:
1581 1580 exs.get_status()
1582 1581
1583 1582 route = request.META['HTTP_REFERER']
1584 1583 route = str(route)
1585 1584 if 'search' in route:
1586 1585 return HttpResponseRedirect(reverse('url_operation_search', args=[id_camp]))
1587 1586 else:
1588 1587 return HttpResponseRedirect(reverse('url_operation', args=[id_camp]))
1589
General Comments 0
You need to be logged in to leave comments. Login now