1
0
forked from IPKM/nmreval

interactive integration; new user-defined fit functions reloads model list; fixed requirements.txt

This commit is contained in:
dominik
2022-11-07 20:44:18 +01:00
parent 47f11a073c
commit a746afadff
17 changed files with 626 additions and 358 deletions

View File

@ -110,6 +110,7 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
self.size(), QtWidgets.qApp.desktop().availableGeometry()))
self.datawidget.management = self.management
self.integralwidget.management = self.management
self.ac_group = QtWidgets.QActionGroup(self)
self.ac_group.addAction(self.action_lm_fit)
@ -121,6 +122,8 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
self.ac_group2.addAction(self.action_x_range)
self.ac_group2.addAction(self.action_custom_range)
self.action_draw_object.setVisible(False)
def _init_signals(self):
self.actionRedo = self.management.undostack.createRedoAction(self)
icon = QtGui.QIcon.fromTheme("edit-redo")
@ -142,9 +145,9 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
self.t1action.triggered.connect(lambda: self._show_tab('t1_temp'))
self.action_edit.triggered.connect(lambda: self._show_tab('signal'))
self.actionPick_position.triggered.connect(lambda: self._show_tab('pick'))
self.actionIntegrate.triggered.connect(lambda: self._show_tab('integrate'))
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_draw_object.triggered.connect(lambda: self._show_tab('drawing'))
self.action_new_set.triggered.connect(self.management.create_empty)
@ -462,7 +465,8 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
'signal': (self.editsignalwidget, 'Signals'),
'pick': (self.ptsselectwidget, 'Pick points'),
'fit': (self.fit_dialog, 'Fit'),
# 'drawing': (self.drawingswidget, 'Draw'),
'drawing': (self.drawingswidget, 'Draw'),
'integrate': (self.integralwidget, 'Integrate'),
}[mode]
for idx in range(self.tabWidget.count()):
@ -497,6 +501,8 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
self._select_valuewidget(widget == self.valuewidget)
pick_required, block_window = self._select_t1tauwidget(widget == self.t1tauwidget, pick_required, block_window)
block_window = self._select_fitwidget(widget == self.fit_dialog, block_window)
self._select_drawingswidget(widget == self.drawingswidget)
pick_required = self._select_integralwidget(widget == self.integralwidget, pick_required, block_window)
self._set_pick_block(pick_required, block_window)
@ -529,9 +535,9 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
if self.valuewidget.connected_figure is not None:
self.management.graphs[self.valuewidget.connected_figure].remove_external(self._values_plot)
def _select_integralwidget(self, onoff: bool, pick_required: bool):
def _select_integralwidget(self, onoff: bool, pick_required: bool, block_window: bool) -> tuple[bool, bool]:
if self.current_graph_widget is None:
return pick_required
return pick_required, block_window
if onoff:
self.integralwidget(self.current_graph_widget.title,
@ -539,6 +545,7 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
self.integralwidget.item_deleted.connect(self.current_graph_widget.remove_external)
self.integralwidget.connected_figure = self.management.current_graph
pick_required = True
block_window = True
else:
if self.integralwidget.connected_figure:
g = self.management.graphs[self.integralwidget.connected_figure]
@ -547,7 +554,7 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
g.remove_external(line[1])
self.integralwidget.clear()
return pick_required
return pick_required, block_window
def _select_t1tauwidget(self, onoff: bool, pick_required: bool, block_window: bool):
if onoff: # tau from t1
@ -580,6 +587,13 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
return pick_required, block_window
def _select_drawingswidget(self, onoff):
if onoff:
self.drawingswidget(self.management.graphs.list())
self.drawingswidget.connected_figure = self.management.current_graph
else:
self.drawingswidget.clear()
@QtCore.pyqtSlot(str)
def get_data(self, key: str):
self.sender().set_data(self.management[key])
@ -657,13 +671,14 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
self.eval.exec()
@QtCore.pyqtSlot(name='on_actionDerivation_triggered')
@QtCore.pyqtSlot(name='on_actionIntegration_triggered')
# @QtCore.pyqtSlot(name='on_actionIntegration_triggered')
@QtCore.pyqtSlot(name='on_actionFilon_triggered')
def int_diff_ft(self):
sets = self.management.active_sets
mode = {self.actionIntegration: 'int',
self.actionDerivation: 'diff',
self.actionFilon: 'logft'}[self.sender()]
mode = {
# self.actionIntegration: 'int',
self.actionDerivation: 'diff',
self.actionFilon: 'logft'}[self.sender()]
if sets:
from ..math.integrate_derive import QDeriveIntegrate
@ -803,6 +818,11 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
elif w == self.t1tauwidget:
self.t1tauwidget.t1min_picked(pos)
elif w == self.integralwidget:
region, integral_plot = self.integralwidget.add(pos)
self.current_graph_widget.add_external(region)
self.current_graph_widget.add_external(integral_plot)
def _select_fitwidget(self, onoff: bool, block_window: bool):
if self.current_graph_widget is not None:
pass
@ -886,7 +906,7 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
from ..lib.usermodeleditor import QUsermodelEditor
self.editor = QUsermodelEditor(config_paths() / 'usermodels.py', parent=self)
self.editor.modelsChanged.connect(self.update_fitmodels)
self.editor.modelsChanged.connect(lambda: self.fit_dialog.read_and_load_functions())
self.editor.setWindowModality(QtCore.Qt.ApplicationModal)
self.editor.show()
@ -900,9 +920,6 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
s.valuesChanged.connect(self.management.shift_scale)
s.show()
def update_fitmodels(self):
pass
@staticmethod
@QtCore.pyqtSlot(name='on_actionDocumentation_triggered')
def open_doc():

View File

@ -321,7 +321,7 @@ class UpperManagement(QtCore.QObject):
self.newData.emit([self.add(joined)], self.current_graph)
def get_data(self, sid: str, xy_only=False):
def get_data(self, sid: str, xy_only: bool = False):
"""
Return data for a given id.
Return value is tuple of [x, y, y_err] and mask if xy_only is False, [x, y] if true.
@ -930,6 +930,13 @@ class UpperManagement(QtCore.QObject):
self.newData.emit(new_sets, kwargs['graph'])
def integral_datasets(self, ranges: list, x_vals: list, y_vals: np.ndarry):
new_sets = []
for range_i, y_val_i in zip(ranges, y_vals):
new_sets.append(self.add(Points(x=x_vals, y=y_val_i, name=f'{range_i[0]:.4g}-{range_i[1]:.4g}')))
self.newData.emit(new_sets, '')
def bds_deriv(self):
new_sets = []