Qudi
|
A hardware module for the Tektronix AWG7000 series for generating waveforms and sequences thereof. More...
Public Member Functions | |
def | __init__ (self, config, kwargs) |
def | on_activate (self) |
Initialisation performed during activation of the module. | |
def | on_deactivate (self) |
Deinitialisation performed during deactivation of the module. | |
def | get_constraints (self) |
Retrieve the hardware constrains from the Pulsing device. More... | |
def | pulser_on (self) |
Switches the pulsing device on. More... | |
def | pulser_off (self) |
Switches the pulsing device off. More... | |
def | load_waveform (self, load_dict) |
Loads a waveform to the specified channel of the pulsing device. More... | |
def | load_sequence (self, sequence_name) |
Loads a sequence to the channels of the device in order to be ready for playback. More... | |
def | get_loaded_assets (self) |
def | clear_all (self) |
Clears all loaded waveforms from the pulse generators RAM/workspace. More... | |
def | get_status (self) |
Retrieves the status of the pulsing hardware. More... | |
def | get_sample_rate (self) |
Get the sample rate of the pulse generator hardware. More... | |
def | set_sample_rate (self, sample_rate) |
Set the sample rate of the pulse generator hardware. More... | |
def | get_analog_level (self, amplitude=None, offset=None) |
Retrieve the analog amplitude and offset of the provided channels. More... | |
def | set_analog_level (self, amplitude=None, offset=None) |
Set amplitude and/or offset value of the provided analog channel(s). More... | |
def | get_digital_level (self, low=None, high=None) |
Retrieve the digital low and high level of the provided/all channels. More... | |
def | set_digital_level (self, low=None, high=None) |
Set low and/or high value of the provided digital channel. More... | |
def | get_active_channels (self, ch=None) |
Get the active channels of the pulse generator hardware. More... | |
def | set_active_channels (self, ch=None) |
def | write_waveform (self, name, analog_samples, digital_samples, is_first_chunk, is_last_chunk, total_number_of_samples) |
def | write_sequence (self, name, sequence_parameter_list) |
Write a new sequence on the device memory. More... | |
def | get_waveform_names (self) |
Retrieve the names of all uploaded waveforms on the device. More... | |
def | get_sequence_names (self) |
Retrieve the names of all uploaded sequence on the device. More... | |
def | delete_waveform (self, waveform_name) |
Delete the waveform with name "waveform_name" from the device memory. More... | |
def | delete_sequence (self, sequence_name) |
Delete the sequence with name "sequence_name" from the device memory. More... | |
def | get_interleave (self) |
Check whether Interleave is ON or OFF in AWG. More... | |
def | set_interleave (self, state=False) |
Turns the interleave of an AWG on or off. More... | |
def | write (self, command) |
Sends a command string to the device. More... | |
def | query (self, question) |
Asks the device a 'question' and receive and return an answer from it. More... | |
def | reset (self) |
Reset the device. More... | |
def | has_sequence_mode (self) |
Asks the pulse generator whether sequence mode exists. More... | |
def | set_lowpass_filter (self, a_ch, cutoff_freq) |
Set a lowpass filter to the analog channels of the AWG. More... | |
def | set_jump_timing (self, synchronous=False) |
Sets control of the jump timing in the AWG. More... | |
def | set_mode (self, mode) |
Change the output mode of the AWG5000 series. More... | |
def | get_sequencer_mode (self, output_as_int=False) |
Asks the AWG which sequencer mode it is using. More... | |
def | sequence_set_waveform (self, waveform_name, step, track) |
Set the waveform 'waveform_name' to position 'step' in the sequence 'sequence_name'. More... | |
def | sequence_set_repetitions (self, step, repeat=1) |
def | sequence_set_goto (self, step, goto=-1) |
def | sequence_set_event_jump (self, step, jumpto=0) |
Set the event trigger input of the specified sequence step and the jump_to destination. More... | |
def | sequence_set_wait_trigger (self, step, trigger='OFF') |
Make a certain sequence step wait for a trigger to start playing. More... | |
def | make_sequence_continuous (self) |
def | force_jump_sequence (self, final_step, channel=1) |
def | get_errors (self) |
Get all errors from the device and log them. More... | |
![]() | |
def | __init__ (self, manager, name, config=None, callbacks=None, kwargs) |
Initialise Base class object and set up its state machine. More... | |
def | log (self) |
Returns a logger object. | |
def | is_module_threaded (self) |
Returns whether the module shall be started in a thread. | |
def | on_activate (self) |
Method called when module is activated. More... | |
def | on_deactivate (self) |
Method called when module is deactivated. More... | |
def | getStatusVariables (self) |
Return a dict of variable names and their content representing the module state for saving. More... | |
def | setStatusVariables (self, variableDict) |
Give a module a dict of variable names and their content representing the module state. More... | |
def | getConfiguration (self) |
Return the configration dictionary for this module. More... | |
def | get_connector (self, connector_name) |
Return module connected to the given named connector. More... | |
![]() | |
def | __new__ (cls, name, bases, attrs) |
Collect declared Connectors, ConfigOptions and StatusVars into dictionaries. More... | |
Public Attributes | |
awg | |
ftp_working_dir | |
installed_options | |
fw_ver | |
model | |
![]() | |
module_state | |
connectors | |
A hardware module for the Tektronix AWG7000 series for generating waveforms and sequences thereof.
Example config for copy-paste:
pulser_awg7000: module 'awg.tektronix_awg7k.AWG7k' awg_visa_address 'TCPIP::10.42.0.211::INSTR' awg_ip_address '10.42.0.211' timeout 60
def tektronix_awg7k.AWG7k.clear_all | ( | self | ) |
Clears all loaded waveforms from the pulse generators RAM/workspace.
def tektronix_awg7k.AWG7k.delete_sequence | ( | self, | |
sequence_name | |||
) |
Delete the sequence with name "sequence_name" from the device memory.
str | sequence_name: The name of the sequence to be deleted Optionally a list of sequence names can be passed. |
def tektronix_awg7k.AWG7k.delete_waveform | ( | self, | |
waveform_name | |||
) |
Delete the waveform with name "waveform_name" from the device memory.
str | waveform_name: The name of the waveform to be deleted Optionally a list of waveform names can be passed. |
def tektronix_awg7k.AWG7k.get_active_channels | ( | self, | |
ch = None |
|||
) |
Get the active channels of the pulse generator hardware.
list | ch: optional, if specific analog or digital channels are needed to be asked without obtaining all the channels. |
Example for an possible input (order is not important): ch = ['a_ch2', 'd_ch2', 'a_ch1', 'd_ch5', 'd_ch1'] then the output might look like {'a_ch2': True, 'd_ch2': False, 'a_ch1': False, 'd_ch5': True, 'd_ch1': False}
If no parameter (or None) is passed to this method all channel states will be returned.
def tektronix_awg7k.AWG7k.get_analog_level | ( | self, | |
amplitude = None , |
|||
offset = None |
|||
) |
Retrieve the analog amplitude and offset of the provided channels.
list | amplitude: optional, if the amplitude value (in Volt peak to peak, i.e. the full amplitude) of a specific channel is desired. |
list | offset: optional, if the offset value (in Volt) of a specific channel is desired. |
If nothing (or None) is passed then the levels of all channels will be returned. If no analog channels are present in the device, return just empty dicts.
Example of a possible input: amplitude = ['a_ch1', 'a_ch4'], offset = None to obtain the amplitude of channel 1 and 4 and the offset of all channels {'a_ch1': -0.5, 'a_ch4': 2.0} {'a_ch1': 0.0, 'a_ch2': 0.0, 'a_ch3': 1.0, 'a_ch4': 0.0}
def tektronix_awg7k.AWG7k.get_constraints | ( | self | ) |
Retrieve the hardware constrains from the Pulsing device.
Provides all the constraints (e.g. sample_rate, amplitude, total_length_bins, channel_config, ...) related to the pulse generator hardware to the caller.
SEE PulserConstraints CLASS IN pulser_interface.py FOR AVAILABLE CONSTRAINTS!!!
If you are not sure about the meaning, look in other hardware files to get an impression. If still additional constraints are needed, then they have to be added to the PulserConstraints class.
Each scalar parameter is an ScalarConstraints object defined in cor.util.interfaces. Essentially it contains min/max values as well as min step size, default value and unit of the parameter.
PulserConstraints.activation_config differs, since it contain the channel configuration/activation information of the form: {<descriptor_str>: <channel_set>, <descriptor_str>: <channel_set>, ...}
If the constraints cannot be set in the pulsing hardware (e.g. because it might have no sequence mode) just leave it out so that the default is used (only zeros).
def tektronix_awg7k.AWG7k.get_digital_level | ( | self, | |
low = None , |
|||
high = None |
|||
) |
Retrieve the digital low and high level of the provided/all channels.
list | low: optional, if the low value (in Volt) of a specific channel is desired. |
list | high: optional, if the high value (in Volt) of a specific channel is desired. |
If nothing (or None) is passed then the levels of all channels are being returned. If no digital channels are present, return just an empty dict.
Example of a possible input: low = ['d_ch1', 'd_ch4'] to obtain the low voltage values of digital channel 1 an 4. A possible answer might be {'d_ch1': -0.5, 'd_ch4': 2.0} {'d_ch1': 1.0, 'd_ch2': 1.0, 'd_ch3': 1.0, 'd_ch4': 4.0} Since no high request was performed, the high values for ALL channels are returned (here 4).
def tektronix_awg7k.AWG7k.get_errors | ( | self | ) |
Get all errors from the device and log them.
def tektronix_awg7k.AWG7k.get_interleave | ( | self | ) |
Check whether Interleave is ON or OFF in AWG.
Will always return False for pulse generator hardware without interleave.
def tektronix_awg7k.AWG7k.get_sample_rate | ( | self | ) |
Get the sample rate of the pulse generator hardware.
Do not return a saved sample rate from an attribute, but instead retrieve the current sample rate directly from the device.
def tektronix_awg7k.AWG7k.get_sequence_names | ( | self | ) |
Retrieve the names of all uploaded sequence on the device.
def tektronix_awg7k.AWG7k.get_sequencer_mode | ( | self, | |
output_as_int = False |
|||
) |
Asks the AWG which sequencer mode it is using.
def tektronix_awg7k.AWG7k.get_status | ( | self | ) |
Retrieves the status of the pulsing hardware.
def tektronix_awg7k.AWG7k.get_waveform_names | ( | self | ) |
Retrieve the names of all uploaded waveforms on the device.
def tektronix_awg7k.AWG7k.has_sequence_mode | ( | self | ) |
Asks the pulse generator whether sequence mode exists.
def tektronix_awg7k.AWG7k.load_sequence | ( | self, | |
sequence_name | |||
) |
Loads a sequence to the channels of the device in order to be ready for playback.
For devices that have a workspace (i.e. AWG) this will load the sequence from the device workspace into the channels. For a device without mass memory this will make the waveform/pattern that has been previously written with self.write_waveform ready to play.
sequence_name | dict|list, a dictionary with keys being one of the available channel index and values being the name of the already written waveform to load into the channel. Examples {1: rabi_ch1, 2: rabi_ch2} or {1: rabi_ch2, 2: rabi_ch1} If just a list of waveform names if given, the channel association will be invoked from the channel suffix '_ch1', '_ch2' etc. |
def tektronix_awg7k.AWG7k.load_waveform | ( | self, | |
load_dict | |||
) |
Loads a waveform to the specified channel of the pulsing device.
For devices that have a workspace (i.e. AWG) this will load the waveform from the device workspace into the channel. For a device without mass memory this will make the waveform/pattern that has been previously written with self.write_waveform ready to play.
load_dict | dict|list, a dictionary with keys being one of the available channel index and values being the name of the already written waveform to load into the channel. Examples {1: rabi_ch1, 2: rabi_ch2} or {1: rabi_ch2, 2: rabi_ch1} If just a list of waveform names if given, the channel association will be invoked from the channel suffix '_ch1', '_ch2' etc. |
def tektronix_awg7k.AWG7k.pulser_off | ( | self | ) |
Switches the pulsing device off.
def tektronix_awg7k.AWG7k.pulser_on | ( | self | ) |
Switches the pulsing device on.
def tektronix_awg7k.AWG7k.query | ( | self, | |
question | |||
) |
Asks the device a 'question' and receive and return an answer from it.
string | question: string containing the command |
def tektronix_awg7k.AWG7k.reset | ( | self | ) |
Reset the device.
def tektronix_awg7k.AWG7k.sequence_set_event_jump | ( | self, | |
step, | |||
jumpto = 0 |
|||
) |
Set the event trigger input of the specified sequence step and the jump_to destination.
int | step: Sequence step to be edited |
str | trigger: Trigger string specifier. ('OFF', 'A', 'B' or 'INT') |
int | jumpto: The sequence step to jump to. 0 or -1 is interpreted as next step |
def tektronix_awg7k.AWG7k.sequence_set_goto | ( | self, | |
step, | |||
goto = -1 |
|||
) |
int | step: |
int | goto: |
def tektronix_awg7k.AWG7k.sequence_set_wait_trigger | ( | self, | |
step, | |||
trigger = 'OFF' |
|||
) |
Make a certain sequence step wait for a trigger to start playing.
int | step: Sequence step to be edited |
str | trigger: Trigger string specifier. ('OFF', 'A', 'B' or 'INT') |
def tektronix_awg7k.AWG7k.sequence_set_waveform | ( | self, | |
waveform_name, | |||
step, | |||
track | |||
) |
Set the waveform 'waveform_name' to position 'step' in the sequence 'sequence_name'.
str | waveform_name: Name of the waveform which should be added |
int | step: Position of the added waveform |
int | track: track which should be editted |
def tektronix_awg7k.AWG7k.set_analog_level | ( | self, | |
amplitude = None , |
|||
offset = None |
|||
) |
Set amplitude and/or offset value of the provided analog channel(s).
dict | amplitude: dictionary, with key being the channel descriptor string (i.e. 'a_ch1', 'a_ch2') and items being the amplitude values (in Volt peak to peak, i.e. the full amplitude) for the desired channel. |
dict | offset: dictionary, with key being the channel descriptor string (i.e. 'a_ch1', 'a_ch2') and items being the offset values (in absolute volt) for the desired channel. |
If nothing is passed then the command will return the current amplitudes/offsets.
def tektronix_awg7k.AWG7k.set_digital_level | ( | self, | |
low = None , |
|||
high = None |
|||
) |
Set low and/or high value of the provided digital channel.
dict | low: dictionary, with key being the channel and items being the low values (in volt) for the desired channel. |
dict | high: dictionary, with key being the channel and items being the high values (in volt) for the desired channel. |
If nothing is passed then the command will return two empty dicts.
The major difference to analog signals is that digital signals are either ON or OFF, whereas analog channels have a varying amplitude range. In contrast to analog output levels, digital output levels are defined by a voltage, which corresponds to the ON status and a voltage which corresponds to the OFF status (both denoted in (absolute) voltage)
In general there is no bijective correspondence between (amplitude, offset) and (value high, value low)!
def tektronix_awg7k.AWG7k.set_interleave | ( | self, | |
state = False |
|||
) |
Turns the interleave of an AWG on or off.
bool | state: The state the interleave should be set to (True: ON, False: OFF) |
Unused for pulse generator hardware other than an AWG.
def tektronix_awg7k.AWG7k.set_jump_timing | ( | self, | |
synchronous = False |
|||
) |
Sets control of the jump timing in the AWG.
bool | synchronous: if True the jump timing will be set to synchornous, otherwise the jump timing will be set to asynchronous. |
If the Jump timing is set to asynchornous the jump occurs as quickly as possible after an event occurs (e.g. event jump tigger), if set to synchornous the jump is made after the current waveform is output. The default value is asynchornous.
def tektronix_awg7k.AWG7k.set_lowpass_filter | ( | self, | |
a_ch, | |||
cutoff_freq | |||
) |
Set a lowpass filter to the analog channels of the AWG.
int | a_ch: To which channel to apply, either 1 or 2. |
cutoff_freq | Cutoff Frequency of the lowpass filter in Hz. |
def tektronix_awg7k.AWG7k.set_mode | ( | self, | |
mode | |||
) |
Change the output mode of the AWG5000 series.
str | mode: Options for mode (case-insensitive): continuous 'C' triggered 'T' gated 'G' sequence 'S' |
def tektronix_awg7k.AWG7k.set_sample_rate | ( | self, | |
sample_rate | |||
) |
Set the sample rate of the pulse generator hardware.
float | sample_rate: The sampling rate to be set (in Hz) |
def tektronix_awg7k.AWG7k.write | ( | self, | |
command | |||
) |
Sends a command string to the device.
string | command: string containing the command |
def tektronix_awg7k.AWG7k.write_sequence | ( | self, | |
name, | |||
sequence_parameter_list | |||
) |
Write a new sequence on the device memory.
name | str, the name of the waveform to be created/append to |
sequence_parameter_list | list, contains the parameters for each sequence step and the according waveform names. |