From f74dd982baa05f8fed928fea5907fee640c2a1ad Mon Sep 17 00:00:00 2001 From: Dominik Demuth Date: Wed, 31 May 2023 17:20:51 +0200 Subject: [PATCH] color to dsc curves in tg --- src/gui_qt/dsc/glass_dialog.py | 52 +++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 16 deletions(-) diff --git a/src/gui_qt/dsc/glass_dialog.py b/src/gui_qt/dsc/glass_dialog.py index 4d30174..dd7f6fd 100644 --- a/src/gui_qt/dsc/glass_dialog.py +++ b/src/gui_qt/dsc/glass_dialog.py @@ -1,3 +1,8 @@ +from itertools import cycle + +from pyqtgraph import mkPen, mkBrush + +from nmreval.lib.colors import Tab10 from ..Qt import QtWidgets, QtCore from .._py.tnmh_dialog import Ui_Dialog from ..lib.pg_objects import PlotItem, RegionItem @@ -11,11 +16,10 @@ class TgCalculator(QtWidgets.QDialog, Ui_Dialog): self.setupUi(self) self._management = management + self._colors = cycle(Tab10) - self._plots = {} + self._dsc = {} self._tg_baselines = {} - self.dsc = [] - self.limits = RegionItem(), RegionItem() for lim in self.limits: self.graphicsView.addItem(lim) @@ -28,45 +32,61 @@ class TgCalculator(QtWidgets.QDialog, Ui_Dialog): # s.valuesChanged.connect(self.management.shift_scale) def clear(self): - self.dsc = [] self.listWidget.clear() - for v in self._plots.values(): - self.graphicsView.removeItem(v) - self._plots = {} + for plot, data in self._dsc.values(): + self.graphicsView.removeItem(plot) + self._dsc = {} for v in self._tg_baselines.values(): self.graphicsView.removeItem(v) self._tg_baselines = {} def add_sets(self): - for key, name in self._management.active_sets: - data = self._management.data[key] - if isinstance(data.data, DSC): - self.dsc.append(data) - else: + min_x = 10_000_000 + max_x = -10_000_000 + for (key, name), c in zip(self._management.active_sets, self._colors): + data = self._management[key].data + if not isinstance(data, DSC): continue + min_x = min(min_x, data.x.min()) + max_x = max(max_x, data.x.max()) + item = QtWidgets.QListWidgetItem(name) item.setData(QtCore.Qt.UserRole, key) + item.setForeground(mkBrush(c.rgb())) self.listWidget.addItem(item) - plot = PlotItem(x=data.x, y=data.y) + plot = PlotItem(x=data.x, y=data.y, pen=mkPen(c.rgb())) self.graphicsView.addItem(plot) - self._plots[key] = plot + self._dsc[key] = (plot, data) + + dist = max_x - min_x + self.limits[0].setRegion((min_x, min_x+0.1*dist)) + self.limits[1].setRegion((max_x-0.1*dist, max_x)) @QtCore.pyqtSlot(name='on_pushButton_clicked') def calc_tg(self): + for v in self._tg_baselines.values(): + self.graphicsView.removeItem(v) + self._tg_baselines = {} + baselines = tuple(lim.getRegion() for lim in self.limits) if baselines[0][0] > baselines[1][0]: baselines = baselines[1], baselines[0] for idx in range(self.listWidget.count()): - key = self.listWidget.item(idx).data(QtCore.Qt.UserRole) - tg_results, glass, liquid, tangent = self._management[key].data.glass_transition(*baselines) + item = self.listWidget.item(idx) + key = item.data(QtCore.Qt.UserRole) + color = item.foreground() + print(color) + _, data = self._dsc[key] + tg_results, glass, liquid, tangent = data.glass_transition(*baselines) lines = [] for line in (glass, liquid, tangent): plt = PlotItem(line[:, 0], line[:, 1]) + plt.set_line(style=2, color=color.color()) self.graphicsView.addItem(plt) lines.append(plt) self._tg_baselines[key] = lines