InstrumentInterface guidelines¶
Adding new interfaces¶
Adding a new instrument interface involves changing a handful of existing files and creating some necessary new files. This section gives a quick overview on how to add a new (empty) interface.
Changing existing files¶
silq/instrument_interfaces/__init__.py
Add a new line for importing the new interface class:
from .<company>.<model>_interface import <model>Interface
Add a new entry in the instrument_interfaces
dictionary:
``<instrument_class_name>``: <model>Interface,
This connects the new interface to the corresponding Qcodes driver of the instrument
Creating new files¶
The following files need to be created:
# ``silq/instrument_interfaces/<company>/<model>_interface.py``
This is the main file containing most of the interface functionality. This
file should contain a class specific for <model>` called ``<model>Interface
which inherits from InstrumentInterface
and should implement all abstract
methods.
# silq/instrument_interfaces/<company>/__init__.py
This file is used for importing (possibly multiple) interface(s) of a specific company. Add a new line to do so:
from .<model>_interface import <model>Interface
Instrument Interfaces guidelines¶
Triggering¶
The duration of a trigger pulse is specified by the receiving instrument
interface. Therefore, if the interface needs to be or can be triggered by
another instrument, it should have a parameter called trigger_in_duration
.
This value can be set by the user, and is used when requesting additional
trigger pulses.
Acquisition interfaces¶
Should have the following parameters:
- acquisition_channels
Names of acquisition channels [chA, chB, etc.]. Set by the layout.
- sample rate
Acquisition sampling rate (Hz)
- samples
Number of times to acquire the pulse sequence.
- capture_full_trace
Capture from t=0 to end of pulse sequence. False by default, in which case start and stop times correspond to min(t_start) and max(t_stop) of all pulses with the flag acquire=True, respectively. Setting to True is useful for viewing/storing the full traces.
- points_per_trace
Number of points in a trace.
Should furthermore have the the attributes:
- traces
Dictionary of raw unsegemnted traces, of shape {channel_name: channel_traces}
- pulse_traces
Dictionary containing traces segmented per pulse. Shape is: {pulse_name: {channel_name: pulse_channel_traces}}