##// END OF EJS Templates
Signal Chain GUI: Checking selected project before doing something
Miguel Valdez -
r644:a99cdf95551d
parent child
Show More

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

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