##// END OF EJS Templates
Bugs fixed in Signal Chain GUI:...
Miguel Valdez -
r643:bf37eba8f6f6
parent child
Show More

The requested changes are too big and content was truncated. Show full diff

@@ -1,7 +1,7
1 1 '''
2 2 Created on Feb 7, 2012
3 3
4 4 @author $Author$
5 5 @version $Id$
6 6 '''
7 __version__ = "2.1.5.1" No newline at end of file
7 __version__ = "2.1.5.2" No newline at end of file
@@ -1,1089 +1,1097
1 1 '''
2 2 Created on September , 2012
3 3 @author:
4 4 '''
5 5 from xml.etree.ElementTree import Element, SubElement
6 6 from xml.etree import ElementTree as ET
7 7 from xml.dom import minidom
8 8
9 9 from model import *
10 10
11 11 try:
12 12 from gevent import sleep
13 13 except:
14 14 from time import sleep
15 15
16 16 import ast
17 17
18 18 def prettify(elem):
19 19 """Return a pretty-printed XML string for the Element.
20 20 """
21 21 rough_string = ET.tostring(elem, 'utf-8')
22 22 reparsed = minidom.parseString(rough_string)
23 23 return reparsed.toprettyxml(indent=" ")
24 24
25 25 class ParameterConf():
26 26
27 27 id = None
28 28 name = None
29 29 value = None
30 30 format = None
31 31
32 32 __formated_value = None
33 33
34 34 ELEMENTNAME = 'Parameter'
35 35
36 36 def __init__(self):
37 37
38 38 self.format = 'str'
39 39
40 40 def getElementName(self):
41 41
42 42 return self.ELEMENTNAME
43 43
44 44 def getValue(self):
45 45
46 46 value = self.value
47 47 format = self.format
48 48
49 49 if self.__formated_value != None:
50 50
51 51 return self.__formated_value
52 52
53 53 if format == 'str':
54 54 self.__formated_value = str(value)
55 55 return self.__formated_value
56 56
57 57 if value == '':
58 58 raise ValueError, "%s: This parameter value is empty" %self.name
59 59
60 60 if format == 'bool':
61 61 value = int(value)
62 62
63 63 if format == 'list':
64 64 strList = value.split(',')
65 65
66 66 self.__formated_value = strList
67 67
68 68 return self.__formated_value
69 69
70 70 if format == 'intlist':
71 71 """
72 72 Example:
73 73 value = (0,1,2)
74 74 """
75 75 value = value.replace('(', '')
76 76 value = value.replace(')', '')
77 77
78 78 value = value.replace('[', '')
79 79 value = value.replace(']', '')
80 80
81 81 strList = value.split(',')
82 intList = [int(x) for x in strList]
82 intList = [int(float(x)) for x in strList]
83 83
84 84 self.__formated_value = intList
85 85
86 86 return self.__formated_value
87 87
88 88 if format == 'floatlist':
89 89 """
90 90 Example:
91 91 value = (0.5, 1.4, 2.7)
92 92 """
93 93
94 94 value = value.replace('(', '')
95 95 value = value.replace(')', '')
96 96
97 97 value = value.replace('[', '')
98 98 value = value.replace(']', '')
99 99
100 100 strList = value.split(',')
101 101 floatList = [float(x) for x in strList]
102 102
103 103 self.__formated_value = floatList
104 104
105 105 return self.__formated_value
106 106
107 107 if format == 'date':
108 108 strList = value.split('/')
109 109 intList = [int(x) for x in strList]
110 110 date = datetime.date(intList[0], intList[1], intList[2])
111 111
112 112 self.__formated_value = date
113 113
114 114 return self.__formated_value
115 115
116 116 if format == 'time':
117 117 strList = value.split(':')
118 118 intList = [int(x) for x in strList]
119 119 time = datetime.time(intList[0], intList[1], intList[2])
120 120
121 121 self.__formated_value = time
122 122
123 123 return self.__formated_value
124 124
125 125 if format == 'pairslist':
126 126 """
127 127 Example:
128 128 value = (0,1),(1,2)
129 129 """
130 130
131 131 value = value.replace('(', '')
132 132 value = value.replace(')', '')
133 133
134 134 value = value.replace('[', '')
135 135 value = value.replace(']', '')
136 136
137 137 strList = value.split(',')
138 138 intList = [int(item) for item in strList]
139 139 pairList = []
140 140 for i in range(len(intList)/2):
141 141 pairList.append((intList[i*2], intList[i*2 + 1]))
142 142
143 143 self.__formated_value = pairList
144 144
145 145 return self.__formated_value
146 146
147 147 if format == 'multilist':
148 148 """
149 149 Example:
150 150 value = (0,1,2),(3,4,5)
151 151 """
152 152 multiList = ast.literal_eval(value)
153 153
154 154 if type(multiList[0]) == int:
155 155 multiList = ast.literal_eval("(" + value + ")")
156 156
157 157 self.__formated_value = multiList
158 158
159 159 return self.__formated_value
160 160
161 161 format_func = eval(format)
162 162
163 163 self.__formated_value = format_func(value)
164 164
165 165 return self.__formated_value
166 166
167 167 def updateId(self, new_id):
168 168
169 169 self.id = str(new_id)
170 170
171 171 def setup(self, id, name, value, format='str'):
172 172
173 173 self.id = str(id)
174 174 self.name = name
175 175 self.value = str(value)
176 176 self.format = str.lower(format)
177 177
178 try:
179 self.getValue()
180 except:
181 return 0
182
183 return 1
184
178 185 def update(self, name, value, format='str'):
179 186
180 187 self.name = name
181 188 self.value = str(value)
182 189 self.format = format
183 190
184 191 def makeXml(self, opElement):
185 192
186 193 parmElement = SubElement(opElement, self.ELEMENTNAME)
187 194 parmElement.set('id', str(self.id))
188 195 parmElement.set('name', self.name)
189 196 parmElement.set('value', self.value)
190 197 parmElement.set('format', self.format)
191 198
192 199 def readXml(self, parmElement):
193 200
194 201 self.id = parmElement.get('id')
195 202 self.name = parmElement.get('name')
196 203 self.value = parmElement.get('value')
197 204 self.format = str.lower(parmElement.get('format'))
198 205
199 206 #Compatible with old signal chain version
200 207 if self.format == 'int' and self.name == 'idfigure':
201 208 self.name = 'id'
202 209
203 210 def printattr(self):
204 211
205 212 print "Parameter[%s]: name = %s, value = %s, format = %s" %(self.id, self.name, self.value, self.format)
206 213
207 214 class OperationConf():
208 215
209 216 id = None
210 217 name = None
211 218 priority = None
212 219 type = None
213 220
214 221 parmConfObjList = []
215 222
216 223 ELEMENTNAME = 'Operation'
217 224
218 225 def __init__(self):
219 226
220 227 self.id = '0'
221 228 self.name = None
222 229 self.priority = None
223 230 self.type = 'self'
224 231
225 232
226 233 def __getNewId(self):
227 234
228 235 return int(self.id)*10 + len(self.parmConfObjList) + 1
229 236
230 237 def updateId(self, new_id):
231 238
232 239 self.id = str(new_id)
233 240
234 241 n = 1
235 242 for parmObj in self.parmConfObjList:
236 243
237 244 idParm = str(int(new_id)*10 + n)
238 245 parmObj.updateId(idParm)
239 246
240 247 n += 1
241 248
242 249 def getElementName(self):
243 250
244 251 return self.ELEMENTNAME
245 252
246 253 def getParameterObjList(self):
247 254
248 255 return self.parmConfObjList
249 256
250 257 def getParameterObj(self, parameterName):
251 258
252 259 for parmConfObj in self.parmConfObjList:
253 260
254 261 if parmConfObj.name != parameterName:
255 262 continue
256 263
257 264 return parmConfObj
258 265
259 266 return None
260 267
261 268 def getParameterObjfromValue(self, parameterValue):
262 269
263 270 for parmConfObj in self.parmConfObjList:
264 271
265 272 if parmConfObj.getValue() != parameterValue:
266 273 continue
267 274
268 275 return parmConfObj.getValue()
269 276
270 277 return None
271 278
272 279 def getParameterValue(self, parameterName):
273 280
274 281 parameterObj = self.getParameterObj(parameterName)
275 282
276 283 # if not parameterObj:
277 284 # return None
278 285
279 286 value = parameterObj.getValue()
280 287
281 288 return value
282 289
283 290 def setup(self, id, name, priority, type):
284 291
285 292 self.id = str(id)
286 293 self.name = name
287 294 self.type = type
288 295 self.priority = priority
289 296
290 297 self.parmConfObjList = []
291 298
292 299 def removeParameters(self):
293 300
294 301 for obj in self.parmConfObjList:
295 302 del obj
296 303
297 304 self.parmConfObjList = []
298 305
299 306 def addParameter(self, name, value, format='str'):
300 307
301 308 id = self.__getNewId()
302 309
303 310 parmConfObj = ParameterConf()
304 parmConfObj.setup(id, name, value, format)
311 if not parmConfObj.setup(id, name, value, format):
312 return None
305 313
306 314 self.parmConfObjList.append(parmConfObj)
307 315
308 316 return parmConfObj
309 317
310 318 def changeParameter(self, name, value, format='str'):
311 319
312 320 parmConfObj = self.getParameterObj(name)
313 321 parmConfObj.update(name, value, format)
314 322
315 323 return parmConfObj
316 324
317 325 def makeXml(self, upElement):
318 326
319 327 opElement = SubElement(upElement, self.ELEMENTNAME)
320 328 opElement.set('id', str(self.id))
321 329 opElement.set('name', self.name)
322 330 opElement.set('type', self.type)
323 331 opElement.set('priority', str(self.priority))
324 332
325 333 for parmConfObj in self.parmConfObjList:
326 334 parmConfObj.makeXml(opElement)
327 335
328 336 def readXml(self, opElement):
329 337
330 338 self.id = opElement.get('id')
331 339 self.name = opElement.get('name')
332 340 self.type = opElement.get('type')
333 341 self.priority = opElement.get('priority')
334 342
335 343 #Compatible with old signal chain version
336 344 #Use of 'run' method instead 'init'
337 345 if self.type == 'self' and self.name == 'init':
338 346 self.name = 'run'
339 347
340 348 self.parmConfObjList = []
341 349
342 350 parmElementList = opElement.getiterator(ParameterConf().getElementName())
343 351
344 352 for parmElement in parmElementList:
345 353 parmConfObj = ParameterConf()
346 354 parmConfObj.readXml(parmElement)
347 355
348 356 #Compatible with old signal chain version
349 357 #If an 'plot' OPERATION is found, changes name operation by the value of its type PARAMETER
350 358 if self.type != 'self' and self.name == 'Plot':
351 359 if parmConfObj.format == 'str' and parmConfObj.name == 'type':
352 360 self.name = parmConfObj.value
353 361 continue
354 362
355 363 self.parmConfObjList.append(parmConfObj)
356 364
357 365 def printattr(self):
358 366
359 367 print "%s[%s]: name = %s, type = %s, priority = %s" %(self.ELEMENTNAME,
360 368 self.id,
361 369 self.name,
362 370 self.type,
363 371 self.priority)
364 372
365 373 for parmConfObj in self.parmConfObjList:
366 374 parmConfObj.printattr()
367 375
368 376 def createObject(self):
369 377
370 378 if self.type == 'self':
371 379 raise ValueError, "This operation type cannot be created"
372 380
373 381 if self.type == 'external' or self.type == 'other':
374 382 className = eval(self.name)
375 383 opObj = className()
376 384
377 385 return opObj
378 386
379 387 class ProcUnitConf():
380 388
381 389 id = None
382 390 name = None
383 391 datatype = None
384 392 inputId = None
385 393 parentId = None
386 394
387 395 opConfObjList = []
388 396
389 397 procUnitObj = None
390 398 opObjList = []
391 399
392 400 ELEMENTNAME = 'ProcUnit'
393 401
394 402 def __init__(self):
395 403
396 404 self.id = None
397 405 self.datatype = None
398 406 self.name = None
399 407 self.inputId = None
400 408
401 409 self.opConfObjList = []
402 410
403 411 self.procUnitObj = None
404 412 self.opObjDict = {}
405 413
406 414 def __getPriority(self):
407 415
408 416 return len(self.opConfObjList)+1
409 417
410 418 def __getNewId(self):
411 419
412 420 return int(self.id)*10 + len(self.opConfObjList) + 1
413 421
414 422 def getElementName(self):
415 423
416 424 return self.ELEMENTNAME
417 425
418 426 def getId(self):
419 427
420 428 return self.id
421 429
422 430 def updateId(self, new_id, parentId=parentId):
423 431
424 432
425 433 new_id = int(parentId)*10 + (int(self.id) % 10)
426 434 new_inputId = int(parentId)*10 + (int(self.inputId) % 10)
427 435
428 436 #If this proc unit has not inputs
429 437 if self.inputId == '0':
430 438 new_inputId = 0
431 439
432 440 n = 1
433 441 for opConfObj in self.opConfObjList:
434 442
435 443 idOp = str(int(new_id)*10 + n)
436 444 opConfObj.updateId(idOp)
437 445
438 446 n += 1
439 447
440 448 self.parentId = str(parentId)
441 449 self.id = str(new_id)
442 450 self.inputId = str(new_inputId)
443 451
444 452
445 453 def getInputId(self):
446 454
447 455 return self.inputId
448 456
449 457 def getOperationObjList(self):
450 458
451 459 return self.opConfObjList
452 460
453 461 def getOperationObj(self, name=None):
454 462
455 463 for opConfObj in self.opConfObjList:
456 464
457 465 if opConfObj.name != name:
458 466 continue
459 467
460 468 return opConfObj
461 469
462 470 return None
463 471
464 472 def getOpObjfromParamValue(self, value=None):
465 473
466 474 for opConfObj in self.opConfObjList:
467 475 if opConfObj.getParameterObjfromValue(parameterValue=value) != value:
468 476 continue
469 477 return opConfObj
470 478 return None
471 479
472 480 def getProcUnitObj(self):
473 481
474 482 return self.procUnitObj
475 483
476 484 def setup(self, id, name, datatype, inputId, parentId=None):
477 485
478 486 #Compatible with old signal chain version
479 487 if datatype==None and name==None:
480 488 raise ValueError, "datatype or name should be defined"
481 489
482 490 if name==None:
483 491 if 'Proc' in datatype:
484 492 name = datatype
485 493 else:
486 494 name = '%sProc' %(datatype)
487 495
488 496 if datatype==None:
489 497 datatype = name.replace('Proc','')
490 498
491 499 self.id = str(id)
492 500 self.name = name
493 501 self.datatype = datatype
494 502 self.inputId = inputId
495 503 self.parentId = parentId
496 504
497 505 self.opConfObjList = []
498 506
499 507 self.addOperation(name='run', optype='self')
500 508
501 509 def removeOperations(self):
502 510
503 511 for obj in self.opConfObjList:
504 512 del obj
505 513
506 514 self.opConfObjList = []
507 515 self.addOperation(name='run')
508 516
509 517 def addParameter(self, **kwargs):
510 518 '''
511 519 Add parameters to "run" operation
512 520 '''
513 521 opObj = self.opConfObjList[0]
514 522
515 523 opObj.addParameter(**kwargs)
516 524
517 525 return opObj
518 526
519 527 def addOperation(self, name, optype='self'):
520 528
521 529 id = self.__getNewId()
522 530 priority = self.__getPriority()
523 531
524 532 opConfObj = OperationConf()
525 533 opConfObj.setup(id, name=name, priority=priority, type=optype)
526 534
527 535 self.opConfObjList.append(opConfObj)
528 536
529 537 return opConfObj
530 538
531 539 def makeXml(self, procUnitElement):
532 540
533 541 upElement = SubElement(procUnitElement, self.ELEMENTNAME)
534 542 upElement.set('id', str(self.id))
535 543 upElement.set('name', self.name)
536 544 upElement.set('datatype', self.datatype)
537 545 upElement.set('inputId', str(self.inputId))
538 546
539 547 for opConfObj in self.opConfObjList:
540 548 opConfObj.makeXml(upElement)
541 549
542 550 def readXml(self, upElement):
543 551
544 552 self.id = upElement.get('id')
545 553 self.name = upElement.get('name')
546 554 self.datatype = upElement.get('datatype')
547 555 self.inputId = upElement.get('inputId')
548 556
549 557 if self.ELEMENTNAME == "ReadUnit":
550 558 self.datatype = self.datatype.replace("Reader", "")
551 559
552 560 if self.ELEMENTNAME == "ProcUnit":
553 561 self.datatype = self.datatype.replace("Proc", "")
554 562
555 563 if self.inputId == 'None':
556 564 self.inputId = '0'
557 565
558 566 self.opConfObjList = []
559 567
560 568 opElementList = upElement.getiterator(OperationConf().getElementName())
561 569
562 570 for opElement in opElementList:
563 571 opConfObj = OperationConf()
564 572 opConfObj.readXml(opElement)
565 573 self.opConfObjList.append(opConfObj)
566 574
567 575 def printattr(self):
568 576
569 577 print "%s[%s]: name = %s, datatype = %s, inputId = %s" %(self.ELEMENTNAME,
570 578 self.id,
571 579 self.name,
572 580 self.datatype,
573 581 self.inputId)
574 582
575 583 for opConfObj in self.opConfObjList:
576 584 opConfObj.printattr()
577 585
578 586 def createObjects(self):
579 587
580 588 className = eval(self.name)
581 589 procUnitObj = className()
582 590
583 591 for opConfObj in self.opConfObjList:
584 592
585 593 if opConfObj.type == 'self':
586 594 continue
587 595
588 596 opObj = opConfObj.createObject()
589 597
590 598 self.opObjDict[opConfObj.id] = opObj
591 599 procUnitObj.addOperation(opObj, opConfObj.id)
592 600
593 601 self.procUnitObj = procUnitObj
594 602
595 603 return procUnitObj
596 604
597 605 def run(self):
598 606
599 607 finalSts = False
600 608
601 609 for opConfObj in self.opConfObjList:
602 610
603 611 kwargs = {}
604 612 for parmConfObj in opConfObj.getParameterObjList():
605 613 if opConfObj.name == 'run' and parmConfObj.name == 'datatype':
606 614 continue
607 615
608 616 kwargs[parmConfObj.name] = parmConfObj.getValue()
609 617
610 618 #print "\tRunning the '%s' operation with %s" %(opConfObj.name, opConfObj.id)
611 619 sts = self.procUnitObj.call(opType = opConfObj.type,
612 620 opName = opConfObj.name,
613 621 opId = opConfObj.id,
614 622 **kwargs)
615 623 finalSts = finalSts or sts
616 624
617 625 return finalSts
618 626
619 627 def close(self):
620 628
621 629 for opConfObj in self.opConfObjList:
622 630 if opConfObj.type == 'self':
623 631 continue
624 632
625 633 opObj = self.procUnitObj.getOperationObj(opConfObj.id)
626 634 opObj.close()
627 635
628 636 self.procUnitObj.close()
629 637
630 638 return
631 639
632 640 class ReadUnitConf(ProcUnitConf):
633 641
634 642 path = None
635 643 startDate = None
636 644 endDate = None
637 645 startTime = None
638 646 endTime = None
639 647
640 648 ELEMENTNAME = 'ReadUnit'
641 649
642 650 def __init__(self):
643 651
644 652 self.id = None
645 653 self.datatype = None
646 654 self.name = None
647 655 self.inputId = None
648 656
649 657 self.parentId = None
650 658
651 659 self.opConfObjList = []
652 660 self.opObjList = []
653 661
654 662 def getElementName(self):
655 663
656 664 return self.ELEMENTNAME
657 665
658 666 def setup(self, id, name, datatype, path, startDate="", endDate="", startTime="", endTime="", parentId=None, **kwargs):
659 667
660 668 #Compatible with old signal chain version
661 669 if datatype==None and name==None:
662 670 raise ValueError, "datatype or name should be defined"
663 671
664 672 if name==None:
665 673 if 'Reader' in datatype:
666 674 name = datatype
667 675 else:
668 676 name = '%sReader' %(datatype)
669 677
670 678 if datatype==None:
671 679 datatype = name.replace('Reader','')
672 680
673 681 self.id = id
674 682 self.name = name
675 683 self.datatype = datatype
676 684
677 685 self.path = path
678 686 self.startDate = startDate
679 687 self.endDate = endDate
680 688 self.startTime = startTime
681 689 self.endTime = endTime
682 690
683 691 self.inputId = '0'
684 692 self.parentId = parentId
685 693
686 694 self.addRunOperation(**kwargs)
687 695
688 696 def update(self, datatype, path, startDate, endDate, startTime, endTime, parentId=None, name=None, **kwargs):
689 697
690 698 #Compatible with old signal chain version
691 699 if datatype==None and name==None:
692 700 raise ValueError, "datatype or name should be defined"
693 701
694 702 if name==None:
695 703 if 'Reader' in datatype:
696 704 name = datatype
697 705 else:
698 706 name = '%sReader' %(datatype)
699 707
700 708 if datatype==None:
701 709 datatype = name.replace('Reader','')
702 710
703 711 self.datatype = datatype
704 712 self.name = name
705 713 self.path = path
706 714 self.startDate = startDate
707 715 self.endDate = endDate
708 716 self.startTime = startTime
709 717 self.endTime = endTime
710 718
711 719 self.inputId = '0'
712 720 self.parentId = parentId
713 721
714 722 self.updateRunOperation(**kwargs)
715 723
716 724 def addRunOperation(self, **kwargs):
717 725
718 726 opObj = self.addOperation(name = 'run', optype = 'self')
719 727
720 728 opObj.addParameter(name='datatype' , value=self.datatype, format='str')
721 729 opObj.addParameter(name='path' , value=self.path, format='str')
722 730 opObj.addParameter(name='startDate' , value=self.startDate, format='date')
723 731 opObj.addParameter(name='endDate' , value=self.endDate, format='date')
724 732 opObj.addParameter(name='startTime' , value=self.startTime, format='time')
725 733 opObj.addParameter(name='endTime' , value=self.endTime, format='time')
726 734
727 735 for key, value in kwargs.items():
728 736 opObj.addParameter(name=key, value=value, format=type(value).__name__)
729 737
730 738 return opObj
731 739
732 740 def updateRunOperation(self, **kwargs):
733 741
734 742 opObj = self.getOperationObj(name = 'run')
735 743 opObj.removeParameters()
736 744
737 745 opObj.addParameter(name='datatype' , value=self.datatype, format='str')
738 746 opObj.addParameter(name='path' , value=self.path, format='str')
739 747 opObj.addParameter(name='startDate' , value=self.startDate, format='date')
740 748 opObj.addParameter(name='endDate' , value=self.endDate, format='date')
741 749 opObj.addParameter(name='startTime' , value=self.startTime, format='time')
742 750 opObj.addParameter(name='endTime' , value=self.endTime, format='time')
743 751
744 752 for key, value in kwargs.items():
745 753 opObj.addParameter(name=key, value=value, format=type(value).__name__)
746 754
747 755 return opObj
748 756
749 757 class Project():
750 758
751 759 id = None
752 760 name = None
753 761 description = None
754 762 # readUnitConfObjList = None
755 763 procUnitConfObjDict = None
756 764
757 765 ELEMENTNAME = 'Project'
758 766
759 767 def __init__(self, control=None, dataq=None):
760 768
761 769 self.id = None
762 770 self.name = None
763 771 self.description = None
764 772
765 773 self.procUnitConfObjDict = {}
766 774
767 775 #global data_q
768 776 #data_q = dataq
769 777
770 778 if control==None:
771 779 control = {'stop':False,'pause':False}
772 780
773 781 self.control = control
774 782
775 783 def __getNewId(self):
776 784
777 785 id = int(self.id)*10 + len(self.procUnitConfObjDict) + 1
778 786
779 787 return str(id)
780 788
781 789 def getElementName(self):
782 790
783 791 return self.ELEMENTNAME
784 792
785 793 def getId(self):
786 794
787 795 return self.id
788 796
789 797 def updateId(self, new_id):
790 798
791 799 self.id = str(new_id)
792 800
793 801 keyList = self.procUnitConfObjDict.keys()
794 802 keyList.sort()
795 803
796 804 n = 1
797 805 newProcUnitConfObjDict = {}
798 806
799 807 for procKey in keyList:
800 808
801 809 procUnitConfObj = self.procUnitConfObjDict[procKey]
802 810 idProcUnit = str(int(self.id)*10 + n)
803 811 procUnitConfObj.updateId(idProcUnit, parentId = self.id)
804 812
805 813 newProcUnitConfObjDict[idProcUnit] = procUnitConfObj
806 814 n += 1
807 815
808 816 self.procUnitConfObjDict = newProcUnitConfObjDict
809 817
810 818 def setup(self, id, name, description):
811 819
812 820 self.id = str(id)
813 821 self.name = name
814 822 self.description = description
815 823
816 824 def update(self, name, description):
817 825
818 826 self.name = name
819 827 self.description = description
820 828
821 829 def addReadUnit(self, datatype=None, name=None, **kwargs):
822 830
823 831 idReadUnit = self.__getNewId()
824 832
825 833 readUnitConfObj = ReadUnitConf()
826 834 readUnitConfObj.setup(idReadUnit, name, datatype, parentId=self.id, **kwargs)
827 835
828 836 self.procUnitConfObjDict[readUnitConfObj.getId()] = readUnitConfObj
829 837
830 838 return readUnitConfObj
831 839
832 840 def addProcUnit(self, inputId='0', datatype=None, name=None):
833 841
834 842 idProcUnit = self.__getNewId()
835 843
836 844 procUnitConfObj = ProcUnitConf()
837 845 procUnitConfObj.setup(idProcUnit, name, datatype, inputId, parentId=self.id)
838 846
839 847 self.procUnitConfObjDict[procUnitConfObj.getId()] = procUnitConfObj
840 848
841 849 return procUnitConfObj
842 850
843 851 def removeProcUnit(self, id):
844 852
845 853 if id in self.procUnitConfObjDict.keys():
846 854 self.procUnitConfObjDict.pop(id)
847 855
848 856 def getReadUnitId(self):
849 857
850 858 readUnitConfObj = self.getReadUnitObj()
851 859
852 860 return readUnitConfObj.id
853 861
854 862 def getReadUnitObj(self):
855 863
856 864 for obj in self.procUnitConfObjDict.values():
857 865 if obj.getElementName() == "ReadUnit":
858 866 return obj
859 867
860 868 return None
861 869
862 870 def getProcUnitObj(self, id=None, name=None):
863 871
864 872 if id != None:
865 873 return self.procUnitConfObjDict[id]
866 874
867 875 if name != None:
868 876 return self.getProcUnitObjByName(name)
869 877
870 878 return None
871 879
872 880 def getProcUnitObjByName(self, name):
873 881
874 882 for obj in self.procUnitConfObjDict.values():
875 883 if obj.name == name:
876 884 return obj
877 885
878 886 return None
879 887
880 888 def procUnitItems(self):
881 889
882 890 return self.procUnitConfObjDict.items()
883 891
884 892 def makeXml(self):
885 893
886 894 projectElement = Element('Project')
887 895 projectElement.set('id', str(self.id))
888 896 projectElement.set('name', self.name)
889 897 projectElement.set('description', self.description)
890 898
891 899 for procUnitConfObj in self.procUnitConfObjDict.values():
892 900 procUnitConfObj.makeXml(projectElement)
893 901
894 902 self.projectElement = projectElement
895 903
896 904 def writeXml(self, filename):
897 905
898 906 self.makeXml()
899 907
900 908 #print prettify(self.projectElement)
901 909
902 910 ElementTree(self.projectElement).write(filename, method='xml')
903 911
904 912 def readXml(self, filename):
905 913
906 914 self.projectElement = None
907 915 self.procUnitConfObjDict = {}
908 916
909 917 self.projectElement = ElementTree().parse(filename)
910 918
911 919 self.project = self.projectElement.tag
912 920
913 921 self.id = self.projectElement.get('id')
914 922 self.name = self.projectElement.get('name')
915 923 self.description = self.projectElement.get('description')
916 924
917 925 readUnitElementList = self.projectElement.getiterator(ReadUnitConf().getElementName())
918 926
919 927 for readUnitElement in readUnitElementList:
920 928 readUnitConfObj = ReadUnitConf()
921 929 readUnitConfObj.readXml(readUnitElement)
922 930
923 931 if readUnitConfObj.parentId == None:
924 932 readUnitConfObj.parentId = self.id
925 933
926 934 self.procUnitConfObjDict[readUnitConfObj.getId()] = readUnitConfObj
927 935
928 936 procUnitElementList = self.projectElement.getiterator(ProcUnitConf().getElementName())
929 937
930 938 for procUnitElement in procUnitElementList:
931 939 procUnitConfObj = ProcUnitConf()
932 940 procUnitConfObj.readXml(procUnitElement)
933 941
934 942 if procUnitConfObj.parentId == None:
935 943 procUnitConfObj.parentId = self.id
936 944
937 945 self.procUnitConfObjDict[procUnitConfObj.getId()] = procUnitConfObj
938 946
939 947 def printattr(self):
940 948
941 949 print "Project[%s]: name = %s, description = %s" %(self.id,
942 950 self.name,
943 951 self.description)
944 952
945 953 for procUnitConfObj in self.procUnitConfObjDict.values():
946 954 procUnitConfObj.printattr()
947 955
948 956 def createObjects(self):
949 957
950 958 for procUnitConfObj in self.procUnitConfObjDict.values():
951 959 procUnitConfObj.createObjects()
952 960
953 961 def __connect(self, objIN, thisObj):
954 962
955 963 thisObj.setInput(objIN.getOutputObj())
956 964
957 965 def connectObjects(self):
958 966
959 967 for thisPUConfObj in self.procUnitConfObjDict.values():
960 968
961 969 inputId = thisPUConfObj.getInputId()
962 970
963 971 if int(inputId) == 0:
964 972 continue
965 973
966 974 #Get input object
967 975 puConfINObj = self.procUnitConfObjDict[inputId]
968 976 puObjIN = puConfINObj.getProcUnitObj()
969 977
970 978 #Get current object
971 979 thisPUObj = thisPUConfObj.getProcUnitObj()
972 980
973 981 self.__connect(puObjIN, thisPUObj)
974 982
975 983 def run(self):
976 984
977 985 print
978 986 print "*"*40
979 987 print " Starting SIGNAL CHAIN PROCESSING "
980 988 print "*"*40
981 989 print
982 990
983 991 keyList = self.procUnitConfObjDict.keys()
984 992 keyList.sort()
985 993
986 994 while(True):
987 995
988 996 finalSts = False
989 997
990 998 for procKey in keyList:
991 999 # print "Running the '%s' process with %s" %(procUnitConfObj.name, procUnitConfObj.id)
992 1000
993 1001 procUnitConfObj = self.procUnitConfObjDict[procKey]
994 1002 sts = procUnitConfObj.run()
995 1003 finalSts = finalSts or sts
996 1004
997 1005 #If every process unit finished so end process
998 1006 if not(finalSts):
999 1007 print "Every process unit have finished"
1000 1008 break
1001 1009
1002 1010 if self.control['pause']:
1003 1011 print "Process suspended"
1004 1012
1005 1013 while True:
1006 1014 sleep(0.1)
1007 1015
1008 1016 if not self.control['pause']:
1009 1017 break
1010 1018
1011 1019 if self.control['stop']:
1012 1020 break
1013 1021 print "Process reinitialized"
1014 1022
1015 1023 if self.control['stop']:
1016 1024 # print "Process stopped"
1017 1025 break
1018 1026
1019 1027 #Closing every process
1020 1028 for procKey in keyList:
1021 1029 procUnitConfObj = self.procUnitConfObjDict[procKey]
1022 1030 procUnitConfObj.close()
1023 1031
1024 1032 print "Process finished"
1025 1033
1026 1034 def start(self, filename):
1027 1035
1028 1036 self.writeXml(filename)
1029 1037 self.readXml(filename)
1030 1038
1031 1039 self.createObjects()
1032 1040 self.connectObjects()
1033 1041 self.run()
1034 1042
1035 1043 if __name__ == '__main__':
1036 1044
1037 1045 desc = "Segundo Test"
1038 1046 filename = "schain.xml"
1039 1047
1040 1048 controllerObj = Project()
1041 1049
1042 1050 controllerObj.setup(id = '191', name='test01', description=desc)
1043 1051
1044 1052 readUnitConfObj = controllerObj.addReadUnit(datatype='Voltage',
1045 1053 path='data/rawdata/',
1046 1054 startDate='2011/01/01',
1047 1055 endDate='2012/12/31',
1048 1056 startTime='00:00:00',
1049 1057 endTime='23:59:59',
1050 1058 online=1,
1051 1059 walk=1)
1052 1060
1053 1061 procUnitConfObj0 = controllerObj.addProcUnit(datatype='Voltage', inputId=readUnitConfObj.getId())
1054 1062
1055 1063 opObj10 = procUnitConfObj0.addOperation(name='selectChannels')
1056 1064 opObj10.addParameter(name='channelList', value='3,4,5', format='intlist')
1057 1065
1058 1066 opObj10 = procUnitConfObj0.addOperation(name='selectHeights')
1059 1067 opObj10.addParameter(name='minHei', value='90', format='float')
1060 1068 opObj10.addParameter(name='maxHei', value='180', format='float')
1061 1069
1062 1070 opObj12 = procUnitConfObj0.addOperation(name='CohInt', optype='external')
1063 1071 opObj12.addParameter(name='n', value='10', format='int')
1064 1072
1065 1073 procUnitConfObj1 = controllerObj.addProcUnit(datatype='Spectra', inputId=procUnitConfObj0.getId())
1066 1074 procUnitConfObj1.addParameter(name='nFFTPoints', value='32', format='int')
1067 1075 # procUnitConfObj1.addParameter(name='pairList', value='(0,1),(0,2),(1,2)', format='')
1068 1076
1069 1077
1070 1078 opObj11 = procUnitConfObj1.addOperation(name='SpectraPlot', optype='external')
1071 1079 opObj11.addParameter(name='idfigure', value='1', format='int')
1072 1080 opObj11.addParameter(name='wintitle', value='SpectraPlot0', format='str')
1073 1081 opObj11.addParameter(name='zmin', value='40', format='int')
1074 1082 opObj11.addParameter(name='zmax', value='90', format='int')
1075 1083 opObj11.addParameter(name='showprofile', value='1', format='int')
1076 1084
1077 1085 print "Escribiendo el archivo XML"
1078 1086
1079 1087 controllerObj.writeXml(filename)
1080 1088
1081 1089 print "Leyendo el archivo XML"
1082 1090 controllerObj.readXml(filename)
1083 1091 #controllerObj.printattr()
1084 1092
1085 1093 controllerObj.createObjects()
1086 1094 controllerObj.connectObjects()
1087 1095 controllerObj.run()
1088 1096
1089 1097 No newline at end of file
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
General Comments 0
You need to be logged in to leave comments. Login now