plot sub-functions; fixes #282
This commit is contained in:
parent
a8fcd658d9
commit
e0c287d8a9
@ -17,7 +17,7 @@ class DataTree(QtWidgets.QTreeWidget):
|
|||||||
moveItem = QtCore.pyqtSignal(list, str, str, int) # items, from, to, new row
|
moveItem = QtCore.pyqtSignal(list, str, str, int) # items, from, to, new row
|
||||||
copyItem = QtCore.pyqtSignal(list, str)
|
copyItem = QtCore.pyqtSignal(list, str)
|
||||||
saveFits = QtCore.pyqtSignal(list)
|
saveFits = QtCore.pyqtSignal(list)
|
||||||
extendFits = QtCore.pyqtSignal(list)
|
extendFits = QtCore.pyqtSignal(list, bool)
|
||||||
|
|
||||||
# noinspection PyUnresolvedReferences
|
# noinspection PyUnresolvedReferences
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
@ -465,7 +465,7 @@ class DataTree(QtWidgets.QTreeWidget):
|
|||||||
del_action = menu.addAction('Exterminate sets')
|
del_action = menu.addAction('Exterminate sets')
|
||||||
cp_action = menu.addAction('Replicate sets')
|
cp_action = menu.addAction('Replicate sets')
|
||||||
cat_action = menu.addAction('Join us!')
|
cat_action = menu.addAction('Join us!')
|
||||||
plt_action = save_action = extend_action = None
|
plt_action = save_action = extend_action = subfit_action = None
|
||||||
menu.addSeparator()
|
menu.addSeparator()
|
||||||
col_menu = menu.addMenu('Color cycle')
|
col_menu = menu.addMenu('Color cycle')
|
||||||
for c in available_cycles.keys():
|
for c in available_cycles.keys():
|
||||||
@ -497,6 +497,7 @@ class DataTree(QtWidgets.QTreeWidget):
|
|||||||
plt_action = menu.addAction('Plot fit parameter')
|
plt_action = menu.addAction('Plot fit parameter')
|
||||||
save_action = menu.addAction('Save fit parameter')
|
save_action = menu.addAction('Save fit parameter')
|
||||||
extend_action = menu.addAction('Extrapolate fit')
|
extend_action = menu.addAction('Extrapolate fit')
|
||||||
|
subfit_action = menu.addAction('Plot partial functions')
|
||||||
|
|
||||||
action = menu.exec(evt.globalPos())
|
action = menu.exec(evt.globalPos())
|
||||||
|
|
||||||
@ -504,6 +505,9 @@ class DataTree(QtWidgets.QTreeWidget):
|
|||||||
for gid, sets in idx.items():
|
for gid, sets in idx.items():
|
||||||
s.extend(sets)
|
s.extend(sets)
|
||||||
|
|
||||||
|
if action is None:
|
||||||
|
return
|
||||||
|
|
||||||
if action == del_action:
|
if action == del_action:
|
||||||
self.management.delete_sets(s)
|
self.management.delete_sets(s)
|
||||||
|
|
||||||
@ -521,7 +525,10 @@ class DataTree(QtWidgets.QTreeWidget):
|
|||||||
self.saveFits.emit(s)
|
self.saveFits.emit(s)
|
||||||
|
|
||||||
elif action == extend_action:
|
elif action == extend_action:
|
||||||
self.extendFits.emit(s)
|
self.extendFits.emit(s, False)
|
||||||
|
|
||||||
|
elif action == subfit_action:
|
||||||
|
self.extendFits.emit(s, True)
|
||||||
|
|
||||||
elif action.parent() == col_menu:
|
elif action.parent() == col_menu:
|
||||||
self.management.set_cycle(s, action.text())
|
self.management.set_cycle(s, action.text())
|
||||||
|
@ -991,15 +991,19 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
|
|||||||
self.editor.setWindowModality(QtCore.Qt.WindowModality.ApplicationModal)
|
self.editor.setWindowModality(QtCore.Qt.WindowModality.ApplicationModal)
|
||||||
self.editor.show()
|
self.editor.show()
|
||||||
|
|
||||||
@QtCore.pyqtSlot(list)
|
@QtCore.pyqtSlot(list, bool)
|
||||||
def extend_fit(self, sets: list):
|
def extend_fit(self, sets: list, only_subplots: bool):
|
||||||
|
if only_subplots:
|
||||||
|
self.management.extend_fits(sets, None, True)
|
||||||
|
return
|
||||||
|
|
||||||
w = FitExtension(self)
|
w = FitExtension(self)
|
||||||
res = w.exec()
|
res = w.exec()
|
||||||
if res:
|
if res:
|
||||||
p = w.values
|
p = w.values
|
||||||
spacefunc = geomspace if p[3] else linspace
|
spacefunc = geomspace if p[3] else linspace
|
||||||
x = spacefunc(p[0], p[1], num=p[2])
|
x = spacefunc(p[0], p[1], num=p[2])
|
||||||
self.management.extend_fits(sets, x)
|
self.management.extend_fits(sets, x, False)
|
||||||
|
|
||||||
@QtCore.pyqtSlot(name='on_action_create_fit_function_triggered')
|
@QtCore.pyqtSlot(name='on_action_create_fit_function_triggered')
|
||||||
def open_fitmodel_wizard(self):
|
def open_fitmodel_wizard(self):
|
||||||
|
@ -711,17 +711,21 @@ class UpperManagement(QtCore.QObject):
|
|||||||
|
|
||||||
self.newData.emit(f_id_list, gid)
|
self.newData.emit(f_id_list, gid)
|
||||||
|
|
||||||
def extend_fits(self, set_id: list, x_range: np.ndarray):
|
def extend_fits(self, set_id: list, x_range: np.ndarray | None, only_subplots: bool):
|
||||||
graphs = {}
|
graphs = {}
|
||||||
for sid in set_id:
|
for sid in set_id:
|
||||||
data = self[sid]
|
data = fit = self[sid]
|
||||||
fit = data.copy(full=True, keep_color=True)
|
|
||||||
fit.data = fit.data.with_new_x(x_range)
|
|
||||||
|
|
||||||
graph_id = data.graph
|
graph_id = data.graph
|
||||||
if graph_id not in graphs:
|
if graph_id not in graphs:
|
||||||
graphs[graph_id] = []
|
graphs[graph_id] = []
|
||||||
graphs[graph_id].append(self.add(fit))
|
|
||||||
|
if not only_subplots:
|
||||||
|
fit = data.copy(full=True, keep_color=True)
|
||||||
|
if x_range is not None:
|
||||||
|
fit.data = fit.data.with_new_x(x_range)
|
||||||
|
|
||||||
|
graphs[graph_id].append(self.add(fit))
|
||||||
|
|
||||||
color_scheme = available_cycles['colorblind']
|
color_scheme = available_cycles['colorblind']
|
||||||
for subfunc, col in zip(fit.data.sub(fit.x), cycle(color_scheme)):
|
for subfunc, col in zip(fit.data.sub(fit.x), cycle(color_scheme)):
|
||||||
|
Loading…
Reference in New Issue
Block a user