Qudi
Public Member Functions | Public Attributes | Static Public Attributes | List of all members
tektronix_awg5002c.AWG5002C Class Reference

A hardware module for the Tektronix AWG5000 series for generating waveforms and sequences thereof. More...

Inheritance diagram for tektronix_awg5002c.AWG5002C:
Inheritance graph
[legend]
Collaboration diagram for tektronix_awg5002c.AWG5002C:
Collaboration graph
[legend]

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 upload_asset (self, asset_name=None)
 Upload an already hardware conform file to the device. More...
 
def load_asset (self, asset_name, load_dict=None)
 Loads a sequence or waveform to the specified channel of the pulsing device. More...
 
def get_loaded_asset (self)
 Retrieve the currently loaded asset name of the device. More...
 
def clear_all (self)
 Clears the loaded waveform from the pulse generators RAM. 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. More...
 
def get_digital_level (self, low=None, high=None)
 Retrieve the digital low and high level of the provided 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 get_uploaded_asset_names (self)
 Retrieve the names of all uploaded assets on the device. More...
 
def get_saved_asset_names (self)
 Retrieve the names of all sampled and saved assets on the host PC. More...
 
def delete_asset (self, asset_name)
 Delete all files associated with an asset with the passed asset_name from the device memory. More...
 
def set_asset_dir_on_device (self, dir_path)
 Change the directory where the assets are stored on the device. More...
 
def get_asset_dir_on_device (self)
 Ask for the directory where the assets are stored on the device. More...
 
def has_sequence_mode (self)
 Asks the pulse generator whether sequence mode exists. More...
 
def get_interleave (self)
 Check whether Interleave is on in AWG. More...
 
def set_interleave (self, state=False)
 Turns the interleave of an AWG on or off. More...
 
def tell (self, command)
 Send a command string to the AWG. More...
 
def ask (self, question)
 Asks the device a 'question' and receive an answer from it. More...
 
def reset (self)
 Reset the device. More...
 
def set_lowpass_filter (self, a_ch, cutoff_freq)
 Set a lowpass filter to the analog channels ofawg 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...
 
- Public Member Functions inherited from core.module.BaseMixin
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...
 
- Public Member Functions inherited from core.module.ModuleMeta
def __new__ (cls, name, bases, attrs)
 Collect declared Connectors, ConfigOptions and StatusVars into dictionaries. More...
 

Public Attributes

 connected
 
 sequence_mode
 
 current_loaded_asset
 
 soc
 
 input_buffer
 
 asset_directory
 
 host_waveform_directory
 
 awg_model
 
 status_dic
 
- Public Attributes inherited from core.module.BaseMixin
 module_state
 
 connectors
 

Static Public Attributes

 ip_address = ConfigOption('awg_ip_address', missing='error')
 
 port = ConfigOption('awg_port', missing='error')
 
 ftp_root_directory = ConfigOption('ftp_root_dir', 'C:\\inetpub\\ftproot', missing='warn')
 
 user = ConfigOption('ftp_login', 'anonymous', missing='warn')
 
 passwd = ConfigOption('ftp_passwd', 'anonymous@', missing='warn')
 
 default_sample_rate = ConfigOption('default_sample_rate', missing='warn')
 

Detailed Description

A hardware module for the Tektronix AWG5000 series for generating waveforms and sequences thereof.

Unstable and in construction, Alexander Stark

Example config for copy-paste:

pulser_awg5000: module 'awg.tektronix_awg5002c.AWG5002C' awg_ip_address '10.42.0.211' awg_port 3000 # the port number as integer timeout 20

tmp_work_dir: 'C:\Software\qudi_pulsed_files' # optional

ftp_root_dir: 'C:\inetpub\ftproot' # optional, root directory on AWG device

ftp_login: 'anonymous' # optional, the username for ftp login

ftp_passwd: 'anonymous@' # optional, the password for ftp login

default_sample_rate: 600.0e6 # optional, the default sampling rate

Member Function Documentation

◆ ask()

def tektronix_awg5002c.AWG5002C.ask (   self,
  question 
)

Asks the device a 'question' and receive an answer from it.

