@@ -152,7 +152,7 class OperationConf(ConfBase): | |||||
152 |
|
152 | |||
153 | className = eval(self.name) |
|
153 | className = eval(self.name) | |
154 |
|
154 | |||
155 | if 'Plot' in self.name or 'Writer' in self.name: |
|
155 | if 'Plot' in self.name or 'Writer' in self.name or 'Send' in self.name: | |
156 | kwargs = self.getKwargs() |
|
156 | kwargs = self.getKwargs() | |
157 | opObj = className(self.id, self.id, self.project_id, self.err_queue, **kwargs) |
|
157 | opObj = className(self.id, self.id, self.project_id, self.err_queue, **kwargs) | |
158 | opObj.start() |
|
158 | opObj.start() |
@@ -1109,8 +1109,8 class PlotterData(object): | |||||
1109 | Object to hold data to be plotted |
|
1109 | Object to hold data to be plotted | |
1110 | ''' |
|
1110 | ''' | |
1111 |
|
1111 | |||
1112 |
MAXNUMX = |
|
1112 | MAXNUMX = 200 | |
1113 |
MAXNUMY = |
|
1113 | MAXNUMY = 200 | |
1114 |
|
1114 | |||
1115 | def __init__(self, code, throttle_value, exp_code, buffering=True, snr=False): |
|
1115 | def __init__(self, code, throttle_value, exp_code, buffering=True, snr=False): | |
1116 |
|
1116 | |||
@@ -1332,9 +1332,10 class PlotterData(object): | |||||
1332 | data = self.roundFloats( |
|
1332 | data = self.roundFloats( | |
1333 | self.data[self.key][::, ::dx, ::dy].tolist()) |
|
1333 | self.data[self.key][::, ::dx, ::dy].tolist()) | |
1334 | else: |
|
1334 | else: | |
1335 | data = self.roundFloats(self.data[self.key][tm].tolist()) |
|
|||
1336 | if self.key is 'noise': |
|
1335 | if self.key is 'noise': | |
1337 | data = [[x] for x in data] |
|
1336 | data = [[x] for x in self.roundFloats(self.data[self.key][tm].tolist())] | |
|
1337 | else: | |||
|
1338 | data = self.roundFloats(self.data[self.key][tm][::, ::dy].tolist()) | |||
1338 |
|
1339 | |||
1339 | meta = {} |
|
1340 | meta = {} | |
1340 | ret = { |
|
1341 | ret = { |
@@ -5,6 +5,7 import zmq | |||||
5 | import time |
|
5 | import time | |
6 | import numpy |
|
6 | import numpy | |
7 | import datetime |
|
7 | import datetime | |
|
8 | from queue import Queue | |||
8 | from functools import wraps |
|
9 | from functools import wraps | |
9 | from threading import Thread |
|
10 | from threading import Thread | |
10 | import matplotlib |
|
11 | import matplotlib | |
@@ -160,9 +161,10 class Plot(Operation): | |||||
160 | self.isConfig = False |
|
161 | self.isConfig = False | |
161 | self.isPlotConfig = False |
|
162 | self.isPlotConfig = False | |
162 | self.save_counter = 1 |
|
163 | self.save_counter = 1 | |
163 |
self.sender_ |
|
164 | self.sender_time = 0 | |
164 | self.data = None |
|
165 | self.data = None | |
165 | self.firsttime = True |
|
166 | self.firsttime = True | |
|
167 | self.sender_queue = Queue(maxsize=10) | |||
166 | self.plots_adjust = {'left': 0.125, 'right': 0.9, 'bottom': 0.15, 'top': 0.9, 'wspace': 0.2, 'hspace': 0.2} |
|
168 | self.plots_adjust = {'left': 0.125, 'right': 0.9, 'bottom': 0.15, 'top': 0.9, 'wspace': 0.2, 'hspace': 0.2} | |
167 |
|
169 | |||
168 | def __fmtTime(self, x, pos): |
|
170 | def __fmtTime(self, x, pos): | |
@@ -225,7 +227,7 class Plot(Operation): | |||||
225 | self.throttle = kwargs.get('throttle', 0) |
|
227 | self.throttle = kwargs.get('throttle', 0) | |
226 | self.exp_code = kwargs.get('exp_code', None) |
|
228 | self.exp_code = kwargs.get('exp_code', None) | |
227 | self.plot_server = kwargs.get('plot_server', False) |
|
229 | self.plot_server = kwargs.get('plot_server', False) | |
228 |
self.sender_period = kwargs.get('sender_period', |
|
230 | self.sender_period = kwargs.get('sender_period', 60) | |
229 | self.height_index = kwargs.get('height_index', None) |
|
231 | self.height_index = kwargs.get('height_index', None) | |
230 | self.__throttle_plot = apply_throttle(self.throttle) |
|
232 | self.__throttle_plot = apply_throttle(self.throttle) | |
231 | self.data = PlotterData( |
|
233 | self.data = PlotterData( | |
@@ -564,44 +566,47 class Plot(Operation): | |||||
564 | ''' |
|
566 | ''' | |
565 | ''' |
|
567 | ''' | |
566 |
|
568 | |||
567 | if self.sender_counter < self.sender_period: |
|
569 | interval = self.data.tm - self.sender_time | |
568 |
|
|
570 | if interval < self.sender_period: | |
569 | return |
|
571 | return | |
570 |
|
572 | |||
571 |
self.sender_ |
|
573 | self.sender_time = self.data.tm | |
572 | self.data.meta['titles'] = self.titles |
|
574 | ||
573 | retries = 2 |
|
575 | attrs = ['titles', 'zmin', 'zmax', 'colormap'] | |
|
576 | for attr in attrs: | |||
|
577 | value = getattr(self, attr) | |||
|
578 | if value is not None: | |||
|
579 | self.data.meta[attr] = getattr(self, attr) | |||
|
580 | self.data.meta['interval'] = int(interval) | |||
|
581 | msg = self.data.jsonify(self.plot_name, self.plot_type) | |||
|
582 | self.sender_queue.put(msg) | |||
|
583 | ||||
574 | while True: |
|
584 | while True: | |
575 | self.socket.send_string(self.data.jsonify(self.plot_name, self.plot_type)) |
|
585 | if self.sender_queue.empty(): | |
|
586 | break | |||
|
587 | self.socket.send_string(self.sender_queue.get()) | |||
576 | socks = dict(self.poll.poll(5000)) |
|
588 | socks = dict(self.poll.poll(5000)) | |
577 | if socks.get(self.socket) == zmq.POLLIN: |
|
589 | if socks.get(self.socket) == zmq.POLLIN: | |
578 | reply = self.socket.recv_string() |
|
590 | reply = self.socket.recv_string() | |
579 | if reply == 'ok': |
|
591 | if reply == 'ok': | |
580 | log.log("Response from server ok", self.name) |
|
592 | log.log("Response from server ok", self.name) | |
581 |
|
|
593 | time.sleep(0.1) | |
|
594 | continue | |||
582 | else: |
|
595 | else: | |
583 | log.warning( |
|
596 | log.warning( | |
584 | "Malformed reply from server: {}".format(reply), self.name) |
|
597 | "Malformed reply from server: {}".format(reply), self.name) | |
585 |
|
||||
586 | else: |
|
598 | else: | |
587 | log.warning( |
|
599 | log.warning( | |
588 | "No response from server, retrying...", self.name) |
|
600 | "No response from server, retrying...", self.name) | |
|
601 | self.sender_queue.put(msg) | |||
589 | self.socket.setsockopt(zmq.LINGER, 0) |
|
602 | self.socket.setsockopt(zmq.LINGER, 0) | |
590 | self.socket.close() |
|
603 | self.socket.close() | |
591 | self.poll.unregister(self.socket) |
|
604 | self.poll.unregister(self.socket) | |
592 | retries -= 1 |
|
605 | time.sleep(0.1) | |
593 | if retries == 0: |
|
|||
594 | log.error( |
|
|||
595 | "Server seems to be offline, abandoning", self.name) |
|
|||
596 | self.socket = self.context.socket(zmq.REQ) |
|
|||
597 | self.socket.connect(self.plot_server) |
|
|||
598 | self.poll.register(self.socket, zmq.POLLIN) |
|
|||
599 | time.sleep(1) |
|
|||
600 | break |
|
|||
601 | self.socket = self.context.socket(zmq.REQ) |
|
606 | self.socket = self.context.socket(zmq.REQ) | |
602 | self.socket.connect(self.plot_server) |
|
607 | self.socket.connect(self.plot_server) | |
603 | self.poll.register(self.socket, zmq.POLLIN) |
|
608 | self.poll.register(self.socket, zmq.POLLIN) | |
604 | time.sleep(0.5) |
|
609 | break | |
605 |
|
610 | |||
606 | def setup(self): |
|
611 | def setup(self): | |
607 | ''' |
|
612 | ''' |
General Comments 0
You need to be logged in to leave comments.
Login now