From 18b5d46678619a972815532629ce96c121f5fcc9 Mon Sep 17 00:00:00 2001 From: wyzula-jan <133381102+wyzula-jan@users.noreply.github.com> Date: Wed, 9 Aug 2023 11:40:29 +0200 Subject: [PATCH] feat: metadata available on_dap_update --- bec_widgets/bec_dispatcher.py | 4 +-- bec_widgets/line_plot.py | 63 ++++++++++++++++++++++++----------- bec_widgets/line_plot.ui | 4 +-- 3 files changed, 47 insertions(+), 24 deletions(-) diff --git a/bec_widgets/bec_dispatcher.py b/bec_widgets/bec_dispatcher.py index 28851912..51028e91 100644 --- a/bec_widgets/bec_dispatcher.py +++ b/bec_widgets/bec_dispatcher.py @@ -18,7 +18,7 @@ class _BECDap: class _BECDispatcher(QObject): new_scan = pyqtSignal(dict, dict) scan_segment = pyqtSignal(dict, dict) - new_dap_data = pyqtSignal(dict) + new_dap_data = pyqtSignal(dict, dict) new_projection_id = pyqtSignal(dict) new_projection_data = pyqtSignal(dict) @@ -62,7 +62,7 @@ class _BECDispatcher(QObject): def _dap_cb(msg): msg = BECMessage.ProcessedDataMessage.loads(msg.value) - self.new_dap_data.emit(msg.content["data"]) + self.new_dap_data.emit(msg.content["data"], msg.metadata) dap_ep = MessageEndpoints.processed_data(dap_name) consumer = self.client.connector.consumer(topics=dap_ep, cb=_dap_cb) diff --git a/bec_widgets/line_plot.py b/bec_widgets/line_plot.py index 9da059e1..7bd57f08 100644 --- a/bec_widgets/line_plot.py +++ b/bec_widgets/line_plot.py @@ -38,7 +38,7 @@ class BasicPlot(QtWidgets.QWidget): uic.loadUi(os.path.join(current_path, "line_plot.ui"), self) # Set splitter distribution of widgets - self.splitter.setSizes([5, 2]) + self.splitter.setSizes([3, 1]) self._idle_time = 100 self.title = "" @@ -68,7 +68,7 @@ class BasicPlot(QtWidgets.QWidget): # LabelItem self.label = pg.LabelItem(justify="center") self.glw.addItem(self.label) - self.label.setText("test label") + self.label.setText("ROI region") # PlotItem - main window self.glw.nextRow() @@ -77,10 +77,12 @@ class BasicPlot(QtWidgets.QWidget): self.glw.addItem(self.plot) self.plot.addLegend() - # PlotItem - ROI window - disabled for now #TODO add 2D plot for ROI and 1D plot for mouse click - # self.glw.nextRow() - # self.plot_roi = pg.PlotItem() - # self.glw.addItem(self.plot_roi) + # ImageItem - 2D view #TODO add 2D plot for ROI and 1D plot for mouse click + self.glw.nextRow() + self.plot_roi = pg.PlotItem() + self.img = pg.ImageItem() + self.glw.addItem(self.plot_roi) + self.plot_roi.addItem(self.img) # ROI selector - so far from [-1,1] #TODO update to scale with xrange self.roi_selector = pg.LinearRegionItem([-1, 1]) @@ -96,10 +98,21 @@ class BasicPlot(QtWidgets.QWidget): self.pens.append(pen) self.brushs.append(brush) + self.add_crosshair(self.plot) + self.add_crosshair(self.plot_roi) + self.crosshair_v = pg.InfiniteLine(angle=90, movable=False) self.crosshair_h = pg.InfiniteLine(angle=0, movable=False) - self.plot.addItem(self.crosshair_v, ignoreBounds=True) - self.plot.addItem(self.crosshair_h, ignoreBounds=True) + # + # for plot in (self.plot_roi, self.plot): + # plot.addItem(self.crosshair_v, ignoreBounds=True) + # plot.addItem(self.crosshair_h, ignoreBounds=True) + + # self.plot.addItem(self.crosshair_v, ignoreBounds=True) + # self.plot.addItem(self.crosshair_h, ignoreBounds=True) + + # self.plot_roi.addItem(self.crosshair_v, ignoreBounds=True) + # self.plot_roi.addItem(self.crosshair_h, ignoreBounds=True) # Add textItems self.add_text_items() @@ -110,7 +123,10 @@ class BasicPlot(QtWidgets.QWidget): ) self.proxy_update = pg.SignalProxy(self.update_signal, rateLimit=25, slot=self.update) self.roi_selector.sigRegionChangeFinished.connect(self.get_roi_region) - self.pushButton_debug.clicked.connect(self.debug) + + # Debug functions + self.pushButton_debug.clicked.connect(self.generate_2D_data_update) + self.generate_2D_data() self._current_proj = None self._current_metadata_ep = "px_stream/projection_{}/metadata" @@ -123,6 +139,21 @@ class BasicPlot(QtWidgets.QWidget): Debug button just for quick testing """ + def generate_2D_data(self): + data = np.random.normal(size=(1, 100)) + self.img.setImage(data) + + def generate_2D_data_update(self): + data = np.random.normal(size=(200, 300)) + self.img.setImage(data, levels=(0.2, 0.5)) + + def add_crosshair(self, plot): + crosshair_v = pg.InfiniteLine(angle=90, movable=False) + crosshair_h = pg.InfiniteLine(angle=0, movable=False) + + plot.addItem(crosshair_v) + plot.addItem(crosshair_h) + def get_roi_region(self): """For testing purpose now, get roi region and print it to self.label as tuple""" region = self.roi_selector.getRegion() @@ -153,17 +184,12 @@ class BasicPlot(QtWidgets.QWidget): if not self.plotter_data_x: return - # for ii, y_value in enumerate(self.y_value_list): - # closest_point = self.closest_x_y_value( - # mousePoint.x(), self.plotter_data_x, self.plotter_data_y[ii] - # ) closest_point = self.closest_x_y_value( mousePoint.x(), self.plotter_data_x[0], self.plotter_data_y[0] ) self.precision = 3 ii = 0 y_value = self.y_value_list[ii] - # TODO fix text wobble in plot, see plot when it crosses 0 x_data = f"{10**closest_point[0]:.{self.precision}f}" y_data = f"{10**closest_point[1]:.{self.precision}f}" @@ -356,9 +382,7 @@ class BasicPlot(QtWidgets.QWidget): time.sleep(0.1) continue endpoint = f"px_stream/projection_{self._current_proj}/data" - # from_pnt = - # to_pnt = - msgs = client.producer.lrange(topic=endpoint, start=-2, end=-1) + msgs = client.producer.lrange(topic=endpoint, start=-1, end=-1) data = [BECMessage.DeviceMessage.loads(msg) for msg in msgs] if not data: continue @@ -372,10 +396,9 @@ class BasicPlot(QtWidgets.QWidget): ] self.update_signal.emit() - # time.sleep(0.1) - @pyqtSlot(dict) - def on_dap_update(self, data): + @pyqtSlot(dict, dict) + def on_dap_update(self, data: dict, metadata: dict): time.sleep(0.1) @pyqtSlot(dict) diff --git a/bec_widgets/line_plot.ui b/bec_widgets/line_plot.ui index 0660ccf5..360a922f 100644 --- a/bec_widgets/line_plot.ui +++ b/bec_widgets/line_plot.ui @@ -6,8 +6,8 @@ 0 0 - 737 - 303 + 845 + 635