Source code for herosdevices.interfaces.atomiq
"""Translation/implementation interfaces for HEROized atomiq devices."""
from typing import Any
from heros.event import event
from . import Interface
[docs]
class AtomiqInterface(Interface):
"""
This interface defines the necessary methods for a HERO to seamlessly being converted into an atomiq component.
The methods that need to be implemented are listed in the class-level list `_atomiq_methods`. If a subclass does
not implement one of these methods a NotImplementedError is raised.
Important: The methods given here are just the minimal set. Any other method of the atomiq component can be
overloaded as well. In particular, if your hardware supports ramping or arbitrary functions,
implement the `ramp()` and/or `arb()` methods in your subclass.
"""
[docs]
class Switch(AtomiqInterface):
"""HERO implementation of :external+atomiq:py:class:`atomiq.components.primitives.Switchable`."""
_hero_implements = ["atomiq.components.primitives.Switchable"]
_hero_methods = ["on", "off", "is_on"]
[docs]
class Measurable(AtomiqInterface):
"""HERO implementation of :external+atomiq:py:class:`atomiq.components.primitives.Measurable`."""
_hero_implements = ["atomiq.components.primitives.Measurable"]
_hero_methods = ["measure"]
[docs]
class RFSource(AtomiqInterface):
"""HERO implementation of :external+atomiq:py:class:`atomiq.components.electronics.rfsource.RFSource`."""
_hero_implements = ["atomiq.components.electronics.rfsource.RFSource"]
_hero_methods = ["_set_amplitude", "_set_frequency", "_set_phase"]
frequency: float = 1e6
amplitude: float = 0.1
phase: float = 0.0
freq_max: float = 100e6
freq_min: float = 100e3
amp_max: float = 1.0
amp_min: float = 0.0
default_ramp_steps: int = 30
blind: bool = False
@event
def _observable_data(self) -> list[tuple[str, Any, str]]:
return [
("frequency", self.frequency, "Hz"),
("amplitude", self.amplitude, "total"),
("phase", self.phase, "rad"),
]
[docs]
class VoltageSource(AtomiqInterface):
"""HERO implementation of :external+atomiq:py:class:`atomiq.components.electronics.voltagesource.VoltageSource`."""
_hero_implements = ["atomiq.components.electronics.voltagesource.VoltageSource"]
_hero_methods = ["_set_voltage"]
min_voltage: float = float("-inf")
max_voltage: float = float("inf")
default_ramp_steps: int = 30
blind: bool = False
[docs]
class CurrentSource(AtomiqInterface):
"""HERO implementation of :external+atomiq:py:class:`atomiq.components.electronics.currentsource.CurrentSource`."""
_hero_implements = ["atomiq.components.electronics.currentsource.CurrentSource"]
_hero_methods = ["_set_current"]
min_current: float = float("-inf")
max_current: float = float("inf")
default_ramp_steps: int = 30
blind: bool = False
[docs]
class ADCChannel(AtomiqInterface):
"""HERO implementation of :external+atomiq:py:class:`atomiq.components.electronics.adc.ADCChannel`."""
_hero_implements = ["atomiq.components.electronics.adc.ADCChannel"]
_hero_methods = ["measure"]
[docs]
class Camera(AtomiqInterface):
"""HERO implementation of :external+atomiq:py:class:`atomiq.components.optoelectronics.camera.Camera`."""
_hero_implements = ["atomiq.components.optoelectronics.camera.Camera"]
_hero_methods = ["configure", "arm", "start", "stop"]