##// END OF EJS Templates
GUI - External plotter: Read items while queue is not empty
Miguel Valdez -
r710:22cee43073ff
parent child
Show More

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

1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
@@ -1,137 +1,139
1 '''
1 '''
2 Created on Jul 9, 2014
2 Created on Jul 9, 2014
3
3
4 @author: roj-idl71
4 @author: roj-idl71
5 '''
5 '''
6 import os
6 import os
7 import datetime
7 import datetime
8 import numpy
8 import numpy
9
9
10 from time import sleep
10 from time import sleep
11 from Queue import Queue
11 from Queue import Queue
12 from threading import Lock
12 from threading import Lock
13 # from threading import Thread
13 # from threading import Thread
14
14
15 from schainpy.model.proc.jroproc_base import Operation
15 from schainpy.model.proc.jroproc_base import Operation
16 from schainpy.model.serializer.data import obj2Dict, dict2Obj
16 from schainpy.model.serializer.data import obj2Dict, dict2Obj
17 from jroplot_correlation import *
17 from jroplot_correlation import *
18 from jroplot_heispectra import *
18 from jroplot_heispectra import *
19 from jroplot_parameters import *
19 from jroplot_parameters import *
20 from jroplot_spectra import *
20 from jroplot_spectra import *
21 from jroplot_voltage import *
21 from jroplot_voltage import *
22
22
23
23
24 class Plotter(Operation):
24 class Plotter(Operation):
25
25
26 isConfig = None
26 isConfig = None
27 name = None
27 name = None
28 __queue = None
28 __queue = None
29
29
30 def __init__(self, plotter_name, plotter_queue=None):
30 def __init__(self, plotter_name, plotter_queue=None):
31
31
32 Operation.__init__(self)
32 Operation.__init__(self)
33
33
34 self.isConfig = False
34 self.isConfig = False
35 self.name = plotter_name
35 self.name = plotter_name
36 self.__queue = plotter_queue
36 self.__queue = plotter_queue
37
37
38 def getSubplots(self):
38 def getSubplots(self):
39
39
40 nrow = self.nplots
40 nrow = self.nplots
41 ncol = 1
41 ncol = 1
42 return nrow, ncol
42 return nrow, ncol
43
43
44 def setup(self, **kwargs):
44 def setup(self, **kwargs):
45
45
46 print "Initializing ..."
46 print "Initializing ..."
47
47
48
48
49 def run(self, dataOut, id=None, **kwargs):
49 def run(self, dataOut, id=None, **kwargs):
50
50
51 """
51 """
52
52
53 Input:
53 Input:
54 dataOut :
54 dataOut :
55 id :
55 id :
56 """
56 """
57
57
58 packDict = {}
58 packDict = {}
59
59
60 packDict['id'] = id
60 packDict['id'] = id
61 packDict['name'] = self.name
61 packDict['name'] = self.name
62 packDict['kwargs'] = kwargs
62 packDict['kwargs'] = kwargs
63
63
64 packDict['data'] = obj2Dict(dataOut)
64 packDict['data'] = obj2Dict(dataOut)
65
65
66 self.__queue.put(packDict)
66 self.__queue.put(packDict)
67
67
68 # class PlotManager(Thread):
68 # class PlotManager(Thread):
69 class PlotManager():
69 class PlotManager():
70 __stop = False
70 __stop = False
71
71
72 def __init__(self, plotter_queue):
72 def __init__(self, plotter_queue):
73
73
74 # Thread.__init__(self)
74 # Thread.__init__(self)
75 # self.setDaemon(True)
75 # self.setDaemon(True)
76
76
77 self.__queue = plotter_queue
77 self.__queue = plotter_queue
78 self.__lock = Lock()
78 self.__lock = Lock()
79
79
80 self.plotInstanceDict = {}
80 self.plotInstanceDict = {}
81 self.__stop = False
81 self.__stop = False
82
82
83 def run(self):
83 def run(self):
84
84
85 if self.__queue.empty():
85 if self.__queue.empty():
86 return
86 return
87
87
88 self.__lock.acquire()
88 self.__lock.acquire()
89
89
90 # if self.__queue.full():
90 # if self.__queue.full():
91 # for i in range(int(self.__queue.qsize()/2)):
91 # for i in range(int(self.__queue.qsize()/2)):
92 # serial_data = self.__queue.get()
92 # serial_data = self.__queue.get()
93 # self.__queue.task_done()
93 # self.__queue.task_done()
94
94
95 n = int(self.__queue.qsize()/3 + 1)
95 n = int(self.__queue.qsize()/3 + 1)
96
96
97 for i in range(n):
97 for i in range(n):
98
98
99 serial_data = self.__queue.get()
99 serial_data = self.__queue.get()
100 self.__queue.task_done()
100 self.__queue.task_done()
101
101
102 plot_id = serial_data['id']
102 plot_id = serial_data['id']
103 plot_name = serial_data['name']
103 plot_name = serial_data['name']
104 kwargs = serial_data['kwargs']
104 kwargs = serial_data['kwargs']
105 dataDict = serial_data['data']
105 dataDict = serial_data['data']
106
106
107 dataPlot = dict2Obj(dataDict)
107 dataPlot = dict2Obj(dataDict)
108
108
109 if plot_id not in self.plotInstanceDict.keys():
109 if plot_id not in self.plotInstanceDict.keys():
110 className = eval(plot_name)
110 className = eval(plot_name)
111 self.plotInstanceDict[plot_id] = className()
111 self.plotInstanceDict[plot_id] = className()
112
112
113 plotter = self.plotInstanceDict[plot_id]
113 plotter = self.plotInstanceDict[plot_id]
114 plotter.run(dataPlot, plot_id, **kwargs)
114 plotter.run(dataPlot, plot_id, **kwargs)
115
115
116
117
118 self.__lock.release()
116 self.__lock.release()
119
117
118 def isEmpty(self):
119
120 return self.__queue.empty()
121
120 def stop(self):
122 def stop(self):
121
123
122 self.__lock.acquire()
124 self.__lock.acquire()
123
125
124 self.__stop = True
126 self.__stop = True
125
127
126 self.__lock.release()
128 self.__lock.release()
127
129
128 def close(self):
130 def close(self):
129
131
130 self.__lock.acquire()
132 self.__lock.acquire()
131
133
132 for plot_id in self.plotInstanceDict.keys():
134 for plot_id in self.plotInstanceDict.keys():
133 plotter = self.plotInstanceDict[plot_id]
135 plotter = self.plotInstanceDict[plot_id]
134 plotter.close()
136 plotter.close()
135
137
136 self.__lock.release()
138 self.__lock.release()
137 No newline at end of file
139
General Comments 0
You need to be logged in to leave comments. Login now