dev #285
| @@ -17,7 +17,7 @@ class DataTree(QtWidgets.QTreeWidget): | ||||
|     moveItem = QtCore.pyqtSignal(list, str, str, int)  # items, from, to, new row | ||||
|     copyItem = QtCore.pyqtSignal(list, str) | ||||
|     saveFits = QtCore.pyqtSignal(list) | ||||
|     extendFits = QtCore.pyqtSignal(list) | ||||
|     extendFits = QtCore.pyqtSignal(list, bool) | ||||
|  | ||||
|     # noinspection PyUnresolvedReferences | ||||
|     def __init__(self, parent=None): | ||||
| @@ -465,7 +465,7 @@ class DataTree(QtWidgets.QTreeWidget): | ||||
|         del_action = menu.addAction('Exterminate sets') | ||||
|         cp_action = menu.addAction('Replicate sets') | ||||
|         cat_action = menu.addAction('Join us!') | ||||
|         plt_action = save_action = extend_action = None | ||||
|         plt_action = save_action = extend_action = subfit_action = None | ||||
|         menu.addSeparator() | ||||
|         col_menu = menu.addMenu('Color cycle') | ||||
|         for c in available_cycles.keys(): | ||||
| @@ -497,6 +497,7 @@ class DataTree(QtWidgets.QTreeWidget): | ||||
|             plt_action = menu.addAction('Plot fit parameter') | ||||
|             save_action = menu.addAction('Save fit parameter') | ||||
|             extend_action = menu.addAction('Extrapolate fit') | ||||
|             subfit_action = menu.addAction('Plot partial functions') | ||||
|  | ||||
|         action = menu.exec(evt.globalPos()) | ||||
|  | ||||
| @@ -504,6 +505,9 @@ class DataTree(QtWidgets.QTreeWidget): | ||||
|         for gid, sets in idx.items(): | ||||
|             s.extend(sets) | ||||
|  | ||||
|         if action is None: | ||||
|             return | ||||
|  | ||||
|         if action == del_action: | ||||
|             self.management.delete_sets(s) | ||||
|  | ||||
| @@ -521,7 +525,10 @@ class DataTree(QtWidgets.QTreeWidget): | ||||
|             self.saveFits.emit(s) | ||||
|  | ||||
|         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: | ||||
|             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.show() | ||||
|  | ||||
|     @QtCore.pyqtSlot(list) | ||||
|     def extend_fit(self, sets: list): | ||||
|     @QtCore.pyqtSlot(list, bool) | ||||
|     def extend_fit(self, sets: list, only_subplots: bool): | ||||
|         if only_subplots: | ||||
|             self.management.extend_fits(sets, None, True) | ||||
|             return | ||||
|  | ||||
|         w = FitExtension(self) | ||||
|         res = w.exec() | ||||
|         if res: | ||||
|             p = w.values | ||||
|             spacefunc = geomspace if p[3] else linspace | ||||
|             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') | ||||
|     def open_fitmodel_wizard(self): | ||||
|   | ||||
| @@ -711,17 +711,21 @@ class UpperManagement(QtCore.QObject): | ||||
|  | ||||
|         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 = {} | ||||
|         for sid in set_id: | ||||
|             data = self[sid] | ||||
|             fit = data.copy(full=True, keep_color=True) | ||||
|             fit.data = fit.data.with_new_x(x_range) | ||||
|             data = fit = self[sid] | ||||
|  | ||||
|             graph_id = data.graph | ||||
|             if graph_id not in graphs: | ||||
|                 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'] | ||||
|             for subfunc, col in zip(fit.data.sub(fit.x), cycle(color_scheme)): | ||||
|   | ||||
		Reference in New Issue
	
	Block a user