##// END OF EJS Templates
funcionando en mi compu
José Chávez -
r900:75bc6c54930e
parent child
Show More
@@ -1,11 +1,10
1 ## ROADMAP
1 ROADMAP FOR SCHAIN BRANCHES
2 ## SCHAIN BRANCHES
2 ===============================
3
3 <Enter>
4 ### BRANCH - SCHAIN_MP
4 ### BRANCH - SCHAIN_MP
5
6 * Revisar si funciona con varios publishers.
5 * Revisar si funciona con varios publishers.
7 * Revisar xRange y reinicialización de gráfico.
6 * Revisar xRange y reinicialización de gráfico.
8 * Grabar cada spectra independientemente.
7 * Grabar cada spectra independientemente.
9 * Agregar kwargs al init
8 * Agregar kwargs al init
10 * Agregar gráficos restantes
9 * Agregar gráficos restantes
11 * Presentación
10 * Presentación
@@ -1,382 +1,383
1 '''
1 '''
2 @author: Juan C. Espinoza
2 @author: Juan C. Espinoza
3 '''
3 '''
4
4
5 import time
5 import time
6 import json
6 import json
7 import numpy
7 import numpy
8 import paho.mqtt.client as mqtt
8 import paho.mqtt.client as mqtt
9 import zmq
9 import zmq
10 import cPickle as pickle
10 import cPickle as pickle
11 import datetime
11 import datetime
12 from zmq.utils.monitor import recv_monitor_message
12 from zmq.utils.monitor import recv_monitor_message
13 from functools import wraps
13 from functools import wraps
14 from threading import Thread
14 from threading import Thread
15 from multiprocessing import Process
15 from multiprocessing import Process
16
16
17 from schainpy.model.proc.jroproc_base import Operation, ProcessingUnit
17 from schainpy.model.proc.jroproc_base import Operation, ProcessingUnit
18
18
19 MAXNUMX = 100
19 MAXNUMX = 100
20 MAXNUMY = 100
20 MAXNUMY = 100
21
21
22 class PrettyFloat(float):
22 class PrettyFloat(float):
23 def __repr__(self):
23 def __repr__(self):
24 return '%.2f' % self
24 return '%.2f' % self
25
25
26 def roundFloats(obj):
26 def roundFloats(obj):
27 if isinstance(obj, list):
27 if isinstance(obj, list):
28 return map(roundFloats, obj)
28 return map(roundFloats, obj)
29 elif isinstance(obj, float):
29 elif isinstance(obj, float):
30 return round(obj, 2)
30 return round(obj, 2)
31
31
32
32
33 class throttle(object):
33 class throttle(object):
34 """Decorator that prevents a function from being called more than once every
34 """Decorator that prevents a function from being called more than once every
35 time period.
35 time period.
36 To create a function that cannot be called more than once a minute, but
36 To create a function that cannot be called more than once a minute, but
37 will sleep until it can be called:
37 will sleep until it can be called:
38 @throttle(minutes=1)
38 @throttle(minutes=1)
39 def foo():
39 def foo():
40 pass
40 pass
41
41
42 for i in range(10):
42 for i in range(10):
43 foo()
43 foo()
44 print "This function has run %s times." % i
44 print "This function has run %s times." % i
45 """
45 """
46
46
47 def __init__(self, seconds=0, minutes=0, hours=0):
47 def __init__(self, seconds=0, minutes=0, hours=0):
48 self.throttle_period = datetime.timedelta(
48 self.throttle_period = datetime.timedelta(
49 seconds=seconds, minutes=minutes, hours=hours
49 seconds=seconds, minutes=minutes, hours=hours
50 )
50 )
51
51
52 self.time_of_last_call = datetime.datetime.min
52 self.time_of_last_call = datetime.datetime.min
53
53
54 def __call__(self, fn):
54 def __call__(self, fn):
55 @wraps(fn)
55 @wraps(fn)
56 def wrapper(*args, **kwargs):
56 def wrapper(*args, **kwargs):
57 now = datetime.datetime.now()
57 now = datetime.datetime.now()
58 time_since_last_call = now - self.time_of_last_call
58 time_since_last_call = now - self.time_of_last_call
59 time_left = self.throttle_period - time_since_last_call
59 time_left = self.throttle_period - time_since_last_call
60
60
61 if time_left > datetime.timedelta(seconds=0):
61 if time_left > datetime.timedelta(seconds=0):
62 return
62 return
63
63
64 self.time_of_last_call = datetime.datetime.now()
64 self.time_of_last_call = datetime.datetime.now()
65 return fn(*args, **kwargs)
65 return fn(*args, **kwargs)
66
66
67 return wrapper
67 return wrapper
68
68
69
69
70 class PublishData(Operation):
70 class PublishData(Operation):
71 """Clase publish."""
71 """Clase publish."""
72
72
73 def __init__(self, **kwargs):
73 def __init__(self, **kwargs):
74 """Inicio."""
74 """Inicio."""
75 Operation.__init__(self, **kwargs)
75 Operation.__init__(self, **kwargs)
76 self.isConfig = False
76 self.isConfig = False
77 self.client = None
77 self.client = None
78 self.zeromq = None
78 self.zeromq = None
79 self.mqtt = None
79 self.mqtt = None
80
80
81 def on_disconnect(self, client, userdata, rc):
81 def on_disconnect(self, client, userdata, rc):
82 if rc != 0:
82 if rc != 0:
83 print("Unexpected disconnection.")
83 print("Unexpected disconnection.")
84 self.connect()
84 self.connect()
85
85
86 def connect(self):
86 def connect(self):
87 print 'trying to connect'
87 print 'trying to connect'
88 try:
88 try:
89 self.client.connect(
89 self.client.connect(
90 host=self.host,
90 host=self.host,
91 port=self.port,
91 port=self.port,
92 keepalive=60*10,
92 keepalive=60*10,
93 bind_address='')
93 bind_address='')
94 self.client.loop_start()
94 self.client.loop_start()
95 # self.client.publish(
95 # self.client.publish(
96 # self.topic + 'SETUP',
96 # self.topic + 'SETUP',
97 # json.dumps(setup),
97 # json.dumps(setup),
98 # retain=True
98 # retain=True
99 # )
99 # )
100 except:
100 except:
101 print "MQTT Conection error."
101 print "MQTT Conection error."
102 self.client = False
102 self.client = False
103
103
104 def setup(self, port=1883, username=None, password=None, clientId="user", zeromq=1, **kwargs):
104 def setup(self, port=1883, username=None, password=None, clientId="user", zeromq=1, **kwargs):
105 self.counter = 0
105 self.counter = 0
106 self.topic = kwargs.get('topic', 'schain')
106 self.topic = kwargs.get('topic', 'schain')
107 self.delay = kwargs.get('delay', 0)
107 self.delay = kwargs.get('delay', 0)
108 self.plottype = kwargs.get('plottype', 'spectra')
108 self.plottype = kwargs.get('plottype', 'spectra')
109 self.host = kwargs.get('host', "10.10.10.82")
109 self.host = kwargs.get('host', "10.10.10.82")
110 self.port = kwargs.get('port', 3000)
110 self.port = kwargs.get('port', 3000)
111 self.clientId = clientId
111 self.clientId = clientId
112 self.cnt = 0
112 self.cnt = 0
113 self.zeromq = zeromq
113 self.zeromq = zeromq
114 self.mqtt = kwargs.get('plottype', 0)
114 self.mqtt = kwargs.get('plottype', 0)
115 self.client = None
115 self.client = None
116 setup = []
116 setup = []
117 if mqtt is 1:
117 if mqtt is 1:
118 self.client = mqtt.Client(
118 self.client = mqtt.Client(
119 client_id=self.clientId + self.topic + 'SCHAIN',
119 client_id=self.clientId + self.topic + 'SCHAIN',
120 clean_session=True)
120 clean_session=True)
121 self.client.on_disconnect = self.on_disconnect
121 self.client.on_disconnect = self.on_disconnect
122 self.connect()
122 self.connect()
123 for plot in self.plottype:
123 for plot in self.plottype:
124 setup.append({
124 setup.append({
125 'plot': plot,
125 'plot': plot,
126 'topic': self.topic + plot,
126 'topic': self.topic + plot,
127 'title': getattr(self, plot + '_' + 'title', False),
127 'title': getattr(self, plot + '_' + 'title', False),
128 'xlabel': getattr(self, plot + '_' + 'xlabel', False),
128 'xlabel': getattr(self, plot + '_' + 'xlabel', False),
129 'ylabel': getattr(self, plot + '_' + 'ylabel', False),
129 'ylabel': getattr(self, plot + '_' + 'ylabel', False),
130 'xrange': getattr(self, plot + '_' + 'xrange', False),
130 'xrange': getattr(self, plot + '_' + 'xrange', False),
131 'yrange': getattr(self, plot + '_' + 'yrange', False),
131 'yrange': getattr(self, plot + '_' + 'yrange', False),
132 'zrange': getattr(self, plot + '_' + 'zrange', False),
132 'zrange': getattr(self, plot + '_' + 'zrange', False),
133 })
133 })
134 if zeromq is 1:
134 if zeromq is 1:
135 context = zmq.Context()
135 context = zmq.Context()
136 self.zmq_socket = context.socket(zmq.PUSH)
136 self.zmq_socket = context.socket(zmq.PUSH)
137 server = kwargs.get('server', 'zmq.pipe')
137 server = kwargs.get('server', 'zmq.pipe')
138
138
139 if 'tcp://' in server:
139 if 'tcp://' in server:
140 address = server
140 address = server
141 else:
141 else:
142 address = 'ipc:///tmp/%s' % server
142 address = 'ipc:///tmp/%s' % server
143
143
144 self.zmq_socket.connect(address)
144 self.zmq_socket.connect(address)
145 time.sleep(1)
145 time.sleep(1)
146
146
147
147
148
148 def publish_data(self):
149 def publish_data(self):
149 self.dataOut.finished = False
150 self.dataOut.finished = False
150 if self.mqtt is 1:
151 if self.mqtt is 1:
151 yData = self.dataOut.heightList[:2].tolist()
152 yData = self.dataOut.heightList[:2].tolist()
152 if self.plottype == 'spectra':
153 if self.plottype == 'spectra':
153 data = getattr(self.dataOut, 'data_spc')
154 data = getattr(self.dataOut, 'data_spc')
154 z = data/self.dataOut.normFactor
155 z = data/self.dataOut.normFactor
155 zdB = 10*numpy.log10(z)
156 zdB = 10*numpy.log10(z)
156 xlen, ylen = zdB[0].shape
157 xlen, ylen = zdB[0].shape
157 dx = int(xlen/MAXNUMX) + 1
158 dx = int(xlen/MAXNUMX) + 1
158 dy = int(ylen/MAXNUMY) + 1
159 dy = int(ylen/MAXNUMY) + 1
159 Z = [0 for i in self.dataOut.channelList]
160 Z = [0 for i in self.dataOut.channelList]
160 for i in self.dataOut.channelList:
161 for i in self.dataOut.channelList:
161 Z[i] = zdB[i][::dx, ::dy].tolist()
162 Z[i] = zdB[i][::dx, ::dy].tolist()
162 payload = {
163 payload = {
163 'timestamp': self.dataOut.utctime,
164 'timestamp': self.dataOut.utctime,
164 'data': roundFloats(Z),
165 'data': roundFloats(Z),
165 'channels': ['Ch %s' % ch for ch in self.dataOut.channelList],
166 'channels': ['Ch %s' % ch for ch in self.dataOut.channelList],
166 'interval': self.dataOut.getTimeInterval(),
167 'interval': self.dataOut.getTimeInterval(),
167 'type': self.plottype,
168 'type': self.plottype,
168 'yData': yData
169 'yData': yData
169 }
170 }
170 # print payload
171 # print payload
171
172
172 elif self.plottype in ('rti', 'power'):
173 elif self.plottype in ('rti', 'power'):
173 data = getattr(self.dataOut, 'data_spc')
174 data = getattr(self.dataOut, 'data_spc')
174 z = data/self.dataOut.normFactor
175 z = data/self.dataOut.normFactor
175 avg = numpy.average(z, axis=1)
176 avg = numpy.average(z, axis=1)
176 avgdB = 10*numpy.log10(avg)
177 avgdB = 10*numpy.log10(avg)
177 xlen, ylen = z[0].shape
178 xlen, ylen = z[0].shape
178 dy = numpy.floor(ylen/self.__MAXNUMY) + 1
179 dy = numpy.floor(ylen/self.__MAXNUMY) + 1
179 AVG = [0 for i in self.dataOut.channelList]
180 AVG = [0 for i in self.dataOut.channelList]
180 for i in self.dataOut.channelList:
181 for i in self.dataOut.channelList:
181 AVG[i] = avgdB[i][::dy].tolist()
182 AVG[i] = avgdB[i][::dy].tolist()
182 payload = {
183 payload = {
183 'timestamp': self.dataOut.utctime,
184 'timestamp': self.dataOut.utctime,
184 'data': roundFloats(AVG),
185 'data': roundFloats(AVG),
185 'channels': ['Ch %s' % ch for ch in self.dataOut.channelList],
186 'channels': ['Ch %s' % ch for ch in self.dataOut.channelList],
186 'interval': self.dataOut.getTimeInterval(),
187 'interval': self.dataOut.getTimeInterval(),
187 'type': self.plottype,
188 'type': self.plottype,
188 'yData': yData
189 'yData': yData
189 }
190 }
190 elif self.plottype == 'noise':
191 elif self.plottype == 'noise':
191 noise = self.dataOut.getNoise()/self.dataOut.normFactor
192 noise = self.dataOut.getNoise()/self.dataOut.normFactor
192 noisedB = 10*numpy.log10(noise)
193 noisedB = 10*numpy.log10(noise)
193 payload = {
194 payload = {
194 'timestamp': self.dataOut.utctime,
195 'timestamp': self.dataOut.utctime,
195 'data': roundFloats(noisedB.reshape(-1, 1).tolist()),
196 'data': roundFloats(noisedB.reshape(-1, 1).tolist()),
196 'channels': ['Ch %s' % ch for ch in self.dataOut.channelList],
197 'channels': ['Ch %s' % ch for ch in self.dataOut.channelList],
197 'interval': self.dataOut.getTimeInterval(),
198 'interval': self.dataOut.getTimeInterval(),
198 'type': self.plottype,
199 'type': self.plottype,
199 'yData': yData
200 'yData': yData
200 }
201 }
201 elif self.plottype == 'snr':
202 elif self.plottype == 'snr':
202 data = getattr(self.dataOut, 'data_SNR')
203 data = getattr(self.dataOut, 'data_SNR')
203 avgdB = 10*numpy.log10(data)
204 avgdB = 10*numpy.log10(data)
204
205
205 ylen = data[0].size
206 ylen = data[0].size
206 dy = numpy.floor(ylen/self.__MAXNUMY) + 1
207 dy = numpy.floor(ylen/self.__MAXNUMY) + 1
207 AVG = [0 for i in self.dataOut.channelList]
208 AVG = [0 for i in self.dataOut.channelList]
208 for i in self.dataOut.channelList:
209 for i in self.dataOut.channelList:
209 AVG[i] = avgdB[i][::dy].tolist()
210 AVG[i] = avgdB[i][::dy].tolist()
210 payload = {
211 payload = {
211 'timestamp': self.dataOut.utctime,
212 'timestamp': self.dataOut.utctime,
212 'data': roundFloats(AVG),
213 'data': roundFloats(AVG),
213 'channels': ['Ch %s' % ch for ch in self.dataOut.channelList],
214 'channels': ['Ch %s' % ch for ch in self.dataOut.channelList],
214 'type': self.plottype,
215 'type': self.plottype,
215 'yData': yData
216 'yData': yData
216 }
217 }
217 else:
218 else:
218 print "Tipo de grafico invalido"
219 print "Tipo de grafico invalido"
219 payload = {
220 payload = {
220 'data': 'None',
221 'data': 'None',
221 'timestamp': 'None',
222 'timestamp': 'None',
222 'type': None
223 'type': None
223 }
224 }
224 # print 'Publishing data to {}'.format(self.host)
225 # print 'Publishing data to {}'.format(self.host)
225 self.client.publish(self.topic + self.plottype, json.dumps(payload), qos=0)
226 self.client.publish(self.topic + self.plottype, json.dumps(payload), qos=0)
226
227
227 if self.zeromq is 1:
228 if self.zeromq is 1:
228 print '[Sending] {} - {}'.format(self.dataOut.type, self.dataOut.datatime)
229 print '[Sending] {} - {}'.format(self.dataOut.type, self.dataOut.datatime)
229 self.zmq_socket.send_pyobj(self.dataOut)
230 self.zmq_socket.send_pyobj(self.dataOut)
230
231
231 def run(self, dataOut, **kwargs):
232 def run(self, dataOut, **kwargs):
232 self.dataOut = dataOut
233 self.dataOut = dataOut
233 if not self.isConfig:
234 if not self.isConfig:
234 self.setup(**kwargs)
235 self.setup(**kwargs)
235 self.isConfig = True
236 self.isConfig = True
236
237
237 self.publish_data()
238 self.publish_data()
238 time.sleep(self.delay)
239 time.sleep(self.delay)
239
240
240 def close(self):
241 def close(self):
241 if self.zeromq is 1:
242 if self.zeromq is 1:
242 self.dataOut.finished = True
243 self.dataOut.finished = True
243 self.zmq_socket.send_pyobj(self.dataOut)
244 self.zmq_socket.send_pyobj(self.dataOut)
244
245
245 if self.client:
246 if self.client:
246 self.client.loop_stop()
247 self.client.loop_stop()
247 self.client.disconnect()
248 self.client.disconnect()
248
249
249
250
250 class ReceiverData(ProcessingUnit, Process):
251 class ReceiverData(ProcessingUnit, Process):
251
252
252 throttle_value = 5
253 throttle_value = 5
253
254
254 def __init__(self, **kwargs):
255 def __init__(self, **kwargs):
255
256
256 ProcessingUnit.__init__(self, **kwargs)
257 ProcessingUnit.__init__(self, **kwargs)
257 Process.__init__(self)
258 Process.__init__(self)
258 self.mp = False
259 self.mp = False
259 self.isConfig = False
260 self.isConfig = False
260 self.plottypes =[]
261 self.plottypes =[]
261 self.connections = 0
262 self.connections = 0
262 server = kwargs.get('server', 'zmq.pipe')
263 server = kwargs.get('server', 'zmq.pipe')
263 if 'tcp://' in server:
264 if 'tcp://' in server:
264 address = server
265 address = server
265 else:
266 else:
266 address = 'ipc:///tmp/%s' % server
267 address = 'ipc:///tmp/%s' % server
267
268
268 self.address = address
269 self.address = address
269 self.plottypes = [s.strip() for s in kwargs.get('plottypes', 'rti').split(',')]
270 self.plottypes = [s.strip() for s in kwargs.get('plottypes', 'rti').split(',')]
270 self.realtime = kwargs.get('realtime', False)
271 self.realtime = kwargs.get('realtime', False)
271 self.throttle_value = kwargs.get('throttle', 10)
272 self.throttle_value = kwargs.get('throttle', 10)
272 self.sendData = self.initThrottle(self.throttle_value)
273 self.sendData = self.initThrottle(self.throttle_value)
273 self.setup()
274 self.setup()
274
275
275 def setup(self):
276 def setup(self):
276
277
277 self.data = {}
278 self.data = {}
278 self.data['times'] = []
279 self.data['times'] = []
279 for plottype in self.plottypes:
280 for plottype in self.plottypes:
280 self.data[plottype] = {}
281 self.data[plottype] = {}
281 self.data['noise'] = {}
282 self.data['noise'] = {}
282 self.data['throttle'] = self.throttle_value
283 self.data['throttle'] = self.throttle_value
283 self.data['ENDED'] = False
284 self.data['ENDED'] = False
284 self.isConfig = True
285 self.isConfig = True
285
286
286 def event_monitor(self, monitor):
287 def event_monitor(self, monitor):
287
288
288 events = {}
289 events = {}
289
290
290 for name in dir(zmq):
291 for name in dir(zmq):
291 if name.startswith('EVENT_'):
292 if name.startswith('EVENT_'):
292 value = getattr(zmq, name)
293 value = getattr(zmq, name)
293 events[value] = name
294 events[value] = name
294
295
295 while monitor.poll():
296 while monitor.poll():
296 evt = recv_monitor_message(monitor)
297 evt = recv_monitor_message(monitor)
297 if evt['event'] == 32:
298 if evt['event'] == 32:
298 self.connections += 1
299 self.connections += 1
299 if evt['event'] == 512:
300 if evt['event'] == 512:
300 pass
301 pass
301 if self.connections == 0 and self.started is True:
302 if self.connections == 0 and self.started is True:
302 self.ended = True
303 self.ended = True
303 # send('ENDED')
304 # send('ENDED')
304 evt.update({'description': events[evt['event']]})
305 evt.update({'description': events[evt['event']]})
305
306
306 if evt['event'] == zmq.EVENT_MONITOR_STOPPED:
307 if evt['event'] == zmq.EVENT_MONITOR_STOPPED:
307 break
308 break
308 monitor.close()
309 monitor.close()
310 print("event monitor thread done!")
309
311
310 def initThrottle(self, throttle_value):
312 def initThrottle(self, throttle_value):
311
313
312 @throttle(seconds=throttle_value)
314 @throttle(seconds=throttle_value)
313 def sendDataThrottled(fn_sender, data):
315 def sendDataThrottled(fn_sender, data):
314 fn_sender(data)
316 fn_sender(data)
315
317
316 return sendDataThrottled
318 return sendDataThrottled
317
319
318 def send(self, data):
320 def send(self, data):
319 print '[sending] data=%s size=%s' % (data.keys(), len(data['times']))
321 print '[sending] data=%s size=%s' % (data.keys(), len(data['times']))
320 self.sender.send_pyobj(data)
322 self.sender.send_pyobj(data)
321
323
322 def update(self):
324 def update(self):
323
325
324 t = self.dataOut.ltctime
326 t = self.dataOut.ltctime
325 self.data['times'].append(t)
327 self.data['times'].append(t)
326 self.data['dataOut'] = self.dataOut
328 self.data['dataOut'] = self.dataOut
327
328 for plottype in self.plottypes:
329 for plottype in self.plottypes:
329
330
330 if plottype == 'spc':
331 if plottype == 'spc':
331 z = self.dataOut.data_spc/self.dataOut.normFactor
332 z = self.dataOut.data_spc/self.dataOut.normFactor
332 self.data[plottype] = 10*numpy.log10(z)
333 self.data[plottype] = 10*numpy.log10(z)
333 self.data['noise'][t] = 10*numpy.log10(self.dataOut.getNoise()/self.dataOut.normFactor)
334 self.data['noise'][t] = 10*numpy.log10(self.dataOut.getNoise()/self.dataOut.normFactor)
334 if plottype == 'rti':
335 if plottype == 'rti':
335 self.data[plottype][t] = self.dataOut.getPower()
336 self.data[plottype][t] = self.dataOut.getPower()
336 if plottype == 'snr':
337 if plottype == 'snr':
337 self.data[plottype][t] = 10*numpy.log10(self.dataOut.data_SNR)
338 self.data[plottype][t] = 10*numpy.log10(self.dataOut.data_SNR)
338 if plottype == 'dop':
339 if plottype == 'dop':
339 self.data[plottype][t] = 10*numpy.log10(self.dataOut.data_DOP)
340 self.data[plottype][t] = 10*numpy.log10(self.dataOut.data_DOP)
340 if plottype == 'coh':
341 if plottype == 'coh':
341 self.data[plottype][t] = self.dataOut.getCoherence()
342 self.data[plottype][t] = self.dataOut.getCoherence()
342 if plottype == 'phase':
343 if plottype == 'phase':
343 self.data[plottype][t] = self.dataOut.getCoherence(phase=True)
344 self.data[plottype][t] = self.dataOut.getCoherence(phase=True)
344
345
345 def run(self):
346 def run(self):
346
347
347 print '[Starting] {} from {}'.format(self.name, self.address)
348 print '[Starting] {} from {}'.format(self.name, self.address)
348
349
349 self.context = zmq.Context()
350 self.context = zmq.Context()
350 self.receiver = self.context.socket(zmq.PULL)
351 self.receiver = self.context.socket(zmq.PULL)
351 self.receiver.bind(self.address)
352 self.receiver.bind(self.address)
352 monitor = self.receiver.get_monitor_socket()
353 monitor = self.receiver.get_monitor_socket()
353 self.sender = self.context.socket(zmq.PUB)
354 self.sender = self.context.socket(zmq.PUB)
354
355
355 self.sender.bind("ipc:///tmp/zmq.plots")
356 self.sender.bind("ipc:///tmp/zmq.plots")
356
357
357 t = Thread(target=self.event_monitor, args=(monitor,))
358 t = Thread(target=self.event_monitor, args=(monitor,))
358 t.start()
359 t.start()
359
360
360 while True:
361 while True:
361 self.dataOut = self.receiver.recv_pyobj()
362 self.dataOut = self.receiver.recv_pyobj()
362 # print '[Receiving] {} - {}'.format(self.dataOut.type,
363 # print '[Receiving] {} - {}'.format(self.dataOut.type,
363 # self.dataOut.datatime.ctime())
364 # self.dataOut.datatime.ctime())
364
365
365 self.update()
366 self.update()
366
367
367 if self.dataOut.finished is True:
368 if self.dataOut.finished is True:
368 self.send(self.data)
369 self.send(self.data)
369 self.connections -= 1
370 self.connections -= 1
370 if self.connections == 0 and self.started:
371 if self.connections == 0 and self.started:
371 self.ended = True
372 self.ended = True
372 self.data['ENDED'] = True
373 self.data['ENDED'] = True
373 self.send(self.data)
374 self.send(self.data)
374 self.setup()
375 self.setup()
375 else:
376 else:
376 if self.realtime:
377 if self.realtime:
377 self.send(self.data)
378 self.send(self.data)
378 else:
379 else:
379 self.sendData(self.send, self.data)
380 self.sendData(self.send, self.data)
380 self.started = True
381 self.started = True
381
382
382 return
383 return
@@ -1,87 +1,86
1 import argparse
1 import argparse
2
2
3 from schainpy.controller import Project, multiSchain
3 from schainpy.controller import Project, multiSchain
4
4
5 desc = "HF_EXAMPLE"
5 desc = "HF_EXAMPLE"
6
6
7 def fiber(cursor, skip, q, dt):
7 def fiber(cursor, skip, q, dt):
8
8
9 controllerObj = Project()
9 controllerObj = Project()
10
10
11 controllerObj.setup(id='191', name='test01', description=desc)
11 controllerObj.setup(id='191', name='test01', description=desc)
12
12
13 readUnitConfObj = controllerObj.addReadUnit(datatype='SpectraReader',
13 readUnitConfObj = controllerObj.addReadUnit(datatype='SpectraReader',
14 path='/home/nanosat/data/hysell_data20/pdata',
14 path='/home/nanosat/data/hysell_data20/pdata',
15 startDate=dt,
15 startDate=dt,
16 endDate=dt,
16 endDate=dt,
17 startTime="00:00:00",
17 startTime="00:00:00",
18 endTime="23:59:59",
18 endTime="23:59:59",
19 online=0,
19 online=0,
20 #set=1426485881,
20 #set=1426485881,
21 delay=10,
21 delay=10,
22 walk=1,
22 walk=1,
23 queue=q,
23 queue=q,
24 cursor=cursor,
24 cursor=cursor,
25 skip=skip,
25 skip=skip,
26 #timezone=-5*3600
26 #timezone=-5*3600
27 )
27 )
28
28
29 # #opObj11 = readUnitConfObj.addOperation(name='printNumberOfBlock')
29 # #opObj11 = readUnitConfObj.addOperation(name='printNumberOfBlock')
30 #
30 #
31 procUnitConfObj2 = controllerObj.addProcUnit(datatype='Spectra', inputId=readUnitConfObj.getId())
31 procUnitConfObj2 = controllerObj.addProcUnit(datatype='Spectra', inputId=readUnitConfObj.getId())
32 # opObj11 = procUnitConfObj2.addParameter(name='pairsList', value='(0,1)', format='pairslist')
32 # opObj11 = procUnitConfObj2.addParameter(name='pairsList', value='(0,1)', format='pairslist')
33 #
33 #
34 procUnitConfObj3 = controllerObj.addProcUnit(datatype='ParametersProc', inputId=readUnitConfObj.getId())
34 # procUnitConfObj3 = controllerObj.addProcUnit(datatype='ParametersProc', inputId=readUnitConfObj.getId())
35
35 # opObj11 = procUnitConfObj3.addOperation(name='SpectralMoments', optype='other')
36 opObj11 = procUnitConfObj3.addOperation(name='SpectralMoments', optype='other')
37
36
38 #
37 #
39 # opObj11 = procUnitConfObj1.addOperation(name='SpectraPlot', optype='other')
38 # opObj11 = procUnitConfObj1.addOperation(name='SpectraPlot', optype='other')
40 # opObj11.addParameter(name='id', value='1000', format='int')
39 # opObj11.addParameter(name='id', value='1000', format='int')
41 # opObj11.addParameter(name='wintitle', value='HF_Jicamarca_Spc', format='str')
40 # opObj11.addParameter(name='wintitle', value='HF_Jicamarca_Spc', format='str')
42 # opObj11.addParameter(name='channelList', value='0', format='intlist')
41 # opObj11.addParameter(name='channelList', value='0', format='intlist')
43 # opObj11.addParameter(name='zmin', value='-120', format='float')
42 # opObj11.addParameter(name='zmin', value='-120', format='float')
44 # opObj11.addParameter(name='zmax', value='-70', format='float')
43 # opObj11.addParameter(name='zmax', value='-70', format='float')
45 # opObj11.addParameter(name='save', value='1', format='int')
44 # opObj11.addParameter(name='save', value='1', format='int')
46 # opObj11.addParameter(name='figpath', value=figpath, format='str')
45 # opObj11.addParameter(name='figpath', value=figpath, format='str')
47
46
48 # opObj11 = procUnitConfObj2.addOperation(name='RTIPlot', optype='other')
47 # opObj11 = procUnitConfObj2.addOperation(name='RTIPlot', optype='other')
49 # opObj11.addParameter(name='id', value='2000', format='int')
48 # opObj11.addParameter(name='id', value='2000', format='int')
50 # opObj11.addParameter(name='wintitzmaxle', value='HF_Jicamarca', format='str')
49 # opObj11.addParameter(name='wintitzmaxle', value='HF_Jicamarca', format='str')
51 # opObj11.addParameter(name='showprofile', value='0', format='int')
50 # opObj11.addParameter(name='showprofile', value='0', format='int')
52 # # opObj11.addParameter(name='channelList', value='0', format='intlist')
51 # # opObj11.addParameter(name='channelList', value='0', format='intlist')
53 # # opObj11.addParameter(name='xmin', value='0', format='float')
52 # # opObj11.addParameter(name='xmin', value='0', format='float')
54 # opObj11.addParameter(name='xmin', value='0', format='float')
53 # opObj11.addParameter(name='xmin', value='0', format='float')
55 # opObj11.addParameter(name='xmax', value='24', format='float')
54 # opObj11.addParameter(name='xmax', value='24', format='float')
56
55
57 # opObj11.addParameter(name='zmin', value='-110', format='float')
56 # opObj11.addParameter(name='zmin', value='-110', format='float')
58 # opObj11.addParameter(name='zmax', value='-70', format='float')
57 # opObj11.addParameter(name='zmax', value='-70', format='float')
59 # opObj11.addParameter(name='save', value='0', format='int')
58 # opObj11.addParameter(name='save', value='0', format='int')
60 # # opObj11.addParameter(name='figpath', value='/tmp/', format='str')
59 # # opObj11.addParameter(name='figpath', value='/tmp/', format='str')
61 #
60 #
62 opObj12 = procUnitConfObj2.addOperation(name='PublishData', optype='other')
61 opObj12 = procUnitConfObj2.addOperation(name='PublishData', optype='other')
63 opObj12.addParameter(name='zeromq', value=1, format='int')
62 opObj12.addParameter(name='zeromq', value=1, format='int')
64
63
65 opObj13 = procUnitConfObj3.addOperation(name='PublishData', optype='other')
64 # opObj13 = procUnitConfObj3.addOperation(name='PublishData', optype='other')
66 opObj13.addParameter(name='zeromq', value=1, format='int')
65 # opObj13.addParameter(name='zeromq', value=1, format='int')
67 opObj13.addParameter(name='server', value="juanca", format='str')
66 # opObj13.addParameter(name='server', value="juanca", format='str')
68
67
69 # opObj12.addParameter(name='delay', value=1, format='int')
68 # opObj12.addParameter(name='delay', value=1, format='int')
70
69
71
70
72 # print "Escribiendo el archivo XML"
71 # print "Escribiendo el archivo XML"
73 # controllerObj.writeXml(filename)
72 # controllerObj.writeXml(filename)
74 # print "Leyendo el archivo XML"
73 # print "Leyendo el archivo XML"
75 # controllerObj.readXml(filename)
74 # controllerObj.readXml(filename)
76
75
77
76
78 # timeit.timeit('controllerObj.run()', number=2)
77 # timeit.timeit('controllerObj.run()', number=2)
79
78
80 controllerObj.start()
79 controllerObj.start()
81
80
82
81
83 if __name__ == '__main__':
82 if __name__ == '__main__':
84 parser = argparse.ArgumentParser(description='Set number of parallel processes')
83 parser = argparse.ArgumentParser(description='Set number of parallel processes')
85 parser.add_argument('--nProcess', default=16, type=int)
84 parser.add_argument('--nProcess', default=2, type=int)
86 args = parser.parse_args()
85 args = parser.parse_args()
87 multiSchain(fiber, nProcess=args.nProcess, startDate='2015/09/26', endDate='2015/09/26')
86 multiSchain(fiber, nProcess=args.nProcess, startDate='2015/09/26', endDate='2015/09/26')
@@ -1,49 +1,48
1 #!/usr/bin/env python
1 #!/usr/bin/env python
2 '''
2 '''
3 Created on Jul 7, 2014
3 Created on Jul 7, 2014
4
4
5 @author: roj-idl71
5 @author: roj-idl71
6 '''
6 '''
7 import os, sys
7 import os, sys
8
8
9 from schainpy.controller import Project
9 from schainpy.controller import Project
10
10
11 if __name__ == '__main__':
11 if __name__ == '__main__':
12 desc = "Segundo Test"
12 desc = "Segundo Test"
13
13
14 controllerObj = Project()
14 controllerObj = Project()
15 controllerObj.setup(id='191', name='test01', description=desc)
15 controllerObj.setup(id='191', name='test01', description=desc)
16
16
17 proc1 = controllerObj.addProcUnit(name='ReceiverData')
17 proc1 = controllerObj.addProcUnit(name='ReceiverData')
18 proc1.addParameter(name='realtime', value='0', format='bool')
18 proc1.addParameter(name='realtime', value='0', format='bool')
19 proc1.addParameter(name='plottypes', value='rti,coh,phase', format='str')
19 proc1.addParameter(name='plottypes', value='rti,coh,phase', format='str')
20 proc1.addParameter(name='throttle', value='10', format='int')
20 proc1.addParameter(name='throttle', value='10', format='int')
21
21
22 op1 = proc1.addOperation(name='PlotRTIData', optype='other')
22 op1 = proc1.addOperation(name='PlotRTIData', optype='other')
23 op1.addParameter(name='wintitle', value='Julia 150Km', format='str')
23 op1.addParameter(name='wintitle', value='Julia 150Km', format='str')
24 op1.addParameter(name='save', value='/home/nanosat/Pictures', format='str')
24 op1.addParameter(name='save', value='/home/nanosat/Pictures', format='str')
25 op1.addParameter(name='colormap', value='jet', format='str')
26
25
27 op2 = proc1.addOperation(name='PlotCOHData', optype='other')
26 op2 = proc1.addOperation(name='PlotCOHData', optype='other')
28 op2.addParameter(name='wintitle', value='Julia 150Km', format='str')
27 op2.addParameter(name='wintitle', value='Julia 150Km', format='str')
29 op2.addParameter(name='save', value='/home/nanosat/Pictures', format='str')
28 op2.addParameter(name='save', value='/home/nanosat/Pictures', format='str')
30
29 #
31 op6 = proc1.addOperation(name='PlotPHASEData', optype='other')
30 op6 = proc1.addOperation(name='PlotPHASEData', optype='other')
32 op6.addParameter(name='wintitle', value='Julia 150Km', format='str')
31 op6.addParameter(name='wintitle', value='Julia 150Km', format='str')
33 op6.addParameter(name='save', value='/home/nanosat/Pictures', format='str')
32 op6.addParameter(name='save', value='/home/nanosat/Pictures', format='str')
34
33 #
35 proc2 = controllerObj.addProcUnit(name='ReceiverData')
34 # proc2 = controllerObj.addProcUnit(name='ReceiverData')
36 proc2.addParameter(name='server', value='juanca', format='str')
35 # proc2.addParameter(name='server', value='juanca', format='str')
37 proc2.addParameter(name='plottypes', value='snr,dop', format='str')
36 # proc2.addParameter(name='plottypes', value='snr,dop', format='str')
38
37 #
39 op3 = proc2.addOperation(name='PlotSNRData', optype='other')
38 # op3 = proc2.addOperation(name='PlotSNRData', optype='other')
40 op3.addParameter(name='wintitle', value='Julia 150Km', format='str')
39 # op3.addParameter(name='wintitle', value='Julia 150Km', format='str')
41 op3.addParameter(name='save', value='/home/nanosat/Pictures', format='str')
40 # op3.addParameter(name='save', value='/home/nanosat/Pictures', format='str')
42
41 #
43 op4 = proc2.addOperation(name='PlotDOPData', optype='other')
42 # op4 = proc2.addOperation(name='PlotDOPData', optype='other')
44 op4.addParameter(name='wintitle', value='Julia 150Km', format='str')
43 # op4.addParameter(name='wintitle', value='Julia 150Km', format='str')
45 op4.addParameter(name='save', value='/home/nanosat/Pictures', format='str')
44 # op4.addParameter(name='save', value='/home/nanosat/Pictures', format='str')
46
45
47
46
48
47
49 controllerObj.start()
48 controllerObj.start()
@@ -1,1 +1,1
1 <Project description="HF_EXAMPLE" id="191" name="test01"><ReadUnit datatype="SpectraReader" id="1911" inputId="0" name="SpectraReader"><Operation id="19111" name="run" priority="1" type="self"><Parameter format="str" id="191111" name="datatype" value="SpectraReader" /><Parameter format="str" id="191112" name="path" value="/home/nanosat/data/hysell_data20/pdata" /><Parameter format="date" id="191113" name="startDate" value="2015/09/26" /><Parameter format="date" id="191114" name="endDate" value="2015/09/26" /><Parameter format="time" id="191115" name="startTime" value="00:00:00" /><Parameter format="time" id="191116" name="endTime" value="23:59:59" /><Parameter format="int" id="191118" name="cursor" value="17" /><Parameter format="int" id="191119" name="skip" value="45" /><Parameter format="int" id="191120" name="delay" value="10" /><Parameter format="int" id="191121" name="walk" value="1" /><Parameter format="int" id="191122" name="online" value="0" /></Operation></ReadUnit><ProcUnit datatype="ParametersProc" id="1913" inputId="1911" name="ParametersProc"><Operation id="19131" name="run" priority="1" type="self" /><Operation id="19132" name="SpectralMoments" priority="2" type="other" /><Operation id="19133" name="PublishData" priority="3" type="other"><Parameter format="int" id="191331" name="zeromq" value="1" /><Parameter format="str" id="191332" name="server" value="juanca" /></Operation></ProcUnit><ProcUnit datatype="Spectra" id="1912" inputId="1911" name="SpectraProc"><Operation id="19121" name="run" priority="1" type="self" /><Operation id="19122" name="PublishData" priority="2" type="other"><Parameter format="int" id="191221" name="zeromq" value="1" /></Operation></ProcUnit></Project> No newline at end of file
1 <Project description="HF_EXAMPLE" id="191" name="test01"><ReadUnit datatype="SpectraReader" id="1911" inputId="0" name="SpectraReader"><Operation id="19111" name="run" priority="1" type="self"><Parameter format="str" id="191111" name="datatype" value="SpectraReader" /><Parameter format="str" id="191112" name="path" value="/home/nanosat/data/hysell_data20/pdata" /><Parameter format="date" id="191113" name="startDate" value="2015/09/26" /><Parameter format="date" id="191114" name="endDate" value="2015/09/26" /><Parameter format="time" id="191115" name="startTime" value="00:00:00" /><Parameter format="time" id="191116" name="endTime" value="23:59:59" /><Parameter format="int" id="191118" name="cursor" value="3" /><Parameter format="int" id="191119" name="skip" value="360" /><Parameter format="int" id="191120" name="delay" value="10" /><Parameter format="int" id="191121" name="walk" value="1" /><Parameter format="int" id="191122" name="online" value="0" /></Operation></ReadUnit><ProcUnit datatype="Spectra" id="1912" inputId="1911" name="SpectraProc"><Operation id="19121" name="run" priority="1" type="self" /><Operation id="19122" name="PublishData" priority="2" type="other"><Parameter format="int" id="191221" name="zeromq" value="1" /></Operation></ProcUnit></Project> No newline at end of file
1 NO CONTENT: file was removed
NO CONTENT: file was removed
General Comments 0
You need to be logged in to leave comments. Login now