Improved pulse sequence structure.

This commit is contained in:
jupfi 2023-07-11 13:58:55 +02:00
parent a527220bb7
commit ab670c38c7
3 changed files with 29 additions and 30 deletions

View file

@ -23,7 +23,7 @@ classifiers = [
dependencies = [
"matplotlib",
"pyqt6",
"NQRduck",
"nqrduck-spectrometer",
]
[project.entry-points."nqrduck"]

View file

@ -2,6 +2,7 @@ import logging
from collections import OrderedDict
from PyQt6.QtCore import pyqtSignal
from nqrduck.module.module_model import ModuleModel
from nqrduck_spectrometer.pulse_sequence import PulseSequence
logger = logging.getLogger(__name__)
@ -12,23 +13,19 @@ class PulseProgrammerModel(ModuleModel):
def __init__(self, module):
super().__init__(module)
self.pulse_parameter_options = OrderedDict()
self.events = OrderedDict()
self.pulse_sequence = PulseSequence("Untitled pulse sequence")
def add_event(self, event_name):
self.events[event_name] = OrderedDict()
self.pulse_sequence.events[event_name] = PulseSequence.Event(event_name, 0)
logger.debug("Creating event %s with object id %s", event_name, id(self.pulse_sequence.events[event_name].parameters))
# Create a default instance of the pulse parameter options and add it to the event
for name, pulse_parameter_class in self.pulse_parameter_options.items():
self.events[event_name][name] = pulse_parameter_class("name")
logger.debug("Adding pulse parameter %s to event %s", name, event_name)
self.pulse_sequence.events[event_name].parameters[name] = pulse_parameter_class(name)
logger.debug("Created pulse parameter %s with object id %s", name, id(self.pulse_sequence.events[event_name].parameters[name]))
self.events_changed.emit()
@property
def events(self):
return self._events
@events.setter
def events(self, value):
self._events = value
logger.debug(self.pulse_sequence.dump_sequence_data())
self.events_changed.emit()
@property

View file

@ -21,7 +21,7 @@ class PulseProgrammerView(ModuleView):
def setup_ui(self):
# Create pulse table
title = QLabel("Pulse Sequence:")
title = QLabel("Pulse Sequence: %s" % self.module.model.pulse_sequence.name)
# Make title bold
font = title.font()
font.setBold(True)
@ -79,15 +79,15 @@ class PulseProgrammerView(ModuleView):
@pyqtSlot()
def on_events_changed(self):
logger.debug("Updating events to %s", self.module.model.events)
logger.debug("Updating events to %s", self.module.model.pulse_sequence.events)
for event in self.module.model.events:
for event in self.module.model.pulse_sequence.events:
logger.debug("Adding event to pulseprogrammer view: %s", event)
# Create a label for the setting
# Create a label for the event
event_name = QLabel(event)
event_name.setMinimumWidth(70)
# Add an QLineEdit for the setting
line_edit = QLineEdit(str(0))
# Add an QLineEdit for the event
line_edit = QLineEdit(str(self.module.model.pulse_sequence.events[event].duration))
line_edit.setMinimumWidth(30)
# Add a label for the unit
unit_label = QLabel("µs")
@ -102,24 +102,26 @@ class PulseProgrammerView(ModuleView):
self.layout().addLayout(event_layout)
self.pulse_table.setColumnCount(len(self.module.model.events))
self.pulse_table.setHorizontalHeaderLabels(self.module.model.events)
self.pulse_table.setColumnCount(len(self.module.model.pulse_sequence.events))
self.pulse_table.setHorizontalHeaderLabels(self.module.model.pulse_sequence.events)
self.set_parameter_icons()
def set_parameter_icons(self):
for i, parameter in enumerate(self.module.model.pulse_parameter_options.keys()):
for j, event in enumerate(self.module.model.events):
logger.debug("Adding button for event %s and parameter %s", event, parameter)
for column_idx, event in enumerate(self.module.model.pulse_sequence.events):
for row_idx, parameter in enumerate(self.module.model.pulse_parameter_options.keys()):
logger.debug("Adding button for event %s and parameter %s with state %s", event, parameter, self.module.model.pulse_sequence.events[event].parameters[parameter].state)
logger.debug("Parameter object id: %s", id(self.module.model.pulse_sequence.events[event].parameters[parameter]))
button = QPushButton()
icon = QIcon(self.module.model.events[event][parameter].get_pixmap())
icon = QIcon(self.module.model.pulse_sequence.events[event].parameters[parameter].get_pixmap())
logger.debug("Icon size: %s", icon.availableSizes())
button.setIcon(icon)
button.setIconSize(icon.availableSizes()[0])
button.setFixedSize(icon.availableSizes()[0])
self.pulse_table.setCellWidget(i, j, button)
self.pulse_table.setRowHeight(i, icon.availableSizes()[0].height())
self.pulse_table.setColumnWidth(j, icon.availableSizes()[0].width())
self.pulse_table.setCellWidget(row_idx, column_idx, button)
self.pulse_table.setRowHeight(row_idx, icon.availableSizes()[0].height())
self.pulse_table.setColumnWidth(column_idx, icon.availableSizes()[0].width())
# Connect the button to the on_button_clicked slot
func = functools.partial(self.on_button_clicked, event=event, parameter=parameter)
@ -135,7 +137,7 @@ class PulseProgrammerView(ModuleView):
if result:
selection = dialog.return_func()
logger.debug("Setting parameter %s of event %s to %s", parameter, event, selection)
self.module.model.events[event][parameter].set_options(selection)
self.module.model.pulse_sequence.events[event].parameters[parameter].set_options(selection)
self.set_parameter_icons()
class OptionsDialog(QDialog):
@ -148,7 +150,7 @@ class OptionsDialog(QDialog):
self.label = QLabel("Change options for the pulse parameter: %s" % parameter)
self.layout.addWidget(self.label)
parameter = parent.module.model.events[event][parameter]
parameter = parent.module.model.pulse_sequence.events[event].parameters[parameter]
options = parameter.get_options()