Changed implementation of pulse options.

This commit is contained in:
jupfi 2023-07-11 17:50:42 +02:00
parent a671c339de
commit b4129f98e2
3 changed files with 57 additions and 32 deletions

View file

@ -34,11 +34,16 @@ class BaseSpectrometerModel(ModuleModel):
class PulseParameter: class PulseParameter:
def __init__(self, name): def __init__(self, name):
self.name = name self.name = name
self.options = OrderedDict()
def get_pixmap(self): def get_pixmap(self):
raise NotImplementedError raise NotImplementedError
def add_option(self, name, option):
self.options[name] = option
def get_options(self): def get_options(self):
raise NotImplementedError return self.options

View file

@ -1,5 +1,7 @@
from collections import OrderedDict from collections import OrderedDict
class PulseSequence: class PulseSequence:
"""A pulse sequence is a collection of events that are executed in a certain order."""
def __init__(self, name) -> None: def __init__(self, name) -> None:
self.name = name self.name = name
self.events = OrderedDict() self.events = OrderedDict()
@ -33,7 +35,7 @@ class PulseSequence:
for parameter in self.events[event].parameters.keys(): for parameter in self.events[event].parameters.keys():
event_data["parameters"].append({ event_data["parameters"].append({
"name": parameter, "name": parameter,
"value": self.events[event].parameters[parameter].state "value": self.events[event].parameters[parameter].get_options()
}) })
data["events"].append(event_data) data["events"].append(event_data)
return data return data

View file

@ -2,21 +2,53 @@ from PyQt6.QtGui import QPixmap
from pathlib import Path from pathlib import Path
from .base_spectrometer_model import BaseSpectrometerModel from .base_spectrometer_model import BaseSpectrometerModel
class Option():
"""Defines options for the pulse parameters which can then be set accordingly.
"""
def set_value(self):
raise NotImplementedError
class BooleanOption(Option):
"""Defines a boolean option for a pulse parameter.
"""
def __init__(self, state) -> None:
super().__init__()
self.state = state
def set_value(self, state):
self.state = state
class NumericOption(Option):
"""Defines a numeric option for a pulse parameter.
"""
def __init__(self, value) -> None:
super().__init__()
self.value = value
def set_value(self, value):
self.value = float(value)
class WidgetSelectionOption(Option):
"""Defines a widget selection option for a pulse parameter.
"""
def __init__(self, widgets) -> None:
super().__init__()
class TXPulse(BaseSpectrometerModel.PulseParameter): class TXPulse(BaseSpectrometerModel.PulseParameter):
def __init__(self, name) -> None: def __init__(self, name) -> None:
super().__init__(name) super().__init__(name)
self.tx_state = False self.add_option("TX Amplitude", NumericOption(0))
self.tx_phase = 0 self.add_option("TX Phase", NumericOption(0))
# Create a button def get_pixmap(self):
self.button = QPushButton(self) self_path = Path(__file__).parent
self.button.setGeometry(0, 0, 200, 200) if self.options["TX Amplitude"].value > 0:
image_path = self_path / "resources/pulseparameter/wip_txpulse.png"
# Set a custom image for the button else:
image_path = "resources/wip_no_pulse.png" image_path = self_path / "resources/pulseparameter/wip_no_txpulse.png"
pixmap = QPixmap(image_path) pixmap = QPixmap(str(image_path))
self.button.setIcon(pixmap) return pixmap
self.button.setIconSize(pixmap.size())
class RectPulse(): class RectPulse():
def __init__(self, name) -> None: def __init__(self, name) -> None:
@ -30,39 +62,25 @@ class TXPulse(BaseSpectrometerModel.PulseParameter):
def __init__(self, name) -> None: def __init__(self, name) -> None:
super().__init__(name) super().__init__(name)
class RXReadout(BaseSpectrometerModel.PulseParameter): class RXReadout(BaseSpectrometerModel.PulseParameter):
def __init__(self, name) -> None: def __init__(self, name) -> None:
super().__init__(name) super().__init__(name)
self.rx_freq = 0
self.rx_phase = 0
class TXPhase(BaseSpectrometerModel.PulseParameter):
def __init__(self, name) -> None:
super().__init__(name)
self.phase = 0
class RXPhase(BaseSpectrometerModel.PulseParameter):
def __init__(self, name) -> None:
super().__init__(name)
self.phase = 0
class Gate(BaseSpectrometerModel.PulseParameter): class Gate(BaseSpectrometerModel.PulseParameter):
def __init__(self, name) -> None: def __init__(self, name) -> None:
super().__init__(name) super().__init__(name)
self.state = False self.add_option("Gate State", BooleanOption(False))
def get_pixmap(self): def get_pixmap(self):
self_path = Path(__file__).parent self_path = Path(__file__).parent
if self.state is False: if self.options["Gate State"].state == False:
image_path = self_path / "resources/pulseparameter/wip_no_txpulse.png" image_path = self_path / "resources/pulseparameter/wip_no_txpulse.png"
elif self.state is True: else:
image_path = self_path / "resources/pulseparameter/wip_txpulse.png" image_path = self_path / "resources/pulseparameter/wip_txpulse.png"
pixmap = QPixmap(str(image_path)) pixmap = QPixmap(str(image_path))
return pixmap return pixmap
def get_options(self):
return (bool, self.state)
def set_options(self, options): def set_options(self, options):
self.state = options self.state = options