##// END OF EJS Templates
External plotter simplified.
Miguel Valdez -
r716:4b81c4b32e79
parent child
Show More
@@ -823,7 +823,7 class Project():
823
823
824 ELEMENTNAME = 'Project'
824 ELEMENTNAME = 'Project'
825
825
826 __plotterQueue = None
826 plotterQueue = None
827
827
828 def __init__(self, plotter_queue=None):
828 def __init__(self, plotter_queue=None):
829
829
@@ -831,7 +831,7 class Project():
831 self.name = None
831 self.name = None
832 self.description = None
832 self.description = None
833
833
834 self.__plotterQueue = plotter_queue
834 self.plotterQueue = plotter_queue
835
835
836 self.procUnitConfObjDict = {}
836 self.procUnitConfObjDict = {}
837
837
@@ -1046,7 +1046,7 class Project():
1046 def createObjects(self):
1046 def createObjects(self):
1047
1047
1048 for procUnitConfObj in self.procUnitConfObjDict.values():
1048 for procUnitConfObj in self.procUnitConfObjDict.values():
1049 procUnitConfObj.createObjects(self.__plotterQueue)
1049 procUnitConfObj.createObjects(self.plotterQueue)
1050
1050
1051 def __connect(self, objIN, thisObj):
1051 def __connect(self, objIN, thisObj):
1052
1052
@@ -1143,35 +1143,15 class Project():
1143
1143
1144 def setPlotterQueue(self, plotter_queue):
1144 def setPlotterQueue(self, plotter_queue):
1145
1145
1146 self.__plotterQueue = plotter_queue
1146 raise NotImplementedError, "Use schainpy.controller_api.ControllerThread instead Project class"
1147
1147
1148 def getPlotterQueue(self):
1148 def getPlotterQueue(self):
1149
1149
1150 return self.__plotterQueue
1150 raise NotImplementedError, "Use schainpy.controller_api.ControllerThread instead Project class"
1151
1151
1152 def useExternalPlotManager(self):
1152 def useExternalPlotter(self):
1153
1154 plotterList = ['Scope',
1155 'SpectraPlot', 'RTIPlot',
1156 'CrossSpectraPlot', 'CoherenceMap',
1157 'PowerProfilePlot', 'Noise', 'BeaconPhase',
1158 'CorrelationPlot',
1159 'SpectraHeisScope','RTIfromSpectraHeis']
1160
1153
1161 for thisPUConfObj in self.procUnitConfObjDict.values():
1154 raise NotImplementedError, "Use schainpy.controller_api.ControllerThread instead Project class"
1162
1163 inputId = thisPUConfObj.getInputId()
1164
1165 if int(inputId) == 0:
1166 continue
1167
1168 for thisOpObj in thisPUConfObj.getOperationObjList():
1169
1170 if thisOpObj.type == "self":
1171 continue
1172
1173 if thisOpObj.name in plotterList:
1174 thisOpObj.type = "plotter"
1175
1155
1176 def run(self):
1156 def run(self):
1177
1157
@@ -1,6 +1,8
1 import threading
1 import threading
2 import Queue
2
3
3 from schainpy.controller import Project
4 from schainpy.controller import Project
5 from schainpy.model.graphics.jroplotter import PlotManager
4
6
5 class ControllerThread(threading.Thread, Project):
7 class ControllerThread(threading.Thread, Project):
6
8
@@ -71,6 +73,48 class ControllerThread(threading.Thread, Project):
71
73
72 return not self.is_alive()
74 return not self.is_alive()
73
75
76 def setPlotters(self):
77
78 plotterList = ['Scope',
79 'SpectraPlot', 'RTIPlot',
80 'CrossSpectraPlot', 'CoherenceMap',
81 'PowerProfilePlot', 'Noise', 'BeaconPhase',
82 'CorrelationPlot',
83 'SpectraHeisScope','RTIfromSpectraHeis']
84
85 for thisPUConfObj in self.procUnitConfObjDict.values():
86
87 inputId = thisPUConfObj.getInputId()
88
89 if int(inputId) == 0:
90 continue
91
92 for thisOpObj in thisPUConfObj.getOperationObjList():
93
94 if thisOpObj.type == "self":
95 continue
96
97 if thisOpObj.name in plotterList:
98 thisOpObj.type = "plotter"
99
100 def setPlotterQueue(self, plotter_queue):
101
102 self.plotterQueue = plotter_queue
103
104 def getPlotterQueue(self):
105
106 return self.plotterQueue
107
108 def useExternalPlotter(self):
109
110 self.plotterQueue = Queue.Queue(10)
111 self.setPlotters()
112
113 plotManagerObj = PlotManager(self.plotterQueue)
114 plotManagerObj.setController(self)
115
116 return plotManagerObj
117
74 # from PyQt4 import QtCore
118 # from PyQt4 import QtCore
75 # from PyQt4.QtCore import SIGNAL
119 # from PyQt4.QtCore import SIGNAL
76 #
120 #
@@ -4685,16 +4685,12 class BasicWindow(QMainWindow, Ui_BasicWindow):
4685
4685
4686 def use_plotmanager(self, controllerThread):
4686 def use_plotmanager(self, controllerThread):
4687
4687
4688 plotter_queue = Queue(10)
4688 self.plotManager = controllerThread.useExternalPlotter()
4689 controllerThread.setPlotterQueue(plotter_queue)
4690 controllerThread.useExternalPlotManager()
4691
4692 self.plotManager = PlotManager(plotter_queue)
4693
4689
4694 self.plot_timer = QtCore.QTimer()
4690 self.plot_timer = QtCore.QTimer()
4695 self.plot_timer.timeout.connect(self.on_plotmanager_timer)
4691 self.plot_timer.timeout.connect(self.on_plotmanager_timer)
4696 self.plot_timer.start(10)
4692 self.plot_timer.start(10)
4697
4693
4698 def on_plotmanager_timer(self):
4694 def on_plotmanager_timer(self):
4699
4695
4700 if not self.plotManager:
4696 if not self.plotManager:
@@ -4750,11 +4746,9 class BasicWindow(QMainWindow, Ui_BasicWindow):
4750
4746
4751 self.threadStarted = False
4747 self.threadStarted = False
4752 self.controllerThread.stop()
4748 self.controllerThread.stop()
4749 self.plot_timer.stop()
4753
4750
4754 while not self.plotManager.isEmpty():
4751 self.plotManager.join()
4755 self.plotManager.run()
4756
4757 self.plotManager.close()
4758 self.plotManager = None
4752 self.plotManager = None
4759
4753
4760 while self.controllerThread.isRunning():
4754 while self.controllerThread.isRunning():
@@ -68,6 +68,7 class Plotter(Operation):
68 # class PlotManager(Thread):
68 # class PlotManager(Thread):
69 class PlotManager():
69 class PlotManager():
70 __stop = False
70 __stop = False
71 controllerThreadObj = None
71
72
72 def __init__(self, plotter_queue):
73 def __init__(self, plotter_queue):
73
74
@@ -96,6 +97,9 class PlotManager():
96
97
97 for i in range(n):
98 for i in range(n):
98
99
100 if self.__queue.empty():
101 break
102
99 serial_data = self.__queue.get()
103 serial_data = self.__queue.get()
100 self.__queue.task_done()
104 self.__queue.task_done()
101
105
@@ -136,4 +140,28 class PlotManager():
136 plotter.close()
140 plotter.close()
137
141
138 self.__lock.release()
142 self.__lock.release()
139 No newline at end of file
143
144 def setController(self, controllerThreadObj):
145
146 self.controllerThreadObj = controllerThreadObj
147
148 def start(self):
149
150 if not self.controllerThreadObj.isRunning():
151 raise RuntimeError, "controllerThreadObj has not been initialized. Use controllerThreadObj.start() before call this method"
152
153 self.join()
154
155 def join(self):
156
157 #Execute plotter while controller is running
158 while self.controllerThreadObj.isRunning():
159 self.run()
160
161 self.controllerThreadObj.stop()
162
163 #Wait until plotter queue is empty
164 while not self.isEmpty():
165 self.run()
166
167 self.close() No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now