Compare commits

...

40 Commits
master ... dev

Author SHA1 Message Date
9c56171524 Merge branch 'master' into dev 2024-11-14 17:20:04 +00:00
Dominik Demuth
6980df1599 import future for type hints 2024-11-14 18:06:06 +01:00
Dominik Demuth
f6b7ebec07 selecting x value as label for point selection should work 2024-10-22 18:54:44 +02:00
Dominik Demuth
8d1ccd22fa change ptstab widgets 2024-10-21 19:52:23 +02:00
Dominik Demuth
0b52fef549 additional parameter for weight factor for increase or decrease 2024-10-16 17:32:20 +02:00
Dominik Demuth
b6b98d292a clicking outside axes no longer emits signal 2024-10-13 18:29:04 +02:00
Dominik Demuth
d90959c6b6 fix typo 2024-10-13 17:28:59 +02:00
Dominik Demuth
e459bd5e54 Merge branch 'master' into dev 2024-10-13 17:21:26 +02:00
24f20f8850 Merge branch 'master' into dev 2024-09-29 17:21:14 +00:00
Dominik Demuth
fc91bf83fe Merge branch 'script-editor' into dev 2024-09-29 19:19:15 +02:00
Dominik Demuth
86f285fba5 randomize 2024-09-29 19:13:26 +02:00
Dominik Demuth
fa84b0382e select type/generation and sorting enabled did not go well together 2024-09-29 16:03:13 +02:00
Dominik Demuth
4b75aa9267 add disclaimer 2024-09-29 15:50:50 +02:00
Dominik Demuth
f185b24967 fix problem with namespaces 2024-09-29 14:33:28 +02:00
Dominik Demuth
d07b85ae27 mvp for script runner 2024-09-26 18:39:55 +02:00
Dominik Demuth
7ad1e4b843 use of properties did not work properly 2024-09-25 18:09:10 +02:00
Dominik Demuth
ff2ff01da7 update internal fit infos after function removal 2024-09-25 17:21:46 +02:00
Dominik Demuth
d9f1c0b8c2 use correct attribute name 2024-09-25 17:20:20 +02:00
Dominik Demuth
9039c44ce7 Merge remote-tracking branch 'origin/dev' into dev 2024-09-23 16:41:19 +02:00
Dominik Demuth
ac6b734f81 only skip points if wanted 2024-09-23 16:38:28 +02:00
9babb73f3a Merge branch 'master' into dev 2024-09-11 15:32:53 +00:00
Dominik Demuth
4f0a7827ba Add standard deviation to averaging methods of pick points 2024-09-11 17:31:58 +02:00
Dominik Demuth
05862730a0 Merge branch 'gga_relaxation' into dev 2024-09-07 19:22:05 +02:00
Dominik Demuth
7fe89eff7f Merge remote-tracking branch 'origin/gga_relaxation' into gga_relaxation 2024-09-07 19:21:01 +02:00
Dominik Demuth
f94f78893c add basic Generalized Gamma for alpha relaxation 2024-09-07 19:20:32 +02:00
Dominik Demuth
fda3257424 plot sub-functions; fixes #282 2024-09-07 19:19:02 +02:00
Dominik Demuth
f30ff3b758 Merge remote-tracking branch 'origin/master' into gga_relaxation 2024-09-05 18:16:27 +02:00
7b61c1244d Merge branch 'master' into dev 2024-07-16 17:00:27 +00:00
Dominik Demuth
e0c287d8a9 plot sub-functions; fixes #282 2024-07-16 18:58:31 +02:00
Dominik Demuth
a8fcd658d9 set fit toolbar a name; fixes #281 2024-07-15 17:42:28 +02:00
Dominik Demuth
dd471ae294 Merge branch 'refs/heads/267-cut-y-range' into dev 2024-06-24 17:55:48 +02:00
Dominik Demuth
ab586ac39a Merge branch 'refs/heads/256-fc-persistence' into dev
# Conflicts:
#	src/gui_qt/main/mainwindow.py
2024-06-24 17:55:13 +02:00
Dominik Demuth
b355aab99d Merge remote-tracking branch 'refs/remotes/origin/255-persisitence-interpolation-dialog' into dev 2024-06-24 17:54:24 +02:00
Dominik Demuth
03cdc225ca add sinc function 2024-06-24 17:53:45 +02:00
Dominik Demuth
e87c6bf2c1 retain settings in interpolation dialog 2024-05-27 18:05:43 +02:00
Dominik Demuth
cc7572fe14 retain settings in FC reader dialog 2024-05-15 17:15:09 +02:00
Dominik Demuth
ef66cf584a increase precision 2024-05-06 18:52:20 +02:00
Dominik Demuth
f0448fac0f cut data at x and y 2024-05-06 18:46:27 +02:00
Dominik Demuth
749a78b550 add to clib 2024-01-13 16:21:19 +01:00
Dominik Demuth
50a811b7ec calculate t1 for generalized gamma 2024-01-09 14:20:20 +01:00
9 changed files with 445 additions and 327 deletions

