3.4.1. qupulse.hardware.awgs

qupulse.hardware.awgs.base

This module defines the common interface for arbitrary waveform generators.

qupulse.hardware.awgs.tabor

qupulse.hardware.awgs.tektronix

qupulse.hardware.awgs.zihdawg

qupulse.hardware.awgs.install_requirements(vendor)[source]
class qupulse.hardware.awgs.TaborAWGRepresentation(instr_addr=None, paranoia_level=1, external_trigger=False, reset=False, mirror_addresses=())[source]

Bases: object

Parameters
  • instr_addr – Instrument address that is forwarded to teawg

  • paranoia_level – Paranoia level that is forwarded to teawg

  • external_trigger – Not supported yet

  • reset

  • mirror_addresses

__init__(instr_addr=None, paranoia_level=1, external_trigger=False, reset=False, mirror_addresses=())[source]
Parameters
  • instr_addr – Instrument address that is forwarded to teawg

  • paranoia_level – Paranoia level that is forwarded to teawg

  • external_trigger – Not supported yet

  • reset

  • mirror_addresses

abort()[source]
Return type

None

property all_devices
Return type

Sequence[TEWXAwg]

amplitude(channel)[source]
Return type

float

property channel_pair_AB
Return type

TaborChannelPair

property channel_pair_CD
Return type

TaborChannelPair

property dev_properties
Return type

dict

download_adv_seq_table(seq_table, pref=':ASEQ:DATA', paranoia_level=None)[source]
download_segment_lengths(seg_len_list, pref=':SEGM:DATA', paranoia_level=None)[source]
download_sequencer_table(seq_table, pref=':SEQ:DATA', paranoia_level=None)[source]
enable()[source]
Return type

None

get_readable_device(simulator=True)[source]
Return type

TEWXAwg

get_status_table()[source]

Send a lot of queries to the AWG about its settings. A good way to visualize is using pandas.DataFrame

Return type

Dict[str, Union[str, float, int]]

Returns

An ordered dictionary with the results

initialize()[source]
Return type

None

is_coupled()[source]
Return type

bool

property is_open
Return type

bool

property main_instrument
Return type

TEWXAwg

property mirrored_instruments
Return type

Sequence[TEWXAwg]

offset(channel)[source]
Return type

float

property paranoia_level
Return type

int

reset()[source]
Return type

None

sample_rate(channel)[source]
Return type

int

select_channel(channel)[source]
Return type

None

select_marker(marker)[source]

Select marker 1 or 2 of the currently active channel pair.

Return type

None

send_binary_data(pref, bin_dat, paranoia_level=None)[source]
send_cmd(cmd_str, paranoia_level=None)[source]
send_query(query_str, query_mirrors=False)[source]
Return type

Any

trigger()[source]
Return type

None

class qupulse.hardware.awgs.TaborChannelPair(tabor_device, channels, identifier)[source]

Bases: qupulse.hardware.awgs.base.AWG

CONFIG_MODE_PARANOIA_LEVEL = None
arm(name)[source]

Implements arm().

Return type

None

change_armed_program(name)[source]
Return type

None

cleanup()[source]

Discard all segments after the last which is still referenced

Return type

None

clear()[source]

Delete all segments and clear memory

Return type

None

property device
Return type

TaborAWGRepresentation

free_program(name)[source]
Return type

TaborProgramMemory

property internal_paranoia_level
Return type

Optional[int]

property logger
property num_channels

Implements num_channels.

Return type

int

property num_markers

Implements num_markers.

Return type

int

property programs

The set of program names that can currently be executed on the hardware AWG.

Return type

Set[str]

read_advanced_sequencer_table()[source]
Return type

Tuple[ndarray, ndarray, ndarray]

read_complete_program()[source]
Return type

PlottableProgram

read_sequence_tables()[source]
Return type

List[Tuple[ndarray, ndarray, ndarray]]

read_waveforms()[source]
Return type

List[ndarray]

remove(name)[source]

Remove a program from the AWG.

Also discards all waveforms referenced only by the program identified by name.

Parameters

name (str) – The name of the program to remove.

Return type

None

run_current_program()[source]
Return type

None

property sample_rate

Implements sample_rate.

Return type

float

select()[source]
Return type

None

set_channel_state(channel, active)[source]
Return type

None

set_marker_state(marker, active)[source]

Sets the marker state of this channel pair. According to the manual one cannot turn them off/on separately.

Return type

None

set_program_advanced_sequence_table(name, new_advanced_sequence_table)[source]
set_program_sequence_table(name, new_sequence_table)[source]
set_volatile_parameters(program_name, parameters)[source]

Set the values of parameters which were marked as volatile on program creation. Sets volatile parameters in program memory and device’s (adv.) sequence tables if program is current program.

