##// END OF EJS Templates
Version 2.2.5
Miguel Valdez -
r827:7c8bc1e62102
parent child
Show More
@@ -1,79 +1,84
1 VERSIONS:
1 VERSIONS:
2
2
3 2.1.2:
3 2.1.2:
4 -jroutils_ftp.py: Bug fixed, Any error sending file stopped the Server Thread
4 -jroutils_ftp.py: Bug fixed, Any error sending file stopped the Server Thread
5 Server thread opens and closes remote server each time file list is sent
5 Server thread opens and closes remote server each time file list is sent
6 -jroplot_spectra.py: Noise path was not being created when noise data is saved.
6 -jroplot_spectra.py: Noise path was not being created when noise data is saved.
7 -jroIO_base.py: startTime can be greater than endTime. Example: SpreadF [18:00 - 07:00]
7 -jroIO_base.py: startTime can be greater than endTime. Example: SpreadF [18:00 - 07:00]
8
8
9 2.1.3:
9 2.1.3:
10 -jroplot_heispectra.py: SpectraHeisScope was not showing the right channels
10 -jroplot_heispectra.py: SpectraHeisScope was not showing the right channels
11 -jroproc_voltage.py: Bug fixed selecting profiles (self.nProfiles took a wrong value),
11 -jroproc_voltage.py: Bug fixed selecting profiles (self.nProfiles took a wrong value),
12 Bug fixed selecting heights by block (selecting profiles instead heights)
12 Bug fixed selecting heights by block (selecting profiles instead heights)
13 -jroproc_voltage.py: New feature added: decoding data by block using FFT.
13 -jroproc_voltage.py: New feature added: decoding data by block using FFT.
14 -jroIO_heispectra.py: Bug fixed in FitsReader. Using local Fits instance instead schainpy.mode.data.jrodata.Fits.
14 -jroIO_heispectra.py: Bug fixed in FitsReader. Using local Fits instance instead schainpy.mode.data.jrodata.Fits.
15 -jroIO_heispectra.py: Channel index list does not exist.
15 -jroIO_heispectra.py: Channel index list does not exist.
16
16
17 2.1.3.1:
17 2.1.3.1:
18 -GUI: every icon were resized
18 -GUI: every icon were resized
19 -jroproc_voltage.py: Print a message when "Read from code" option is selected and the code is not defined inside data file
19 -jroproc_voltage.py: Print a message when "Read from code" option is selected and the code is not defined inside data file
20
20
21 2.1.3.2:
21 2.1.3.2:
22 -GUI: user interaction enhanced
22 -GUI: user interaction enhanced
23 -controller_api.py: Safe access to ControllerThead
23 -controller_api.py: Safe access to ControllerThead
24
24
25 2.1.3.3:
25 2.1.3.3:
26 -Colored Button Icons were added to GUI
26 -Colored Button Icons were added to GUI
27
27
28 2.1.4:
28 2.1.4:
29 -Sending error notifications to signal chain administrator
29 -Sending error notifications to signal chain administrator
30 -Login to email server added
30 -Login to email server added
31
31
32 2.1.4.1:
32 2.1.4.1:
33 -Send notifications when an error different to ValueError is detected
33 -Send notifications when an error different to ValueError is detected
34
34
35 2.1.4.2:
35 2.1.4.2:
36 -A new Plotter Class was added
36 -A new Plotter Class was added
37 -Project.start() does not accept filename as a parameter anymore
37 -Project.start() does not accept filename as a parameter anymore
38
38
39 2.1.5:
39 2.1.5:
40 -serializer module added to Signal Chain
40 -serializer module added to Signal Chain
41 -jroplotter.py added to Signal Chain
41 -jroplotter.py added to Signal Chain
42
42
43 2.2.0:
43 2.2.0:
44 -GUI: use of external plotter
44 -GUI: use of external plotter
45 -Compatible with matplotlib 1.5.0
45 -Compatible with matplotlib 1.5.0
46
46
47 2.2.1:
47 2.2.1:
48 -Bugs fixed in GUI
48 -Bugs fixed in GUI
49 -Views were improved in GUI
49 -Views were improved in GUI
50 -Support to MST-ISR experiments
50 -Support to MST-ISR experiments
51 -Bug fixed getting noise using hyldebrant. (minimum number of points > 20%)
51 -Bug fixed getting noise using hyldebrant. (minimum number of points > 20%)
52 -handleError added to jroplotter.py
52 -handleError added to jroplotter.py
53
53
54 2.2.2:
54 2.2.2:
55 -VoltageProc: ProfileSelector, Reshape, Decoder with nTxs!=1 and getblock=True was tested
55 -VoltageProc: ProfileSelector, Reshape, Decoder with nTxs!=1 and getblock=True was tested
56 -Rawdata and testRawdata.py added to Signal Chain project
56 -Rawdata and testRawdata.py added to Signal Chain project
57
57
58 2.2.3:
58 2.2.3:
59 -Bug fixed in GUI: Error getting(reading) Code value
59 -Bug fixed in GUI: Error getting(reading) Code value
60 -Bug fixed in GUI: Flip option always needs channelList field
60 -Bug fixed in GUI: Flip option always needs channelList field
61 -Bug fixed in jrodata: when one branch modified a value in "dataOut" (example: dataOut.code) this value
61 -Bug fixed in jrodata: when one branch modified a value in "dataOut" (example: dataOut.code) this value
62 was modified for every branch (because this was a reference). It was modified in data.copy()
62 was modified for every branch (because this was a reference). It was modified in data.copy()
63 -Bug fixed in jroproc_voltage.profileSelector(): rangeList replaces to profileRangeList.
63 -Bug fixed in jroproc_voltage.profileSelector(): rangeList replaces to profileRangeList.
64
64
65
65
66 2.2.3.1:
66 2.2.3.1:
67 -Filtering block by time has been added.
67 -Filtering block by time has been added.
68 -Bug fixed plotting RTI, CoherenceMap and others using xmin and xmax parameters. The first day worked
68 -Bug fixed plotting RTI, CoherenceMap and others using xmin and xmax parameters. The first day worked
69 properly but the next days did not.
69 properly but the next days did not.
70
70
71 2.2.4:
71 2.2.4:
72 -jroproc_spectra_lags.py added to schainpy
72 -jroproc_spectra_lags.py added to schainpy
73 -Bug fixed in schainGUI: ProcUnit was created with the same id in some cases.
73 -Bug fixed in schainGUI: ProcUnit was created with the same id in some cases.
74 -Bug fixed in jroHeaderIO: Header size validation.
74 -Bug fixed in jroHeaderIO: Header size validation.
75
75
76 2.2.4.1:
76 2.2.4.1:
77 -jroIO_usrp.py is update to read Sandra's data
77 -jroIO_usrp.py is update to read Sandra's data
78 -decimation in Spectra and RTI plots is always enabled.
78 -decimation in Spectra and RTI plots is always enabled.
79 -time-window option added to GUI No newline at end of file
79 -time-window option added to GUI
80
81 2.2.5:
82 -splitProfiles and combineProfiles modules were added to VoltageProc and Signal Chain GUI.
83 -nProfiles of USRP data (hdf5) is the number of profiles thera are in one second.
84 -jroPlotter works directly with data objects instead of dictionaries No newline at end of file
@@ -1,7 +1,7
1 '''
1 '''
2 Created on Feb 7, 2012
2 Created on Feb 7, 2012
3
3
4 @author $Author$
4 @author $Author$
5 @version $Id$
5 @version $Id$
6 '''
6 '''
7 __version__ = "2.2.4.1" No newline at end of file
7 __version__ = "2.2.5" No newline at end of file
@@ -1,179 +1,179
1 import threading
1 import threading
2 import Queue
2 from Queue import Queue
3
3
4 from schainpy.controller import Project
4 from schainpy.controller import Project
5 from schainpy.model.graphics.jroplotter import PlotManager
5 from schainpy.model.graphics.jroplotter import PlotManager
6
6
7 class ControllerThread(threading.Thread, Project):
7 class ControllerThread(threading.Thread, Project):
8
8
9 def __init__(self, plotter_queue=None):
9 def __init__(self, plotter_queue=None):
10
10
11 threading.Thread.__init__(self)
11 threading.Thread.__init__(self)
12 Project.__init__(self, plotter_queue)
12 Project.__init__(self, plotter_queue)
13
13
14 self.setDaemon(True)
14 self.setDaemon(True)
15
15
16 self.lock = threading.Lock()
16 self.lock = threading.Lock()
17 self.control = {'stop':False, 'pause':False}
17 self.control = {'stop':False, 'pause':False}
18
18
19 def __del__(self):
19 def __del__(self):
20
20
21 self.control['stop'] = True
21 self.control['stop'] = True
22
22
23 def stop(self):
23 def stop(self):
24
24
25 self.lock.acquire()
25 self.lock.acquire()
26
26
27 self.control['stop'] = True
27 self.control['stop'] = True
28
28
29 self.lock.release()
29 self.lock.release()
30
30
31 def pause(self):
31 def pause(self):
32
32
33 self.lock.acquire()
33 self.lock.acquire()
34
34
35 self.control['pause'] = not(self.control['pause'])
35 self.control['pause'] = not(self.control['pause'])
36 paused = self.control['pause']
36 paused = self.control['pause']
37
37
38 self.lock.release()
38 self.lock.release()
39
39
40 return paused
40 return paused
41
41
42 def isPaused(self):
42 def isPaused(self):
43
43
44 self.lock.acquire()
44 self.lock.acquire()
45 paused = self.control['pause']
45 paused = self.control['pause']
46 self.lock.release()
46 self.lock.release()
47
47
48 return paused
48 return paused
49
49
50 def isStopped(self):
50 def isStopped(self):
51
51
52 self.lock.acquire()
52 self.lock.acquire()
53 stopped = self.control['stop']
53 stopped = self.control['stop']
54 self.lock.release()
54 self.lock.release()
55
55
56 return stopped
56 return stopped
57
57
58 def run(self):
58 def run(self):
59 self.control['stop'] = False
59 self.control['stop'] = False
60 self.control['pause'] = False
60 self.control['pause'] = False
61
61
62 self.writeXml()
62 self.writeXml()
63
63
64 self.createObjects()
64 self.createObjects()
65 self.connectObjects()
65 self.connectObjects()
66 Project.run(self)
66 Project.run(self)
67
67
68 def isRunning(self):
68 def isRunning(self):
69
69
70 return self.is_alive()
70 return self.is_alive()
71
71
72 def isFinished(self):
72 def isFinished(self):
73
73
74 return not self.is_alive()
74 return not self.is_alive()
75
75
76 def setPlotters(self):
76 def setPlotters(self):
77
77
78 plotterList = PlotManager.plotterList
78 plotterList = PlotManager.plotterList
79
79
80 for thisPUConfObj in self.procUnitConfObjDict.values():
80 for thisPUConfObj in self.procUnitConfObjDict.values():
81
81
82 inputId = thisPUConfObj.getInputId()
82 inputId = thisPUConfObj.getInputId()
83
83
84 if int(inputId) == 0:
84 if int(inputId) == 0:
85 continue
85 continue
86
86
87 for thisOpObj in thisPUConfObj.getOperationObjList():
87 for thisOpObj in thisPUConfObj.getOperationObjList():
88
88
89 if thisOpObj.type == "self":
89 if thisOpObj.type == "self":
90 continue
90 continue
91
91
92 if thisOpObj.name in plotterList:
92 if thisOpObj.name in plotterList:
93 thisOpObj.type = "plotter"
93 thisOpObj.type = "plotter"
94
94
95 def setPlotterQueue(self, plotter_queue):
95 def setPlotterQueue(self, plotter_queue):
96
96
97 self.plotterQueue = plotter_queue
97 self.plotterQueue = plotter_queue
98
98
99 def getPlotterQueue(self):
99 def getPlotterQueue(self):
100
100
101 return self.plotterQueue
101 return self.plotterQueue
102
102
103 def useExternalPlotter(self):
103 def useExternalPlotter(self):
104
104
105 self.plotterQueue = Queue.Queue(10)
105 self.plotterQueue = Queue(10)
106 self.setPlotters()
106 self.setPlotters()
107
107
108 plotManagerObj = PlotManager(self.plotterQueue)
108 plotManagerObj = PlotManager(self.plotterQueue)
109 plotManagerObj.setController(self)
109 plotManagerObj.setController(self)
110
110
111 return plotManagerObj
111 return plotManagerObj
112
112
113 # from PyQt4 import QtCore
113 # from PyQt4 import QtCore
114 # from PyQt4.QtCore import SIGNAL
114 # from PyQt4.QtCore import SIGNAL
115 #
115 #
116 # class ControllerQThread(QtCore.QThread, Project):
116 # class ControllerQThread(QtCore.QThread, Project):
117 #
117 #
118 # def __init__(self, filename):
118 # def __init__(self, filename):
119 #
119 #
120 # QtCore.QThread.__init__(self)
120 # QtCore.QThread.__init__(self)
121 # Project.__init__(self)
121 # Project.__init__(self)
122 #
122 #
123 # self.filename = filename
123 # self.filename = filename
124 #
124 #
125 # self.lock = threading.Lock()
125 # self.lock = threading.Lock()
126 # self.control = {'stop':False, 'pause':False}
126 # self.control = {'stop':False, 'pause':False}
127 #
127 #
128 # def __del__(self):
128 # def __del__(self):
129 #
129 #
130 # self.control['stop'] = True
130 # self.control['stop'] = True
131 # self.wait()
131 # self.wait()
132 #
132 #
133 # def stop(self):
133 # def stop(self):
134 #
134 #
135 # self.lock.acquire()
135 # self.lock.acquire()
136 #
136 #
137 # self.control['stop'] = True
137 # self.control['stop'] = True
138 #
138 #
139 # self.lock.release()
139 # self.lock.release()
140 #
140 #
141 # def pause(self):
141 # def pause(self):
142 #
142 #
143 # self.lock.acquire()
143 # self.lock.acquire()
144 #
144 #
145 # self.control['pause'] = not(self.control['pause'])
145 # self.control['pause'] = not(self.control['pause'])
146 # paused = self.control['pause']
146 # paused = self.control['pause']
147 #
147 #
148 # self.lock.release()
148 # self.lock.release()
149 #
149 #
150 # return paused
150 # return paused
151 #
151 #
152 # def isPaused(self):
152 # def isPaused(self):
153 #
153 #
154 # self.lock.acquire()
154 # self.lock.acquire()
155 # paused = self.control['pause']
155 # paused = self.control['pause']
156 # self.lock.release()
156 # self.lock.release()
157 #
157 #
158 # return paused
158 # return paused
159 #
159 #
160 # def isStopped(self):
160 # def isStopped(self):
161 #
161 #
162 # self.lock.acquire()
162 # self.lock.acquire()
163 # stopped = self.control['stop']
163 # stopped = self.control['stop']
164 # self.lock.release()
164 # self.lock.release()
165 #
165 #
166 # return stopped
166 # return stopped
167 #
167 #
168 # def run(self):
168 # def run(self):
169 #
169 #
170 # self.control['stop'] = False
170 # self.control['stop'] = False
171 # self.control['pause'] = False
171 # self.control['pause'] = False
172 #
172 #
173 # self.readXml(self.filename)
173 # self.readXml(self.filename)
174 # self.createObjects()
174 # self.createObjects()
175 # self.connectObjects()
175 # self.connectObjects()
176 # self.emit( SIGNAL( "jobStarted( PyQt_PyObject )" ), 1)
176 # self.emit( SIGNAL( "jobStarted( PyQt_PyObject )" ), 1)
177 # Project.run(self)
177 # Project.run(self)
178 # self.emit( SIGNAL( "jobFinished( PyQt_PyObject )" ), 1)
178 # self.emit( SIGNAL( "jobFinished( PyQt_PyObject )" ), 1)
179 # No newline at end of file
179 #
General Comments 0
You need to be logged in to leave comments. Login now