View File

@ -360,7 +360,7 @@ class Ui_ascii_reader(object):
self.x_label.setText(_translate("ascii_reader", "x")) self.x_label.setText(_translate("ascii_reader", "x"))
self.dsdfsf.setText(_translate("ascii_reader", "Numerical value")) self.dsdfsf.setText(_translate("ascii_reader", "Numerical value"))
self.label_9.setText(_translate("ascii_reader", "Match index")) self.label_9.setText(_translate("ascii_reader", "Match index"))
self.regex_input.setToolTip(_translate("ascii_reader", "<html><head/><body><p>Token:<br/>[abc]: Matches any of a, b, or c<br/>[a-z]: Matches any digit in the range a-z<br/>\\d: Matches any digit in the range 0-9 (equal to [0-9}</p><p>Quantifiers:<br/>a*: 0 or more of a<br/>a*: 1 or more of a<br/>a?: 0 or 1 of a</p></body></html>")) self.regex_input.setToolTip(_translate("ascii_reader", "<html><head/><body><p>Token:<br/>[abc]: Matches any of a, b, or c<br/>[a-z]: Matches any digit in the range a-z<br/>\\d: Matches any digit in the range 0-9 (equal to [0-9}</p><p>Quantifiers:<br/>a*: 0 or more of a<br/>a+: 1 or more of a<br/>a?: 0 or 1 of a</p></body></html>"))
self.re_button.setText(_translate("ascii_reader", "Regex")) self.re_button.setText(_translate("ascii_reader", "Regex"))
self.custom_button.setText(_translate("ascii_reader", "Custom value")) self.custom_button.setText(_translate("ascii_reader", "Custom value"))
self.label_8.setText(_translate("ascii_reader", "Filename")) self.label_8.setText(_translate("ascii_reader", "Filename"))

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Form implementation generated from reading ui file './nmreval/src/resources/_ui/ptstab.ui' # Form implementation generated from reading ui file 'nmreval/src/resources/_ui/ptstab.ui'
# #
# Created by: PyQt5 UI code generator 5.15.10 # Created by: PyQt5 UI code generator 5.15.10
# #
@ -14,29 +14,50 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object): class Ui_Form(object):
def setupUi(self, Form): def setupUi(self, Form):
Form.setObjectName("Form") Form.setObjectName("Form")
Form.resize(316, 747) Form.resize(417, 746)
self.verticalLayout = QtWidgets.QVBoxLayout(Form) self.gridLayout = QtWidgets.QGridLayout(Form)
self.verticalLayout.setContentsMargins(3, 3, 3, 3) self.gridLayout.setObjectName("gridLayout")
self.verticalLayout.setObjectName("verticalLayout") self.label_2 = QtWidgets.QLabel(Form)
self.label_2.setObjectName("label_2")
self.gridLayout.addWidget(self.label_2, 0, 0, 1, 2)
self.peaktable = QtWidgets.QListWidget(Form) self.peaktable = QtWidgets.QListWidget(Form)
self.peaktable.setEditTriggers(QtWidgets.QAbstractItemView.DoubleClicked|QtWidgets.QAbstractItemView.EditKeyPressed) self.peaktable.setEditTriggers(QtWidgets.QAbstractItemView.DoubleClicked|QtWidgets.QAbstractItemView.EditKeyPressed)
self.peaktable.setObjectName("peaktable") self.peaktable.setObjectName("peaktable")
self.verticalLayout.addWidget(self.peaktable) self.gridLayout.addWidget(self.peaktable, 1, 0, 1, 2)
self.groupBox = QtWidgets.QGroupBox(Form) self.special_checkbox = QtWidgets.QCheckBox(Form)
self.groupBox.setObjectName("groupBox") self.special_checkbox.setObjectName("special_checkbox")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.groupBox) self.gridLayout.addWidget(self.special_checkbox, 3, 0, 1, 1)
self.horizontalLayout.setContentsMargins(3, 3, 3, 3) self.special_comboBox = QtWidgets.QComboBox(Form)
self.horizontalLayout.setSpacing(3) self.special_comboBox.setEnabled(False)
self.horizontalLayout.setObjectName("horizontalLayout") self.special_comboBox.setObjectName("special_comboBox")
self.left_pt = QtWidgets.QSpinBox(self.groupBox) self.special_comboBox.addItem("")
self.left_pt.setMaximum(999) self.special_comboBox.addItem("")
self.left_pt.setObjectName("left_pt") self.special_comboBox.addItem("")
self.horizontalLayout.addWidget(self.left_pt) self.special_comboBox.addItem("")
self.right_pt = QtWidgets.QSpinBox(self.groupBox) self.gridLayout.addWidget(self.special_comboBox, 3, 1, 1, 1)
self.right_pt.setMaximum(999) spacerItem = QtWidgets.QSpacerItem(20, 30, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
self.right_pt.setObjectName("right_pt") self.gridLayout.addItem(spacerItem, 4, 0, 1, 1)
self.horizontalLayout.addWidget(self.right_pt) self.label_3 = QtWidgets.QLabel(Form)
self.average_combobox = QtWidgets.QComboBox(self.groupBox) self.label_3.setObjectName("label_3")
self.gridLayout.addWidget(self.label_3, 5, 0, 1, 1)
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.left_limit = QtWidgets.QLineEdit(Form)
self.left_limit.setObjectName("left_limit")
self.horizontalLayout_2.addWidget(self.left_limit)
self.right_limit = QtWidgets.QLineEdit(Form)
self.right_limit.setObjectName("right_limit")
self.horizontalLayout_2.addWidget(self.right_limit)
self.limit_combobox = QtWidgets.QComboBox(Form)
self.limit_combobox.setObjectName("limit_combobox")
self.limit_combobox.addItem("")
self.limit_combobox.addItem("")
self.horizontalLayout_2.addWidget(self.limit_combobox)
self.gridLayout.addLayout(self.horizontalLayout_2, 5, 1, 1, 1)
self.label_5 = QtWidgets.QLabel(Form)
self.label_5.setObjectName("label_5")
self.gridLayout.addWidget(self.label_5, 6, 0, 1, 1)
self.average_combobox = QtWidgets.QComboBox(Form)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Fixed) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0) sizePolicy.setVerticalStretch(0)
@ -47,90 +68,93 @@ class Ui_Form(object):
self.average_combobox.addItem("") self.average_combobox.addItem("")
self.average_combobox.addItem("") self.average_combobox.addItem("")
self.average_combobox.addItem("") self.average_combobox.addItem("")
self.horizontalLayout.addWidget(self.average_combobox) self.gridLayout.addWidget(self.average_combobox, 6, 1, 1, 1)
self.verticalLayout.addWidget(self.groupBox) self.label_4 = QtWidgets.QLabel(Form)
self.groupBox_2 = QtWidgets.QGroupBox(Form) self.label_4.setObjectName("label_4")
self.groupBox_2.setCheckable(True) self.gridLayout.addWidget(self.label_4, 7, 0, 1, 1)
self.groupBox_2.setChecked(False) self.horizontalLayout = QtWidgets.QHBoxLayout()
self.groupBox_2.setObjectName("groupBox_2") self.horizontalLayout.setObjectName("horizontalLayout")
self.horizontalLayout_5 = QtWidgets.QHBoxLayout(self.groupBox_2) self.xbutton = QtWidgets.QCheckBox(Form)
self.horizontalLayout_5.setContentsMargins(3, 3, 3, 3)
self.horizontalLayout_5.setSpacing(2)
self.horizontalLayout_5.setObjectName("horizontalLayout_5")
self.special_comboBox = QtWidgets.QComboBox(self.groupBox_2)
self.special_comboBox.setObjectName("special_comboBox")
self.special_comboBox.addItem("")
self.special_comboBox.addItem("")
self.special_comboBox.addItem("")
self.special_comboBox.addItem("")
self.horizontalLayout_5.addWidget(self.special_comboBox)
self.verticalLayout.addWidget(self.groupBox_2)
self.groupBox_3 = QtWidgets.QGroupBox(Form)
self.groupBox_3.setObjectName("groupBox_3")
self.gridLayout = QtWidgets.QGridLayout(self.groupBox_3)
self.gridLayout.setContentsMargins(3, 3, 3, 3)
self.gridLayout.setSpacing(3)
self.gridLayout.setObjectName("gridLayout")
self.xbutton = QtWidgets.QCheckBox(self.groupBox_3)
self.xbutton.setObjectName("xbutton") self.xbutton.setObjectName("xbutton")
self.gridLayout.addWidget(self.xbutton, 0, 0, 1, 1) self.horizontalLayout.addWidget(self.xbutton)
self.ybutton = QtWidgets.QCheckBox(self.groupBox_3) self.ybutton = QtWidgets.QCheckBox(Form)
self.ybutton.setChecked(True) self.ybutton.setChecked(True)
self.ybutton.setObjectName("ybutton") self.ybutton.setObjectName("ybutton")
self.gridLayout.addWidget(self.ybutton, 0, 1, 1, 1) self.horizontalLayout.addWidget(self.ybutton)
self.graph_checkbox = QtWidgets.QCheckBox(self.groupBox_3) self.gridLayout.addLayout(self.horizontalLayout, 7, 1, 1, 1)
self.label = QtWidgets.QLabel(Form)
self.label.setObjectName("label")
self.gridLayout.addWidget(self.label, 8, 0, 1, 1)
self.group_box = QtWidgets.QComboBox(Form)
self.group_box.setObjectName("group_box")
self.group_box.addItem("")
self.group_box.addItem("")
self.gridLayout.addWidget(self.group_box, 8, 1, 1, 1)
spacerItem1 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
self.gridLayout.addItem(spacerItem1, 9, 0, 1, 1)
self.graph_checkbox = QtWidgets.QCheckBox(Form)
self.graph_checkbox.setChecked(True) self.graph_checkbox.setChecked(True)
self.graph_checkbox.setObjectName("graph_checkbox") self.graph_checkbox.setObjectName("graph_checkbox")
self.gridLayout.addWidget(self.graph_checkbox, 1, 0, 1, 1) self.gridLayout.addWidget(self.graph_checkbox, 10, 0, 1, 1)
self.graph_combobox = QtWidgets.QComboBox(self.groupBox_3) self.graph_combobox = QtWidgets.QComboBox(Form)
self.graph_combobox.setEnabled(False) self.graph_combobox.setEnabled(False)
self.graph_combobox.setObjectName("graph_combobox") self.graph_combobox.setObjectName("graph_combobox")
self.gridLayout.addWidget(self.graph_combobox, 1, 1, 1, 1) self.gridLayout.addWidget(self.graph_combobox, 10, 1, 1, 1)
self.verticalLayout.addWidget(self.groupBox_3) spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.horizontalLayout_2 = QtWidgets.QHBoxLayout() self.gridLayout.addItem(spacerItem2, 12, 0, 1, 1)
self.horizontalLayout_2.setContentsMargins(-1, 0, -1, -1)
self.horizontalLayout_2.setSpacing(2)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.okButton = QtWidgets.QPushButton(Form) self.okButton = QtWidgets.QPushButton(Form)
icon = QtGui.QIcon.fromTheme("dialog-ok") icon = QtGui.QIcon.fromTheme("dialog-ok")
self.okButton.setIcon(icon) self.okButton.setIcon(icon)
self.okButton.setObjectName("okButton") self.okButton.setObjectName("okButton")
self.horizontalLayout_2.addWidget(self.okButton) self.gridLayout.addWidget(self.okButton, 11, 0, 1, 2)
self.deleteButton = QtWidgets.QPushButton(Form) self.deleteButton = QtWidgets.QPushButton(Form)
icon = QtGui.QIcon.fromTheme("dialog-cancel") icon = QtGui.QIcon.fromTheme("dialog-cancel")
self.deleteButton.setIcon(icon) self.deleteButton.setIcon(icon)
self.deleteButton.setObjectName("deleteButton") self.deleteButton.setObjectName("deleteButton")
self.horizontalLayout_2.addWidget(self.deleteButton) self.gridLayout.addWidget(self.deleteButton, 2, 0, 1, 2)
self.verticalLayout.addLayout(self.horizontalLayout_2) self.label_2.setBuddy(self.peaktable)
self.label_5.setBuddy(self.average_combobox)
self.label_4.setBuddy(self.xbutton)
self.label.setBuddy(self.group_box)
self.retranslateUi(Form) self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form) QtCore.QMetaObject.connectSlotsByName(Form)
Form.setTabOrder(self.peaktable, self.limit_combobox)
Form.setTabOrder(self.limit_combobox, self.average_combobox)
Form.setTabOrder(self.average_combobox, self.xbutton)
Form.setTabOrder(self.xbutton, self.ybutton)
Form.setTabOrder(self.ybutton, self.group_box)
Form.setTabOrder(self.group_box, self.graph_checkbox)
Form.setTabOrder(self.graph_checkbox, self.graph_combobox)
def retranslateUi(self, Form): def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate _translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form")) Form.setWindowTitle(_translate("Form", "Form"))
self.label_2.setText(_translate("Form", "Selected points and regions"))
self.peaktable.setToolTip(_translate("Form", "Edit by entering new value: \n" self.peaktable.setToolTip(_translate("Form", "Edit by entering new value: \n"
"Single number for points (e.g. 1e-6); \n" "Single number for points (e.g. 1e-6); \n"
"two numbers separated by space for regions (e.g. 1e-6 5e-6). \n" "two numbers separated by space for regions (e.g. 1e-6 5e-6). \n"
"Changing between regions and points is NOT possible")) "Changing between regions and points is NOT possible"))
self.groupBox.setTitle(_translate("Form", "Average (drop-down used for pts and regions)")) self.special_checkbox.setText(_translate("Form", "Use special value"))
self.left_pt.setSuffix(_translate("Form", " pts"))
self.left_pt.setPrefix(_translate("Form", "- "))
self.right_pt.setSuffix(_translate("Form", " pts"))
self.right_pt.setPrefix(_translate("Form", "+ "))
self.average_combobox.setItemText(0, _translate("Form", "Mean"))
self.average_combobox.setItemText(1, _translate("Form", "Sum"))
self.average_combobox.setItemText(2, _translate("Form", "Integral"))
self.average_combobox.setItemText(3, _translate("Form", "Std. deviation"))
self.groupBox_2.setTitle(_translate("Form", "Special value"))
self.special_comboBox.setToolTip(_translate("Form", "Automatic selection of respective points")) self.special_comboBox.setToolTip(_translate("Form", "Automatic selection of respective points"))
self.special_comboBox.setItemText(0, _translate("Form", "max(y)")) self.special_comboBox.setItemText(0, _translate("Form", "max(y)"))
self.special_comboBox.setItemText(1, _translate("Form", "max(abs(y))")) self.special_comboBox.setItemText(1, _translate("Form", "max(abs(y))"))
self.special_comboBox.setItemText(2, _translate("Form", "min(y)")) self.special_comboBox.setItemText(2, _translate("Form", "min(y)"))
self.special_comboBox.setItemText(3, _translate("Form", "min(abs(y))")) self.special_comboBox.setItemText(3, _translate("Form", "min(abs(y))"))
self.groupBox_3.setTitle(_translate("Form", "Result")) self.label_3.setText(_translate("Form", "Region around points"))
self.limit_combobox.setItemText(0, _translate("Form", "points"))
self.limit_combobox.setItemText(1, _translate("Form", "range"))
self.label_5.setText(_translate("Form", "Aggregation"))
self.average_combobox.setItemText(0, _translate("Form", "Mean"))
self.average_combobox.setItemText(1, _translate("Form", "Sum"))
self.average_combobox.setItemText(2, _translate("Form", "Integral"))
self.average_combobox.setItemText(3, _translate("Form", "Std. deviation"))
self.label_4.setText(_translate("Form", "New set based on"))
self.xbutton.setText(_translate("Form", "x")) self.xbutton.setText(_translate("Form", "x"))
self.ybutton.setText(_translate("Form", "y")) self.ybutton.setText(_translate("Form", "y"))
self.label.setText(_translate("Form", "Group by"))
self.group_box.setItemText(0, _translate("Form", "\"Group\" value"))
self.group_box.setItemText(1, _translate("Form", "x value"))
self.graph_checkbox.setText(_translate("Form", "New graph?")) self.graph_checkbox.setText(_translate("Form", "New graph?"))
self.okButton.setText(_translate("Form", "Apply")) self.okButton.setText(_translate("Form", "Apply"))
self.deleteButton.setText(_translate("Form", "Delete selected")) self.deleteButton.setText(_translate("Form", "Delete selection"))