If set_volatile_parameters needs to run faster, set CONFIG_MODE_PARANOIA_LEVEL to 0 which causes the device to enter the configuration mode with paranoia level 0 (Note: paranoia level 0 does not work for the simulator) and set device._is_coupled.

Parameters
  • program_name (str) – Name of program which should be changed.

  • parameters (Mapping[str, Number]) – Names of volatile parameters and respective values to which they should be set.

Return type

None

property total_capacity
Return type

int

upload(name, program, channels, markers, voltage_transformation, force=False)[source]

Upload a program to the AWG.

The policy is to prefer amending the unknown waveforms to overwriting old ones.

Return type

None

class qupulse.hardware.awgs.TektronixAWG(device, synchronize, identifier='Tektronix', logger=None, default_program_repetition_mode='once', idle_waveform_length=250)[source]

Bases: qupulse.hardware.awgs.base.AWG

Driver for Tektronix AWG object (5000/7000 series).

Special characteristics:
  • Changing the run mode to ‘running’ takes a lot of time (depending on the sequence)

  • To keep the “arm” time low each program is uploaded to the sequence table! This reduces the number of programs drastically but allows very fast switching with arm IF the awg runs.

  • Arm starts the awg if it does not run. The first call to arm after uploading new programs is therefore slow. This guarantees that subsequent calls to arm and run_current_program are always fast.

  • Uploading while the awg runs is VERY slow. The private properties _allow_upload_while_running and _auto_stop_on_upload control the behaviour in this case (stopping the awg or raising an exception). These properties are currently not a stable interface to that functionality hence the privateness.

This driver implements an interface for changing the program repetition mode consisting of:
  • the property default_program_repetition_mode

  • set_program_repetition_mode(program_name, mode)

  • get_program_repetition_mode(program_name)

Synchronization: The driver relies on the fact that internal variables correspond to the device state: _sequence_entries and _waveforms We do not aim to detect user manipulation but want to make sure invalidate the internal state on upload errors. To do this the attribute _synchronized is set to False. Methods that rely on the synchronization state to correctly modify the awg check that attribute.

All private functions assume that the error queue is empty when called.

TODO: Move logger and repetition mode functionality to AWG interface

Parameters
  • device (TekAwg) – Instance of the underlying driver from tek_awg package

  • synchronize (str) – Either ‘read’ or ‘clear’.

  • identifier – Some identifier

  • logger – Logging will happen here (defaults to ‘qupulse.tektronix’ otherwise)

  • default_program_repetition_mode – ‘once’ or ‘infinite’

  • idle_waveform_length – length of the idle_waveform in samples

__init__(device, synchronize, identifier='Tektronix', logger=None, default_program_repetition_mode='once', idle_waveform_length=250)[source]
Parameters
  • device (TekAwg) – Instance of the underlying driver from tek_awg package

  • synchronize (str) – Either ‘read’ or ‘clear’.

  • identifier – Some identifier

  • logger – Logging will happen here (defaults to ‘qupulse.tektronix’ otherwise)

  • default_program_repetition_mode – ‘once’ or ‘infinite’

  • idle_waveform_length – length of the idle_waveform in samples

arm(name)[source]

Arming starts the awg

property armed_program
Return type

Optional[str]

assert_synchronized()[source]
cleanup()[source]

Delete all waveforms not used anymore and rewrite sequence entries if they are fragmented

clear()[source]

Clear all waveforms, the sequence table and program registry and initialize the idle program.

property default_program_repetition_mode

repetition mode for newly uploaded programs. Valid values are ‘once’ and ‘infinite’. You can use set_program_repetition_mode to change the repetition mode of an existing program

Return type

str

property device
Return type

TekAwg

get_program_information()[source]
Return type

Dict[str, dict]

get_program_repetition_mode(program_name)[source]

This function uses cached data and does not talk to the awg

Return type

str

static idle_pulse_name(idle_length)[source]
Return type

str

initialize_idle_program()[source]

Make sure we can arm the idle program which plays the idle waveform(default 0V) on all channels.

make_idle_waveform(length)[source]
Return type

Waveform

property num_channels

Implements num_channels.

Return type

int

property num_markers

Implements num_markers.

Return type

int

property programs

Implements programs.

Return type

Set[str]

read_waveforms()[source]

Read all waveform data from the device (including binary data).

remove(name)[source]

Implements remove().

run_current_program(channel_states=None)[source]

Runs the currentlz armed program

Parameters

channel_states (Optional[Tuple[bool, bool, bool, bool]]) – If given the channel states are set to these values

Returns:

property sample_rate

Implements sample_rate.

Return type

float

set_program_repetition_mode(program_name, mode)[source]
set_volatile_parameters(program_name, parameters)[source]

Implements set_volatile_parameters().

synchronize()[source]

Read waveforms from device and re-upload all programs

property synchronized
Return type

bool

upload(*args, **kwargs)[source]

Implements upload().

warn_if_errors_are_present()[source]

Emit a warning with present errors.