mirror of
https://github.com/nqrduck/nqrduck-pulseprogrammer.git
synced 2024-12-22 15:47:47 +00:00
Pulseshape paramter update.
This commit is contained in:
parent
99fe6df3be
commit
29d7fa9a20
2 changed files with 94 additions and 8 deletions
|
@ -16,7 +16,7 @@ class PulseProgrammerModel(ModuleModel):
|
||||||
self.pulse_sequence = PulseSequence("Untitled pulse sequence")
|
self.pulse_sequence = PulseSequence("Untitled pulse sequence")
|
||||||
|
|
||||||
def add_event(self, event_name):
|
def add_event(self, event_name):
|
||||||
self.pulse_sequence.events.append(PulseSequence.Event(event_name, 0))
|
self.pulse_sequence.events.append(PulseSequence.Event(event_name, 20e-6))
|
||||||
logger.debug("Creating event %s with object id %s", event_name, id(self.pulse_sequence.events[-1]))
|
logger.debug("Creating event %s with object id %s", event_name, id(self.pulse_sequence.events[-1]))
|
||||||
|
|
||||||
# Create a default instance of the pulse parameter options and add it to the event
|
# Create a default instance of the pulse parameter options and add it to the event
|
||||||
|
|
|
@ -3,7 +3,7 @@ import functools
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from PyQt6.QtGui import QIcon
|
from PyQt6.QtGui import QIcon
|
||||||
from PyQt6.QtWidgets import QFormLayout, QTableWidget, QVBoxLayout, QPushButton, QHBoxLayout, QLabel, QDialog, QLineEdit, QDialogButtonBox, QWidget, QCheckBox, QToolButton, QFileDialog, QSizePolicy
|
from PyQt6.QtWidgets import QGroupBox, QFormLayout, QTableWidget, QVBoxLayout, QPushButton, QHBoxLayout, QLabel, QDialog, QLineEdit, QDialogButtonBox, QWidget, QCheckBox, QToolButton, QFileDialog, QSizePolicy
|
||||||
from PyQt6.QtCore import pyqtSlot, pyqtSignal
|
from PyQt6.QtCore import pyqtSlot, pyqtSignal
|
||||||
from nqrduck.module.module_view import ModuleView
|
from nqrduck.module.module_view import ModuleView
|
||||||
from nqrduck_spectrometer.pulseparameters import BooleanOption, NumericOption, FunctionOption
|
from nqrduck_spectrometer.pulseparameters import BooleanOption, NumericOption, FunctionOption
|
||||||
|
@ -357,20 +357,99 @@ class FunctionOptionWidget(QWidget):
|
||||||
self.function_option = function_option
|
self.function_option = function_option
|
||||||
self.event = event
|
self.event = event
|
||||||
layout = QVBoxLayout()
|
layout = QVBoxLayout()
|
||||||
|
inner_layout = QHBoxLayout()
|
||||||
for function in function_option.functions:
|
for function in function_option.functions:
|
||||||
button = QPushButton(function.name)
|
button = QPushButton(function.name)
|
||||||
button.clicked.connect(functools.partial(self.on_button_clicked, function=function))
|
button.clicked.connect(functools.partial(self.on_functionbutton_clicked, function=function))
|
||||||
inner_layout = QHBoxLayout()
|
|
||||||
inner_layout.addWidget(button)
|
inner_layout.addWidget(button)
|
||||||
layout.addLayout(inner_layout)
|
|
||||||
|
|
||||||
|
layout.addLayout(inner_layout)
|
||||||
self.setLayout(layout)
|
self.setLayout(layout)
|
||||||
|
|
||||||
|
# Add Advanced settings button
|
||||||
|
self.advanced_settings_button = QPushButton("Show Advanced settings")
|
||||||
|
self.advanced_settings_button.clicked.connect(self.on_advanced_settings_button_clicked)
|
||||||
|
layout.addWidget(self.advanced_settings_button)
|
||||||
|
|
||||||
|
# Add advanced settings widget
|
||||||
|
self.advanced_settings = QGroupBox('Advanced Settings')
|
||||||
|
self.advanced_settings.setHidden(True)
|
||||||
|
self.advanced_settings_layout = QFormLayout()
|
||||||
|
self.advanced_settings.setLayout(self.advanced_settings_layout)
|
||||||
|
layout.addWidget(self.advanced_settings)
|
||||||
|
|
||||||
|
# Add the advanced settings
|
||||||
|
# Advanced settings are resolution, start_x = -1, end_x and the expr of the function_option.value
|
||||||
|
resolution_layout = QHBoxLayout()
|
||||||
|
resolution_label = QLabel("Resolution:")
|
||||||
|
self.resolution_lineedit = QLineEdit(str(function_option.value.resolution))
|
||||||
|
resolution_layout.addWidget(resolution_label)
|
||||||
|
resolution_layout.addWidget(self.resolution_lineedit)
|
||||||
|
resolution_layout.addStretch(1)
|
||||||
|
self.advanced_settings_layout.addRow(resolution_label, resolution_layout)
|
||||||
|
|
||||||
|
start_x_layout = QHBoxLayout()
|
||||||
|
start_x_label = QLabel("Start x:")
|
||||||
|
self.start_x_lineedit = QLineEdit(str(function_option.value.start_x))
|
||||||
|
start_x_layout.addWidget(start_x_label)
|
||||||
|
start_x_layout.addWidget(self.start_x_lineedit)
|
||||||
|
start_x_layout.addStretch(1)
|
||||||
|
self.advanced_settings_layout.addRow(start_x_label, start_x_layout)
|
||||||
|
|
||||||
|
end_x_layout = QHBoxLayout()
|
||||||
|
end_x_label = QLabel("End x:")
|
||||||
|
self.end_x_lineedit = QLineEdit(str(function_option.value.end_x))
|
||||||
|
end_x_layout.addWidget(end_x_label)
|
||||||
|
end_x_layout.addWidget(self.end_x_lineedit)
|
||||||
|
end_x_layout.addStretch(1)
|
||||||
|
self.advanced_settings_layout.addRow(end_x_label, end_x_layout)
|
||||||
|
|
||||||
|
expr_layout = QHBoxLayout()
|
||||||
|
expr_label = QLabel("Expression:")
|
||||||
|
self.expr_lineedit = QLineEdit(str(function_option.value.expr))
|
||||||
|
expr_layout.addWidget(expr_label)
|
||||||
|
expr_layout.addWidget(self.expr_lineedit)
|
||||||
|
expr_layout.addStretch(1)
|
||||||
|
self.advanced_settings_layout.addRow(expr_label, expr_layout)
|
||||||
|
|
||||||
|
# Display the active function
|
||||||
self.load_active_function()
|
self.load_active_function()
|
||||||
|
|
||||||
|
# Add buttton for replotting of the active function with the new parameters
|
||||||
|
self.replot_button = QPushButton("Replot")
|
||||||
|
self.replot_button.clicked.connect(self.on_replot_button_clicked)
|
||||||
|
layout.addWidget(self.replot_button)
|
||||||
|
|
||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def on_button_clicked(self, function):
|
def on_replot_button_clicked(self):
|
||||||
|
logger.debug("Replot button clicked")
|
||||||
|
# Update the resolution, start_x, end_x and expr lineedits
|
||||||
|
self.function_option.value.resolution = float(self.resolution_lineedit.text())
|
||||||
|
self.function_option.value.start_x = float(self.start_x_lineedit.text())
|
||||||
|
self.function_option.value.end_x = float(self.end_x_lineedit.text())
|
||||||
|
self.function_option.value.expr = self.expr_lineedit.text()
|
||||||
|
self.delete_active_function()
|
||||||
|
self.load_active_function()
|
||||||
|
|
||||||
|
|
||||||
|
@pyqtSlot()
|
||||||
|
def on_advanced_settings_button_clicked(self):
|
||||||
|
if self.advanced_settings.isHidden():
|
||||||
|
self.advanced_settings.setHidden(False)
|
||||||
|
self.advanced_settings_button.setText('Hide Advanced Settings')
|
||||||
|
else:
|
||||||
|
self.advanced_settings.setHidden(True)
|
||||||
|
self.advanced_settings_button.setText('Show Advanced Settings')
|
||||||
|
|
||||||
|
|
||||||
|
@pyqtSlot()
|
||||||
|
def on_functionbutton_clicked(self, function):
|
||||||
logger.debug("Button for function %s clicked", function.name)
|
logger.debug("Button for function %s clicked", function.name)
|
||||||
self.function_option.set_value(function)
|
self.function_option.set_value(function)
|
||||||
|
self.delete_active_function()
|
||||||
|
self.load_active_function()
|
||||||
|
|
||||||
|
def delete_active_function(self):
|
||||||
# Remove the plotter with object name "plotter" from the layout
|
# Remove the plotter with object name "plotter" from the layout
|
||||||
for i in reversed(range(self.layout().count())):
|
for i in reversed(range(self.layout().count())):
|
||||||
item = self.layout().itemAt(i)
|
item = self.layout().itemAt(i)
|
||||||
|
@ -378,8 +457,6 @@ class FunctionOptionWidget(QWidget):
|
||||||
item.widget().deleteLater()
|
item.widget().deleteLater()
|
||||||
break
|
break
|
||||||
|
|
||||||
self.load_active_function()
|
|
||||||
|
|
||||||
def load_active_function(self):
|
def load_active_function(self):
|
||||||
# New QWidget for the active function
|
# New QWidget for the active function
|
||||||
active_function_Widget = QWidget()
|
active_function_Widget = QWidget()
|
||||||
|
@ -413,6 +490,8 @@ class FunctionOptionWidget(QWidget):
|
||||||
for parameter in self.function_option.value.parameters:
|
for parameter in self.function_option.value.parameters:
|
||||||
parameter_label = QLabel(parameter.name)
|
parameter_label = QLabel(parameter.name)
|
||||||
parameter_lineedit = QLineEdit(str(parameter.value))
|
parameter_lineedit = QLineEdit(str(parameter.value))
|
||||||
|
# Add the parameter_lineedit editingFinished signal to the paramter.set_value slot
|
||||||
|
parameter_lineedit.editingFinished.connect(lambda: parameter.set_value(parameter_lineedit.text()))
|
||||||
|
|
||||||
# Create a QHBoxLayout
|
# Create a QHBoxLayout
|
||||||
hbox = QHBoxLayout()
|
hbox = QHBoxLayout()
|
||||||
|
@ -429,6 +508,13 @@ class FunctionOptionWidget(QWidget):
|
||||||
active_function_Widget.setLayout(function_layout)
|
active_function_Widget.setLayout(function_layout)
|
||||||
self.layout().addWidget(active_function_Widget)
|
self.layout().addWidget(active_function_Widget)
|
||||||
|
|
||||||
|
# Update the resolution, start_x, end_x and expr lineedits
|
||||||
|
self.resolution_lineedit.setText(str(self.function_option.value.resolution))
|
||||||
|
self.start_x_lineedit.setText(str(self.function_option.value.start_x))
|
||||||
|
self.end_x_lineedit.setText(str(self.function_option.value.end_x))
|
||||||
|
self.expr_lineedit.setText(str(self.function_option.value.expr))
|
||||||
|
|
||||||
|
|
||||||
class AddEventDialog(QDialog):
|
class AddEventDialog(QDialog):
|
||||||
"""This dialog is created whenever a new event is added to the pulse sequence. It allows the user to enter a name for the event."""
|
"""This dialog is created whenever a new event is added to the pulse sequence. It allows the user to enter a name for the event."""
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
|
|
Loading…
Reference in a new issue