forked from IPKM/nmreval
extrapolate_fit (#21)
New sets with arbitrary x range can be created from fit results Co-authored-by: Dominik Demuth <dominik.demuth@physik.tu-darmstadt.de> Reviewed-on: IPKM/nmreval#21
This commit is contained in:
@ -11,7 +11,7 @@ from ..lib.pg_objects import PlotItem
|
||||
|
||||
|
||||
class QFitResult(QtWidgets.QDialog, Ui_Dialog):
|
||||
closed = QtCore.pyqtSignal(dict, list, str, bool, dict)
|
||||
closed = QtCore.pyqtSignal(dict, list, str, bool, bool, list)
|
||||
redoFit = QtCore.pyqtSignal(dict)
|
||||
|
||||
def __init__(self, results: list, management, parent=None):
|
||||
@ -20,10 +20,17 @@ class QFitResult(QtWidgets.QDialog, Ui_Dialog):
|
||||
|
||||
self._management = management
|
||||
|
||||
self.maxx_line.setValidator(QtGui.QDoubleValidator())
|
||||
self.minx_line.setValidator(QtGui.QDoubleValidator())
|
||||
self.numx_line.setValidator(QtGui.QIntValidator())
|
||||
self.extrapolate_box.stateChanged.connect(lambda x: self.maxx_line.setEnabled(x))
|
||||
self.extrapolate_box.stateChanged.connect(lambda x: self.minx_line.setEnabled(x))
|
||||
self.extrapolate_box.stateChanged.connect(lambda x: self.numx_line.setEnabled(x))
|
||||
|
||||
self._prevs = {}
|
||||
self._models = {}
|
||||
|
||||
for (res, parts) in results:
|
||||
for res in results:
|
||||
idx = res.idx
|
||||
data_k = management.data[idx]
|
||||
|
||||
@ -36,8 +43,7 @@ class QFitResult(QtWidgets.QDialog, Ui_Dialog):
|
||||
for fit in data_k.get_fits():
|
||||
self._prevs[idx].append((fit.name, fit.statistics, fit.nobs-fit.nvar))
|
||||
|
||||
self._results = {res.idx: res for (res, _) in results}
|
||||
self._parts = {res.idx: parts for (res, parts) in results}
|
||||
self._results = {res.idx: res for res in results}
|
||||
self._opts = [(False, False) for _ in range(len(self._results))]
|
||||
|
||||
self.residplot = self.graphicsView.addPlot(row=0, col=0)
|
||||
@ -273,12 +279,75 @@ class QFitResult(QtWidgets.QDialog, Ui_Dialog):
|
||||
|
||||
plot_fits = self.curve_checkbox.isChecked()
|
||||
|
||||
if self.partial_checkBox.checkState() == QtCore.Qt.Checked:
|
||||
self.closed.emit(self._results, self._opts, graph, plot_fits, self._parts)
|
||||
else:
|
||||
self.closed.emit(self._results, self._opts, graph, plot_fits, {})
|
||||
|
||||
parts = self.partial_checkBox.checkState() == QtCore.Qt.Checked
|
||||
|
||||
extrapolate = [None, None, None]
|
||||
if self.extrapolate_box.isChecked():
|
||||
try:
|
||||
extrapolate[0] = float(self.minx_line.text())
|
||||
except TypeError:
|
||||
pass
|
||||
try:
|
||||
extrapolate[1] = float(self.maxx_line.text())
|
||||
except TypeError:
|
||||
pass
|
||||
try:
|
||||
extrapolate[2] = int(self.numx_line.text())
|
||||
except TypeError:
|
||||
pass
|
||||
|
||||
|
||||
self.closed.emit(self._results, self._opts, graph, plot_fits, parts, extrapolate)
|
||||
self.accept()
|
||||
|
||||
else:
|
||||
self.reject()
|
||||
|
||||
|
||||
class FitExtension(QtWidgets.QDialog):
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent=parent)
|
||||
gridLayout = QtWidgets.QGridLayout(self)
|
||||
|
||||
self.label = QtWidgets.QLabel('Minimum value')
|
||||
gridLayout.addWidget(self.label, 0, 0, 1, 1)
|
||||
|
||||
self.min_line = QtWidgets.QLineEdit()
|
||||
self.min_line.setValidator(QtGui.QDoubleValidator())
|
||||
gridLayout.addWidget(self.min_line, 0, 1, 1, 1)
|
||||
|
||||
self.label_2 = QtWidgets.QLabel('Maximum value')
|
||||
gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
|
||||
|
||||
self.max_line = QtWidgets.QLineEdit()
|
||||
self.max_line.setValidator(QtGui.QDoubleValidator())
|
||||
gridLayout.addWidget(self.max_line, 1, 1, 1, 1)
|
||||
|
||||
self.label_3 = QtWidgets.QLabel('Number of pts.')
|
||||
gridLayout.addWidget(self.label_3, 2, 0, 1, 1)
|
||||
|
||||
self.num_pts = QtWidgets.QLineEdit()
|
||||
self.num_pts.setValidator(QtGui.QIntValidator())
|
||||
gridLayout.addWidget(self.num_pts, 2, 1, 1, 1)
|
||||
|
||||
self.buttonBox = QtWidgets.QDialogButtonBox()
|
||||
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
|
||||
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
|
||||
gridLayout.addWidget(self.buttonBox, 3, 0, 1, 2)
|
||||
|
||||
self.setLayout(gridLayout)
|
||||
|
||||
self.buttonBox.accepted.connect(self.accept)
|
||||
self.buttonBox.rejected.connect(self.reject)
|
||||
|
||||
@property
|
||||
def values(self):
|
||||
try:
|
||||
xmin = float(self.min_line.text())
|
||||
xmax = float(self.max_line.text())
|
||||
nums = int(self.num_pts.text())
|
||||
except TypeError:
|
||||
return None
|
||||
|
||||
return xmin, xmax, nums
|
Reference in New Issue
Block a user