View File

@ -1,6 +1,6 @@
import re import re
from ..Qt import QtCore, QtWidgets from ..Qt import QtCore, QtWidgets, QtGui
from .._py.ptstab import Ui_Form from .._py.ptstab import Ui_Form
from ..lib.pg_objects import LogInfiniteLine, RegionItem from ..lib.pg_objects import LogInfiniteLine, RegionItem
@ -27,15 +27,23 @@ class PointSelectWidget(QtWidgets.QWidget, Ui_Form):
self._last_item = None self._last_item = None
self.connected_figure = '' self.connected_figure = ''
self._avg_modes = ['mean', 'sum', 'integral', 'std']
self._special_values = ['max', 'absmax', 'min', 'absmin']
self._group_modes = ['group', 'x']
self.okButton.clicked.connect(self.apply) self.okButton.clicked.connect(self.apply)
self.deleteButton.clicked.connect(self.remove_points) self.deleteButton.clicked.connect(self.remove_points)
self.peaktable.itemChanged.connect(self.editing_finished) self.peaktable.itemChanged.connect(self.editing_finished)
self.peaktable.itemDoubleClicked.connect(self.editing_started) self.peaktable.itemDoubleClicked.connect(self.editing_started)
self.left_limit.setValidator(QtGui.QDoubleValidator())
self.right_limit.setValidator(QtGui.QDoubleValidator())
def keyPressEvent(self, e): def keyPressEvent(self, e):
if e.key() == QtCore.Qt.Key_Delete: if e.key() == QtCore.Qt.Key.Key_Delete:
self.remove_points() self.remove_points()
elif e.key() == QtCore.Qt.Key_F2: elif e.key() == QtCore.Qt.Key.Key_F2:
self.editing_started() self.editing_started()
else: else:
super().keyPressEvent(e) super().keyPressEvent(e)
@ -102,21 +110,22 @@ class PointSelectWidget(QtWidgets.QWidget, Ui_Form):
@QtCore.pyqtSlot() @QtCore.pyqtSlot()
def apply(self) -> dict: def apply(self) -> dict:
ret_dic = {'avg_range': [self.left_pt.value(), self.right_pt.value()], ret_dic = {
'avg_mode': {0: 'mean', 1: 'sum', 2: 'integral', 3: 'std'}[self.average_combobox.currentIndex()], 'avg_range': self.get_limits(),
'special': None, 'idx': None, 'avg_mode': self._avg_modes[self.average_combobox.currentIndex()],
'xy': (self.xbutton.isChecked(), self.ybutton.isChecked())} 'special': None,
'idx': None,
'xy': (self.xbutton.isChecked(), self.ybutton.isChecked()),
'groupby': self._group_modes[self.group_box.currentIndex()],
}
if self.groupBox_2.isChecked(): if self.special_checkbox.isChecked():
ret_dic['special'] = {0: 'max', 1: 'absmax', 2: 'min', 3: 'absmin'}[self.special_comboBox.currentIndex()] ret_dic['special'] = self._special_values[self.special_comboBox.currentIndex()]
if len(self.pts) != 0: if len(self.pts) != 0:
ret_dic['idx'] = self.pts ret_dic['idx'] = self.pts
if self.graph_checkbox.isChecked(): gid = self.graph_combobox.currentData() if not self.graph_checkbox.isChecked() else ''
gid = ''
else:
gid = self.graph_combobox.currentData()
self.points_selected.emit(ret_dic, gid) self.points_selected.emit(ret_dic, gid)
@ -200,3 +209,21 @@ class PointSelectWidget(QtWidgets.QWidget, Ui_Form):
@QtCore.pyqtSlot(int, name='on_graph_checkbox_stateChanged') @QtCore.pyqtSlot(int, name='on_graph_checkbox_stateChanged')
def changed_state(self, checked): def changed_state(self, checked):
self.graph_combobox.setEnabled(checked != QtCore.Qt.CheckState.Checked) self.graph_combobox.setEnabled(checked != QtCore.Qt.CheckState.Checked)
@QtCore.pyqtSlot(int, name='on_special_checkbox_stateChanged')
def changed_special(self, checked: int):
self.graph_combobox.setEnabled(checked != QtCore.Qt.CheckState.Checked)
def get_limits(self) -> tuple[float, float, str]:
try:
left = float(self.left_limit.text())
except ValueError:
left = 0.
try:
right = float(self.right_limit.text())
except ValueError:
right = 0.
return left, right, self.limit_combobox.currentText()