Parameters
stringquestion: string containing the command
Returns
string: the answer of the device to the 'question'

◆ clear_all()

def tektronix_awg5002c.AWG5002C.clear_all (   self)

Clears the loaded waveform from the pulse generators RAM.

Returns
int: error code (0:OK, -1:error)

Delete all waveforms and sequences from Hardware memory and clear the visual display. Unused for digital pulse generators without sequence storage capability (PulseBlaster, FPGA).

◆ delete_asset()

def tektronix_awg5002c.AWG5002C.delete_asset (   self,
  asset_name 
)

Delete all files associated with an asset with the passed asset_name from the device memory.

Parameters
strasset_name: The name of the asset to be deleted Optionally a list of asset names can be passed.
Returns
list: a list with strings of the files which were deleted.

Unused for digital pulse generators without sequence storage capability (PulseBlaster, FPGA).

◆ get_active_channels()

def tektronix_awg5002c.AWG5002C.get_active_channels (   self,
  ch = None 
)

Get the active channels of the pulse generator hardware.

Parameters
listch: optional, if specific analog or digital channels are needed to be asked without obtaining all the channels.
Returns
dict: where keys denoting the channel number and items boolean expressions whether channel are active or not.

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 parameters are passed to this method all channels will be asked for their setting.

◆ get_analog_level()

def tektronix_awg5002c.AWG5002C.get_analog_level (   self,
  amplitude = None,
  offset = None 
)

Retrieve the analog amplitude and offset of the provided channels.

Parameters
listamplitude: optional, if a specific amplitude value (in Volt peak to peak, i.e. the full amplitude) of a channel is desired.
listoffset: optional, if a specific high value (in Volt) of a channel is desired.
Returns
: (dict, dict): tuple of two dicts, with keys being the channel number and items being the values for those channels. Amplitude is always denoted in Volt-peak-to-peak and Offset in (absolute) Voltage.
Note
Do not return a saved amplitude and/or offset value but instead retrieve the current amplitude and/or offset directly from the device.

If no entries provided then the levels of all channels where simply returned. If no analog channels provided, return just an empty dict. Example of a possible input: amplitude = [1,4], offset =[1,3] to obtain the amplitude of channel 1 and 4 and the offset {1: -0.5, 4: 2.0} {} since no high request was performed.

The major difference to digital signals is that analog signals are always oscillating or changing signals, otherwise you can use just digital output. In contrast to digital output levels, analog output levels are defined by an amplitude (here total signal span, denoted in Voltage peak to peak) and an offset (a value around which the signal oscillates, denoted by an (absolute) voltage).

In general there is no bijective correspondence between (amplitude, offset) and (value high, value low)!

◆ get_asset_dir_on_device()

def tektronix_awg5002c.AWG5002C.get_asset_dir_on_device (   self)

Ask for the directory where the assets are stored on the device.

Returns
string: The current sequence directory

Unused for digital pulse generators without changeable file structure (PulseBlaster, FPGA).

◆ get_constraints()

def tektronix_awg5002c.AWG5002C.get_constraints (   self)

Retrieve the hardware constrains from the Pulsing device.

Returns
constraints object: object with pulser constraints as attributes.

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_list>, <descriptor_str>: <channel_list>, ...}

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).

◆ get_digital_level()

def tektronix_awg5002c.AWG5002C.get_digital_level (   self,
  low = None,
  high = None 
)

Retrieve the digital low and high level of the provided channels.

Parameters
listlow: optional, if a specific low value (in Volt) of a channel is desired.
listhigh: optional, if a specific high value (in Volt) of a channel is desired.
Returns
: (dict, dict): tuple of two dicts, with keys being the channel number and items being the values for those channels. Both low and high value of a channel is denoted in (absolute) Voltage.
Note
Do not return a saved low and/or high value but instead retrieve the current low and/or high value directly from the device.

If no entries provided then the levels of all channels where simply returned. If no digital channels provided, return just an empty dict.

Example of a possible input: low = [1,4] to obtain the low voltage values of digital channel 1 an 4. A possible answer might be {1: -0.5, 4: 2.0} {} since no high request was performed.

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)!

◆ get_interleave()

