mirror of
https://github.com/nqrduck/nqrduck-pulseprogrammer.git
synced 2024-09-19 10:50:35 +00:00
Kumi
35590c0355
Added duration field to event creation dialog Switched to DuckWidgets for event creation form Fixed check for events with identical names Linting
69 lines
2.4 KiB
Python
69 lines
2.4 KiB
Python
import logging
|
|
from decimal import Decimal
|
|
from collections import OrderedDict
|
|
from PyQt6.QtCore import pyqtSignal, pyqtSlot
|
|
from nqrduck.module.module_model import ModuleModel
|
|
from nqrduck_spectrometer.pulsesequence import PulseSequence
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class PulseProgrammerModel(ModuleModel):
|
|
pulse_parameter_options_changed = pyqtSignal()
|
|
events_changed = pyqtSignal()
|
|
pulse_sequence_changed = pyqtSignal()
|
|
|
|
def __init__(self, module):
|
|
super().__init__(module)
|
|
self.pulse_parameter_options = OrderedDict()
|
|
self.pulse_sequence = PulseSequence("Untitled pulse sequence")
|
|
|
|
def add_event(self, event_name: str, duration: Decimal = 20):
|
|
"""Add a new event to the current pulse sequence.
|
|
|
|
Args:
|
|
event_name (str): A human-readable name for the event
|
|
duration (Decimal): The duration of the event in µs. Defaults to 20.
|
|
"""
|
|
self.pulse_sequence.events.append(
|
|
PulseSequence.Event(event_name, "%.16gu" % duration)
|
|
)
|
|
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
|
|
for name, pulse_parameter_class in self.pulse_parameter_options.items():
|
|
logger.debug("Adding pulse parameter %s to event %s", name, event_name)
|
|
self.pulse_sequence.events[-1].parameters[name] = pulse_parameter_class(
|
|
name
|
|
)
|
|
logger.debug(
|
|
"Created pulse parameter %s with object id %s",
|
|
name,
|
|
id(self.pulse_sequence.events[-1].parameters[name]),
|
|
)
|
|
|
|
logger.debug(self.pulse_sequence.to_json())
|
|
self.events_changed.emit()
|
|
|
|
@property
|
|
def pulse_parameter_options(self):
|
|
return self._pulse_parameter_options
|
|
|
|
@pulse_parameter_options.setter
|
|
def pulse_parameter_options(self, value):
|
|
self._pulse_parameter_options = value
|
|
logger.debug("Pulse parameter options changed - emitting signal")
|
|
self.pulse_parameter_options_changed.emit()
|
|
|
|
@property
|
|
def pulse_sequence(self):
|
|
return self._pulse_sequence
|
|
|
|
@pulse_sequence.setter
|
|
def pulse_sequence(self, value):
|
|
self._pulse_sequence = value
|
|
self.pulse_sequence_changed.emit()
|