forked from IPKM/nmreval
interactive integration; new user-defined fit functions reloads model list; fixed requirements.txt
This commit is contained in:
@ -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():
|
||||
|
@ -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 = []
|
||||
|
||||
|
Reference in New Issue
Block a user