dev #283
| @@ -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,16 +711,20 @@ 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] = [] | ||||||
|  |  | ||||||
|  |             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)) |                 graphs[graph_id].append(self.add(fit)) | ||||||
|  |  | ||||||
|             color_scheme = available_cycles['colorblind'] |             color_scheme = available_cycles['colorblind'] | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user