def tektronix_awg5002c.AWG5002C.get_interleave (   self)

Check whether Interleave is on in AWG.

Unused for pulse generator hardware other than an AWG. The AWG 5000 Series does not have an interleave mode and this method exists only for compability reasons.

Returns
bool: will be always False since no interleave functionality

◆ get_loaded_asset()

def tektronix_awg5002c.AWG5002C.get_loaded_asset (   self)

Retrieve the currently loaded asset name of the device.

Returns
str: Name of the current asset, that can be either a filename a waveform, a sequence ect.

◆ get_sample_rate()

def tektronix_awg5002c.AWG5002C.get_sample_rate (   self)

Get the sample rate of the pulse generator hardware.

Returns
float: The current sample rate of the device (in Hz)

Do not return a saved sample rate in a class variable, but instead retrieve the current sample rate directly from the device.

◆ get_saved_asset_names()

def tektronix_awg5002c.AWG5002C.get_saved_asset_names (   self)

Retrieve the names of all sampled and saved assets on the host PC.

This is no list of the file names.

Returns
list: List of all saved asset name strings in the current directory of the host PC.

◆ get_sequencer_mode()

def tektronix_awg5002c.AWG5002C.get_sequencer_mode (   self,
  output_as_int = False 
)

Asks the AWG which sequencer mode it is using.

Parameters

◆ get_status()

def tektronix_awg5002c.AWG5002C.get_status (   self)

Retrieves the status of the pulsing hardware.

Returns
(int, dict): inter value of the current status with the corresponding dictionary containing status description for all the possible status variables of the pulse generator hardware. 0 indicates that the instrument has stopped. 1 indicates that the instrument is running. 2 indicates that the instrument is waiting for trigger. -1 indicates that the request of the status for AWG has failed.

◆ get_uploaded_asset_names()

def tektronix_awg5002c.AWG5002C.get_uploaded_asset_names (   self)

Retrieve the names of all uploaded assets on the device.

Returns
list: List of all uploaded asset name strings in the current device directory.

Unused for digital pulse generators without sequence storage capability (PulseBlaster, FPGA).

◆ has_sequence_mode()

def tektronix_awg5002c.AWG5002C.has_sequence_mode (   self)

Asks the pulse generator whether sequence mode exists.

Returns
: bool, True for yes, False for no.

◆ load_asset()

def tektronix_awg5002c.AWG5002C.load_asset (   self,
  asset_name,
  load_dict = None 
)

Loads a sequence or waveform to the specified channel of the pulsing device.

Parameters
strasset_name: The name of the asset to be loaded
dictload_dict: a dictionary with keys being one of the available channel numbers and items being the name of the already sampled waveform/sequence files. Examples {1: rabi_Ch1, 2: rabi_Ch2} {1: rabi_Ch2, 2: rabi_Ch1} This parameter is optional. If none is given then the channel association is invoked from the sequence generation, i.e. the filename appendix (_Ch1, _Ch2 etc.)
Returns
int: error code (0:OK, -1:error)

Unused for digital pulse generators without sequence storage capability (PulseBlaster, FPGA).

◆ pulser_off()

def tektronix_awg5002c.AWG5002C.pulser_off (   self)

Switches the pulsing device off.

Returns
int: error code (0:OK, -1:error, higher number corresponds to current status of the device. Check then the class variable status_dic.)

◆ pulser_on()

def tektronix_awg5002c.AWG5002C.pulser_on (   self)

Switches the pulsing device on.

Returns
int: error code (0:OK, -1:error, higher number corresponds to current status of the device. Check then the class variable status_dic.)

◆ reset()

def tektronix_awg5002c.AWG5002C.reset (   self)

Reset the device.

Returns
int: error code (0:OK, -1:error)

◆ set_analog_level()

def tektronix_awg5002c.AWG5002C.set_analog_level (   self,
  amplitude = None,
  offset = None 
)

Set amplitude and/or offset value of the provided analog channel.

Parameters
dictamplitude: dictionary, with key being the channel and items being the amplitude values (in Volt peak to peak, i.e. the full amplitude) for the desired channel.
dictoffset: dictionary, with key being the channel and items being the offset values (in absolute volt) for the desired channel.
Returns
(dict, dict): tuple of two dicts with the actual set values for amplitude and offset.

