From 75ec462efd71a00f7beaecee118c1a66936647f2 Mon Sep 17 00:00:00 2001 From: Dominik Demuth Date: Wed, 3 May 2023 19:04:25 +0200 Subject: [PATCH] add logging to fit exception to retain more info and find problem with #56; all references to current graph are either None or id, should close #57 --- src/gui_qt/_py/basewindow.py | 10 ---------- src/gui_qt/fit/fitwindow.py | 2 +- src/gui_qt/lib/utils.py | 2 +- src/gui_qt/main/mainwindow.py | 11 ++++++----- src/gui_qt/main/management.py | 10 ++++++---- 5 files changed, 14 insertions(+), 21 deletions(-) diff --git a/src/gui_qt/_py/basewindow.py b/src/gui_qt/_py/basewindow.py index c0a8cd8..4abf721 100644 --- a/src/gui_qt/_py/basewindow.py +++ b/src/gui_qt/_py/basewindow.py @@ -64,9 +64,6 @@ class Ui_BaseWindow(object): icon5 = QtGui.QIcon() icon5.addPixmap(QtGui.QPixmap(":/eval_t1_dock"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.tabWidget.addTab(self.t1tauwidget, icon5, "") - self.drawingswidget = DrawingsWidget() - self.drawingswidget.setObjectName("drawingswidget") - self.tabWidget.addTab(self.drawingswidget, "") self.integralwidget = IntegralWidget() self.integralwidget.setObjectName("integralwidget") self.tabWidget.addTab(self.integralwidget, "") @@ -356,8 +353,6 @@ class Ui_BaseWindow(object): self.actionUpdate.setObjectName("actionUpdate") self.actionMine = QtWidgets.QAction(BaseWindow) self.actionMine.setObjectName("actionMine") - self.action_draw_object = QtWidgets.QAction(BaseWindow) - self.action_draw_object.setObjectName("action_draw_object") self.actionBugs = QtWidgets.QAction(BaseWindow) self.actionBugs.setObjectName("actionBugs") self.actionShow_error_log = QtWidgets.QAction(BaseWindow) @@ -446,7 +441,6 @@ class Ui_BaseWindow(object): self.menuWindow.addSeparator() self.menuWindow.addAction(self.actionRefresh) self.menuWindow.addSeparator() - self.menuWindow.addAction(self.action_draw_object) self.menuNMR.addAction(self.t1action) self.menuNMR.addAction(self.actionCalculateT1) self.menuNMR.addAction(self.action_coup_calc) @@ -505,7 +499,6 @@ class Ui_BaseWindow(object): self.tabWidget.setTabText(self.tabWidget.indexOf(self.editsignalwidget), _translate("BaseWindow", "Signals")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.ptsselectwidget), _translate("BaseWindow", "Pick points")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.t1tauwidget), _translate("BaseWindow", "SLR")) - self.tabWidget.setTabText(self.tabWidget.indexOf(self.drawingswidget), _translate("BaseWindow", "Drawings")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.integralwidget), _translate("BaseWindow", "Integrate")) self.menuFile.setTitle(_translate("BaseWindow", "&File")) self.menuSave.setTitle(_translate("BaseWindow", "&Save...")) @@ -574,7 +567,6 @@ class Ui_BaseWindow(object): self.actionFit_parameter_saving.setText(_translate("BaseWindow", "Fit parameter saving...")) self.actionShow_fit_parameter.setText(_translate("BaseWindow", "Parameter...")) self.actionSkip_points.setText(_translate("BaseWindow", "Skip points...")) - self.actionGuide_lines.setText(_translate("BaseWindow", "Draw lines...")) self.actionMaximize.setText(_translate("BaseWindow", "Maximize")) self.actionTile.setText(_translate("BaseWindow", "Tile windows")) self.actionTileVertical.setText(_translate("BaseWindow", "Tile windows vertically")) @@ -622,7 +614,6 @@ class Ui_BaseWindow(object): self.actionTetris.setText(_translate("BaseWindow", "Not Tetris")) self.actionUpdate.setText(_translate("BaseWindow", "Look for updates")) self.actionMine.setText(_translate("BaseWindow", "Mine")) - self.action_draw_object.setText(_translate("BaseWindow", "Draw objects...")) self.actionBugs.setText(_translate("BaseWindow", "Bugs! Problems! Wishes!")) self.actionShow_error_log.setText(_translate("BaseWindow", "Show error log")) self.actionCreate_starter.setText(_translate("BaseWindow", "Create starter..")) @@ -633,6 +624,5 @@ from ..data.point_select import PointSelectWidget from ..data.signaledit.editsignalwidget import EditSignalWidget from ..data.valueeditwidget import ValueEditWidget from ..fit.fitwindow import QFitDialog -from ..graphs.drawings import DrawingsWidget from ..lib.mdiarea import MdiAreaTile from ..nmr.t1widget import QT1Widget diff --git a/src/gui_qt/fit/fitwindow.py b/src/gui_qt/fit/fitwindow.py index f258dda..9a77171 100644 --- a/src/gui_qt/fit/fitwindow.py +++ b/src/gui_qt/fit/fitwindow.py @@ -49,7 +49,7 @@ class QFitDialog(QtWidgets.QWidget, Ui_FitDialog): self._func_list = {} self._complex = {} - self.connected_figure = '' + self.connected_figure = None self.model_frame.hide() self.preview_button.hide() diff --git a/src/gui_qt/lib/utils.py b/src/gui_qt/lib/utils.py index 2849e3f..db0de99 100644 --- a/src/gui_qt/lib/utils.py +++ b/src/gui_qt/lib/utils.py @@ -58,7 +58,7 @@ class RdBuCMap: elif val < self.min: col = QtGui.QColor.fromRgb(*RdBuCMap._rdbu[-1]) else: - col = QtGui.QColor.fromRgb(*(int(self.spline[i](val)) for i in range(3))) + col = QtGui.QColor.fromRgbF(*(float(self.spline[i](val)) for i in range(3))) return col diff --git a/src/gui_qt/main/mainwindow.py b/src/gui_qt/main/mainwindow.py index 148b458..d813756 100644 --- a/src/gui_qt/main/mainwindow.py +++ b/src/gui_qt/main/mainwindow.py @@ -9,6 +9,7 @@ from numpy import geomspace, linspace from pyqtgraph import ViewBox from nmreval.configs import * +from nmreval.lib.logger import logger from nmreval.io.sessionwriter import NMRWriter from .management import UpperManagement @@ -128,7 +129,7 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow): self.datawidget.management = self.management self.integralwidget.management = self.management - self.drawingswidget.graphs = self.management.graphs + # self.drawingswidget.graphs = self.management.graphs self.ac_group = QtWidgets.QActionGroup(self) self.ac_group.addAction(self.action_lm_fit) @@ -161,7 +162,6 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow): self.actionPick_position.triggered.connect(lambda: self._show_tab('pick')) self.actionIntegration.triggered.connect(lambda: self._show_tab('integrate')) self.action_FitWidget.triggered.connect(lambda: self._show_tab('fit')) - self.action_draw_object.triggered.connect(lambda: self._show_tab('drawing')) self.action_new_set.triggered.connect(self.management.create_empty) @@ -389,7 +389,7 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow): self.current_graph_widget.enable_picking(False) self.current_graph_widget = None - self.management.current_graph = '' + self.management.current_graph = None self.current_plotitem = None wdgt.setParent(None) @@ -493,7 +493,6 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow): 'signal': (self.editsignalwidget, 'Signals'), 'pick': (self.ptsselectwidget, 'Pick points'), 'fit': (self.fit_dialog, 'Fit'), - 'drawing': (self.drawingswidget, 'Draw'), 'integrate': (self.integralwidget, 'Integrate'), }[mode] @@ -905,7 +904,9 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow): @QtCore.pyqtSlot(dict, int, bool) def show_fit_preview(self, funcs: dict, num: int, show: bool): - if self.fit_dialog.connected_figure is None: + if not self.fit_dialog.connected_figure: + logger.warning(f'Fit dialog is not connected graph: Fit {self.fit_dialog.connected_figure}, ' + f'current graph: {self.management.current_graph} ({self.management.current_graph in self.management.graphs})') return g = self.management.graphs[self.fit_dialog.connected_figure] diff --git a/src/gui_qt/main/management.py b/src/gui_qt/main/management.py index aa2449f..0a817c1 100644 --- a/src/gui_qt/main/management.py +++ b/src/gui_qt/main/management.py @@ -110,7 +110,7 @@ class UpperManagement(QtCore.QObject): self.counter = 0 self.data = OrderedDict() self.window = window - self.current_graph = '' + self.current_graph = None self.graphs = GraphDict(self.data) self.namespace = None self.undostack = QtWidgets.QUndoStack() @@ -489,12 +489,14 @@ class UpperManagement(QtCore.QObject): @QtCore.pyqtSlot(list, bool) def end_fit(self, result: list, success: bool): - logger.info('FIT FINISHED') if success: + logger.info('Successful fit') self.fitFinished.emit(result) else: + e = result[0] + logger.exception(e, exc_info=True) QtWidgets.QMessageBox.warning(QtWidgets.QWidget(), 'Fit failed', - 'Fit kaput with exception: \n' + "\n".join(result[0])) + f'Fit kaput with exception: \n\n{e!r}') self.fitFinished.emit([]) self._fit_active = False @@ -1213,6 +1215,6 @@ class FitWorker(QtCore.QObject): res = self.fitter.run(mode=self.mode) success = True except Exception as e: - res = [e.args] + res = [e] success = False self.finished.emit(res, success)