From 40746bfa7c741126f77335619b0b0aa6ea2b3016 Mon Sep 17 00:00:00 2001 From: Dominik Demuth Date: Wed, 7 Feb 2024 17:55:07 +0000 Subject: [PATCH] add exclude range to fit limits (#237) Co-authored-by: Dominik Demuth Reviewed-on: https://gitea.pkm.physik.tu-darmstadt.de/IPKM/nmreval/pulls/237 --- src/gui_qt/_py/basewindow.py | 5 +++++ src/gui_qt/fit/fit_toolbar.py | 6 ++++-- src/gui_qt/main/mainwindow.py | 4 ++-- src/gui_qt/main/management.py | 5 ++++- src/resources/_ui/basewindow.ui | 9 +++++++++ 5 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/gui_qt/_py/basewindow.py b/src/gui_qt/_py/basewindow.py index 3b24795..d916548 100644 --- a/src/gui_qt/_py/basewindow.py +++ b/src/gui_qt/_py/basewindow.py @@ -365,6 +365,9 @@ class Ui_BaseWindow(object): self.actionBinning.setObjectName("actionBinning") self.actionTNMH = QtWidgets.QAction(BaseWindow) self.actionTNMH.setObjectName("actionTNMH") + self.actionExclude_region = QtWidgets.QAction(BaseWindow) + self.actionExclude_region.setCheckable(True) + self.actionExclude_region.setObjectName("actionExclude_region") self.menuSave.addAction(self.actionSave) self.menuSave.addAction(self.actionExportGraphic) self.menuSave.addAction(self.action_save_fit_parameter) @@ -419,6 +422,7 @@ class Ui_BaseWindow(object): self.menuLimits.addAction(self.action_no_range) self.menuLimits.addAction(self.action_x_range) self.menuLimits.addAction(self.action_custom_range) + self.menuLimits.addAction(self.actionExclude_region) self.menuFit.addAction(self.action_FitWidget) self.menuFit.addSeparator() self.menuFit.addAction(self.action_create_fit_function) @@ -631,6 +635,7 @@ class Ui_BaseWindow(object): self.actionTNMH_model.setText(_translate("BaseWindow", "Tg , Hodge, TNMH,,,")) self.actionBinning.setText(_translate("BaseWindow", "Binning...")) self.actionTNMH.setText(_translate("BaseWindow", "TNMH...")) + self.actionExclude_region.setText(_translate("BaseWindow", "Exclude region")) from ..data.datawidget.datawidget import DataWidget from ..data.integral_widget import IntegralWidget from ..data.point_select import PointSelectWidget diff --git a/src/gui_qt/fit/fit_toolbar.py b/src/gui_qt/fit/fit_toolbar.py index 4cfa091..283c335 100644 --- a/src/gui_qt/fit/fit_toolbar.py +++ b/src/gui_qt/fit/fit_toolbar.py @@ -58,7 +58,8 @@ class FitToolbar(QtWidgets.QToolBar): @QtCore.pyqtSlot(QtWidgets.QAction) def change_limit_type(self, action: QtWidgets.QAction): - is_custom = (action.text() == 'Custom') + is_custom = (action.text() in ['Custom', 'Exclude region']) + print(is_custom) for w in [self.label, self.label2, self.lineedit, self.lineedit2]: w.setEnabled(is_custom) @@ -93,5 +94,6 @@ class FitToolbar(QtWidgets.QToolBar): return { 'None': 'none', 'Visible x range': 'x', - 'Custom': self.region.getRegion(), + 'Custom': ('in', self.region.getRegion()), + 'Exclude region': ('out', self.region.getRegion()), }[action_text] diff --git a/src/gui_qt/main/mainwindow.py b/src/gui_qt/main/mainwindow.py index 80935b6..d91b3ac 100644 --- a/src/gui_qt/main/mainwindow.py +++ b/src/gui_qt/main/mainwindow.py @@ -888,7 +888,7 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow): self.fit_dialog.load(self.management.active_sets) for item in self.fit_dialog.preview_lines: self.current_graph_widget.add_external(item) - if self.action_custom_range.isChecked(): + if self.action_custom_range.isChecked() or self.actionExclude_region.isChecked(): self.current_graph_widget.add_external(self.fit_toolbar.region) block_window = True @@ -904,7 +904,7 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow): if self.current_graph_widget is None: return - if action == self.action_custom_range and self.fit_dialog.isVisible(): + if action in [self.action_custom_range, self.actionExclude_region] and self.fit_dialog.isVisible(): self.current_graph_widget.add_external(self.fit_toolbar.region) else: self.current_graph_widget.remove_external(self.fit_toolbar.region) diff --git a/src/gui_qt/main/management.py b/src/gui_qt/main/management.py index b8758b2..ab07037 100644 --- a/src/gui_qt/main/management.py +++ b/src/gui_qt/main/management.py @@ -511,13 +511,16 @@ class UpperManagement(QtCore.QObject): _x = data_i.x + # options for fit limits 'none', 'x', ('in', custom region), ('out', excluded region) if fit_limits == 'none': inside = slice(None) elif fit_limits == 'x': x_lim, _ = self.graphs[self.current_graph].ranges inside = np.where((_x >= x_lim[0]) & (_x <= x_lim[1])) + elif fit_limits[0] == 'in': + inside = np.where((_x >= fit_limits[1][0]) & (_x <= fit_limits[1][1])) else: - inside = np.where((_x >= fit_limits[0]) & (_x <= fit_limits[1])) + inside = np.where((_x < fit_limits[1][0]) | (_x > fit_limits[1][1])) try: if isinstance(we, str): diff --git a/src/resources/_ui/basewindow.ui b/src/resources/_ui/basewindow.ui index bf3de79..01987b8 100644 --- a/src/resources/_ui/basewindow.ui +++ b/src/resources/_ui/basewindow.ui @@ -247,6 +247,7 @@ + @@ -1021,6 +1022,14 @@ TNMH... + + + true + + + Exclude region + +