If nothing is passed then the command will return two empty dicts.

Note
After setting the analog and/or offset of the device, retrieve them again for obtaining the actual set value(s) and use that information for further processing.

The major difference to digital signals is that analog signals are always oscillating or changing signals, otherwise you can use just digital output. In contrast to digital output levels, analog output levels are defined by an amplitude (here total signal span, denoted in Voltage peak to peak) and an offset (a value around which the signal oscillates, denoted by an (absolute) voltage).

In general there is no bijective correspondence between (amplitude, offset) and (value high, value low)!

◆ set_asset_dir_on_device()

def tektronix_awg5002c.AWG5002C.set_asset_dir_on_device (   self,
  dir_path 
)

Change the directory where the assets are stored on the device.

Parameters
stringdir_path: The target directory
Returns
int: error code (0:OK, -1:error)

Unused for digital pulse generators without changeable file structure (PulseBlaster, FPGA).

◆ set_digital_level()

def tektronix_awg5002c.AWG5002C.set_digital_level (   self,
  low = None,
  high = None 
)

Set low and/or high value of the provided digital channel.

Parameters
dictlow: dictionary, with key being the channel and items being the low values (in volt) for the desired channel.
dicthigh: dictionary, with key being the channel and items being the high values (in volt) for the desired channel.
Returns
(dict, dict): tuple of two dicts where first dict denotes the current low value and the second dict the high value.

If nothing is passed then the command will return two empty dicts.

Note
After setting the high and/or low values of the device, retrieve them again for obtaining the actual set value(s) and use that information for further processing.

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)!

◆ set_interleave()

def tektronix_awg5002c.AWG5002C.set_interleave (   self,
  state = False 
)

Turns the interleave of an AWG on or off.

Parameters
boolstate: The state the interleave should be set to (True: ON, False: OFF)
Returns
bool: actual interleave status (True: ON, False: OFF)
Note
After setting the interleave of the device, retrieve the interleave again and use that information for further processing.

Unused for pulse generator hardware other than an AWG. The AWG 5000 Series does not have an interleave mode and this method exists only for compability reasons.

◆ set_jump_timing()

def tektronix_awg5002c.AWG5002C.set_jump_timing (   self,
  synchronous = False 
)

Sets control of the jump timing in the AWG.

Parameters
boolsynchronous: 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.

◆ set_lowpass_filter()

def tektronix_awg5002c.AWG5002C.set_lowpass_filter (   self,
  a_ch,
  cutoff_freq 
)

Set a lowpass filter to the analog channels ofawg the AWG.

Parameters
inta_ch: To which channel to apply, either 1 or 2.
cutoff_freqCutoff Frequency of the lowpass filter in Hz.

◆ set_mode()

def tektronix_awg5002c.AWG5002C.set_mode (   self,
  mode 
)

Change the output mode of the AWG5000 series.

Parameters
strmode: Options for mode (case-insensitive): continuous 'C' triggered 'T' gated 'G' sequence 'S'

◆ set_sample_rate()

def tektronix_awg5002c.AWG5002C.set_sample_rate (   self,
  sample_rate 
)

Set the sample rate of the pulse generator hardware.

Parameters
floatsample_rate: The sampling rate to be set (in Hz)
Returns
float: the sample rate returned from the device.
Note
After setting the sampling rate of the device, retrieve it again for obtaining the actual set value and use that information for further processing.

◆ tell()

def tektronix_awg5002c.AWG5002C.tell (   self,
  command 
)

Send a command string to the AWG.

Parameters
commandstring containing the command
Returns
int: error code (0:OK, -1:error)

◆ upload_asset()

def tektronix_awg5002c.AWG5002C.upload_asset (   self,
  asset_name = None 
)

Upload an already hardware conform file to the device.

Does NOT load into channels.

Parameters
strname: name of the ensemble/sequence to be uploaded
Returns
int: error code (0:OK, -1:error)

If nothing is passed, method will be skipped.


The documentation for this class was generated from the following file: