Binning and Tg (#85)
add binning; determine Tg of DSC; closes #60; part of #61 Co-authored-by: Dominik Demuth <dominik.demuth@physik.tu-darmstadt.de> Reviewed-on: #85
This commit is contained in:
parent
22f8bc80ed
commit
a26595695c
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
# Form implementation generated from reading ui file 'src/resources/_ui/asciidialog.ui'
|
# Form implementation generated from reading ui file 'src/resources/_ui/asciidialog.ui'
|
||||||
#
|
#
|
||||||
# Created by: PyQt5 UI code generator 5.15.7
|
# Created by: PyQt5 UI code generator 5.15.9
|
||||||
#
|
#
|
||||||
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
|
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
|
||||||
# run again. Do not edit this file unless you know what you are doing.
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
@ -28,92 +28,25 @@ class Ui_ascii_reader(object):
|
|||||||
self.header_widget.setObjectName("header_widget")
|
self.header_widget.setObjectName("header_widget")
|
||||||
self.verticalLayout_3.addWidget(self.header_widget)
|
self.verticalLayout_3.addWidget(self.header_widget)
|
||||||
self.groupBox = QtWidgets.QGroupBox(self.tabWidgetPage1)
|
self.groupBox = QtWidgets.QGroupBox(self.tabWidgetPage1)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Maximum)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth())
|
||||||
|
self.groupBox.setSizePolicy(sizePolicy)
|
||||||
self.groupBox.setObjectName("groupBox")
|
self.groupBox.setObjectName("groupBox")
|
||||||
self.gridLayout = QtWidgets.QGridLayout(self.groupBox)
|
self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.groupBox)
|
||||||
self.gridLayout.setContentsMargins(3, 3, 3, 3)
|
self.horizontalLayout_4.setContentsMargins(3, 3, 3, 3)
|
||||||
self.gridLayout.setHorizontalSpacing(9)
|
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
|
||||||
self.gridLayout.setObjectName("gridLayout")
|
self.verticalLayout_6 = QtWidgets.QVBoxLayout()
|
||||||
self.FID_radioButton = QtWidgets.QRadioButton(self.groupBox)
|
self.verticalLayout_6.setObjectName("verticalLayout_6")
|
||||||
self.FID_radioButton.setAutoExclusive(True)
|
|
||||||
self.FID_radioButton.setObjectName("FID_radioButton")
|
|
||||||
self.buttonGroup = QtWidgets.QButtonGroup(ascii_reader)
|
|
||||||
self.buttonGroup.setObjectName("buttonGroup")
|
|
||||||
self.buttonGroup.addButton(self.FID_radioButton)
|
|
||||||
self.gridLayout.addWidget(self.FID_radioButton, 2, 1, 1, 1)
|
|
||||||
self.x_lineedit = QtWidgets.QLineEdit(self.groupBox)
|
|
||||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
|
|
||||||
sizePolicy.setHorizontalStretch(0)
|
|
||||||
sizePolicy.setVerticalStretch(0)
|
|
||||||
sizePolicy.setHeightForWidth(self.x_lineedit.sizePolicy().hasHeightForWidth())
|
|
||||||
self.x_lineedit.setSizePolicy(sizePolicy)
|
|
||||||
self.x_lineedit.setInputMethodHints(QtCore.Qt.ImhFormattedNumbersOnly|QtCore.Qt.ImhPreferNumbers)
|
|
||||||
self.x_lineedit.setObjectName("x_lineedit")
|
|
||||||
self.gridLayout.addWidget(self.x_lineedit, 1, 3, 1, 1)
|
|
||||||
self.y_label = QtWidgets.QLabel(self.groupBox)
|
|
||||||
self.y_label.setObjectName("y_label")
|
|
||||||
self.gridLayout.addWidget(self.y_label, 2, 2, 1, 1)
|
|
||||||
self.pts_radioButton = QtWidgets.QRadioButton(self.groupBox)
|
|
||||||
self.pts_radioButton.setChecked(True)
|
|
||||||
self.pts_radioButton.setAutoExclusive(True)
|
|
||||||
self.pts_radioButton.setObjectName("pts_radioButton")
|
|
||||||
self.buttonGroup.addButton(self.pts_radioButton)
|
|
||||||
self.gridLayout.addWidget(self.pts_radioButton, 1, 1, 1, 1)
|
|
||||||
self.deltay_lineEdit = QtWidgets.QLineEdit(self.groupBox)
|
|
||||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
|
|
||||||
sizePolicy.setHorizontalStretch(0)
|
|
||||||
sizePolicy.setVerticalStretch(0)
|
|
||||||
sizePolicy.setHeightForWidth(self.deltay_lineEdit.sizePolicy().hasHeightForWidth())
|
|
||||||
self.deltay_lineEdit.setSizePolicy(sizePolicy)
|
|
||||||
self.deltay_lineEdit.setObjectName("deltay_lineEdit")
|
|
||||||
self.gridLayout.addWidget(self.deltay_lineEdit, 3, 3, 1, 1)
|
|
||||||
self.label_5 = QtWidgets.QLabel(self.groupBox)
|
|
||||||
self.label_5.setObjectName("label_5")
|
|
||||||
self.gridLayout.addWidget(self.label_5, 3, 2, 1, 1)
|
|
||||||
self.column_checkBox = QtWidgets.QCheckBox(self.groupBox)
|
self.column_checkBox = QtWidgets.QCheckBox(self.groupBox)
|
||||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Fixed)
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Preferred)
|
||||||
sizePolicy.setHorizontalStretch(0)
|
sizePolicy.setHorizontalStretch(0)
|
||||||
sizePolicy.setVerticalStretch(0)
|
sizePolicy.setVerticalStretch(0)
|
||||||
sizePolicy.setHeightForWidth(self.column_checkBox.sizePolicy().hasHeightForWidth())
|
sizePolicy.setHeightForWidth(self.column_checkBox.sizePolicy().hasHeightForWidth())
|
||||||
self.column_checkBox.setSizePolicy(sizePolicy)
|
self.column_checkBox.setSizePolicy(sizePolicy)
|
||||||
self.column_checkBox.setObjectName("column_checkBox")
|
self.column_checkBox.setObjectName("column_checkBox")
|
||||||
self.gridLayout.addWidget(self.column_checkBox, 0, 0, 1, 1)
|
self.verticalLayout_6.addWidget(self.column_checkBox)
|
||||||
self.label = QtWidgets.QLabel(self.groupBox)
|
|
||||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Preferred)
|
|
||||||
sizePolicy.setHorizontalStretch(0)
|
|
||||||
sizePolicy.setVerticalStretch(0)
|
|
||||||
sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
|
|
||||||
self.label.setSizePolicy(sizePolicy)
|
|
||||||
self.label.setObjectName("label")
|
|
||||||
self.gridLayout.addWidget(self.label, 0, 1, 1, 1)
|
|
||||||
self.label_7 = QtWidgets.QLabel(self.groupBox)
|
|
||||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Preferred)
|
|
||||||
sizePolicy.setHorizontalStretch(0)
|
|
||||||
sizePolicy.setVerticalStretch(0)
|
|
||||||
sizePolicy.setHeightForWidth(self.label_7.sizePolicy().hasHeightForWidth())
|
|
||||||
self.label_7.setSizePolicy(sizePolicy)
|
|
||||||
self.label_7.setObjectName("label_7")
|
|
||||||
self.gridLayout.addWidget(self.label_7, 0, 2, 1, 2)
|
|
||||||
self.y_lineedit = QtWidgets.QLineEdit(self.groupBox)
|
|
||||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
|
|
||||||
sizePolicy.setHorizontalStretch(0)
|
|
||||||
sizePolicy.setVerticalStretch(0)
|
|
||||||
sizePolicy.setHeightForWidth(self.y_lineedit.sizePolicy().hasHeightForWidth())
|
|
||||||
self.y_lineedit.setSizePolicy(sizePolicy)
|
|
||||||
self.y_lineedit.setInputMethodHints(QtCore.Qt.ImhFormattedNumbersOnly|QtCore.Qt.ImhPreferNumbers)
|
|
||||||
self.y_lineedit.setObjectName("y_lineedit")
|
|
||||||
self.gridLayout.addWidget(self.y_lineedit, 2, 3, 1, 1)
|
|
||||||
self.spectrum_radioButton = QtWidgets.QRadioButton(self.groupBox)
|
|
||||||
self.spectrum_radioButton.setObjectName("spectrum_radioButton")
|
|
||||||
self.buttonGroup.addButton(self.spectrum_radioButton)
|
|
||||||
self.gridLayout.addWidget(self.spectrum_radioButton, 3, 1, 1, 1)
|
|
||||||
self.x_label = QtWidgets.QLabel(self.groupBox)
|
|
||||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Preferred)
|
|
||||||
sizePolicy.setHorizontalStretch(0)
|
|
||||||
sizePolicy.setVerticalStretch(0)
|
|
||||||
sizePolicy.setHeightForWidth(self.x_label.sizePolicy().hasHeightForWidth())
|
|
||||||
self.x_label.setSizePolicy(sizePolicy)
|
|
||||||
self.x_label.setObjectName("x_label")
|
|
||||||
self.gridLayout.addWidget(self.x_label, 1, 2, 1, 1)
|
|
||||||
self.line_spinBox = QtWidgets.QSpinBox(self.groupBox)
|
self.line_spinBox = QtWidgets.QSpinBox(self.groupBox)
|
||||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
|
||||||
sizePolicy.setHorizontalStretch(0)
|
sizePolicy.setHorizontalStretch(0)
|
||||||
@ -122,17 +55,114 @@ class Ui_ascii_reader(object):
|
|||||||
self.line_spinBox.setSizePolicy(sizePolicy)
|
self.line_spinBox.setSizePolicy(sizePolicy)
|
||||||
self.line_spinBox.setMinimum(1)
|
self.line_spinBox.setMinimum(1)
|
||||||
self.line_spinBox.setObjectName("line_spinBox")
|
self.line_spinBox.setObjectName("line_spinBox")
|
||||||
self.gridLayout.addWidget(self.line_spinBox, 1, 0, 1, 1)
|
self.verticalLayout_6.addWidget(self.line_spinBox)
|
||||||
|
self.label_6 = QtWidgets.QLabel(self.groupBox)
|
||||||
|
self.label_6.setObjectName("label_6")
|
||||||
|
self.verticalLayout_6.addWidget(self.label_6)
|
||||||
self.preview_spinBox = QtWidgets.QSpinBox(self.groupBox)
|
self.preview_spinBox = QtWidgets.QSpinBox(self.groupBox)
|
||||||
self.preview_spinBox.setMinimum(1)
|
self.preview_spinBox.setMinimum(1)
|
||||||
self.preview_spinBox.setProperty("value", 10)
|
self.preview_spinBox.setProperty("value", 10)
|
||||||
self.preview_spinBox.setObjectName("preview_spinBox")
|
self.preview_spinBox.setObjectName("preview_spinBox")
|
||||||
self.gridLayout.addWidget(self.preview_spinBox, 3, 0, 1, 1)
|
self.verticalLayout_6.addWidget(self.preview_spinBox)
|
||||||
self.label_6 = QtWidgets.QLabel(self.groupBox)
|
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
|
||||||
self.label_6.setObjectName("label_6")
|
self.verticalLayout_6.addItem(spacerItem)
|
||||||
self.gridLayout.addWidget(self.label_6, 2, 0, 1, 1)
|
self.horizontalLayout_4.addLayout(self.verticalLayout_6)
|
||||||
|
self.verticalLayout_5 = QtWidgets.QVBoxLayout()
|
||||||
|
self.verticalLayout_5.setObjectName("verticalLayout_5")
|
||||||
|
self.label = QtWidgets.QLabel(self.groupBox)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Preferred)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
|
||||||
|
self.label.setSizePolicy(sizePolicy)
|
||||||
|
self.label.setObjectName("label")
|
||||||
|
self.verticalLayout_5.addWidget(self.label)
|
||||||
|
self.pts_radioButton = QtWidgets.QRadioButton(self.groupBox)
|
||||||
|
self.pts_radioButton.setChecked(True)
|
||||||
|
self.pts_radioButton.setAutoExclusive(True)
|
||||||
|
self.pts_radioButton.setObjectName("pts_radioButton")
|
||||||
|
self.buttonGroup = QtWidgets.QButtonGroup(ascii_reader)
|
||||||
|
self.buttonGroup.setObjectName("buttonGroup")
|
||||||
|
self.buttonGroup.addButton(self.pts_radioButton)
|
||||||
|
self.verticalLayout_5.addWidget(self.pts_radioButton)
|
||||||
|
self.dsc_radioButton = QtWidgets.QRadioButton(self.groupBox)
|
||||||
|
self.dsc_radioButton.setObjectName("dsc_radioButton")
|
||||||
|
self.buttonGroup.addButton(self.dsc_radioButton)
|
||||||
|
self.verticalLayout_5.addWidget(self.dsc_radioButton)
|
||||||
|
self.FID_radioButton = QtWidgets.QRadioButton(self.groupBox)
|
||||||
|
self.FID_radioButton.setAutoExclusive(True)
|
||||||
|
self.FID_radioButton.setObjectName("FID_radioButton")
|
||||||
|
self.buttonGroup.addButton(self.FID_radioButton)
|
||||||
|
self.verticalLayout_5.addWidget(self.FID_radioButton)
|
||||||
|
self.spectrum_radioButton = QtWidgets.QRadioButton(self.groupBox)
|
||||||
|
self.spectrum_radioButton.setObjectName("spectrum_radioButton")
|
||||||
|
self.buttonGroup.addButton(self.spectrum_radioButton)
|
||||||
|
self.verticalLayout_5.addWidget(self.spectrum_radioButton)
|
||||||
|
self.bds_radioButton = QtWidgets.QRadioButton(self.groupBox)
|
||||||
|
self.bds_radioButton.setObjectName("bds_radioButton")
|
||||||
|
self.buttonGroup.addButton(self.bds_radioButton)
|
||||||
|
self.verticalLayout_5.addWidget(self.bds_radioButton)
|
||||||
|
self.horizontalLayout_4.addLayout(self.verticalLayout_5)
|
||||||
|
self.gridLayout_2 = QtWidgets.QGridLayout()
|
||||||
|
self.gridLayout_2.setObjectName("gridLayout_2")
|
||||||
|
self.deltay_lineEdit = QtWidgets.QLineEdit(self.groupBox)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.deltay_lineEdit.sizePolicy().hasHeightForWidth())
|
||||||
|
self.deltay_lineEdit.setSizePolicy(sizePolicy)
|
||||||
|
self.deltay_lineEdit.setObjectName("deltay_lineEdit")
|
||||||
|
self.gridLayout_2.addWidget(self.deltay_lineEdit, 3, 1, 1, 1)
|
||||||
|
self.label_7 = QtWidgets.QLabel(self.groupBox)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Preferred)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.label_7.sizePolicy().hasHeightForWidth())
|
||||||
|
self.label_7.setSizePolicy(sizePolicy)
|
||||||
|
self.label_7.setObjectName("label_7")
|
||||||
|
self.gridLayout_2.addWidget(self.label_7, 0, 0, 1, 2)
|
||||||
|
self.y_lineedit = QtWidgets.QLineEdit(self.groupBox)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.y_lineedit.sizePolicy().hasHeightForWidth())
|
||||||
|
self.y_lineedit.setSizePolicy(sizePolicy)
|
||||||
|
self.y_lineedit.setInputMethodHints(QtCore.Qt.ImhFormattedNumbersOnly|QtCore.Qt.ImhPreferNumbers)
|
||||||
|
self.y_lineedit.setObjectName("y_lineedit")
|
||||||
|
self.gridLayout_2.addWidget(self.y_lineedit, 2, 1, 1, 1)
|
||||||
|
self.y_label = QtWidgets.QLabel(self.groupBox)
|
||||||
|
self.y_label.setObjectName("y_label")
|
||||||
|
self.gridLayout_2.addWidget(self.y_label, 2, 0, 1, 1)
|
||||||
|
self.x_lineedit = QtWidgets.QLineEdit(self.groupBox)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.x_lineedit.sizePolicy().hasHeightForWidth())
|
||||||
|
self.x_lineedit.setSizePolicy(sizePolicy)
|
||||||
|
self.x_lineedit.setInputMethodHints(QtCore.Qt.ImhFormattedNumbersOnly|QtCore.Qt.ImhPreferNumbers)
|
||||||
|
self.x_lineedit.setObjectName("x_lineedit")
|
||||||
|
self.gridLayout_2.addWidget(self.x_lineedit, 1, 1, 1, 1)
|
||||||
|
self.label_5 = QtWidgets.QLabel(self.groupBox)
|
||||||
|
self.label_5.setObjectName("label_5")
|
||||||
|
self.gridLayout_2.addWidget(self.label_5, 3, 0, 1, 1)
|
||||||
|
self.x_label = QtWidgets.QLabel(self.groupBox)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Preferred)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.x_label.sizePolicy().hasHeightForWidth())
|
||||||
|
self.x_label.setSizePolicy(sizePolicy)
|
||||||
|
self.x_label.setObjectName("x_label")
|
||||||
|
self.gridLayout_2.addWidget(self.x_label, 1, 0, 1, 1)
|
||||||
|
spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
|
||||||
|
self.gridLayout_2.addItem(spacerItem1, 4, 1, 1, 1)
|
||||||
|
self.horizontalLayout_4.addLayout(self.gridLayout_2)
|
||||||
self.verticalLayout_3.addWidget(self.groupBox)
|
self.verticalLayout_3.addWidget(self.groupBox)
|
||||||
self.groupBox_2 = QtWidgets.QGroupBox(self.tabWidgetPage1)
|
self.groupBox_2 = QtWidgets.QGroupBox(self.tabWidgetPage1)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.MinimumExpanding)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.groupBox_2.sizePolicy().hasHeightForWidth())
|
||||||
|
self.groupBox_2.setSizePolicy(sizePolicy)
|
||||||
self.groupBox_2.setObjectName("groupBox_2")
|
self.groupBox_2.setObjectName("groupBox_2")
|
||||||
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.groupBox_2)
|
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.groupBox_2)
|
||||||
self.verticalLayout_2.setContentsMargins(3, 3, 3, 3)
|
self.verticalLayout_2.setContentsMargins(3, 3, 3, 3)
|
||||||
@ -215,24 +245,24 @@ class Ui_ascii_reader(object):
|
|||||||
self.pushButton.setSizePolicy(sizePolicy)
|
self.pushButton.setSizePolicy(sizePolicy)
|
||||||
self.pushButton.setObjectName("pushButton")
|
self.pushButton.setObjectName("pushButton")
|
||||||
self.formLayout.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.pushButton)
|
self.formLayout.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.pushButton)
|
||||||
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
|
spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
|
||||||
self.formLayout.setItem(6, QtWidgets.QFormLayout.FieldRole, spacerItem)
|
self.formLayout.setItem(6, QtWidgets.QFormLayout.FieldRole, spacerItem2)
|
||||||
self.horizontalLayout_3.addLayout(self.formLayout)
|
self.horizontalLayout_3.addLayout(self.formLayout)
|
||||||
self.tabWidget.addTab(self.tabWidgetPage2, "")
|
self.tabWidget.addTab(self.tabWidgetPage2, "")
|
||||||
self.verticalLayout.addWidget(self.tabWidget)
|
self.verticalLayout.addWidget(self.tabWidget)
|
||||||
self.horizontalLayout = QtWidgets.QHBoxLayout()
|
self.horizontalLayout = QtWidgets.QHBoxLayout()
|
||||||
self.horizontalLayout.setObjectName("horizontalLayout")
|
self.horizontalLayout.setObjectName("horizontalLayout")
|
||||||
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||||
self.horizontalLayout.addItem(spacerItem1)
|
self.horizontalLayout.addItem(spacerItem3)
|
||||||
self.verticalLayout.addLayout(self.horizontalLayout)
|
self.verticalLayout.addLayout(self.horizontalLayout)
|
||||||
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
|
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
|
||||||
self.horizontalLayout_2.setContentsMargins(-1, 0, -1, -1)
|
self.horizontalLayout_2.setContentsMargins(-1, 0, -1, -1)
|
||||||
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
|
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
|
||||||
|
spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||||
|
self.horizontalLayout_2.addItem(spacerItem4)
|
||||||
self.skippy_checkbox = QtWidgets.QCheckBox(ascii_reader)
|
self.skippy_checkbox = QtWidgets.QCheckBox(ascii_reader)
|
||||||
self.skippy_checkbox.setObjectName("skippy_checkbox")
|
self.skippy_checkbox.setObjectName("skippy_checkbox")
|
||||||
self.horizontalLayout_2.addWidget(self.skippy_checkbox)
|
self.horizontalLayout_2.addWidget(self.skippy_checkbox)
|
||||||
spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
|
||||||
self.horizontalLayout_2.addItem(spacerItem2)
|
|
||||||
self.verticalLayout.addLayout(self.horizontalLayout_2)
|
self.verticalLayout.addLayout(self.horizontalLayout_2)
|
||||||
self.buttonbox = QtWidgets.QDialogButtonBox(ascii_reader)
|
self.buttonbox = QtWidgets.QDialogButtonBox(ascii_reader)
|
||||||
self.buttonbox.setStandardButtons(QtWidgets.QDialogButtonBox.Apply|QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
|
self.buttonbox.setStandardButtons(QtWidgets.QDialogButtonBox.Apply|QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
|
||||||
@ -243,18 +273,8 @@ class Ui_ascii_reader(object):
|
|||||||
self.tabWidget.setCurrentIndex(0)
|
self.tabWidget.setCurrentIndex(0)
|
||||||
self.buttonbox.rejected.connect(ascii_reader.close) # type: ignore
|
self.buttonbox.rejected.connect(ascii_reader.close) # type: ignore
|
||||||
QtCore.QMetaObject.connectSlotsByName(ascii_reader)
|
QtCore.QMetaObject.connectSlotsByName(ascii_reader)
|
||||||
ascii_reader.setTabOrder(self.tabWidget, self.column_checkBox)
|
ascii_reader.setTabOrder(self.tabWidget, self.ascii_table)
|
||||||
ascii_reader.setTabOrder(self.column_checkBox, self.line_spinBox)
|
ascii_reader.setTabOrder(self.ascii_table, self.delay_textfield)
|
||||||
ascii_reader.setTabOrder(self.line_spinBox, self.preview_spinBox)
|
|
||||||
ascii_reader.setTabOrder(self.preview_spinBox, self.pts_radioButton)
|
|
||||||
ascii_reader.setTabOrder(self.pts_radioButton, self.FID_radioButton)
|
|
||||||
ascii_reader.setTabOrder(self.FID_radioButton, self.spectrum_radioButton)
|
|
||||||
ascii_reader.setTabOrder(self.spectrum_radioButton, self.x_lineedit)
|
|
||||||
ascii_reader.setTabOrder(self.x_lineedit, self.y_lineedit)
|
|
||||||
ascii_reader.setTabOrder(self.y_lineedit, self.deltay_lineEdit)
|
|
||||||
ascii_reader.setTabOrder(self.deltay_lineEdit, self.ascii_table)
|
|
||||||
ascii_reader.setTabOrder(self.ascii_table, self.skippy_checkbox)
|
|
||||||
ascii_reader.setTabOrder(self.skippy_checkbox, self.delay_textfield)
|
|
||||||
ascii_reader.setTabOrder(self.delay_textfield, self.delay_lineedit)
|
ascii_reader.setTabOrder(self.delay_textfield, self.delay_lineedit)
|
||||||
ascii_reader.setTabOrder(self.delay_lineedit, self.start_lineedit)
|
ascii_reader.setTabOrder(self.delay_lineedit, self.start_lineedit)
|
||||||
ascii_reader.setTabOrder(self.start_lineedit, self.end_lineedit)
|
ascii_reader.setTabOrder(self.start_lineedit, self.end_lineedit)
|
||||||
@ -267,19 +287,21 @@ class Ui_ascii_reader(object):
|
|||||||
_translate = QtCore.QCoreApplication.translate
|
_translate = QtCore.QCoreApplication.translate
|
||||||
ascii_reader.setWindowTitle(_translate("ascii_reader", "Read text file"))
|
ascii_reader.setWindowTitle(_translate("ascii_reader", "Read text file"))
|
||||||
self.groupBox.setTitle(_translate("ascii_reader", "Options"))
|
self.groupBox.setTitle(_translate("ascii_reader", "Options"))
|
||||||
self.FID_radioButton.setText(_translate("ascii_reader", "FID"))
|
|
||||||
self.x_lineedit.setToolTip(_translate("ascii_reader", "<html><head/><body><p>Specify which column is used as x-value.</p></body></html>"))
|
|
||||||
self.y_label.setText(_translate("ascii_reader", "y"))
|
|
||||||
self.pts_radioButton.setText(_translate("ascii_reader", "Points"))
|
|
||||||
self.label_5.setText(_translate("ascii_reader", "<html><head/><body><p>Δy</p></body></html>"))
|
|
||||||
self.column_checkBox.setText(_translate("ascii_reader", "Column name"))
|
self.column_checkBox.setText(_translate("ascii_reader", "Column name"))
|
||||||
self.label.setText(_translate("ascii_reader", "Import as"))
|
|
||||||
self.label_7.setText(_translate("ascii_reader", "Use columns as"))
|
|
||||||
self.y_lineedit.setToolTip(_translate("ascii_reader", "<html><head/><body><p>Specify which columns are read for y-values. (\'Points\': Every number creates a new data set;\'FID\'/\'Spectrum\': Numbers at even positions are used for real parts, at odd positions for imaginary parts.)</p></body></html>"))
|
|
||||||
self.spectrum_radioButton.setText(_translate("ascii_reader", "Spectrum"))
|
|
||||||
self.x_label.setText(_translate("ascii_reader", "x"))
|
|
||||||
self.line_spinBox.setPrefix(_translate("ascii_reader", "header line "))
|
self.line_spinBox.setPrefix(_translate("ascii_reader", "header line "))
|
||||||
self.label_6.setText(_translate("ascii_reader", "Preview length"))
|
self.label_6.setText(_translate("ascii_reader", "Preview length"))
|
||||||
|
self.label.setText(_translate("ascii_reader", "Import as"))
|
||||||
|
self.pts_radioButton.setText(_translate("ascii_reader", "Points"))
|
||||||
|
self.dsc_radioButton.setText(_translate("ascii_reader", "DSC"))
|
||||||
|
self.FID_radioButton.setText(_translate("ascii_reader", "FID"))
|
||||||
|
self.spectrum_radioButton.setText(_translate("ascii_reader", "Spectrum"))
|
||||||
|
self.bds_radioButton.setText(_translate("ascii_reader", "BDS"))
|
||||||
|
self.label_7.setText(_translate("ascii_reader", "Use columns as"))
|
||||||
|
self.y_lineedit.setToolTip(_translate("ascii_reader", "<html><head/><body><p>Specify which columns are read for y-values. (\'Points\': Every number creates a new data set;\'FID\'/\'Spectrum\': Numbers at even positions are used for real parts, at odd positions for imaginary parts.)</p></body></html>"))
|
||||||
|
self.y_label.setText(_translate("ascii_reader", "y"))
|
||||||
|
self.x_lineedit.setToolTip(_translate("ascii_reader", "<html><head/><body><p>Specify which column is used as x-value.</p></body></html>"))
|
||||||
|
self.label_5.setText(_translate("ascii_reader", "<html><head/><body><p>Δy</p></body></html>"))
|
||||||
|
self.x_label.setText(_translate("ascii_reader", "x"))
|
||||||
self.groupBox_2.setTitle(_translate("ascii_reader", "Preview"))
|
self.groupBox_2.setTitle(_translate("ascii_reader", "Preview"))
|
||||||
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabWidgetPage1), _translate("ascii_reader", "Data"))
|
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabWidgetPage1), _translate("ascii_reader", "Data"))
|
||||||
self.label_2.setText(_translate("ascii_reader", "Number of delays"))
|
self.label_2.setText(_translate("ascii_reader", "Number of delays"))
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
# Form implementation generated from reading ui file 'src/resources/_ui/basewindow.ui'
|
# Form implementation generated from reading ui file 'src/resources/_ui/basewindow.ui'
|
||||||
#
|
#
|
||||||
# Created by: PyQt5 UI code generator 5.15.2
|
# Created by: PyQt5 UI code generator 5.15.9
|
||||||
#
|
#
|
||||||
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
|
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
|
||||||
# run again. Do not edit this file unless you know what you are doing.
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
@ -64,6 +64,9 @@ class Ui_BaseWindow(object):
|
|||||||
icon5 = QtGui.QIcon()
|
icon5 = QtGui.QIcon()
|
||||||
icon5.addPixmap(QtGui.QPixmap(":/eval_t1_dock"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
icon5.addPixmap(QtGui.QPixmap(":/eval_t1_dock"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||||
self.tabWidget.addTab(self.t1tauwidget, icon5, "")
|
self.tabWidget.addTab(self.t1tauwidget, icon5, "")
|
||||||
|
self.drawingswidget = DrawingsWidget()
|
||||||
|
self.drawingswidget.setObjectName("drawingswidget")
|
||||||
|
self.tabWidget.addTab(self.drawingswidget, "")
|
||||||
self.integralwidget = IntegralWidget()
|
self.integralwidget = IntegralWidget()
|
||||||
self.integralwidget.setObjectName("integralwidget")
|
self.integralwidget.setObjectName("integralwidget")
|
||||||
self.tabWidget.addTab(self.integralwidget, "")
|
self.tabWidget.addTab(self.integralwidget, "")
|
||||||
@ -72,7 +75,7 @@ class Ui_BaseWindow(object):
|
|||||||
self.horizontalLayout.addWidget(self.splitter)
|
self.horizontalLayout.addWidget(self.splitter)
|
||||||
BaseWindow.setCentralWidget(self.centralwidget)
|
BaseWindow.setCentralWidget(self.centralwidget)
|
||||||
self.menubar = QtWidgets.QMenuBar(BaseWindow)
|
self.menubar = QtWidgets.QMenuBar(BaseWindow)
|
||||||
self.menubar.setGeometry(QtCore.QRect(0, 0, 1386, 22))
|
self.menubar.setGeometry(QtCore.QRect(0, 0, 1386, 20))
|
||||||
self.menubar.setObjectName("menubar")
|
self.menubar.setObjectName("menubar")
|
||||||
self.menuFile = QtWidgets.QMenu(self.menubar)
|
self.menuFile = QtWidgets.QMenu(self.menubar)
|
||||||
self.menuFile.setObjectName("menuFile")
|
self.menuFile.setObjectName("menuFile")
|
||||||
@ -114,6 +117,8 @@ class Ui_BaseWindow(object):
|
|||||||
self.menuStuff = QtWidgets.QMenu(self.menubar)
|
self.menuStuff = QtWidgets.QMenu(self.menubar)
|
||||||
self.menuStuff.setTitle("")
|
self.menuStuff.setTitle("")
|
||||||
self.menuStuff.setObjectName("menuStuff")
|
self.menuStuff.setObjectName("menuStuff")
|
||||||
|
self.menuDSC = QtWidgets.QMenu(self.menubar)
|
||||||
|
self.menuDSC.setObjectName("menuDSC")
|
||||||
BaseWindow.setMenuBar(self.menubar)
|
BaseWindow.setMenuBar(self.menubar)
|
||||||
self.toolBar = QtWidgets.QToolBar(BaseWindow)
|
self.toolBar = QtWidgets.QToolBar(BaseWindow)
|
||||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
|
||||||
@ -353,6 +358,8 @@ class Ui_BaseWindow(object):
|
|||||||
self.actionUpdate.setObjectName("actionUpdate")
|
self.actionUpdate.setObjectName("actionUpdate")
|
||||||
self.actionMine = QtWidgets.QAction(BaseWindow)
|
self.actionMine = QtWidgets.QAction(BaseWindow)
|
||||||
self.actionMine.setObjectName("actionMine")
|
self.actionMine.setObjectName("actionMine")
|
||||||
|
self.action_draw_object = QtWidgets.QAction(BaseWindow)
|
||||||
|
self.action_draw_object.setObjectName("action_draw_object")
|
||||||
self.actionBugs = QtWidgets.QAction(BaseWindow)
|
self.actionBugs = QtWidgets.QAction(BaseWindow)
|
||||||
self.actionBugs.setObjectName("actionBugs")
|
self.actionBugs.setObjectName("actionBugs")
|
||||||
self.actionShow_error_log = QtWidgets.QAction(BaseWindow)
|
self.actionShow_error_log = QtWidgets.QAction(BaseWindow)
|
||||||
@ -361,6 +368,10 @@ class Ui_BaseWindow(object):
|
|||||||
self.actionCreate_starter.setObjectName("actionCreate_starter")
|
self.actionCreate_starter.setObjectName("actionCreate_starter")
|
||||||
self.actionAbout = QtWidgets.QAction(BaseWindow)
|
self.actionAbout = QtWidgets.QAction(BaseWindow)
|
||||||
self.actionAbout.setObjectName("actionAbout")
|
self.actionAbout.setObjectName("actionAbout")
|
||||||
|
self.actionTNMH_model = QtWidgets.QAction(BaseWindow)
|
||||||
|
self.actionTNMH_model.setObjectName("actionTNMH_model")
|
||||||
|
self.actionBinning = QtWidgets.QAction(BaseWindow)
|
||||||
|
self.actionBinning.setObjectName("actionBinning")
|
||||||
self.menuSave.addAction(self.actionSave)
|
self.menuSave.addAction(self.actionSave)
|
||||||
self.menuSave.addAction(self.actionExportGraphic)
|
self.menuSave.addAction(self.actionExportGraphic)
|
||||||
self.menuSave.addAction(self.action_save_fit_parameter)
|
self.menuSave.addAction(self.action_save_fit_parameter)
|
||||||
@ -404,6 +415,7 @@ class Ui_BaseWindow(object):
|
|||||||
self.menuExtra.addSeparator()
|
self.menuExtra.addSeparator()
|
||||||
self.menuExtra.addAction(self.menuNormalize.menuAction())
|
self.menuExtra.addAction(self.menuNormalize.menuAction())
|
||||||
self.menuExtra.addAction(self.actionInterpolation)
|
self.menuExtra.addAction(self.actionInterpolation)
|
||||||
|
self.menuExtra.addAction(self.actionBinning)
|
||||||
self.menuExtra.addAction(self.actionRunning_values)
|
self.menuExtra.addAction(self.actionRunning_values)
|
||||||
self.menuExtra.addAction(self.actionShift)
|
self.menuExtra.addAction(self.actionShift)
|
||||||
self.menuExtra.addSeparator()
|
self.menuExtra.addSeparator()
|
||||||
@ -441,6 +453,7 @@ class Ui_BaseWindow(object):
|
|||||||
self.menuWindow.addSeparator()
|
self.menuWindow.addSeparator()
|
||||||
self.menuWindow.addAction(self.actionRefresh)
|
self.menuWindow.addAction(self.actionRefresh)
|
||||||
self.menuWindow.addSeparator()
|
self.menuWindow.addSeparator()
|
||||||
|
self.menuWindow.addAction(self.action_draw_object)
|
||||||
self.menuNMR.addAction(self.t1action)
|
self.menuNMR.addAction(self.t1action)
|
||||||
self.menuNMR.addAction(self.actionCalculateT1)
|
self.menuNMR.addAction(self.actionCalculateT1)
|
||||||
self.menuNMR.addAction(self.action_coup_calc)
|
self.menuNMR.addAction(self.action_coup_calc)
|
||||||
@ -456,6 +469,7 @@ class Ui_BaseWindow(object):
|
|||||||
self.menuStuff.addAction(self.actionLife)
|
self.menuStuff.addAction(self.actionLife)
|
||||||
self.menuStuff.addAction(self.actionTetris)
|
self.menuStuff.addAction(self.actionTetris)
|
||||||
self.menuStuff.addAction(self.actionMine)
|
self.menuStuff.addAction(self.actionMine)
|
||||||
|
self.menuDSC.addAction(self.actionTNMH_model)
|
||||||
self.menubar.addAction(self.menuFile.menuAction())
|
self.menubar.addAction(self.menuFile.menuAction())
|
||||||
self.menubar.addAction(self.menuWindow.menuAction())
|
self.menubar.addAction(self.menuWindow.menuAction())
|
||||||
self.menubar.addAction(self.menuData.menuAction())
|
self.menubar.addAction(self.menuData.menuAction())
|
||||||
@ -464,6 +478,7 @@ class Ui_BaseWindow(object):
|
|||||||
self.menubar.addAction(self.menuFit.menuAction())
|
self.menubar.addAction(self.menuFit.menuAction())
|
||||||
self.menubar.addAction(self.menuNMR.menuAction())
|
self.menubar.addAction(self.menuNMR.menuAction())
|
||||||
self.menubar.addAction(self.menuBDS.menuAction())
|
self.menubar.addAction(self.menuBDS.menuAction())
|
||||||
|
self.menubar.addAction(self.menuDSC.menuAction())
|
||||||
self.menubar.addAction(self.menuOptions.menuAction())
|
self.menubar.addAction(self.menuOptions.menuAction())
|
||||||
self.menubar.addAction(self.menuHelp.menuAction())
|
self.menubar.addAction(self.menuHelp.menuAction())
|
||||||
self.menubar.addAction(self.menuStuff.menuAction())
|
self.menubar.addAction(self.menuStuff.menuAction())
|
||||||
@ -487,7 +502,7 @@ class Ui_BaseWindow(object):
|
|||||||
|
|
||||||
self.retranslateUi(BaseWindow)
|
self.retranslateUi(BaseWindow)
|
||||||
self.tabWidget.setCurrentIndex(0)
|
self.tabWidget.setCurrentIndex(0)
|
||||||
self.action_close.triggered.connect(BaseWindow.close)
|
self.action_close.triggered.connect(BaseWindow.close) # type: ignore
|
||||||
QtCore.QMetaObject.connectSlotsByName(BaseWindow)
|
QtCore.QMetaObject.connectSlotsByName(BaseWindow)
|
||||||
|
|
||||||
def retranslateUi(self, BaseWindow):
|
def retranslateUi(self, BaseWindow):
|
||||||
@ -499,6 +514,7 @@ class Ui_BaseWindow(object):
|
|||||||
self.tabWidget.setTabText(self.tabWidget.indexOf(self.editsignalwidget), _translate("BaseWindow", "Signals"))
|
self.tabWidget.setTabText(self.tabWidget.indexOf(self.editsignalwidget), _translate("BaseWindow", "Signals"))
|
||||||
self.tabWidget.setTabText(self.tabWidget.indexOf(self.ptsselectwidget), _translate("BaseWindow", "Pick points"))
|
self.tabWidget.setTabText(self.tabWidget.indexOf(self.ptsselectwidget), _translate("BaseWindow", "Pick points"))
|
||||||
self.tabWidget.setTabText(self.tabWidget.indexOf(self.t1tauwidget), _translate("BaseWindow", "SLR"))
|
self.tabWidget.setTabText(self.tabWidget.indexOf(self.t1tauwidget), _translate("BaseWindow", "SLR"))
|
||||||
|
self.tabWidget.setTabText(self.tabWidget.indexOf(self.drawingswidget), _translate("BaseWindow", "Drawings"))
|
||||||
self.tabWidget.setTabText(self.tabWidget.indexOf(self.integralwidget), _translate("BaseWindow", "Integrate"))
|
self.tabWidget.setTabText(self.tabWidget.indexOf(self.integralwidget), _translate("BaseWindow", "Integrate"))
|
||||||
self.menuFile.setTitle(_translate("BaseWindow", "&File"))
|
self.menuFile.setTitle(_translate("BaseWindow", "&File"))
|
||||||
self.menuSave.setTitle(_translate("BaseWindow", "&Save..."))
|
self.menuSave.setTitle(_translate("BaseWindow", "&Save..."))
|
||||||
@ -515,6 +531,7 @@ class Ui_BaseWindow(object):
|
|||||||
self.menuNMR.setTitle(_translate("BaseWindow", "NMR"))
|
self.menuNMR.setTitle(_translate("BaseWindow", "NMR"))
|
||||||
self.menuBDS.setTitle(_translate("BaseWindow", "BDS"))
|
self.menuBDS.setTitle(_translate("BaseWindow", "BDS"))
|
||||||
self.menuSpectrum.setTitle(_translate("BaseWindow", "Spectrum"))
|
self.menuSpectrum.setTitle(_translate("BaseWindow", "Spectrum"))
|
||||||
|
self.menuDSC.setTitle(_translate("BaseWindow", "DSC"))
|
||||||
self.toolBar.setWindowTitle(_translate("BaseWindow", "Main"))
|
self.toolBar.setWindowTitle(_translate("BaseWindow", "Main"))
|
||||||
self.toolbar_edit.setWindowTitle(_translate("BaseWindow", "Math"))
|
self.toolbar_edit.setWindowTitle(_translate("BaseWindow", "Math"))
|
||||||
self.toolBar_nmr.setWindowTitle(_translate("BaseWindow", "NMR"))
|
self.toolBar_nmr.setWindowTitle(_translate("BaseWindow", "NMR"))
|
||||||
@ -567,6 +584,7 @@ class Ui_BaseWindow(object):
|
|||||||
self.actionFit_parameter_saving.setText(_translate("BaseWindow", "Fit parameter saving..."))
|
self.actionFit_parameter_saving.setText(_translate("BaseWindow", "Fit parameter saving..."))
|
||||||
self.actionShow_fit_parameter.setText(_translate("BaseWindow", "Parameter..."))
|
self.actionShow_fit_parameter.setText(_translate("BaseWindow", "Parameter..."))
|
||||||
self.actionSkip_points.setText(_translate("BaseWindow", "Skip points..."))
|
self.actionSkip_points.setText(_translate("BaseWindow", "Skip points..."))
|
||||||
|
self.actionGuide_lines.setText(_translate("BaseWindow", "Draw lines..."))
|
||||||
self.actionMaximize.setText(_translate("BaseWindow", "Maximize"))
|
self.actionMaximize.setText(_translate("BaseWindow", "Maximize"))
|
||||||
self.actionTile.setText(_translate("BaseWindow", "Tile windows"))
|
self.actionTile.setText(_translate("BaseWindow", "Tile windows"))
|
||||||
self.actionTileVertical.setText(_translate("BaseWindow", "Tile windows vertically"))
|
self.actionTileVertical.setText(_translate("BaseWindow", "Tile windows vertically"))
|
||||||
@ -614,15 +632,19 @@ class Ui_BaseWindow(object):
|
|||||||
self.actionTetris.setText(_translate("BaseWindow", "Not Tetris"))
|
self.actionTetris.setText(_translate("BaseWindow", "Not Tetris"))
|
||||||
self.actionUpdate.setText(_translate("BaseWindow", "Look for updates"))
|
self.actionUpdate.setText(_translate("BaseWindow", "Look for updates"))
|
||||||
self.actionMine.setText(_translate("BaseWindow", "Mine"))
|
self.actionMine.setText(_translate("BaseWindow", "Mine"))
|
||||||
|
self.action_draw_object.setText(_translate("BaseWindow", "Draw objects..."))
|
||||||
self.actionBugs.setText(_translate("BaseWindow", "Bugs! Problems! Wishes!"))
|
self.actionBugs.setText(_translate("BaseWindow", "Bugs! Problems! Wishes!"))
|
||||||
self.actionShow_error_log.setText(_translate("BaseWindow", "Show error log"))
|
self.actionShow_error_log.setText(_translate("BaseWindow", "Show error log"))
|
||||||
self.actionCreate_starter.setText(_translate("BaseWindow", "Create starter.."))
|
self.actionCreate_starter.setText(_translate("BaseWindow", "Create starter.."))
|
||||||
self.actionAbout.setText(_translate("BaseWindow", "About..."))
|
self.actionAbout.setText(_translate("BaseWindow", "About..."))
|
||||||
|
self.actionTNMH_model.setText(_translate("BaseWindow", "Tg determination,,,"))
|
||||||
|
self.actionBinning.setText(_translate("BaseWindow", "Binning..."))
|
||||||
from ..data.datawidget.datawidget import DataWidget
|
from ..data.datawidget.datawidget import DataWidget
|
||||||
from ..data.integral_widget import IntegralWidget
|
from ..data.integral_widget import IntegralWidget
|
||||||
from ..data.point_select import PointSelectWidget
|
from ..data.point_select import PointSelectWidget
|
||||||
from ..data.signaledit.editsignalwidget import EditSignalWidget
|
from ..data.signaledit.editsignalwidget import EditSignalWidget
|
||||||
from ..data.valueeditwidget import ValueEditWidget
|
from ..data.valueeditwidget import ValueEditWidget
|
||||||
from ..fit.fitwindow import QFitDialog
|
from ..fit.fitwindow import QFitDialog
|
||||||
|
from ..graphs.drawings import DrawingsWidget
|
||||||
from ..lib.mdiarea import MdiAreaTile
|
from ..lib.mdiarea import MdiAreaTile
|
||||||
from ..nmr.t1widget import QT1Widget
|
from ..nmr.t1widget import QT1Widget
|
||||||
|
190
src/gui_qt/_py/tnmh_dialog.py
Normal file
190
src/gui_qt/_py/tnmh_dialog.py
Normal file
@ -0,0 +1,190 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# Form implementation generated from reading ui file 'src/resources/_ui/tnmh_dialog.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt5 UI code generator 5.15.9
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_Dialog(object):
|
||||||
|
def setupUi(self, Dialog):
|
||||||
|
Dialog.setObjectName("Dialog")
|
||||||
|
Dialog.resize(1042, 683)
|
||||||
|
self.gridLayout = QtWidgets.QGridLayout(Dialog)
|
||||||
|
self.gridLayout.setObjectName("gridLayout")
|
||||||
|
self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
|
||||||
|
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
|
||||||
|
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Close|QtWidgets.QDialogButtonBox.Save)
|
||||||
|
self.buttonBox.setObjectName("buttonBox")
|
||||||
|
self.gridLayout.addWidget(self.buttonBox, 5, 1, 1, 1)
|
||||||
|
self.verticalLayout = QtWidgets.QVBoxLayout()
|
||||||
|
self.verticalLayout.setObjectName("verticalLayout")
|
||||||
|
self.listWidget = QtWidgets.QListWidget(Dialog)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Expanding)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.listWidget.sizePolicy().hasHeightForWidth())
|
||||||
|
self.listWidget.setSizePolicy(sizePolicy)
|
||||||
|
self.listWidget.setObjectName("listWidget")
|
||||||
|
self.verticalLayout.addWidget(self.listWidget)
|
||||||
|
self.label = QtWidgets.QLabel(Dialog)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Maximum)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
|
||||||
|
self.label.setSizePolicy(sizePolicy)
|
||||||
|
self.label.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
|
||||||
|
self.label.setObjectName("label")
|
||||||
|
self.verticalLayout.addWidget(self.label)
|
||||||
|
self.tg_value_label = QtWidgets.QLabel(Dialog)
|
||||||
|
self.tg_value_label.setText("")
|
||||||
|
self.tg_value_label.setObjectName("tg_value_label")
|
||||||
|
self.verticalLayout.addWidget(self.tg_value_label)
|
||||||
|
self.label_4 = QtWidgets.QLabel(Dialog)
|
||||||
|
self.label_4.setObjectName("label_4")
|
||||||
|
self.verticalLayout.addWidget(self.label_4)
|
||||||
|
self.label_5 = QtWidgets.QLabel(Dialog)
|
||||||
|
self.label_5.setText("")
|
||||||
|
self.label_5.setObjectName("label_5")
|
||||||
|
self.verticalLayout.addWidget(self.label_5)
|
||||||
|
self.gridLayout.addLayout(self.verticalLayout, 0, 0, 5, 1)
|
||||||
|
self.stackedWidget = QtWidgets.QStackedWidget(Dialog)
|
||||||
|
self.stackedWidget.setFrameShape(QtWidgets.QFrame.StyledPanel)
|
||||||
|
self.stackedWidget.setFrameShadow(QtWidgets.QFrame.Raised)
|
||||||
|
self.stackedWidget.setObjectName("stackedWidget")
|
||||||
|
self.stackedWidgetPage1 = QtWidgets.QWidget()
|
||||||
|
self.stackedWidgetPage1.setObjectName("stackedWidgetPage1")
|
||||||
|
self.gridLayout_3 = QtWidgets.QGridLayout(self.stackedWidgetPage1)
|
||||||
|
self.gridLayout_3.setObjectName("gridLayout_3")
|
||||||
|
self.hodge_selection = CheckCombobox(self.stackedWidgetPage1)
|
||||||
|
self.hodge_selection.setObjectName("hodge_selection")
|
||||||
|
self.hodge_selection.addItem("")
|
||||||
|
self.hodge_selection.addItem("")
|
||||||
|
self.hodge_selection.addItem("")
|
||||||
|
self.hodge_selection.addItem("")
|
||||||
|
self.gridLayout_3.addWidget(self.hodge_selection, 4, 2, 1, 1)
|
||||||
|
self.tau_plot = PlotWidget(self.stackedWidgetPage1)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.MinimumExpanding)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.tau_plot.sizePolicy().hasHeightForWidth())
|
||||||
|
self.tau_plot.setSizePolicy(sizePolicy)
|
||||||
|
self.tau_plot.setObjectName("tau_plot")
|
||||||
|
self.gridLayout_3.addWidget(self.tau_plot, 0, 0, 7, 1)
|
||||||
|
self.tg_export_check = QtWidgets.QCheckBox(self.stackedWidgetPage1)
|
||||||
|
self.tg_export_check.setChecked(True)
|
||||||
|
self.tg_export_check.setObjectName("tg_export_check")
|
||||||
|
self.gridLayout_3.addWidget(self.tg_export_check, 2, 1, 1, 1)
|
||||||
|
self.tglines_export_check = QtWidgets.QCheckBox(self.stackedWidgetPage1)
|
||||||
|
self.tglines_export_check.setChecked(True)
|
||||||
|
self.tglines_export_check.setObjectName("tglines_export_check")
|
||||||
|
self.gridLayout_3.addWidget(self.tglines_export_check, 2, 2, 1, 1)
|
||||||
|
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
|
||||||
|
self.gridLayout_3.addItem(spacerItem, 6, 2, 1, 1)
|
||||||
|
self.new_graph_tau_combo = QtWidgets.QComboBox(self.stackedWidgetPage1)
|
||||||
|
self.new_graph_tau_combo.setObjectName("new_graph_tau_combo")
|
||||||
|
self.gridLayout_3.addWidget(self.new_graph_tau_combo, 5, 2, 1, 1)
|
||||||
|
self.label_6 = QtWidgets.QLabel(self.stackedWidgetPage1)
|
||||||
|
self.label_6.setObjectName("label_6")
|
||||||
|
self.gridLayout_3.addWidget(self.label_6, 4, 1, 1, 1)
|
||||||
|
self.new_graph_tau_check = QtWidgets.QCheckBox(self.stackedWidgetPage1)
|
||||||
|
self.new_graph_tau_check.setChecked(True)
|
||||||
|
self.new_graph_tau_check.setObjectName("new_graph_tau_check")
|
||||||
|
self.gridLayout_3.addWidget(self.new_graph_tau_check, 5, 1, 1, 1)
|
||||||
|
self.line = QtWidgets.QFrame(self.stackedWidgetPage1)
|
||||||
|
self.line.setFrameShape(QtWidgets.QFrame.HLine)
|
||||||
|
self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
|
||||||
|
self.line.setObjectName("line")
|
||||||
|
self.gridLayout_3.addWidget(self.line, 3, 1, 1, 2)
|
||||||
|
self.stackedWidget.addWidget(self.stackedWidgetPage1)
|
||||||
|
self.page = QtWidgets.QWidget()
|
||||||
|
self.page.setObjectName("page")
|
||||||
|
self.gridLayout_2 = QtWidgets.QGridLayout(self.page)
|
||||||
|
self.gridLayout_2.setObjectName("gridLayout_2")
|
||||||
|
self.horizontalLayout = QtWidgets.QHBoxLayout()
|
||||||
|
self.horizontalLayout.setObjectName("horizontalLayout")
|
||||||
|
self.label_2 = QtWidgets.QLabel(self.page)
|
||||||
|
self.label_2.setObjectName("label_2")
|
||||||
|
self.horizontalLayout.addWidget(self.label_2)
|
||||||
|
self.comboBox = QtWidgets.QComboBox(self.page)
|
||||||
|
self.comboBox.setObjectName("comboBox")
|
||||||
|
self.comboBox.addItem("")
|
||||||
|
self.comboBox.addItem("")
|
||||||
|
self.comboBox.addItem("")
|
||||||
|
self.comboBox.addItem("")
|
||||||
|
self.comboBox.addItem("")
|
||||||
|
self.horizontalLayout.addWidget(self.comboBox)
|
||||||
|
self.gridLayout_2.addLayout(self.horizontalLayout, 1, 1, 1, 1)
|
||||||
|
self.pushButton_3 = QtWidgets.QPushButton(self.page)
|
||||||
|
self.pushButton_3.setObjectName("pushButton_3")
|
||||||
|
self.gridLayout_2.addWidget(self.pushButton_3, 2, 1, 1, 1)
|
||||||
|
self.graphicsView_2 = PlotWidget(self.page)
|
||||||
|
self.graphicsView_2.setObjectName("graphicsView_2")
|
||||||
|
self.gridLayout_2.addWidget(self.graphicsView_2, 0, 0, 3, 1)
|
||||||
|
self.stackedWidget.addWidget(self.page)
|
||||||
|
self.gridLayout.addWidget(self.stackedWidget, 4, 1, 1, 1)
|
||||||
|
self.dsc_plot = PlotWidget(Dialog)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.MinimumExpanding)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.dsc_plot.sizePolicy().hasHeightForWidth())
|
||||||
|
self.dsc_plot.setSizePolicy(sizePolicy)
|
||||||
|
self.dsc_plot.setObjectName("dsc_plot")
|
||||||
|
self.gridLayout.addWidget(self.dsc_plot, 0, 1, 1, 1)
|
||||||
|
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
|
||||||
|
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
|
||||||
|
self.calctg_button = QtWidgets.QPushButton(Dialog)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.calctg_button.sizePolicy().hasHeightForWidth())
|
||||||
|
self.calctg_button.setSizePolicy(sizePolicy)
|
||||||
|
self.calctg_button.setObjectName("calctg_button")
|
||||||
|
self.horizontalLayout_2.addWidget(self.calctg_button)
|
||||||
|
self.pushButton_2 = QtWidgets.QPushButton(Dialog)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.pushButton_2.sizePolicy().hasHeightForWidth())
|
||||||
|
self.pushButton_2.setSizePolicy(sizePolicy)
|
||||||
|
self.pushButton_2.setObjectName("pushButton_2")
|
||||||
|
self.horizontalLayout_2.addWidget(self.pushButton_2)
|
||||||
|
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||||
|
self.horizontalLayout_2.addItem(spacerItem1)
|
||||||
|
self.gridLayout.addLayout(self.horizontalLayout_2, 2, 1, 1, 1)
|
||||||
|
|
||||||
|
self.retranslateUi(Dialog)
|
||||||
|
self.stackedWidget.setCurrentIndex(0)
|
||||||
|
self.buttonBox.accepted.connect(Dialog.accept) # type: ignore
|
||||||
|
self.buttonBox.rejected.connect(Dialog.reject) # type: ignore
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(Dialog)
|
||||||
|
|
||||||
|
def retranslateUi(self, Dialog):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
Dialog.setWindowTitle(_translate("Dialog", "SImba, everything the light touches is our kingdom"))
|
||||||
|
self.label.setText(_translate("Dialog", "<html><head/><body><p><span style=\" font-weight:600;\">Tg values:</span></p></body></html>"))
|
||||||
|
self.label_4.setText(_translate("Dialog", "<html><head/><body><p><span style=\" font-weight:600;\">TNMH parameter:</span></p></body></html>"))
|
||||||
|
self.hodge_selection.setItemText(0, _translate("Dialog", "Onset"))
|
||||||
|
self.hodge_selection.setItemText(1, _translate("Dialog", "Midpoint"))
|
||||||
|
self.hodge_selection.setItemText(2, _translate("Dialog", "End"))
|
||||||
|
self.hodge_selection.setItemText(3, _translate("Dialog", "Inflection"))
|
||||||
|
self.tg_export_check.setText(_translate("Dialog", "Export Tg"))
|
||||||
|
self.tglines_export_check.setText(_translate("Dialog", "Export lines"))
|
||||||
|
self.label_6.setText(_translate("Dialog", "Hodge:"))
|
||||||
|
self.new_graph_tau_check.setText(_translate("Dialog", "New graph"))
|
||||||
|
self.label_2.setText(_translate("Dialog", "Tg for TNMH"))
|
||||||
|
self.comboBox.setItemText(0, _translate("Dialog", "Fictive"))
|
||||||
|
self.comboBox.setItemText(1, _translate("Dialog", "Onset"))
|
||||||
|
self.comboBox.setItemText(2, _translate("Dialog", "Midpoint"))
|
||||||
|
self.comboBox.setItemText(3, _translate("Dialog", "End"))
|
||||||
|
self.comboBox.setItemText(4, _translate("Dialog", "Inflection"))
|
||||||
|
self.pushButton_3.setText(_translate("Dialog", "Fit TNMH model"))
|
||||||
|
self.calctg_button.setText(_translate("Dialog", "Calculate Tg"))
|
||||||
|
self.pushButton_2.setText(_translate("Dialog", "Calculate fictive Cp"))
|
||||||
|
from ..lib.forms import CheckCombobox
|
||||||
|
from pyqtgraph import PlotWidget
|
@ -317,7 +317,7 @@ class ExperimentContainer(QtCore.QObject):
|
|||||||
if mode in ['imag', 'all'] and self.plot_imag is not None:
|
if mode in ['imag', 'all'] and self.plot_imag is not None:
|
||||||
self.plot_imag.set_color(color, symbol=symbol, line=line)
|
self.plot_imag.set_color(color, symbol=symbol, line=line)
|
||||||
|
|
||||||
def setSymbol(self, symbol=None, color=None, size=None, mode='real'):
|
def setSymbol(self, *, symbol=None, color=None, size=None, mode='real'):
|
||||||
if mode in ['real', 'all']:
|
if mode in ['real', 'all']:
|
||||||
self.plot_real.set_symbol(symbol=symbol, size=size, color=color)
|
self.plot_real.set_symbol(symbol=symbol, size=size, color=color)
|
||||||
if color is not None and self.plot_error is not None and self.plot_real.symbol != SymbolStyle.No:
|
if color is not None and self.plot_error is not None and self.plot_real.symbol != SymbolStyle.No:
|
||||||
@ -329,7 +329,7 @@ class ExperimentContainer(QtCore.QObject):
|
|||||||
else:
|
else:
|
||||||
print('Updating symbol failed for ' + str(self.id))
|
print('Updating symbol failed for ' + str(self.id))
|
||||||
|
|
||||||
def setLine(self, width=None, style=None, color=None, mode='real'):
|
def setLine(self, *, width=None, style=None, color=None, mode='real'):
|
||||||
if mode in ['real', 'all']:
|
if mode in ['real', 'all']:
|
||||||
self.plot_real.set_line(width=width, style=style, color=color)
|
self.plot_real.set_line(width=width, style=style, color=color)
|
||||||
if color is not None and self.plot_error is not None and self.plot_real.symbol == SymbolStyle.No:
|
if color is not None and self.plot_error is not None and self.plot_real.symbol == SymbolStyle.No:
|
||||||
@ -480,6 +480,12 @@ class ExperimentContainer(QtCore.QObject):
|
|||||||
|
|
||||||
return new_data
|
return new_data
|
||||||
|
|
||||||
|
def binning(self, digits: float):
|
||||||
|
new_data = self.copy(full=True)
|
||||||
|
new_data.data = self._data.binning(value=digits)
|
||||||
|
|
||||||
|
return new_data
|
||||||
|
|
||||||
|
|
||||||
class PointContainer(ExperimentContainer):
|
class PointContainer(ExperimentContainer):
|
||||||
symbols = symbolcycle()
|
symbols = symbolcycle()
|
||||||
|
299
src/gui_qt/dsc/glass_dialog.py
Normal file
299
src/gui_qt/dsc/glass_dialog.py
Normal file
@ -0,0 +1,299 @@
|
|||||||
|
import pprint
|
||||||
|
from itertools import cycle
|
||||||
|
|
||||||
|
from numpy import array, nan, isnan
|
||||||
|
from pyqtgraph import mkPen, mkBrush, LegendItem
|
||||||
|
|
||||||
|
from nmreval.dsc.hodge import tau_hodge
|
||||||
|
from nmreval.lib.colors import Tab10
|
||||||
|
from ..Qt import QtWidgets, QtCore
|
||||||
|
from .._py.tnmh_dialog import Ui_Dialog
|
||||||
|
from ..lib.pg_objects import PlotItem, RegionItem
|
||||||
|
|
||||||
|
from nmreval.data import DSC, Points
|
||||||
|
|
||||||
|
|
||||||
|
class TgCalculator(QtWidgets.QDialog, Ui_Dialog):
|
||||||
|
newTg = QtCore.pyqtSignal(dict, list, str)
|
||||||
|
|
||||||
|
def __init__(self, management, parent=None):
|
||||||
|
super().__init__(parent=parent)
|
||||||
|
|
||||||
|
self.setupUi(self)
|
||||||
|
self._management = management
|
||||||
|
self._colors = cycle(Tab10)
|
||||||
|
|
||||||
|
self._dsc = {}
|
||||||
|
self._plots = {}
|
||||||
|
self._tg_value = {}
|
||||||
|
self._fit = {}
|
||||||
|
self._lines = {}
|
||||||
|
self._hodge = {
|
||||||
|
'onset': (PlotItem(x=[], y=[], pen=None, symbol='o', symbolBrush=Tab10.TabBlue.rgb(), name='Onset'), None),
|
||||||
|
'midpoint': (PlotItem(x=[], y=[], pen=None, symbol='s', symbolBrush=Tab10.TabOrange.rgb(), name='Midpoint'), None),
|
||||||
|
'end': (PlotItem(x=[], y=[], pen=None, symbol='t', symbolBrush=Tab10.TabGreen.rgb(), name='End'), None),
|
||||||
|
'inflection': (PlotItem(x=[], y=[], pen=None, symbol='d', symbolBrush=Tab10.TabRed.rgb(), name='Inflection'), None),
|
||||||
|
# 'fictive': PlotItem(x=[], y=[], pen=None, symbol='t1', symbolBrush=Tab10.TabPurple.rgb(), name='Fictive'),
|
||||||
|
# 'TNMH': PlotItem(x=[], y=[], pen=None, symbol='star', symbolBrush=Tab10.TabPurple.rgb(), name='TNMH'),
|
||||||
|
}
|
||||||
|
self.tau_plot.getPlotItem().addLegend()
|
||||||
|
for plt, _ in self._hodge.values():
|
||||||
|
self.tau_plot.addItem(plt)
|
||||||
|
self.tau_plot.setLogMode(y=True)
|
||||||
|
self.pushButton_2.hide()
|
||||||
|
self.label_4.hide()
|
||||||
|
self.label_5.hide()
|
||||||
|
|
||||||
|
self.limits = RegionItem(), RegionItem()
|
||||||
|
for lim in self.limits:
|
||||||
|
self.dsc_plot.addItem(lim)
|
||||||
|
self._limitless = True
|
||||||
|
|
||||||
|
self.add_sets()
|
||||||
|
|
||||||
|
self.listWidget.itemClicked.connect(self.show_tg_values)
|
||||||
|
|
||||||
|
self.new_graph_tau_combo.setEnabled(False)
|
||||||
|
self.new_graph_tau_check.stateChanged.connect(lambda state: self.new_graph_tau_combo.setEnabled(not bool(state)))
|
||||||
|
|
||||||
|
def __call__(self):
|
||||||
|
self.clear()
|
||||||
|
self._colors = cycle(Tab10)
|
||||||
|
self.add_sets()
|
||||||
|
|
||||||
|
return self
|
||||||
|
|
||||||
|
def clear(self):
|
||||||
|
self.listWidget.clear()
|
||||||
|
for plots in self._plots.values():
|
||||||
|
for val in plots:
|
||||||
|
self.dsc_plot.removeItem(val)
|
||||||
|
self.graphicsView_2.removeItem(val)
|
||||||
|
|
||||||
|
for key, plt in self._hodge.items():
|
||||||
|
plt[0].setData(x=[], y=[])
|
||||||
|
self._hodge[key] = (plt[0], None)
|
||||||
|
|
||||||
|
self._dsc = {}
|
||||||
|
self._plots = {}
|
||||||
|
self._tg_value = {}
|
||||||
|
self._lines = {}
|
||||||
|
self._fit = {}
|
||||||
|
|
||||||
|
def add_sets(self):
|
||||||
|
self.new_graph_tau_combo.clear()
|
||||||
|
for graphs in self._management.graphs.list():
|
||||||
|
self.new_graph_tau_combo.addItem(graphs[1], userData=graphs[0])
|
||||||
|
|
||||||
|
min_x = 10_000_000
|
||||||
|
max_x = -10_000_000
|
||||||
|
for (key, name), c in zip(self._management.active_sets, self._colors):
|
||||||
|
data = self._management[key].data
|
||||||
|
if not isinstance(data, DSC):
|
||||||
|
continue
|
||||||
|
|
||||||
|
min_x = min(min_x, data.x.min())
|
||||||
|
max_x = max(max_x, data.x.max())
|
||||||
|
|
||||||
|
item = QtWidgets.QListWidgetItem(name)
|
||||||
|
item.setCheckState(QtCore.Qt.Checked)
|
||||||
|
item.setData(QtCore.Qt.UserRole, key)
|
||||||
|
item.setForeground(mkBrush(c.rgb()))
|
||||||
|
self.listWidget.addItem(item)
|
||||||
|
|
||||||
|
self._dsc[key] = (data, None)
|
||||||
|
|
||||||
|
data_plot = PlotItem(x=data.x, y=data.y, pen=mkPen(c.rgb()))
|
||||||
|
self.dsc_plot.addItem(data_plot)
|
||||||
|
|
||||||
|
glass = PlotItem()
|
||||||
|
glass.set_line(style=2, color=c)
|
||||||
|
self.dsc_plot.addItem(glass)
|
||||||
|
|
||||||
|
liquid = PlotItem()
|
||||||
|
liquid.set_line(style=2, color=c)
|
||||||
|
self.dsc_plot.addItem(liquid)
|
||||||
|
|
||||||
|
tangent = PlotItem()
|
||||||
|
tangent.set_line(style=2, color=c)
|
||||||
|
self.dsc_plot.addItem(tangent)
|
||||||
|
|
||||||
|
tg_plot = PlotItem(pen=None, symbolBrush=c.rgb(), symbol='o')
|
||||||
|
self.dsc_plot.addItem(tg_plot)
|
||||||
|
|
||||||
|
fictive_cp = PlotItem(pen=mkPen(c.rgb()))
|
||||||
|
self.graphicsView_2.addItem(fictive_cp)
|
||||||
|
|
||||||
|
tnmh_fit = PlotItem()
|
||||||
|
tnmh_fit.set_line(style=2, color=c)
|
||||||
|
self.graphicsView_2.addItem(tnmh_fit)
|
||||||
|
|
||||||
|
self._plots[key] = (data_plot, tg_plot, glass, liquid, tangent, fictive_cp, tnmh_fit)
|
||||||
|
self._tg_value[key] = {'onset': (nan, nan), 'mid': (nan, nan), 'end': (nan, nan), 'inflection': (nan, nan)} # , 'fictive': (nan, nan)}
|
||||||
|
|
||||||
|
if self._limitless:
|
||||||
|
dist = max_x - min_x
|
||||||
|
self.limits[0].setRegion((min_x, min_x+min(0.1*dist, 5)))
|
||||||
|
self.limits[1].setRegion((max_x-min(5, 0.1*dist), max_x))
|
||||||
|
self._limitless = False
|
||||||
|
|
||||||
|
@QtCore.pyqtSlot(name='on_calctg_button_clicked')
|
||||||
|
def calc_tg(self):
|
||||||
|
baselines = tuple(lim.getRegion() for lim in self.limits)
|
||||||
|
if baselines[0][0] > baselines[1][0]:
|
||||||
|
baselines = baselines[1], baselines[0]
|
||||||
|
|
||||||
|
for idx in range(self.listWidget.count()):
|
||||||
|
item = self.listWidget.item(idx)
|
||||||
|
if item.checkState() == QtCore.Qt.Unchecked:
|
||||||
|
continue
|
||||||
|
|
||||||
|
key = item.data(QtCore.Qt.UserRole)
|
||||||
|
plot = self._plots[key]
|
||||||
|
data, _ = self._dsc[key]
|
||||||
|
|
||||||
|
tg_results, glass, liquid, tangent = data.glass_transition(*baselines)
|
||||||
|
self._lines[key] = (glass, liquid, tangent)
|
||||||
|
|
||||||
|
for i, line in enumerate((glass, liquid, tangent)):
|
||||||
|
plot[i+2].setData(x=line.x, y=line.y)
|
||||||
|
|
||||||
|
self._tg_value[key].update(tg_results)
|
||||||
|
|
||||||
|
self._update_tg_plots()
|
||||||
|
|
||||||
|
def show_tg_values(self, item):
|
||||||
|
values = self._tg_value.get(item.data(QtCore.Qt.UserRole))
|
||||||
|
|
||||||
|
if values is not None:
|
||||||
|
label = '\n'.join((f'{name.capitalize()}: {pos[0]:.2f} K' for name, pos in values.items()))
|
||||||
|
self.tg_value_label.setText(label)
|
||||||
|
|
||||||
|
fit = self._fit.get(item.data(QtCore.Qt.UserRole))
|
||||||
|
if fit is not None:
|
||||||
|
self.label_5.setText(fit._parameter_string())
|
||||||
|
|
||||||
|
def _update_tg_plots(self):
|
||||||
|
for idx in range(self.listWidget.count()):
|
||||||
|
item = self.listWidget.item(idx)
|
||||||
|
|
||||||
|
key = item.data(QtCore.Qt.UserRole)
|
||||||
|
plot = self._plots[key]
|
||||||
|
data, _ = self._dsc[key]
|
||||||
|
|
||||||
|
plot[1].setData(array(list(self._tg_value[key].values())))
|
||||||
|
|
||||||
|
self.hodge()
|
||||||
|
|
||||||
|
@QtCore.pyqtSlot(QtWidgets.QListWidgetItem, name='on_listWidget_itemChanged')
|
||||||
|
def change_visibility(self, item: QtWidgets.QListWidgetItem):
|
||||||
|
is_checked = bool(item.checkState())
|
||||||
|
plot = self._plots[item.data(QtCore.Qt.UserRole)]
|
||||||
|
for val in plot:
|
||||||
|
val.setVisible(is_checked)
|
||||||
|
|
||||||
|
@QtCore.pyqtSlot(name='on_pushButton_2_clicked')
|
||||||
|
def get_fictive(self):
|
||||||
|
baselines = tuple(lim.getRegion() for lim in self.limits)
|
||||||
|
if baselines[0][0] > baselines[1][0]:
|
||||||
|
baselines = baselines[1], baselines[0]
|
||||||
|
|
||||||
|
for idx in range(self.listWidget.count()):
|
||||||
|
item = self.listWidget.item(idx)
|
||||||
|
if item.checkState() == QtCore.Qt.Unchecked:
|
||||||
|
continue
|
||||||
|
|
||||||
|
key = item.data(QtCore.Qt.UserRole)
|
||||||
|
plot = self._plots[key]
|
||||||
|
data, _ = self._dsc[key]
|
||||||
|
|
||||||
|
cp, tg = data.get_fictive_cp(*baselines)
|
||||||
|
|
||||||
|
plot[5].setData(cp.x, cp.y)
|
||||||
|
self._dsc[key] = (data, cp)
|
||||||
|
|
||||||
|
self._tg_value[key]['fictive'] = (tg, 0)
|
||||||
|
|
||||||
|
self._update_tg_plots()
|
||||||
|
|
||||||
|
@QtCore.pyqtSlot(name='on_pushButton_3_clicked')
|
||||||
|
def make_tnmh(self):
|
||||||
|
baselines = tuple(lim.getRegion() for lim in self.limits)
|
||||||
|
if baselines[0][0] > baselines[1][0]:
|
||||||
|
baselines = baselines[1], baselines[0]
|
||||||
|
|
||||||
|
for idx in range(self.listWidget.count()):
|
||||||
|
item = self.listWidget.item(idx)
|
||||||
|
if item.checkState() == QtCore.Qt.Unchecked:
|
||||||
|
continue
|
||||||
|
|
||||||
|
key = item.data(QtCore.Qt.UserRole)
|
||||||
|
plot = self._plots[key]
|
||||||
|
_, data = self._dsc[key]
|
||||||
|
|
||||||
|
if data is None:
|
||||||
|
continue
|
||||||
|
|
||||||
|
res = data.calculate_tnmh([60, 0.5, 1, 2e5], *baselines, return_fictive=False)
|
||||||
|
self._fit[key] = res
|
||||||
|
plot[-1].setData(res.x, res.y)
|
||||||
|
|
||||||
|
def hodge(self):
|
||||||
|
for tg_type, (plot, data) in self._hodge.items():
|
||||||
|
|
||||||
|
m = []
|
||||||
|
for idx in range(self.listWidget.count()):
|
||||||
|
item = self.listWidget.item(idx)
|
||||||
|
|
||||||
|
key = item.data(QtCore.Qt.UserRole)
|
||||||
|
data, _ = self._dsc[key]
|
||||||
|
|
||||||
|
tg_value = self._tg_value[key][tg_type][0]
|
||||||
|
if isnan(tg_value):
|
||||||
|
continue
|
||||||
|
|
||||||
|
m.append([tg_value, data.value])
|
||||||
|
|
||||||
|
if len(m) > 1:
|
||||||
|
data = tau_hodge(*array(m).T)
|
||||||
|
data.name = f'{data.name} ({tg_type.capitalize()})'
|
||||||
|
plot.setData(data.x, data.y)
|
||||||
|
|
||||||
|
self._hodge[tg_type] = (plot, data)
|
||||||
|
|
||||||
|
def close(self) -> bool:
|
||||||
|
self.clear()
|
||||||
|
return super().close()
|
||||||
|
|
||||||
|
def accept(self) -> None:
|
||||||
|
if self.new_graph_tau_check.isChecked():
|
||||||
|
graph_id = ''
|
||||||
|
else:
|
||||||
|
graph_id = self.new_graph_tau_combo.currentData()
|
||||||
|
|
||||||
|
ret_dic = {}
|
||||||
|
for key, tg in self._tg_value.items():
|
||||||
|
tgx = [x for x, y in tg.values()]
|
||||||
|
tgy = [y for x, y in tg.values()]
|
||||||
|
if self.tg_export_check.isChecked():
|
||||||
|
tg_pts = Points(x=tgx, y=tgy, name=self._management[key].name + ' (Tg)', value=self._management[key].value)
|
||||||
|
else:
|
||||||
|
tg_pts = None
|
||||||
|
|
||||||
|
if self.tglines_export_check.isChecked():
|
||||||
|
line = self._lines[key]
|
||||||
|
else:
|
||||||
|
line = []
|
||||||
|
|
||||||
|
ret_dic[key] = (tg_pts, line)
|
||||||
|
|
||||||
|
ret_dic2 = []
|
||||||
|
|
||||||
|
for i in range(self.hodge_selection.count()):
|
||||||
|
if self.hodge_selection.isChecked(i):
|
||||||
|
item = self.hodge_selection.itemText(i).lower()
|
||||||
|
v = self._hodge.get(item)
|
||||||
|
ret_dic2.append(v[1])
|
||||||
|
|
||||||
|
self.newTg.emit(ret_dic, ret_dic2, graph_id)
|
||||||
|
self.close()
|
@ -12,6 +12,7 @@ from ..lib import get_icon
|
|||||||
from .._py.fitfunctionwidget import Ui_Form
|
from .._py.fitfunctionwidget import Ui_Form
|
||||||
from ..Qt import QtWidgets, QtCore, QtGui
|
from ..Qt import QtWidgets, QtCore, QtGui
|
||||||
|
|
||||||
|
|
||||||
class QFunctionWidget(QtWidgets.QWidget, Ui_Form):
|
class QFunctionWidget(QtWidgets.QWidget, Ui_Form):
|
||||||
func_cnt = count()
|
func_cnt = count()
|
||||||
func_colors = cycle(Tab10)
|
func_colors = cycle(Tab10)
|
||||||
|
@ -171,7 +171,6 @@ class QAsciiReader(QtWidgets.QDialog, Ui_ascii_reader):
|
|||||||
# default row for x is the first row, it will be superseded if an integer number is given.
|
# default row for x is the first row, it will be superseded if an integer number is given.
|
||||||
try:
|
try:
|
||||||
x = int(self.x_lineedit.text())-1
|
x = int(self.x_lineedit.text())-1
|
||||||
print(x)
|
|
||||||
except ValueError:
|
except ValueError:
|
||||||
x = None
|
x = None
|
||||||
|
|
||||||
@ -203,7 +202,7 @@ class QAsciiReader(QtWidgets.QDialog, Ui_ascii_reader):
|
|||||||
col_names=col_header)
|
col_names=col_header)
|
||||||
self.data_read.emit(ret_dic)
|
self.data_read.emit(ret_dic)
|
||||||
|
|
||||||
except Exception as e:
|
except ImportError as e:
|
||||||
_ = QtWidgets.QMessageBox.information(self, 'Reading failed',
|
_ = QtWidgets.QMessageBox.information(self, 'Reading failed',
|
||||||
f'Import data failed with {e.args}')
|
f'Import data failed with {e.args}')
|
||||||
|
|
||||||
@ -215,5 +214,4 @@ class QAsciiReader(QtWidgets.QDialog, Ui_ascii_reader):
|
|||||||
|
|
||||||
@QtCore.pyqtSlot(int, name='on_skippy_checkbox_stateChanged')
|
@QtCore.pyqtSlot(int, name='on_skippy_checkbox_stateChanged')
|
||||||
def skip_next_dial(self, _: int):
|
def skip_next_dial(self, _: int):
|
||||||
print('skippy das buschkänguru', _)
|
|
||||||
self.skip = self.skippy_checkbox.isChecked()
|
self.skip = self.skippy_checkbox.isChecked()
|
||||||
|
@ -5,7 +5,7 @@ from pathlib import Path
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
from pyqtgraph import PlotDataItem
|
from pyqtgraph import PlotDataItem
|
||||||
|
|
||||||
from nmreval.data.points import Points
|
from nmreval.data import DSC
|
||||||
from nmreval.io.dsc import Cyclohexane, DSCCalibrator, DSCSample
|
from nmreval.io.dsc import Cyclohexane, DSCCalibrator, DSCSample
|
||||||
|
|
||||||
from ..Qt import QtWidgets, QtCore
|
from ..Qt import QtWidgets, QtCore
|
||||||
@ -250,10 +250,11 @@ class QDSCReader(QtWidgets.QDialog, Ui_Dialog):
|
|||||||
return
|
return
|
||||||
|
|
||||||
rate, mode = self.current_run
|
rate, mode = self.current_run
|
||||||
new_val = Points(sample_data[0], sample_data[1], value=rate, name=f'{self.fname.stem} {rate} ({mode})')
|
new_val = DSC(sample_data[0], sample_data[1], value=rate, name=f'{self.fname.stem} {rate} ({mode})')
|
||||||
|
|
||||||
if filesave:
|
if filesave:
|
||||||
new_val.savetxt(self.fname.with_name(f'{self.fname.stem} {rate}K-min {mode}.dat'.replace(' ', '_')))
|
new_val.savetxt(self.fname.with_name(f'{self.fname.stem} {rate}K-min {mode}.dat'.replace(' ', '_')))
|
||||||
|
close_after = False
|
||||||
else:
|
else:
|
||||||
self.data_read.emit([new_val])
|
self.data_read.emit([new_val])
|
||||||
|
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
from typing import Any
|
||||||
|
|
||||||
from numpy import inf
|
from numpy import inf
|
||||||
|
|
||||||
from nmreval.utils.text import convert
|
from nmreval.utils.text import convert
|
||||||
@ -404,3 +406,21 @@ class ElideComboBox(QtWidgets.QComboBox):
|
|||||||
|
|
||||||
opt.currentText = painter.fontMetrics().elidedText(opt.currentText, QtCore.Qt.ElideRight, rect.width())
|
opt.currentText = painter.fontMetrics().elidedText(opt.currentText, QtCore.Qt.ElideRight, rect.width())
|
||||||
painter.drawControl(QtWidgets.QStyle.CE_ComboBoxLabel, opt)
|
painter.drawControl(QtWidgets.QStyle.CE_ComboBoxLabel, opt)
|
||||||
|
|
||||||
|
|
||||||
|
class CheckCombobox(QtWidgets.QComboBox):
|
||||||
|
|
||||||
|
def addItem(self, text: str, userData: Any=None) -> None:
|
||||||
|
super().addItem(text, userData=userData)
|
||||||
|
|
||||||
|
item = self.model().item(self.count()-1)
|
||||||
|
item.setFlags(QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsUserCheckable)
|
||||||
|
item.setCheckState(QtCore.Qt.Checked)
|
||||||
|
|
||||||
|
def addItems(self, text):
|
||||||
|
for text_i in text:
|
||||||
|
self.addItem(text_i)
|
||||||
|
|
||||||
|
def isChecked(self, idx: int) -> bool:
|
||||||
|
return bool(self.model().item(idx).checkState())
|
||||||
|
|
||||||
|
@ -174,6 +174,7 @@ class PlotItem(PlotDataItem):
|
|||||||
pen = self.opts['pen']
|
pen = self.opts['pen']
|
||||||
if isinstance(pen, tuple):
|
if isinstance(pen, tuple):
|
||||||
self.opts['linecolor'] = pen
|
self.opts['linecolor'] = pen
|
||||||
|
self.opts['pen'] = mkPen(color=pen)
|
||||||
else:
|
else:
|
||||||
c = pen.color()
|
c = pen.color()
|
||||||
self.opts['linecolor'] = c.red(), c.green(), c.blue()
|
self.opts['linecolor'] = c.red(), c.green(), c.blue()
|
||||||
@ -279,7 +280,7 @@ class PlotItem(PlotDataItem):
|
|||||||
else:
|
else:
|
||||||
self.scatter.hide()
|
self.scatter.hide()
|
||||||
|
|
||||||
def set_symbol(self, symbol=None, size=None, color=None):
|
def set_symbol(self, *, symbol=None, size=None, color=None):
|
||||||
if symbol is not None:
|
if symbol is not None:
|
||||||
if isinstance(symbol, int):
|
if isinstance(symbol, int):
|
||||||
self.setSymbol(SymbolStyle(symbol).to_str())
|
self.setSymbol(SymbolStyle(symbol).to_str())
|
||||||
@ -313,14 +314,13 @@ class PlotItem(PlotDataItem):
|
|||||||
self.opts['pen'] = pen
|
self.opts['pen'] = pen
|
||||||
self.updateItems()
|
self.updateItems()
|
||||||
|
|
||||||
def set_line(self, style=None, width=None, color=None):
|
def set_line(self, *, style=None, width=None, color=None):
|
||||||
pen = self.opts['pen']
|
pen = self.opts['pen']
|
||||||
if pen is None:
|
if pen is None:
|
||||||
pen = mkPen(style=QtCore.Qt.NoPen)
|
pen = mkPen(style=QtCore.Qt.NoPen)
|
||||||
|
|
||||||
if width is not None:
|
if width is not None:
|
||||||
pen.setWidthF(width)
|
pen.setWidthF(width)
|
||||||
|
|
||||||
if style is not None:
|
if style is not None:
|
||||||
if isinstance(style, LineStyle):
|
if isinstance(style, LineStyle):
|
||||||
style = style.value
|
style = style.value
|
||||||
|
@ -16,6 +16,7 @@ from .management import UpperManagement
|
|||||||
from ..Qt import QtGui, QtPrintSupport
|
from ..Qt import QtGui, QtPrintSupport
|
||||||
from ..data.shift_graphs import QShift
|
from ..data.shift_graphs import QShift
|
||||||
from ..data.signaledit import QApodDialog, QBaselineDialog, QPhasedialog
|
from ..data.signaledit import QApodDialog, QBaselineDialog, QPhasedialog
|
||||||
|
from ..dsc.glass_dialog import TgCalculator
|
||||||
from ..fit.result import FitExtension, QFitResult
|
from ..fit.result import FitExtension, QFitResult
|
||||||
from ..graphs.graphwindow import QGraphWindow
|
from ..graphs.graphwindow import QGraphWindow
|
||||||
from ..graphs.movedialog import QMover
|
from ..graphs.movedialog import QMover
|
||||||
@ -24,6 +25,7 @@ from ..io.filedialog import *
|
|||||||
from ..lib import get_icon, make_action_icons
|
from ..lib import get_icon, make_action_icons
|
||||||
from ..lib.pg_objects import RegionItem
|
from ..lib.pg_objects import RegionItem
|
||||||
from ..lib.starter import make_starter
|
from ..lib.starter import make_starter
|
||||||
|
from ..math.binning import BinningWindow
|
||||||
from ..math.evaluation import QEvalDialog
|
from ..math.evaluation import QEvalDialog
|
||||||
from ..math.interpol import InterpolDialog
|
from ..math.interpol import InterpolDialog
|
||||||
from ..math.mean_dialog import QMeanTimes
|
from ..math.mean_dialog import QMeanTimes
|
||||||
@ -55,6 +57,8 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
|
|||||||
self.fitlimitvalues = [None, None]
|
self.fitlimitvalues = [None, None]
|
||||||
self.fitpreview = []
|
self.fitpreview = []
|
||||||
self._fit_plot_id = None
|
self._fit_plot_id = None
|
||||||
|
self.savefitdialog = None
|
||||||
|
self._tg_dialog = None
|
||||||
self.fitresult_dialog = None
|
self.fitresult_dialog = None
|
||||||
self.eval = None
|
self.eval = None
|
||||||
self.editor = None
|
self.editor = None
|
||||||
@ -239,7 +243,7 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
|
|||||||
self.action_norm_area.triggered.connect(lambda: self.management.apply('norm', ('area',)))
|
self.action_norm_area.triggered.connect(lambda: self.management.apply('norm', ('area',)))
|
||||||
self.action_cut.triggered.connect(lambda: self.management.cut())
|
self.action_cut.triggered.connect(lambda: self.management.cut())
|
||||||
|
|
||||||
self.actionConcatenate_sets.triggered.connect(lambda : self.management.cat())
|
self.actionConcatenate_sets.triggered.connect(lambda: self.management.cat())
|
||||||
|
|
||||||
self.management.graphs.valueChanged.connect(self.update_graph_list)
|
self.management.graphs.valueChanged.connect(self.update_graph_list)
|
||||||
|
|
||||||
@ -710,6 +714,14 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
|
|||||||
|
|
||||||
self.eval.exec()
|
self.eval.exec()
|
||||||
|
|
||||||
|
@QtCore.pyqtSlot(name='on_actionBinning_triggered')
|
||||||
|
def open_binning(self):
|
||||||
|
dialog = BinningWindow(self)
|
||||||
|
res = dialog.exec()
|
||||||
|
if res:
|
||||||
|
digits = float(dialog.spinbox.text())
|
||||||
|
self.management.binning(digits)
|
||||||
|
|
||||||
@QtCore.pyqtSlot(name='on_actionDerivation_triggered')
|
@QtCore.pyqtSlot(name='on_actionDerivation_triggered')
|
||||||
# @QtCore.pyqtSlot(name='on_actionIntegration_triggered')
|
# @QtCore.pyqtSlot(name='on_actionIntegration_triggered')
|
||||||
@QtCore.pyqtSlot(name='on_actionFilon_triggered')
|
@QtCore.pyqtSlot(name='on_actionFilon_triggered')
|
||||||
@ -1125,3 +1137,12 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
|
|||||||
def show_version(self):
|
def show_version(self):
|
||||||
from nmreval.version import __version__
|
from nmreval.version import __version__
|
||||||
QtWidgets.QMessageBox.about(self, 'Version', f'Build date of AppImage: {__version__}')
|
QtWidgets.QMessageBox.about(self, 'Version', f'Build date of AppImage: {__version__}')
|
||||||
|
|
||||||
|
@QtCore.pyqtSlot(name='on_actionTNMH_model_triggered')
|
||||||
|
def show_tg_dialog(self):
|
||||||
|
if self._tg_dialog is None:
|
||||||
|
self._tg_dialog = TgCalculator(self.management, parent=self)
|
||||||
|
self._tg_dialog.newTg.connect(self.management.addTg)
|
||||||
|
else:
|
||||||
|
self._tg_dialog()
|
||||||
|
self._tg_dialog.show()
|
||||||
|
@ -764,6 +764,39 @@ class UpperManagement(QtCore.QObject):
|
|||||||
|
|
||||||
self.newData.emit(new_key, dest_graph)
|
self.newData.emit(new_key, dest_graph)
|
||||||
|
|
||||||
|
def binning(self, digits: float):
|
||||||
|
_active = self.graphs[self.current_graph].active
|
||||||
|
new_data = []
|
||||||
|
for sid in _active:
|
||||||
|
key = self.add(self.data[sid].binning(digits=digits))
|
||||||
|
new_data.append(key)
|
||||||
|
|
||||||
|
self.newData.emit(new_data, self.current_graph)
|
||||||
|
|
||||||
|
@QtCore.pyqtSlot(dict, list, str)
|
||||||
|
def addTg(self, dic1: dict, dic2: list, graph_id: str):
|
||||||
|
for k, (tg, lines) in dic1.items():
|
||||||
|
p: ExperimentContainer = self[k]
|
||||||
|
col = p.plot_real.linecolor
|
||||||
|
|
||||||
|
tg_data_id = []
|
||||||
|
|
||||||
|
if tg is not None:
|
||||||
|
tg_data_id.append(self.add(tg, color=col))
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
set_id = self.add(line, color=col)
|
||||||
|
self[set_id].setLine(style=LineStyle.Dashed)
|
||||||
|
self[set_id].setSymbol(symbol=SymbolStyle.No)
|
||||||
|
tg_data_id.append(set_id)
|
||||||
|
|
||||||
|
self.newData.emit(tg_data_id, self.current_graph)
|
||||||
|
|
||||||
|
set_id_list = []
|
||||||
|
for v in dic2:
|
||||||
|
set_id_list.append(self.add(v))
|
||||||
|
self.newData.emit(set_id_list, graph_id)
|
||||||
|
|
||||||
@QtCore.pyqtSlot(int, dict)
|
@QtCore.pyqtSlot(int, dict)
|
||||||
def smooth_data(self, npoints, param_kwargs):
|
def smooth_data(self, npoints, param_kwargs):
|
||||||
_active = self.graphs[self.current_graph].active
|
_active = self.graphs[self.current_graph].active
|
||||||
|
21
src/gui_qt/math/binning.py
Normal file
21
src/gui_qt/math/binning.py
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
from ..Qt import QtWidgets, QtGui
|
||||||
|
|
||||||
|
|
||||||
|
class BinningWindow(QtWidgets.QDialog):
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
super().__init__(parent=parent)
|
||||||
|
|
||||||
|
layout = QtWidgets.QFormLayout()
|
||||||
|
|
||||||
|
self.label = QtWidgets.QLabel('Digits (negative values position left of decimal point)')
|
||||||
|
self.spinbox = QtWidgets.QLineEdit()
|
||||||
|
self.spinbox.setValidator(QtGui.QDoubleValidator())
|
||||||
|
self.spinbox.setText('1')
|
||||||
|
layout.addRow(self.label, self.spinbox)
|
||||||
|
|
||||||
|
self.dialogbox = QtWidgets.QDialogButtonBox(QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel)
|
||||||
|
self.dialogbox.accepted.connect(self.accept)
|
||||||
|
self.dialogbox.rejected.connect(self.reject)
|
||||||
|
layout.addWidget(self.dialogbox)
|
||||||
|
|
||||||
|
self.setLayout(layout)
|
@ -1,6 +1,137 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
from scipy.optimize import fsolve
|
||||||
|
from scipy.signal import savgol_filter
|
||||||
|
|
||||||
|
try:
|
||||||
|
from scipy.integrate import cumulative_trapezoid
|
||||||
|
except ImportError:
|
||||||
|
from scipy.integrate import cumtrapz as cumulative_trapezoid
|
||||||
|
from scipy.stats import linregress
|
||||||
|
|
||||||
from .points import Points
|
from .points import Points
|
||||||
|
|
||||||
|
from ..dsc.tnmh_model import TNMH
|
||||||
|
|
||||||
|
|
||||||
class DSC(Points):
|
class DSC(Points):
|
||||||
def __init__(self, x, y, **kwargs):
|
def __init__(self, x, y, **kwargs):
|
||||||
super().__init__(x, y, **kwargs)
|
|
||||||
|
y = np.asarray(y).reshape(np.asarray(x).shape)
|
||||||
|
|
||||||
|
x, unique = np.unique(x, return_index=True)
|
||||||
|
if kwargs.get('y_err', None) is not None:
|
||||||
|
_yerr = np.asarray(kwargs['y_err']).reshape(np.asarray(x).shape)
|
||||||
|
kwargs['y_err'] = _yerr[unique]
|
||||||
|
|
||||||
|
self.tg = {'onset': np.nan, 'mid': np.nan, 'end': np.nan, 'inflection': np.nan, 'fictive': np.nan}
|
||||||
|
|
||||||
|
super().__init__(x, y[unique], **kwargs)
|
||||||
|
|
||||||
|
def get_fictive_cp(self, glass: tuple[float, float], liquid: tuple[float, float]) -> ('DSC', float):
|
||||||
|
min_glass, max_glass = min(glass), max(glass)
|
||||||
|
min_liquid, max_liquid = min(liquid), max(liquid)
|
||||||
|
|
||||||
|
region = self.copy()
|
||||||
|
region.cut(min_glass, max_liquid)
|
||||||
|
|
||||||
|
glass_regime = (min_glass < region.x) & (region.x < max_glass)
|
||||||
|
regress = linregress(region.x[glass_regime], region.y[glass_regime])
|
||||||
|
glass_extrapolation = regress.slope * region.x + regress.intercept
|
||||||
|
|
||||||
|
liquid_regime = (min_liquid < region.x) & (region.x < max_liquid)
|
||||||
|
regress2 = linregress(region.x[liquid_regime], region.y[liquid_regime])
|
||||||
|
|
||||||
|
region.y -= glass_extrapolation
|
||||||
|
|
||||||
|
plt.plot(region.x, regress2.slope * region.x + regress2.intercept)
|
||||||
|
real_area = cumulative_trapezoid(region.y, region.x, initial=0)
|
||||||
|
real_area -= real_area[-1]
|
||||||
|
|
||||||
|
t = regress2.intercept - regress.intercept
|
||||||
|
m = regress2.slope - regress.slope
|
||||||
|
c0 = 0.5 * m * region.x.max() ** 2 + t * region.x.max()
|
||||||
|
|
||||||
|
def equiv(_x, _i):
|
||||||
|
return (0.5 * m * _x ** 2 + t * _x - c0) - real_area[_i]
|
||||||
|
|
||||||
|
def equiv_prime(_x, _i):
|
||||||
|
return m * _x + t
|
||||||
|
|
||||||
|
fictive_temperature = np.array(
|
||||||
|
[fsolve(equiv, region.x[i], fprime=equiv_prime, args=(i,))[0] for i in range(len(region.x))])
|
||||||
|
|
||||||
|
t_g_fictive = fictive_temperature[:20].mean()
|
||||||
|
region.y = np.gradient(fictive_temperature, region.x)
|
||||||
|
|
||||||
|
return region, t_g_fictive
|
||||||
|
|
||||||
|
def calculate_tnmh(self, p0: list, glass: tuple[float, float], liquid: tuple[float, float],
|
||||||
|
tg: float = None, num_points: int = 200, return_fictive: bool = True) \
|
||||||
|
-> ('FitResult', Optional[float], Optional[DSC]):
|
||||||
|
|
||||||
|
dtf_dt, fictive_tg = self.get_fictive_cp(glass, liquid)
|
||||||
|
if tg is None:
|
||||||
|
tg = fictive_tg
|
||||||
|
|
||||||
|
temp_equidist = np.linspace(dtf_dt.x[0], dtf_dt.x[-1], num_points)
|
||||||
|
dtf_dt_equidist = np.interp(temp_equidist, dtf_dt.x, dtf_dt.y)
|
||||||
|
|
||||||
|
from ..fit.minimizer import FitRoutine
|
||||||
|
fitter = FitRoutine()
|
||||||
|
fitter.set_model(TNMH)
|
||||||
|
data = fitter.add_data(temp_equidist, dtf_dt_equidist)
|
||||||
|
data.set_parameter(p0 + [tg, self.value], var=[True] * 4 + [False] * 2, default_bounds=True)
|
||||||
|
|
||||||
|
res = fitter.run()[0]
|
||||||
|
|
||||||
|
if return_fictive:
|
||||||
|
return res, tg, dtf_dt
|
||||||
|
else:
|
||||||
|
return res
|
||||||
|
|
||||||
|
def glass_transition(self, glass, liquid):
|
||||||
|
low_idx = tuple(np.argmin(np.abs(self.x - g)) for g in glass)
|
||||||
|
high_idx = tuple(np.argmin(np.abs(self.x - l)) for l in liquid)
|
||||||
|
|
||||||
|
x = self.x[low_idx[0]:high_idx[1]]
|
||||||
|
y = self.y[low_idx[0]:high_idx[1]]
|
||||||
|
|
||||||
|
yy = savgol_filter(y, window_length=min(len(x) // 20, 50), polyorder=1, deriv=1) / np.mean(np.diff(x))
|
||||||
|
|
||||||
|
high_idx = (high_idx[0] - low_idx[0], high_idx[1] - low_idx[0])
|
||||||
|
low_idx = (0, low_idx[1] - low_idx[0])
|
||||||
|
|
||||||
|
inflection = np.argmax(yy)
|
||||||
|
|
||||||
|
p1 = linregress(x[low_idx[0]:low_idx[1]], y[low_idx[0]:low_idx[1]])
|
||||||
|
glass_baseline = p1.slope * x + p1.intercept
|
||||||
|
|
||||||
|
p2 = linregress(x[high_idx[0]:high_idx[1]], y[high_idx[0]:high_idx[1]])
|
||||||
|
liquid_baseline = p2.slope * x + p2.intercept
|
||||||
|
|
||||||
|
tangent_line = yy[inflection] * (x - x[inflection]) + y[inflection]
|
||||||
|
|
||||||
|
onset = np.argmin(np.abs(tangent_line - glass_baseline))
|
||||||
|
end = np.argmin(np.abs(tangent_line - liquid_baseline))
|
||||||
|
|
||||||
|
midpoint = np.argmin(np.abs(y - 0.5 * (liquid_baseline[end] - glass_baseline[onset])))
|
||||||
|
cut_tangent = np.where((tangent_line > y.min() - 1) & (tangent_line < y.max() + 1))
|
||||||
|
|
||||||
|
glass = Points(x, glass_baseline, name=f'Glass baseline ({self.name})', value=self.value)
|
||||||
|
tangent = Points(x[cut_tangent], tangent_line[cut_tangent], name=f'Tangent ({self.name})', value=self.value)
|
||||||
|
liquid = Points(x, liquid_baseline, name=f'Liquid baseline ({self.name})', value=self.value)
|
||||||
|
|
||||||
|
ret_dic = {
|
||||||
|
'onset': (x[onset], glass_baseline[onset]),
|
||||||
|
'midpoint': (x[midpoint], y[midpoint]),
|
||||||
|
'end': (x[end], liquid_baseline[end]),
|
||||||
|
'inflection': (x[inflection], y[inflection]),
|
||||||
|
}
|
||||||
|
|
||||||
|
self.tg.update(ret_dic)
|
||||||
|
|
||||||
|
return ret_dic, glass, liquid, tangent
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import copy
|
import copy
|
||||||
|
from math import log10
|
||||||
from numbers import Number, Real
|
from numbers import Number, Real
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, TypeVar
|
from typing import Any, TypeVar
|
||||||
@ -546,6 +547,34 @@ class Points:
|
|||||||
|
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
def binning(self, value: float):
|
||||||
|
if value <= 0:
|
||||||
|
raise ValueError('value must be a positive number')
|
||||||
|
|
||||||
|
copy = self.copy()
|
||||||
|
|
||||||
|
upper_lim = (self.x[-1]//value + 1) * value
|
||||||
|
lower_lim = (self.x[0]//value) * value
|
||||||
|
|
||||||
|
offset = value / 2
|
||||||
|
|
||||||
|
xbins = np.linspace(lower_lim - offset, upper_lim + offset, num=int((upper_lim-lower_lim)/value + 2))
|
||||||
|
|
||||||
|
n, _ = np.histogram(copy.x, bins=xbins)
|
||||||
|
sum_y, _ = np.histogram(copy.x, bins=xbins, weights=copy.y)
|
||||||
|
sum_yerr_2, _ = np.histogram(copy.x, bins=xbins, weights=copy.y_err**2)
|
||||||
|
|
||||||
|
isnan = n != 0
|
||||||
|
|
||||||
|
n = n[isnan]
|
||||||
|
sum_y = sum_y[isnan]
|
||||||
|
sum_yerr_2 = sum_yerr_2[isnan]
|
||||||
|
xaxis = (xbins[:-1] + offset)[isnan]
|
||||||
|
|
||||||
|
copy.set_data(xaxis, sum_y/n, y_err=np.sqrt(sum_yerr_2/n))
|
||||||
|
|
||||||
|
return copy
|
||||||
|
|
||||||
def shift(self, points: int) -> PointLike:
|
def shift(self, points: int) -> PointLike:
|
||||||
"""
|
"""
|
||||||
Shift indexes of y values.
|
Shift indexes of y values.
|
||||||
|
26
src/nmreval/dsc/hodge.py
Normal file
26
src/nmreval/dsc/hodge.py
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
import numpy as np
|
||||||
|
from scipy.stats import linregress
|
||||||
|
|
||||||
|
from nmreval.data import Points
|
||||||
|
from nmreval.fit.minimizer import FitRoutine
|
||||||
|
from nmreval.lib.utils import ArrayLike
|
||||||
|
from nmreval.models import Arrhenius
|
||||||
|
from nmreval.utils import kB
|
||||||
|
|
||||||
|
|
||||||
|
def tau_hodge(tg: ArrayLike, rate: ArrayLike) -> Points:
|
||||||
|
rate = np.asanyarray(rate) / 60
|
||||||
|
tg = np.asanyarray(tg)
|
||||||
|
fitter = FitRoutine()
|
||||||
|
fitter.set_model(Arrhenius)
|
||||||
|
d = fitter.add_data(tg, rate)
|
||||||
|
|
||||||
|
init = linregress(1/tg, np.log(rate))
|
||||||
|
|
||||||
|
d.set_parameter([np.exp(init.intercept), init.slope*kB], fun_kwargs={'invt': None})
|
||||||
|
|
||||||
|
res = fitter.run()[0]
|
||||||
|
de = res.parameter['E_{A}']
|
||||||
|
tau = kB*tg**2/np.abs(de.value)/rate
|
||||||
|
|
||||||
|
return Points(x=1000/tg, y=tau, y_err=tau*de.error/np.abs(de.value), name='Hodge')
|
46
src/nmreval/dsc/tnmh_model.py
Normal file
46
src/nmreval/dsc/tnmh_model.py
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
import numpy as np
|
||||||
|
|
||||||
|
from nmreval.utils.constants import R_joule as R
|
||||||
|
|
||||||
|
|
||||||
|
class TNMH:
|
||||||
|
type = 'DSC'
|
||||||
|
name = 'TNMH model'
|
||||||
|
equation = r''
|
||||||
|
params = [r'\tau_{g}', 'x', r'\beta', r'\Delta H', 'T_{g}', 'rate']
|
||||||
|
bounds = [(0, None), (0, 1), (0, 1), (0, None), (0, None), (0, None)]
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def func(x: np.ndarray, tau_g: float, xx: float, beta: float, energy: float, tg: float, rate: float) -> np.ndarray:
|
||||||
|
model_temp = np.r_[x[::-1], x[1:]]
|
||||||
|
|
||||||
|
curve = TNMH.tnm_function(model_temp, tau_g, xx, beta, energy, tg, rate)[x.size - 1:]
|
||||||
|
res = np.gradient(curve, x)
|
||||||
|
|
||||||
|
return res
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def tnm_function(x: np.ndarray, tau_g: float, xx: float, beta: float, energy: float, tg: float, rate: float) -> np.ndarray:
|
||||||
|
step = x.size
|
||||||
|
|
||||||
|
Tf = np.empty(step)
|
||||||
|
Tf[0] = x[0]
|
||||||
|
|
||||||
|
delta_temp = np.diff(x)
|
||||||
|
delta_time = np.abs(delta_temp) * 60 / rate
|
||||||
|
|
||||||
|
tau = np.empty(step)
|
||||||
|
dt_by_tau = np.zeros(step)
|
||||||
|
temp_0 = x[0]
|
||||||
|
|
||||||
|
for i in range(0, step - 1):
|
||||||
|
tau[i] = TNMH.relax(x[i+1], Tf[i], tau_g, tg, energy, xx)
|
||||||
|
dt_by_tau[:i] += delta_time[i] / tau[i]
|
||||||
|
Tf[i + 1] = np.sum(delta_temp[:i] * (1 - np.exp(-dt_by_tau[:i] ** beta))) + temp_0
|
||||||
|
|
||||||
|
return Tf
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def relax(t, tf, tau_g, t_glass, ea, x):
|
||||||
|
h = ea/R
|
||||||
|
return tau_g * np.exp((x*h / t) + ((1 - x) * h / tf) - h / t_glass)
|
@ -88,6 +88,7 @@ class Parameter:
|
|||||||
if self.lb <= value <= self.ub:
|
if self.lb <= value <= self.ub:
|
||||||
self.value = value
|
self.value = value
|
||||||
else:
|
else:
|
||||||
|
print(value, self.lb, self.ub)
|
||||||
raise ValueError('Value of parameter is outside bounds')
|
raise ValueError('Value of parameter is outside bounds')
|
||||||
|
|
||||||
self.init_val = value
|
self.init_val = value
|
||||||
|
@ -7,6 +7,8 @@ import numpy as np
|
|||||||
|
|
||||||
from ..data.points import Points
|
from ..data.points import Points
|
||||||
from ..data.nmr import FID, Spectrum
|
from ..data.nmr import FID, Spectrum
|
||||||
|
from ..data.bds import BDS
|
||||||
|
from ..data.dsc import DSC
|
||||||
from ..utils.utils import staggered_range
|
from ..utils.utils import staggered_range
|
||||||
|
|
||||||
NUMBERRE = re.compile(r'[0-9]\.*[0-9]*[Ee]*[+-]*[0-9]*')
|
NUMBERRE = re.compile(r'[0-9]\.*[0-9]*[Ee]*[+-]*[0-9]*')
|
||||||
@ -85,7 +87,12 @@ class AsciiReader:
|
|||||||
self.delays = staggered_range(self.delays, stepsize=stag_size)
|
self.delays = staggered_range(self.delays, stepsize=stag_size)
|
||||||
|
|
||||||
def export(self, x: int = None, y: list = None, yerr: list = None,
|
def export(self, x: int = None, y: list = None, yerr: list = None,
|
||||||
mode: str = 'Points', col_names=None) -> list:
|
mode: str = 'points', col_names=None) -> list:
|
||||||
|
|
||||||
|
mode = mode.lower()
|
||||||
|
if mode not in ['points', 'fid', 'spectrum', 'dsc', 'bds']:
|
||||||
|
raise ValueError(f'Unknown mode {mode!r} as selected class')
|
||||||
|
|
||||||
if yerr is None:
|
if yerr is None:
|
||||||
yerr = []
|
yerr = []
|
||||||
elif y is None:
|
elif y is None:
|
||||||
@ -138,20 +145,15 @@ class AsciiReader:
|
|||||||
kwargs = {'value': value, 'filename': self.fname, 'name': filename, 'group': filename, 'y_err': None}
|
kwargs = {'value': value, 'filename': self.fname, 'name': filename, 'group': filename, 'y_err': None}
|
||||||
|
|
||||||
num_y = len(y)
|
num_y = len(y)
|
||||||
if mode == 'Points':
|
single_len = 1
|
||||||
single_len = 1
|
stepsize = 1
|
||||||
cls = Points
|
|
||||||
stepsize = 1
|
if mode in ['spectrum', 'fid', 'bds']:
|
||||||
elif mode == 'FID':
|
# complex data types
|
||||||
cls = FID
|
|
||||||
single_len = 2
|
single_len = 2
|
||||||
stepsize = 2
|
stepsize = 2
|
||||||
elif mode == 'Spectrum':
|
|
||||||
cls = Spectrum
|
cls = {'points': Points, 'fid': FID, 'spectrum': Spectrum, 'bds': BDS, 'dsc': DSC}[mode]
|
||||||
single_len = 2
|
|
||||||
stepsize = 2
|
|
||||||
else:
|
|
||||||
raise ValueError(f'Unknown mode {mode}, mot ´Points´, ´FID´ or ´Spectrum´.')
|
|
||||||
|
|
||||||
for j in range(1, num_y+1, stepsize):
|
for j in range(1, num_y+1, stepsize):
|
||||||
if col_names is not None:
|
if col_names is not None:
|
||||||
|
@ -388,10 +388,11 @@ class HdfReader(HdfNode):
|
|||||||
if multi:
|
if multi:
|
||||||
var_key = None
|
var_key = None
|
||||||
|
|
||||||
try:
|
if var_key is not None:
|
||||||
value = param_dic[var_key.lower()]
|
try:
|
||||||
except KeyError:
|
value = param_dic[var_key.lower()]
|
||||||
pass
|
except KeyError:
|
||||||
|
pass
|
||||||
|
|
||||||
return value
|
return value
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@ class EpsInfty:
|
|||||||
return ret_val
|
return ret_val
|
||||||
|
|
||||||
|
|
||||||
class _HNWithHF:
|
class HNWithHF:
|
||||||
name = 'HN + HF wing'
|
name = 'HN + HF wing'
|
||||||
type = 'Dielectric Spectroscopy'
|
type = 'Dielectric Spectroscopy'
|
||||||
equation = r'\Delta\epsilon HN(\omega, \tau, \alpha, \gamma) / CD(\omega, \tau_{c}, \alpha\gamma-\delta)'
|
equation = r'\Delta\epsilon HN(\omega, \tau, \alpha, \gamma) / CD(\omega, \tau_{c}, \alpha\gamma-\delta)'
|
||||||
@ -114,7 +114,7 @@ class _HNWithHF:
|
|||||||
raise ValueError(f'{complex_mode!r} has not value 0, 1, or 2')
|
raise ValueError(f'{complex_mode!r} has not value 0, 1, or 2')
|
||||||
|
|
||||||
|
|
||||||
class CCWithHF:
|
class _CCWithHF:
|
||||||
name = 'CC + HF wing'
|
name = 'CC + HF wing'
|
||||||
type = 'Dielectric Spectroscopy'
|
type = 'Dielectric Spectroscopy'
|
||||||
equation = r'\Delta\epsilon CC(\omega, \tau, \alpha) / CD(\omega, \tau_{c}, \beta-\delta)'
|
equation = r'\Delta\epsilon CC(\omega, \tau, \alpha) / CD(\omega, \tau_{c}, \beta-\delta)'
|
||||||
@ -124,10 +124,10 @@ class CCWithHF:
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def func(x, deps, tau, alpha, tauc, delta, complex_mode: int = 0):
|
def func(x, deps, tau, alpha, tauc, delta, complex_mode: int = 0):
|
||||||
return _HNWithHF.func(x, deps, tau, alpha, 1, tauc, delta, complex_mode=complex_mode)
|
return HNWithHF.func(x, deps, tau, alpha, 1, tauc, delta, complex_mode=complex_mode)
|
||||||
|
|
||||||
|
|
||||||
class CDWithHF:
|
class _CDWithHF:
|
||||||
name = 'CD + HF wing'
|
name = 'CD + HF wing'
|
||||||
type = 'Dielectric Spectroscopy'
|
type = 'Dielectric Spectroscopy'
|
||||||
equation = r'\Delta\epsilon CD(\omega, \tau, \gamma) / CD(\omega, \tau_{c}, \gamma-\delta)'
|
equation = r'\Delta\epsilon CD(\omega, \tau, \gamma) / CD(\omega, \tau_{c}, \gamma-\delta)'
|
||||||
@ -137,7 +137,7 @@ class CDWithHF:
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def func(x, deps, tau, gamma, tauc, delta, complex_mode: int = 0):
|
def func(x, deps, tau, gamma, tauc, delta, complex_mode: int = 0):
|
||||||
return _HNWithHF.func(x, deps, tau, 1, gamma, tauc, delta, complex_mode=complex_mode)
|
return HNWithHF.func(x, deps, tau, 1, gamma, tauc, delta, complex_mode=complex_mode)
|
||||||
|
|
||||||
|
|
||||||
class PowerLawBDS:
|
class PowerLawBDS:
|
||||||
|
@ -4,7 +4,7 @@ from collections import OrderedDict, namedtuple
|
|||||||
from scipy.special import psi
|
from scipy.special import psi
|
||||||
|
|
||||||
__all__ = ['NA', 'kb_joule', 'h_joule', 'hbar_joule',
|
__all__ = ['NA', 'kb_joule', 'h_joule', 'hbar_joule',
|
||||||
'e', 'h', 'mu0', 'epsilon0', 'kB', 'R', 'hbar', 'pi', 'Eu',
|
'e', 'h', 'mu0', 'epsilon0', 'kB', 'R', 'R_joule', 'hbar', 'pi', 'Eu',
|
||||||
'nuclei', 'gamma', 'gamma_full', 'energy_converter']
|
'nuclei', 'gamma', 'gamma_full', 'energy_converter']
|
||||||
|
|
||||||
# Boltzmann constant in Joule, elementary charge and Avogadro constant are CODATA 2018 definitions
|
# Boltzmann constant in Joule, elementary charge and Avogadro constant are CODATA 2018 definitions
|
||||||
|
@ -41,10 +41,16 @@
|
|||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="groupBox">
|
<widget class="QGroupBox" name="groupBox">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Options</string>
|
<string>Options</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||||
<property name="leftMargin">
|
<property name="leftMargin">
|
||||||
<number>3</number>
|
<number>3</number>
|
||||||
</property>
|
</property>
|
||||||
@ -57,194 +63,255 @@
|
|||||||
<property name="bottomMargin">
|
<property name="bottomMargin">
|
||||||
<number>3</number>
|
<number>3</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="horizontalSpacing">
|
<item>
|
||||||
<number>9</number>
|
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||||
</property>
|
<item>
|
||||||
<item row="2" column="1">
|
<widget class="QCheckBox" name="column_checkBox">
|
||||||
<widget class="QRadioButton" name="FID_radioButton">
|
<property name="sizePolicy">
|
||||||
<property name="text">
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||||
<string>FID</string>
|
<horstretch>0</horstretch>
|
||||||
</property>
|
<verstretch>0</verstretch>
|
||||||
<property name="autoExclusive">
|
</sizepolicy>
|
||||||
<bool>true</bool>
|
</property>
|
||||||
</property>
|
<property name="text">
|
||||||
<attribute name="buttonGroup">
|
<string>Column name</string>
|
||||||
<string notr="true">buttonGroup</string>
|
</property>
|
||||||
</attribute>
|
</widget>
|
||||||
</widget>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QSpinBox" name="line_spinBox">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="prefix">
|
||||||
|
<string>header line </string>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_6">
|
||||||
|
<property name="text">
|
||||||
|
<string>Preview length</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QSpinBox" name="preview_spinBox">
|
||||||
|
<property name="minimum">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>10</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer_4">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="3">
|
<item>
|
||||||
<widget class="QLineEdit" name="x_lineedit">
|
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||||
<property name="sizePolicy">
|
<item>
|
||||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
<widget class="QLabel" name="label">
|
||||||
<horstretch>0</horstretch>
|
<property name="sizePolicy">
|
||||||
<verstretch>0</verstretch>
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||||
</sizepolicy>
|
<horstretch>0</horstretch>
|
||||||
</property>
|
<verstretch>0</verstretch>
|
||||||
<property name="toolTip">
|
</sizepolicy>
|
||||||
<string><html><head/><body><p>Specify which column is used as x-value.</p></body></html></string>
|
</property>
|
||||||
</property>
|
<property name="text">
|
||||||
<property name="inputMethodHints">
|
<string>Import as</string>
|
||||||
<set>Qt::ImhFormattedNumbersOnly|Qt::ImhPreferNumbers</set>
|
</property>
|
||||||
</property>
|
</widget>
|
||||||
</widget>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="pts_radioButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>Points</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="autoExclusive">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<attribute name="buttonGroup">
|
||||||
|
<string notr="true">buttonGroup</string>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="dsc_radioButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>DSC</string>
|
||||||
|
</property>
|
||||||
|
<attribute name="buttonGroup">
|
||||||
|
<string notr="true">buttonGroup</string>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="FID_radioButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>FID</string>
|
||||||
|
</property>
|
||||||
|
<property name="autoExclusive">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<attribute name="buttonGroup">
|
||||||
|
<string notr="true">buttonGroup</string>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="spectrum_radioButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>Spectrum</string>
|
||||||
|
</property>
|
||||||
|
<attribute name="buttonGroup">
|
||||||
|
<string notr="true">buttonGroup</string>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="bds_radioButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>BDS</string>
|
||||||
|
</property>
|
||||||
|
<attribute name="buttonGroup">
|
||||||
|
<string notr="true">buttonGroup</string>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="2">
|
<item>
|
||||||
<widget class="QLabel" name="y_label">
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
<property name="text">
|
<item row="3" column="1">
|
||||||
<string>y</string>
|
<widget class="QLineEdit" name="deltay_lineEdit">
|
||||||
</property>
|
<property name="sizePolicy">
|
||||||
</widget>
|
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||||
</item>
|
<horstretch>0</horstretch>
|
||||||
<item row="1" column="1">
|
<verstretch>0</verstretch>
|
||||||
<widget class="QRadioButton" name="pts_radioButton">
|
</sizepolicy>
|
||||||
<property name="text">
|
</property>
|
||||||
<string>Points</string>
|
</widget>
|
||||||
</property>
|
</item>
|
||||||
<property name="checked">
|
<item row="0" column="0" colspan="2">
|
||||||
<bool>true</bool>
|
<widget class="QLabel" name="label_7">
|
||||||
</property>
|
<property name="sizePolicy">
|
||||||
<property name="autoExclusive">
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||||
<bool>true</bool>
|
<horstretch>0</horstretch>
|
||||||
</property>
|
<verstretch>0</verstretch>
|
||||||
<attribute name="buttonGroup">
|
</sizepolicy>
|
||||||
<string notr="true">buttonGroup</string>
|
</property>
|
||||||
</attribute>
|
<property name="text">
|
||||||
</widget>
|
<string>Use columns as</string>
|
||||||
</item>
|
</property>
|
||||||
<item row="3" column="3">
|
</widget>
|
||||||
<widget class="QLineEdit" name="deltay_lineEdit">
|
</item>
|
||||||
<property name="sizePolicy">
|
<item row="2" column="1">
|
||||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
<widget class="QLineEdit" name="y_lineedit">
|
||||||
<horstretch>0</horstretch>
|
<property name="sizePolicy">
|
||||||
<verstretch>0</verstretch>
|
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||||
</sizepolicy>
|
<horstretch>0</horstretch>
|
||||||
</property>
|
<verstretch>0</verstretch>
|
||||||
</widget>
|
</sizepolicy>
|
||||||
</item>
|
</property>
|
||||||
<item row="3" column="2">
|
<property name="toolTip">
|
||||||
<widget class="QLabel" name="label_5">
|
<string><html><head/><body><p>Specify which columns are read for y-values. ('Points': Every number creates a new data set;'FID'/'Spectrum': Numbers at even positions are used for real parts, at odd positions for imaginary parts.)</p></body></html></string>
|
||||||
<property name="text">
|
</property>
|
||||||
<string><html><head/><body><p>Δy</p></body></html></string>
|
<property name="inputMethodHints">
|
||||||
</property>
|
<set>Qt::ImhFormattedNumbersOnly|Qt::ImhPreferNumbers</set>
|
||||||
</widget>
|
</property>
|
||||||
</item>
|
</widget>
|
||||||
<item row="0" column="0">
|
</item>
|
||||||
<widget class="QCheckBox" name="column_checkBox">
|
<item row="2" column="0">
|
||||||
<property name="sizePolicy">
|
<widget class="QLabel" name="y_label">
|
||||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
<property name="text">
|
||||||
<horstretch>0</horstretch>
|
<string>y</string>
|
||||||
<verstretch>0</verstretch>
|
</property>
|
||||||
</sizepolicy>
|
</widget>
|
||||||
</property>
|
</item>
|
||||||
<property name="text">
|
<item row="1" column="1">
|
||||||
<string>Column name</string>
|
<widget class="QLineEdit" name="x_lineedit">
|
||||||
</property>
|
<property name="sizePolicy">
|
||||||
</widget>
|
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||||
</item>
|
<horstretch>0</horstretch>
|
||||||
<item row="0" column="1">
|
<verstretch>0</verstretch>
|
||||||
<widget class="QLabel" name="label">
|
</sizepolicy>
|
||||||
<property name="sizePolicy">
|
</property>
|
||||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
<property name="toolTip">
|
||||||
<horstretch>0</horstretch>
|
<string><html><head/><body><p>Specify which column is used as x-value.</p></body></html></string>
|
||||||
<verstretch>0</verstretch>
|
</property>
|
||||||
</sizepolicy>
|
<property name="inputMethodHints">
|
||||||
</property>
|
<set>Qt::ImhFormattedNumbersOnly|Qt::ImhPreferNumbers</set>
|
||||||
<property name="text">
|
</property>
|
||||||
<string>Import as</string>
|
</widget>
|
||||||
</property>
|
</item>
|
||||||
</widget>
|
<item row="3" column="0">
|
||||||
</item>
|
<widget class="QLabel" name="label_5">
|
||||||
<item row="0" column="2" colspan="2">
|
<property name="text">
|
||||||
<widget class="QLabel" name="label_7">
|
<string><html><head/><body><p>Δy</p></body></html></string>
|
||||||
<property name="sizePolicy">
|
</property>
|
||||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
</widget>
|
||||||
<horstretch>0</horstretch>
|
</item>
|
||||||
<verstretch>0</verstretch>
|
<item row="1" column="0">
|
||||||
</sizepolicy>
|
<widget class="QLabel" name="x_label">
|
||||||
</property>
|
<property name="sizePolicy">
|
||||||
<property name="text">
|
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||||
<string>Use columns as</string>
|
<horstretch>0</horstretch>
|
||||||
</property>
|
<verstretch>0</verstretch>
|
||||||
</widget>
|
</sizepolicy>
|
||||||
</item>
|
</property>
|
||||||
<item row="2" column="3">
|
<property name="text">
|
||||||
<widget class="QLineEdit" name="y_lineedit">
|
<string>x</string>
|
||||||
<property name="sizePolicy">
|
</property>
|
||||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
</widget>
|
||||||
<horstretch>0</horstretch>
|
</item>
|
||||||
<verstretch>0</verstretch>
|
<item row="4" column="1">
|
||||||
</sizepolicy>
|
<spacer name="verticalSpacer_2">
|
||||||
</property>
|
<property name="orientation">
|
||||||
<property name="toolTip">
|
<enum>Qt::Vertical</enum>
|
||||||
<string><html><head/><body><p>Specify which columns are read for y-values. ('Points': Every number creates a new data set;'FID'/'Spectrum': Numbers at even positions are used for real parts, at odd positions for imaginary parts.)</p></body></html></string>
|
</property>
|
||||||
</property>
|
<property name="sizeHint" stdset="0">
|
||||||
<property name="inputMethodHints">
|
<size>
|
||||||
<set>Qt::ImhFormattedNumbersOnly|Qt::ImhPreferNumbers</set>
|
<width>20</width>
|
||||||
</property>
|
<height>40</height>
|
||||||
</widget>
|
</size>
|
||||||
</item>
|
</property>
|
||||||
<item row="3" column="1">
|
</spacer>
|
||||||
<widget class="QRadioButton" name="spectrum_radioButton">
|
</item>
|
||||||
<property name="text">
|
</layout>
|
||||||
<string>Spectrum</string>
|
|
||||||
</property>
|
|
||||||
<attribute name="buttonGroup">
|
|
||||||
<string notr="true">buttonGroup</string>
|
|
||||||
</attribute>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="2">
|
|
||||||
<widget class="QLabel" name="x_label">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>x</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0">
|
|
||||||
<widget class="QSpinBox" name="line_spinBox">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="prefix">
|
|
||||||
<string>header line </string>
|
|
||||||
</property>
|
|
||||||
<property name="minimum">
|
|
||||||
<number>1</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="0">
|
|
||||||
<widget class="QSpinBox" name="preview_spinBox">
|
|
||||||
<property name="minimum">
|
|
||||||
<number>1</number>
|
|
||||||
</property>
|
|
||||||
<property name="value">
|
|
||||||
<number>10</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="0">
|
|
||||||
<widget class="QLabel" name="label_6">
|
|
||||||
<property name="text">
|
|
||||||
<string>Preview length</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="groupBox_2">
|
<widget class="QGroupBox" name="groupBox_2">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Preview</string>
|
<string>Preview</string>
|
||||||
</property>
|
</property>
|
||||||
@ -445,16 +512,6 @@
|
|||||||
<property name="topMargin">
|
<property name="topMargin">
|
||||||
<number>0</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<item>
|
|
||||||
<widget class="QCheckBox" name="skippy_checkbox">
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Use selection for next files. Deletes possible delay values.</string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Skip next dialogues?</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
<item>
|
||||||
<spacer name="horizontalSpacer_4">
|
<spacer name="horizontalSpacer_4">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
@ -468,6 +525,16 @@
|
|||||||
</property>
|
</property>
|
||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="skippy_checkbox">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Use selection for next files. Deletes possible delay values.</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Skip next dialogues?</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
@ -489,17 +556,7 @@
|
|||||||
</customwidgets>
|
</customwidgets>
|
||||||
<tabstops>
|
<tabstops>
|
||||||
<tabstop>tabWidget</tabstop>
|
<tabstop>tabWidget</tabstop>
|
||||||
<tabstop>column_checkBox</tabstop>
|
|
||||||
<tabstop>line_spinBox</tabstop>
|
|
||||||
<tabstop>preview_spinBox</tabstop>
|
|
||||||
<tabstop>pts_radioButton</tabstop>
|
|
||||||
<tabstop>FID_radioButton</tabstop>
|
|
||||||
<tabstop>spectrum_radioButton</tabstop>
|
|
||||||
<tabstop>x_lineedit</tabstop>
|
|
||||||
<tabstop>y_lineedit</tabstop>
|
|
||||||
<tabstop>deltay_lineEdit</tabstop>
|
|
||||||
<tabstop>ascii_table</tabstop>
|
<tabstop>ascii_table</tabstop>
|
||||||
<tabstop>skippy_checkbox</tabstop>
|
|
||||||
<tabstop>delay_textfield</tabstop>
|
<tabstop>delay_textfield</tabstop>
|
||||||
<tabstop>delay_lineedit</tabstop>
|
<tabstop>delay_lineedit</tabstop>
|
||||||
<tabstop>start_lineedit</tabstop>
|
<tabstop>start_lineedit</tabstop>
|
||||||
|
@ -136,7 +136,7 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>1386</width>
|
<width>1386</width>
|
||||||
<height>22</height>
|
<height>20</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QMenu" name="menuFile">
|
<widget class="QMenu" name="menuFile">
|
||||||
@ -222,6 +222,7 @@
|
|||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="menuNormalize"/>
|
<addaction name="menuNormalize"/>
|
||||||
<addaction name="actionInterpolation"/>
|
<addaction name="actionInterpolation"/>
|
||||||
|
<addaction name="actionBinning"/>
|
||||||
<addaction name="actionRunning_values"/>
|
<addaction name="actionRunning_values"/>
|
||||||
<addaction name="actionShift"/>
|
<addaction name="actionShift"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
@ -326,6 +327,12 @@
|
|||||||
<addaction name="actionTetris"/>
|
<addaction name="actionTetris"/>
|
||||||
<addaction name="actionMine"/>
|
<addaction name="actionMine"/>
|
||||||
</widget>
|
</widget>
|
||||||
|
<widget class="QMenu" name="menuDSC">
|
||||||
|
<property name="title">
|
||||||
|
<string>DSC</string>
|
||||||
|
</property>
|
||||||
|
<addaction name="actionTNMH_model"/>
|
||||||
|
</widget>
|
||||||
<addaction name="menuFile"/>
|
<addaction name="menuFile"/>
|
||||||
<addaction name="menuWindow"/>
|
<addaction name="menuWindow"/>
|
||||||
<addaction name="menuData"/>
|
<addaction name="menuData"/>
|
||||||
@ -334,6 +341,7 @@
|
|||||||
<addaction name="menuFit"/>
|
<addaction name="menuFit"/>
|
||||||
<addaction name="menuNMR"/>
|
<addaction name="menuNMR"/>
|
||||||
<addaction name="menuBDS"/>
|
<addaction name="menuBDS"/>
|
||||||
|
<addaction name="menuDSC"/>
|
||||||
<addaction name="menuOptions"/>
|
<addaction name="menuOptions"/>
|
||||||
<addaction name="menuHelp"/>
|
<addaction name="menuHelp"/>
|
||||||
<addaction name="menuStuff"/>
|
<addaction name="menuStuff"/>
|
||||||
@ -1022,6 +1030,16 @@
|
|||||||
<string>About...</string>
|
<string>About...</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
|
<action name="actionTNMH_model">
|
||||||
|
<property name="text">
|
||||||
|
<string>Tg determination,,,</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionBinning">
|
||||||
|
<property name="text">
|
||||||
|
<string>Binning...</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
</widget>
|
</widget>
|
||||||
<customwidgets>
|
<customwidgets>
|
||||||
<customwidget>
|
<customwidget>
|
||||||
|
345
src/resources/_ui/tnmh_dialog.ui
Normal file
345
src/resources/_ui/tnmh_dialog.ui
Normal file
@ -0,0 +1,345 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>Dialog</class>
|
||||||
|
<widget class="QDialog" name="Dialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>1042</width>
|
||||||
|
<height>683</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>SImba, everything the light touches is our kingdom</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="5" column="1">
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Close|QDialogButtonBox::Save</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0" rowspan="5">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QListWidget" name="listWidget">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Maximum" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string><html><head/><body><p><span style=" font-weight:600;">Tg values:</span></p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="tg_value_label">
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="text">
|
||||||
|
<string><html><head/><body><p><span style=" font-weight:600;">TNMH parameter:</span></p></body></html></string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QStackedWidget" name="stackedWidget">
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::StyledPanel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>QFrame::Raised</enum>
|
||||||
|
</property>
|
||||||
|
<property name="currentIndex">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="stackedWidgetPage1">
|
||||||
|
<layout class="QGridLayout" name="gridLayout_3">
|
||||||
|
<item row="4" column="2">
|
||||||
|
<widget class="CheckCombobox" name="hodge_selection">
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Onset</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Midpoint</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>End</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Inflection</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0" rowspan="7">
|
||||||
|
<widget class="PlotWidget" name="tau_plot">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QCheckBox" name="tg_export_check">
|
||||||
|
<property name="text">
|
||||||
|
<string>Export Tg</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="2">
|
||||||
|
<widget class="QCheckBox" name="tglines_export_check">
|
||||||
|
<property name="text">
|
||||||
|
<string>Export lines</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="2">
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="2">
|
||||||
|
<widget class="QComboBox" name="new_graph_tau_combo"/>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QLabel" name="label_6">
|
||||||
|
<property name="text">
|
||||||
|
<string>Hodge:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="1">
|
||||||
|
<widget class="QCheckBox" name="new_graph_tau_check">
|
||||||
|
<property name="text">
|
||||||
|
<string>New graph</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1" colspan="2">
|
||||||
|
<widget class="Line" name="line">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="page">
|
||||||
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
|
<item row="1" column="1">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>Tg for TNMH</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="comboBox">
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Fictive</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Onset</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Midpoint</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>End</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Inflection</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QPushButton" name="pushButton_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>Fit TNMH model</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0" rowspan="3">
|
||||||
|
<widget class="PlotWidget" name="graphicsView_2"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="PlotWidget" name="dsc_plot">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="calctg_button">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Calculate Tg</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="pushButton_2">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Calculate fictive Cp</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>PlotWidget</class>
|
||||||
|
<extends>QGraphicsView</extends>
|
||||||
|
<header>pyqtgraph</header>
|
||||||
|
</customwidget>
|
||||||
|
<customwidget>
|
||||||
|
<class>CheckCombobox</class>
|
||||||
|
<extends>QComboBox</extends>
|
||||||
|
<header>..lib.forms</header>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>Dialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>248</x>
|
||||||
|
<y>254</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>Dialog</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>316</x>
|
||||||
|
<y>260</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
Loading…
Reference in New Issue
Block a user