Pulsar QRM
The Pulsar QRM driver is separated into three layers:
QCoDeS driver: Instrument driver based on QCoDeS and the instrument’s native interface.
Native interface: Instrument API that provides control over the instrument and is an extension of the the SCPI interface.
SCPI interface: Instrument API based on the SCPI standard which in turn is based on IEEE488.2.
QCoDeS driver
-
class
pulsar_qrm.pulsar_qrm.
pulsar_qrm_qcodes
(name, transport_inst, debug=0)[source] Bases:
pulsar_qrm.pulsar_qrm_ifc.pulsar_qrm_ifc
,qcodes.instrument.base.Instrument
This class connects QCoDeS to the Pulsar QRM native interface. Do not directly instantiate this class, but instead instantiate either the
pulsar_qrm
orpulsar_qrm_dummy
.-
__init__
(name, transport_inst, debug=0)[source] Creates Pulsar QRM QCoDeS class and adds all relevant instrument parameters. These instrument parameters call the associated methods provided by the native interface.
- Parameters
name (str) – Instrument name.
transport_inst (
transport
) – Transport class responsible for the lowest level of communication (e.g. ethernet).debug (int) – Debug level (0 = normal, 1 = no version check, >1 = no version or error checking).
- Raises
Exception – Debug level is 0 and there is a version mismatch.
Note
To get a complete of list of the QCoDeS parameters, run the following code.
from pulsar_qrm.pulsar_qrm import pulsar_qrm_dummy qrm = pulsar_qrm_dummy("qrm") for call in qrm.snapshot()['parameters']: print(getattr(qrm, call).__doc__)
-
-
class
pulsar_qrm.pulsar_qrm.
pulsar_qrm
(name, host, port=5025, debug=0)[source] Bases:
pulsar_qrm.pulsar_qrm.pulsar_qrm_qcodes
Pulsar QRM driver class based on QCoDeS that uses an IP socket to communicate with the instrument.
-
__init__
(name, host, port=5025, debug=0)[source] Creates Pulsar QRM driver object.
- Parameters
name (str) – Instrument name.
host (str) – Instrument IP address.
port (int) – Instrument port.
debug (int) – Debug level (0 = normal, 1 = no version check, >1 = no version or error checking).
- Raises
Exception – Debug level is 0 and there is a version mismatch.
-
-
class
pulsar_qrm.pulsar_qrm.
pulsar_qrm_dummy
(name, debug=1, is_rf_type=False)[source] Bases:
pulsar_qrm.pulsar_qrm.pulsar_qrm_qcodes
Pulsar QRM driver class based on QCoDeS that uses the
pulsar_dummy_transport
layer to substitute an actual Pulsar QRM to allow software stack development without hardware.-
__init__
(name, debug=1, is_rf_type=False)[source] Creates Pulsar QRM driver object. The debug level must be set to >= 1.
- Parameters
name (str) – Instrument name.
debug (int) – Debug level (0 = normal, 1 = no version check, >1 = no version or error checking).
is_rf_type (bool) – Dummy module type (False = RF, True = baseband)
-
QCoDeS parameters
QCoDeS parameters generated by pulsar_qrm_qcodes
.
Note
Only sequencer 0’s parameters are listed, but all other sequencers have the same parameters.
pulsar_qrm.reference_source
Sets/gets reference source (‘internal’ = internal 10 MHz, ‘external’ = external 10 MHz).
- Properties
value: Enum: {‘external’, ‘internal’}
pulsar_qrm.in0_gain
Sets/gets input 0 gain in a range of -6dB to 26dB with a resolution of 1dB per step.
- Properties
unit: dB
value: Numbers -6<=v<=26
pulsar_qrm.in1_gain
Sets/gets input 1 gain in a range of -6dB to 26dB with a resolution of 1dB per step.
- Properties
unit: dB
value: Numbers -6<=v<=26
pulsar_qrm.out0_offset
Sets/gets output 0 offset.
- Properties
unit: V
value: Numbers -1.0<=v<=1.0
pulsar_qrm.out1_offset
Sets/gets output 1 offset.
- Properties
unit: V
value: Numbers -1.0<=v<=1.0
pulsar_qrm.scope_acq_trigger_mode_path0
Sets/gets scope acquisition trigger mode for input path 0 (‘sequencer’ = triggered by sequencer, ‘level’ = triggered by input level).
- Properties
value: Enum: {‘sequencer’, ‘level’}
pulsar_qrm.scope_acq_trigger_mode_path1
Sets/gets scope acquisition trigger mode for input path 1 (‘sequencer’ = triggered by sequencer, ‘level’ = triggered by input level).
- Properties
value: Enum: {‘sequencer’, ‘level’}
pulsar_qrm.scope_acq_trigger_level_path0
Sets/gets scope acquisition trigger level when using input level trigger mode for input path 0.
- Properties
value: Numbers -1.0<=v<=1.0
pulsar_qrm.scope_acq_trigger_level_path1
Sets/gets scope acquisition trigger level when using input level trigger mode for input path 1.
- Properties
value: Numbers -1.0<=v<=1.0
pulsar_qrm.scope_acq_sequencer_select
Sets/gets sequencer select that specifies which sequencer triggers the scope acquisition when using sequencer trigger mode.
- Properties
value: Numbers 0<=v<=6
pulsar_qrm.scope_acq_avg_mode_en_path0
Sets/gets scope acquisition averaging mode enable for input path 0.
- Properties
value: Boolean
pulsar_qrm.scope_acq_avg_mode_en_path1
Sets/gets scope acquisition averaging mode enable for input path 0.
- Properties
value: Boolean
pulsar_qrm.sequencer0_channel_map_path0_out0_en
Sets/gets sequencer 0 channel map enable of path 0 to output 0.
- Properties
value: Boolean
pulsar_qrm.sequencer0_channel_map_path1_out1_en
Sets/gets sequencer 0 channel map enable of path 1 to output 1.
- Properties
value: Boolean
pulsar_qrm.sequencer0_sync_en
Sets/gets sequencer 0 synchronization enable which enables party-line synchronization.
- Properties
value: Boolean
pulsar_qrm.sequencer0_nco_freq
Sets/gets sequencer 0 NCO frequency in Hz with a resolution of 0.25 Hz.
- Properties
unit: Hz
value: Numbers -300000000.0<=v<=300000000.0
pulsar_qrm.sequencer0_nco_phase_offs
Sets/gets sequencer 0 NCO phase offset in degrees with a resolution of 3.6e-7 degrees.
- Properties
unit: Degrees
value: Numbers 0<=v<=360
pulsar_qrm.sequencer0_marker_ovr_en
Sets/gets sequencer 0 marker override enable.
- Properties
value: Boolean
pulsar_qrm.sequencer0_marker_ovr_value
Sets/gets sequencer 0 marker override value. Bit index corresponds to marker channel index.
- Properties
value: Numbers 0<=v<=15
pulsar_qrm.sequencer0_waveforms_and_program
Sets sequencer 0 AWG waveforms, acquistion weights, acquisitions and ASM program. Valid input is a string representing the JSON filename.
- Properties
value: Strings
pulsar_qrm.sequencer0_cont_mode_en_awg_path0
Sets/gets sequencer 0 continous waveform mode enable for AWG path 0.
- Properties
value: Boolean
pulsar_qrm.sequencer0_cont_mode_en_awg_path1
Sets/gets sequencer 0 continous waveform mode enable for AWG path 1.
- Properties
value: Boolean
pulsar_qrm.sequencer0_cont_mode_waveform_idx_awg_path0
Sets/gets sequencer 0 continous waveform mode waveform index or AWG path 0.
- Properties
value: Numbers 0<=v<=1023
pulsar_qrm.sequencer0_cont_mode_waveform_idx_awg_path1
Sets/gets sequencer 0 continous waveform mode waveform index or AWG path 1.
- Properties
value: Numbers 0<=v<=1023
pulsar_qrm.sequencer0_upsample_rate_awg_path0
Sets/gets sequencer 0 upsample rate for AWG path 0.
- Properties
value: Numbers 0<=v<=65535
pulsar_qrm.sequencer0_upsample_rate_awg_path1
Sets/gets sequencer 0 upsample rate for AWG path 1.
- Properties
value: Numbers 0<=v<=65535
pulsar_qrm.sequencer0_gain_awg_path0
Sets/gets sequencer 0 gain for AWG path 0.
- Properties
value: Numbers -1.0<=v<=1.0
pulsar_qrm.sequencer0_gain_awg_path1
Sets/gets sequencer 0 gain for AWG path 1.
- Properties
value: Numbers -1.0<=v<=1.0
pulsar_qrm.sequencer0_offset_awg_path0
Sets/gets sequencer 0 offset for AWG path 0.
- Properties
value: Numbers -1.0<=v<=1.0
pulsar_qrm.sequencer0_offset_awg_path1
Sets/gets sequencer 0 offset for AWG path 1.
- Properties
value: Numbers -1.0<=v<=1.0
pulsar_qrm.sequencer0_mixer_corr_phase_offset_degree
Sets/gets sequencer 0 mixer phase imbalance correction for AWG; applied to AWG path 1 relative to AWG path 0 and measured in degrees
- Properties
value: Numbers -45.0<=v<=45.0
pulsar_qrm.sequencer0_mixer_corr_gain_ratio
Sets/gets sequencer 0 mixer gain imbalance correction for AWG; equal to AWG path 1 amplitude divided by AWG path 0 amplitude.
- Properties
value: Numbers 0.5<=v<=2.0
pulsar_qrm.sequencer0_mod_en_awg
Sets/gets sequencer 0 modulation enable for AWG.
- Properties
value: Boolean
pulsar_qrm.sequencer0_demod_en_acq
Sets/gets sequencer 0 demodulation enable for acquisition.
- Properties
value: Boolean
pulsar_qrm.sequencer0_integration_length_acq
Sets/gets sequencer 0 integration length in number of samples for non-weighed acquisitions on paths 0 and 1. Must be a multiple of 4
- Properties
value: Ints 4<=v<=16777212, Multiples of 4
pulsar_qrm.sequencer0_phase_rotation_acq
Sets/gets sequencer 0 integration result phase rotation in degrees.
- Properties
unit: Degrees
value: Numbers 0<=v<=360
pulsar_qrm.sequencer0_discretization_threshold_acq
Sets/gets sequencer 0 discretization threshold for discretizing the phase rotation result. Discretization is done by comparing the threshold to the rotated integration result of path 0. This comparison is applied before normalization (i.e. division) of the rotated value with the integration length and therefore the threshold needs to be compensated (i.e. multiplied) with this length for the discretization to function properly.
- Properties
value: Numbers -16777212.0<=v<=16777212.0
Native interface
-
class
pulsar_qrm.pulsar_qrm_ifc.
pulsar_qrm_ifc
(transport_inst, debug=0)[source] Bases:
pulsar_qrm.pulsar_qrm_scpi_ifc.pulsar_qrm_scpi_ifc
Class that provides the native API for the Pulsar QrM. It provides methods to control all functions and features provided by the Pulsar QRM, like sequencer, waveform and acquistion handling.
-
__init__
(transport_inst, debug=0)[source] Creates Pulsar QRM native interface object.
- Parameters
transport_inst (
transport
) – Transport class responsible for the lowest level of communication (e.g. ethernet).debug (int) – Debug level (0 = normal, 1 = no version check, >1 = no version or error checking).
- Returns
Pulsar QRM native interface object.
- Return type
- Raises
Exception – Debug level is 0 and there is a version mismatch.
-
get_idn
()[source] Get device identity and build information.
- Returns
Dictionary containing manufacturer, model, serial number and build information. The build information is subdivided into FPGA firmware, kernel module software, application software and driver software build information. Each of those consist of the version, build date, build Git hash and Git build dirty indication.
- Return type
dict
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
-
get_system_status
()[source] Get general system state.
- Returns
Dictionary containing general status and corresponding flags:
- Status
OKAY: System is okay.
CRITICAL: An error indicated by the flags occured, but has been resolved.
ERROR: An error indicated by the flags is occuring.
- Flags
CARRIER_PLL_UNLOCK: Carrier board PLL is unlocked.
FPGA_PLL_UNLOCK: FPGA PLL is unlocked.
FPGA_TEMP_OR: FPGA temperature is out-of-range.
CARRIER_TEMP_OR: Carrier board temperature is out-of-range.
AFE_TEMP_OR: Analog frontend board temperature is out-of-range.
- Return type
dict
- Raises
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
-
arm_sequencer
(sequencer=None)[source] Prepare the indexed sequencer to start by putting it in the armed state. If no sequencer index is given, all sequencers are armed. Any sequencer that was already running is stopped and rearmed. If an invalid sequencer index is given, an error is set in system error.
- Parameters
sequencer (int) – Sequencer index.
- Raises
Exception – Invalid input parameter type.
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
-
start_sequencer
(sequencer=None)[source] Start the indexed sequencer, thereby putting it in the running state. If an invalid sequencer index is given or the indexed sequencer was not yet armed, an error is set in system error. If no sequencer index is given, all armed sequencers are started and any sequencer not in the armed state is ignored. However, if no sequencer index is given and no sequencers are armed, and error is set in system error.
- Parameters
sequencer (int) – Sequencer index.
- Raises
Exception – Invalid input parameter type.
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
-
stop_sequencer
(sequencer=None)[source] Stop the indexed sequencer, thereby putting it in the stopped state. If an invalid sequencer index is given, an error is set in system error. If no sequencer index is given, all sequencers are stopped.
- Parameters
sequencer (int) – Sequencer index.
- Raises
Exception – Invalid input parameter type.
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
-
get_sequencer_state
(sequencer, timeout=0, timeout_poll_res=0.1)[source] Get the sequencer state. If an invalid sequencer index is given, an error is set in system error. If the timeout is set to zero, the function returns the state immediately. If a positive non-zero timeout is set, the function blocks until the sequencer completes. If the sequencer hasn’t stopped before the timeout expires, a timeout exception is thrown.
- Parameters
sequencer (int) – Sequencer index.
timeout (int) – Timeout in minutes.
timeout_poll_res (float) – Timeout polling resolution in seconds.
- Returns
Concatinated list of strings separated by the semicolon character. Status is indicated by one status string and an optional number of flags respectively ordered as:
- Status
IDLE: Sequencer waiting to be armed and started.
ARMED: Sequencer is armed and ready to start.
RUNNING: Sequencer is running.
Q1 STOPPED: Classical part of the sequencer has stopped; waiting for real-time part to stop.
STOPPED: Sequencer has completely stopped.
- Flags
DISARMED: Sequencer was disarmed.
FORCED STOP: Sequencer was stopped while still running.
SEQUENCE PROCESSOR Q1 ILLEGAL INSTRUCTION: Classical sequencer part executed an unknown instruction.
SEQUENCE PROCESSOR RT EXEC ILLEGAL INSTRUCTION: Real-time sequencer part executed an unknown instruction.
AWG WAVE PLAYBACK INDEX INVALID PATH 0: AWG path 0 tried to play an unknown waveform.
AWG WAVE PLAYBACK INDEX INVALID PATH 1: AWG path 1 tried to play an unknown waveform.
ACQ WEIGHT PLAYBACK INDEX INVALID PATH 0: Acquisition path 0 tried to play an unknown weight.
ACQ WEIGHT PLAYBACK INDEX INVALID PATH 1: Acquisition path 1 tried to play an unknown weight.
ACQ SCOPE DONE PATH 0: Scope acquisition for path 0 has finished.
ACQ SCOPE OUT-OF-RANGE PATH 0: Scope acquisition data for path 0 was out-of-range.
ACQ SCOPE OVERWRITTEN PATH 0: Scope acquisition data for path 0 was overwritten.
ACQ SCOPE DONE PATH 1: Scope acquisition for path 1 has finished.
ACQ SCOPE OUT-OF-RANGE PATH 1: Scope acquisition data for path 1 was out-of-range.
ACQ SCOPE OVERWRITTEN PATH 1: Scope acquisition data for path 1 was overwritten.
ACQ BINNING DONE: Acquisition binning completed.
ACQ BINNING FIFO ERROR: Acqusition binning encountered internal FIFO error.
ACQ BINNING COMM ERROR: Acqusition binning encountered internal communication error.
ACQ BINNING OUT-OF-RANGE: Acquisition binning data out-of-range.
ACQ INDEX INVALID: Acquisition tried to process an invalid acquisition.
ACQ BIN INDEX INVALID: Acquisition tried to process an invalid bin.
CLOCK INSTABILITY: Clock source instability occurred.
- Return type
list
- Raises
Exception – Invalid input parameter type.
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
TypeError – Timeout is not an integer.
TimeoutError – Timeout
-
get_waveforms
(sequencer)[source] Get all waveforms and weigths in the AWG waveform list of indexed sequencer. The returned dictionary is structured as follows:
name: waveform name.
data: waveform samples in a range of 1.0 to -1.0.
index: waveform index used by the sequencer Q1ASM program to refer to the waveform.
- Parameters
sequencer (int) – Sequencer index.
- Returns
Dictionary with waveforms.
- Return type
dict
- Raises
Exception – Invalid input parameter type.
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
-
get_weights
(sequencer)[source] Get all weigths in the acquisition weight lists of indexed sequencer. The returned dictionary is structured as follows:
-name : weight name.
data: weight samples in a range of 1.0 to -1.0.
index: weight index used by the sequencer Q1ASM program to refer to the weight.
- Parameters
sequencer (int) – Sequencer index.
- Returns
Dictionary with weights.
- Return type
dict
- Raises
Exception – Invalid input parameter type.
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
-
get_acquisition_state
(sequencer, timeout=0, timeout_poll_res=0.1)[source] Return acquisition binning completion state of the indexed sequencer. If an invalid sequencer is given, an error is set in system error. If the timeout is set to zero, the function returns the state immediately. If a positive non-zero timeout is set, the function blocks until the acquisition binning completes. If the acquisition hasn’t completed before the timeout expires, a timeout exception is thrown.
- Parameters
sequencer (int) – Sequencer index.
timeout (int) – Timeout in minutes.
timeout_poll_res (float) – Timeout polling resolution in seconds.
- Returns
Indicates the acquisition binning completion state (False = uncompleted, True = completed).
- Return type
bool
- Raises
Exception – Invalid input parameter type.
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
TypeError – Timeout is not an integer.
TimeoutError – Timeout
-
store_scope_acquisition
(sequencer, name)[source] After an acquisition has completed, store the scope acquisition results in the acquisition specified by name of the indexed sequencers. If an invalid sequencer index is given an error is set in system error. To get access to the acquisition results, the sequencer will be stopped when calling this function.
- Parameters
sequencer (int) – Sequencer index.
name (str) – Acquisition name.
- Raises
Exception – Invalid input parameter type.
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
-
get_acquisitions
(sequencer)[source] Get all acquisitions in acquisition lists of indexed sequencer. The acquisition scope and bin data is normalized to a range of -1.0 to 1.0 taking both the bit widths of the processing path and average count into considaration. For the binned integration results, the integration length is not handled during normalization and therefore these values have to be divided by their respective integration lenghts. The returned dictionary is structured as follows:
name: acquisition name
index: acquisition index used by the sequencer Q1ASM program to refer to the acquisition.
acquisition: acquisition dictionary
scope: Scope data
path0: input path 0
data: acquisition samples in a range of 1.0 to -1.0.
out-of-range: out-of-range indication for the entire acquisition (False = in-range, True = out-of-range).
avg_cnt: number of averages.
path1: input path 1
data: acquisition samples in a range of 1.0 to -1.0.
out-of-range: out-of-range indication for the entire acquisition (False = in-range, True = out-of-range).
avg_cnt: number of averages.
bins: bin data
integration: integration data
path_0: input path 0 integration result bin list
path_1: input path 1 integration result bin list
threshold: threshold result bin list
valid: list of valid indications per bin
avg_cnt: list of number of averages per bin
- Parameters
sequencer (int) – Sequencer index.
- Returns
Dictionary with acquisitions.
- Return type
dict
- Raises
Exception – Invalid input parameter type.
Exception – An error is reported in system error and debug <= 1. All errors are read from system error and listed in the exception.
-
SCPI interface
-
pulsar_qrm.pulsar_qrm_scpi_ifc.
scpi_error_check
(func)[source] Decorator that catches and checks for errors on an SCPI call.
- Parameters
func – Class method that performs an SCPI call
- Raises
Exception – An error was found in system error or an exception was passed as input argument.
-
class
pulsar_qrm.pulsar_qrm_scpi_ifc.
pulsar_qrm_scpi_ifc
(transport_inst, debug=0)[source] Bases:
ieee488_2.ieee488_2.ieee488_2
This interface provides an API for the mandatory and required SCPI calls and adds Pulsar related functionality (see SCPI).
-
__init__
(transport_inst, debug=0)[source] Creates SCPI interface object.
- Parameters
transport_inst (
transport
) – Transport class responsible for the lowest level of communication (e.g. ethernet).debug (int) – Debug level (0 = normal, 1 = no version check, >1 = no version or error checking).
- Returns
SCPI interface object.
- Return type
- Raises
Exception – Debug level is 0 and there is a version mismatch.
-
get_system_error
()[source] Get system error from queue (see SCPI).
- Parameters
None –
- Returns
System error description string.
- Return type
str
-