View File

@ -539,6 +539,10 @@ class QGraphWindow(QtWidgets.QGraphicsView, Ui_GraphWindow):
if self.graphic.plotItem.sceneBoundingRect().contains(evt.scenePos()) and evt.button() == 1: if self.graphic.plotItem.sceneBoundingRect().contains(evt.scenePos()) and evt.button() == 1:
pos = vb.mapSceneToView(evt.scenePos()) pos = vb.mapSceneToView(evt.scenePos())
if not _inside_range(pos.x(), pos.y(), vb.viewRange()):
return
_x, _y = pos.x(), pos.y() _x, _y = pos.x(), pos.y()
if self.log[0]: if self.log[0]:
@ -854,3 +858,7 @@ class QGraphWindow(QtWidgets.QGraphicsView, Ui_GraphWindow):
self.set_color(foreground=self._prev_colors[0], background=self._prev_colors[1]) self.set_color(foreground=self._prev_colors[0], background=self._prev_colors[1])
self._prev_colors = temp self._prev_colors = temp
def _inside_range(x: float, y: float, ranges: list[list[float]]) -> bool:
x_range, y_range = ranges
return (x_range[0] <= x <= x_range[1]) and (y_range[0] <= y <= y_range[1])

View File

@ -791,17 +791,28 @@ class UpperManagement(QtCore.QObject):
_active = self.graphs[self.current_graph].active _active = self.graphs[self.current_graph].active
new_datasets = {} new_datasets = {}
groupby = params.pop('groupby')
for sid in _active: for sid in _active:
data_i = self.data[sid] data_i = self.data[sid]
pts = data_i.points(params)
if groupby == 'group':
if data_i.group not in new_datasets: if data_i.group not in new_datasets:
new_datasets[data_i.group] = [], [] new_datasets[data_i.group] = [], []
new_x_axis, _temp = new_datasets[data_i.group] new_x_axis, _temp = new_datasets[data_i.group]
pts = data_i.points(params)
if pts: if pts:
new_x_axis.append(data_i.value) new_x_axis.append(data_i.value)
_temp.append(pts) _temp.append(pts)
else:
for (_x, _y, _yerr) in pts:
if _x not in new_datasets:
new_datasets[_x] = [], []
new_x_axis, _temp = new_datasets[_x]
new_x_axis.append(data_i.value)
_temp.append([[_x, _y, _yerr]])
key_list = [] key_list = []
for label, (new_x_axis, _temp) in new_datasets.items(): for label, (new_x_axis, _temp) in new_datasets.items():
_temp = np.array(_temp) # (number of sets, number of picks, (x, y, y_err)) _temp = np.array(_temp) # (number of sets, number of picks, (x, y, y_err))

View File

@ -273,9 +273,14 @@ class Points:
def length(self): def length(self):
return len(self._x) return len(self._x)
def points(self, idx: list = None, special: str = None, def points(
avg_range: tuple[int, int] = (0, 0), avg_mode: str = 'mean', self,
pts: list = None) -> list[tuple]: idx: list = None,
special: str = None,
avg_range: tuple[int, int] = (0, 0),
avg_mode: str = 'mean',
pts: list = None,
) -> list[tuple]:
""" """
Return (x, y) values at specified positions. Return (x, y) values at specified positions.

View File

@ -1,19 +1,31 @@
from __future__ import annotations
import numpy as np import numpy as np
from scipy import special as special from scipy import special as special
from ..utils import kB from ..utils import kB
class Weight2Phase: class Weight:
type = 'Line shape' type = 'Line shape'
name = 'Weighting factor' name = 'Weighting factor'
equation = r'A*[0.5 + 0.5 erf[(x-T_{0})/\DeltaT]] + A_{0}' equation = r'A * [0.5 \pm 0.5 erf[(x-T_{0})/\DeltaT]] + A_{0}'
params = ['T_{0}', r'\DeltaT', 'A', 'A_{0}'] params = ['T_{0}', r'\DeltaT', 'A', 'A_{0}']
choices = [('Direction', 'sign', {'increase': '+', 'decrease': '-'})]
bounds = [(0, None), (0, None), (None, None), (None, None)] bounds = [(0, None), (0, None), (None, None), (None, None)]
@staticmethod @staticmethod
def func(x, t0, dt, amp, off): def func(x: np.ndarray | float, t0: float, dt: float, amp: float, off: float, sign: str = '+') -> np.ndarray | float:
return amp*(0.5 + 0.5*special.erf((x-t0)/dt)) + off if sign not in '+-':
raise ValueError(f"`value` is `+` or `-`, not {sign}")
error_func = 1
if sign == '+':
error_func += special.erf((x-t0)/dt)
else:
error_func -= special.erf((x - t0) / dt)
return amp * error_func / 2. + off
class HendricksonBray: class HendricksonBray:
@ -24,5 +36,5 @@ class HendricksonBray:
bounds = [(0, None)] * 4 bounds = [(0, None)] * 4
@staticmethod @staticmethod
def func(x, a, b, e, w0): def func(x: np.ndarray | float, a: float, b: float, e: float, w0: float) -> np.ndarray | float:
return a*b / (b + (a-b)*np.exp(-e/kB/x)) + w0 return a*b / (b + (a-b)*np.exp(-e/kB/x)) + w0

View File

@ -336,7 +336,7 @@
</sizepolicy> </sizepolicy>
</property> </property>
<property name="toolTip"> <property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Token:&lt;br/&gt;[abc]: Matches any of a, b, or c&lt;br/&gt;[a-z]: Matches any digit in the range a-z&lt;br/&gt;\d: Matches any digit in the range 0-9 (equal to [0-9}&lt;/p&gt;&lt;p&gt;Quantifiers:&lt;br/&gt;a*: 0 or more of a&lt;br/&gt;a*: 1 or more of a&lt;br/&gt;a?: 0 or 1 of a&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string> <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Token:&lt;br/&gt;[abc]: Matches any of a, b, or c&lt;br/&gt;[a-z]: Matches any digit in the range a-z&lt;br/&gt;\d: Matches any digit in the range 0-9 (equal to [0-9}&lt;/p&gt;&lt;p&gt;Quantifiers:&lt;br/&gt;a+: 0 or more of a&lt;br/&gt;a*: 1 or more of a&lt;br/&gt;a?: 0 or 1 of a&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property> </property>
</widget> </widget>
</item> </item>

View File

@ -6,27 +6,25 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>316</width> <width>417</width>
<height>747</height> <height>746</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string>Form</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QGridLayout" name="gridLayout">
<property name="leftMargin"> <item row="0" column="0" colspan="2">
<number>3</number> <widget class="QLabel" name="label_2">
<property name="text">
<string>Selected points and regions</string>
</property> </property>
<property name="topMargin"> <property name="buddy">
<number>3</number> <cstring>peaktable</cstring>
</property> </property>
<property name="rightMargin"> </widget>
<number>3</number> </item>
</property> <item row="1" column="0" colspan="2">
<property name="bottomMargin">
<number>3</number>
</property>
<item>
<widget class="QListWidget" name="peaktable"> <widget class="QListWidget" name="peaktable">
<property name="toolTip"> <property name="toolTip">
<string>Edit by entering new value: <string>Edit by entering new value:
@ -39,54 +37,101 @@ Changing between regions and points is NOT possible</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item row="3" column="0">
<widget class="QGroupBox" name="groupBox"> <widget class="QCheckBox" name="special_checkbox">
<property name="title"> <property name="text">
<string>Average (drop-down used for pts and regions)</string> <string>Use special value</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>3</number>
</property>
<property name="leftMargin">
<number>3</number>
</property>
<property name="topMargin">
<number>3</number>
</property>
<property name="rightMargin">
<number>3</number>
</property>
<property name="bottomMargin">
<number>3</number>
</property>
<item>
<widget class="QSpinBox" name="left_pt">
<property name="suffix">
<string> pts</string>
</property>
<property name="prefix">
<string>- </string>
</property>
<property name="maximum">
<number>999</number>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="1">
<widget class="QComboBox" name="special_comboBox">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Automatic selection of respective points</string>
</property>
<item> <item>
<widget class="QSpinBox" name="right_pt"> <property name="text">
<property name="suffix"> <string>max(y)</string>
<string> pts</string>
</property> </property>
<property name="prefix"> </item>
<string>+ </string> <item>
<property name="text">
<string>max(abs(y))</string>
</property> </property>
<property name="maximum"> </item>
<number>999</number> <item>
<property name="text">
<string>min(y)</string>
</property>
</item>
<item>
<property name="text">
<string>min(abs(y))</string>
</property>
</item>
</widget>
</item>
<item row="4" column="0">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Preferred</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>30</height>
</size>
</property>
</spacer>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Region around points</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item> <item>
<widget class="QLineEdit" name="left_limit"/>
</item>
<item>
<widget class="QLineEdit" name="right_limit"/>
</item>
<item>
<widget class="QComboBox" name="limit_combobox">
<item>
<property name="text">
<string>points</string>
</property>
</item>
<item>
<property name="text">
<string>range</string>
</property>
</item>
</widget>
</item>
</layout>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Aggregation</string>
</property>
<property name="buddy">
<cstring>average_combobox</cstring>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QComboBox" name="average_combobox"> <widget class="QComboBox" name="average_combobox">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed"> <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
@ -116,95 +161,26 @@ Changing between regions and points is NOT possible</string>
</item> </item>
</widget> </widget>
</item> </item>
</layout> <item row="7" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>New set based on</string>
</property>
<property name="buddy">
<cstring>xbutton</cstring>
</property>
</widget> </widget>
</item> </item>
<item row="7" column="1">
<layout class="QHBoxLayout" name="horizontalLayout">
<item> <item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Special value</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_5">
<property name="spacing">
<number>2</number>
</property>
<property name="leftMargin">
<number>3</number>
</property>
<property name="topMargin">
<number>3</number>
</property>
<property name="rightMargin">
<number>3</number>
</property>
<property name="bottomMargin">
<number>3</number>
</property>
<item>
<widget class="QComboBox" name="special_comboBox">
<property name="toolTip">
<string>Automatic selection of respective points</string>
</property>
<item>
<property name="text">
<string>max(y)</string>
</property>
</item>
<item>
<property name="text">
<string>max(abs(y))</string>
</property>
</item>
<item>
<property name="text">
<string>min(y)</string>
</property>
</item>
<item>
<property name="text">
<string>min(abs(y))</string>
</property>
</item>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_3">
<property name="title">
<string>Result</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>3</number>
</property>
<property name="topMargin">
<number>3</number>
</property>
<property name="rightMargin">
<number>3</number>
</property>
<property name="bottomMargin">
<number>3</number>
</property>
<property name="spacing">
<number>3</number>
</property>
<item row="0" column="0">
<widget class="QCheckBox" name="xbutton"> <widget class="QCheckBox" name="xbutton">
<property name="text"> <property name="text">
<string>x</string> <string>x</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="1"> <item>
<widget class="QCheckBox" name="ybutton"> <widget class="QCheckBox" name="ybutton">
<property name="text"> <property name="text">
<string>y</string> <string>y</string>
@ -214,7 +190,49 @@ Changing between regions and points is NOT possible</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="0"> </layout>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Group by</string>
</property>
<property name="buddy">
<cstring>group_box</cstring>
</property>
</widget>
</item>
<item row="8" column="1">
<widget class="QComboBox" name="group_box">
<item>
<property name="text">
<string>&quot;Group&quot; value</string>
</property>
</item>
<item>
<property name="text">
<string>x value</string>
</property>
</item>
</widget>
</item>
<item row="9" column="0">
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Preferred</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="10" column="0">
<widget class="QCheckBox" name="graph_checkbox"> <widget class="QCheckBox" name="graph_checkbox">
<property name="text"> <property name="text">
<string>New graph?</string> <string>New graph?</string>
@ -224,25 +242,30 @@ Changing between regions and points is NOT possible</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1"> <item row="10" column="1">
<widget class="QComboBox" name="graph_combobox"> <widget class="QComboBox" name="graph_combobox">
<property name="enabled"> <property name="enabled">
<bool>false</bool> <bool>false</bool>
</property> </property>
</widget> </widget>
</item> </item>
</layout> <item row="12" column="0">
</widget> <spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Expanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item> </item>
<item> <item row="11" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>2</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<item>
<widget class="QPushButton" name="okButton"> <widget class="QPushButton" name="okButton">
<property name="text"> <property name="text">
<string>Apply</string> <string>Apply</string>
@ -253,10 +276,10 @@ Changing between regions and points is NOT possible</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item row="2" column="0" colspan="2">
<widget class="QPushButton" name="deleteButton"> <widget class="QPushButton" name="deleteButton">
<property name="text"> <property name="text">
<string>Delete selected</string> <string>Delete selection</string>
</property> </property>
<property name="icon"> <property name="icon">
<iconset theme="dialog-cancel"> <iconset theme="dialog-cancel">
@ -265,9 +288,17 @@ Changing between regions and points is NOT possible</string>
</widget> </widget>
</item> </item>
</layout> </layout>
</item>
</layout>
</widget> </widget>
<tabstops>
<tabstop>peaktable</tabstop>
<tabstop>limit_combobox</tabstop>
<tabstop>average_combobox</tabstop>
<tabstop>xbutton</tabstop>
<tabstop>ybutton</tabstop>
<tabstop>group_box</tabstop>
<tabstop>graph_checkbox</tabstop>
<tabstop>graph_combobox</tabstop>
</tabstops>
<resources/> <resources/>
<connections/> <connections/>
</ui> </ui>