Changelog

Warning

This is the documentation for the old Vivace API. For the newer API compatible with both the Vivace and the Presto microwave platforms, see here.

Version 1.4.4

pulsed module: vivace.pulsed

Pulsed class: vivace.pulsed.Pulsed

  • Fix a bug in setup_long_drive that caused a crash when using the output_marker parameter.


Version 1.4.3

pulsed module: vivace.pulsed

Pulsed class: vivace.pulsed.Pulsed

  • Partially revert a change to perform_measurement that allowed for “infinite” template-matching data (match), as that limited the functionality of having averaged data (store) at the same time.


Version 1.4.2

pulsed module: vivace.pulsed

Pulsed class: vivace.pulsed.Pulsed

  • It is now possible to run perform_measurement without any store, i.e. with only match. Raise error when requesting more averaged data (store) than supported.

  • Reverted in later release: increased the amount to template-matching data (match) to potentially infinite, as long as the host computer has enough memory and the network connection can keep up.

lockin module: vivace.lockin

MixLockin class: vivace.lockin.MixLockin


Version 1.4.1

pulsed module: vivace.pulsed

Pulsed class: vivace.pulsed.Pulsed

lockin module: vivace.lockin

MixLockin class: vivace.lockin.MixLockin


Version 1.4.0

pulsed module: vivace.pulsed

Pulsed class: vivace.pulsed.Pulsed

  • New method output_digital_marker allows the user to program the digital output ports during the experiment to mark some event.

  • setup_long_drive and setup_template have a new optional argument output_marker. Use it to output a marker from a digital output any time the pulse is output from an RF port.

lockin module: vivace.lockin

MixLockin class: vivace.lockin.MixLockin


Version 1.3.0

General remarks

  • The input- and output-port numbers in the API have been reversed. They now match the numbers printed on the new front panel of Vivace.

  • It is now possible to specify the server port number, in addition to address, for Pulsed, DirectLockin and MixLockin. Useful when accessing multiple Vivace behind a NAT.

lockin module: vivace.lockin

MixLockin class: vivace.lockin.MixLockin

  • It is now possible to run the DAC at 6.0 GSamples/s: set the dac_freq parameter in the class constructor to 6.0. The previous settings of 5.0 (default) and 4.0 are still available.


Version 1.2.0

pulsed module: vivace.pulsed

Pulsed class: vivace.pulsed.Pulsed

  • The class constructor will check the firmware version is compatible with the API version, and raise a RuntimeError otherwise.

  • Method setup_template_matching_pair:

    • It is now possible to compare the match of a pair of templates either from the same port or from two adjacent ports.

    • Modified functionality of comparison between the two matches: a matching comparison is considered True (i.e. the trigger is active) if the first match result plus the second match result if greater or equal than the threshold. Previously the comparison was True if the first match minus the second was greater or equal than zero. To obtain the same behavior as before, set the threshold to zero (default) and invert the sign of template2.

    • New optional argument threshold.

    • New optional argument compare_next_port.

    • Extended docstring to include description of new arguments.

  • Method setup_condition:

    • It is now possible to output a template when a matching condition is unsuccessful. Combined with the previous behavior, this enables to output different pulses based on whether the outcome of a single matching comparison was above or below threshold.

    • Parameters output_templates renamed to output_templates_true.

    • New optional parameter output_templates_false.

  • New method setup_HL_readout to conveniently set up a high/low sideband measurement across a pair of input ports.

  • Method enable_output() renamed to blank_output, the first argument is changed from state to blank, with opposite meaning.

lockin module: vivace.lockin

DirectLockin class: vivace.lockin.DirectLockin

  • The class constructor will check the firmware version is compatible with the API version, and raise a RuntimeError otherwise.

  • Method enable_output() renamed to blank_output, the first argument is changed from state to blank, with opposite meaning.

utils module: vivace.utils


Version 1.1.0

version module: vivace.version

New module to obtain version information. The vivace package now also has the __version__ attribute.

pulsed module: vivace.pulsed

Pulsed class: vivace.pulsed.Pulsed

  • Method removed output_carrier.

    All carriers for all channels are now automatically started at the beginning of a measurement, and they are free running. The user does not need to start and stop them manually to match the output envelopes. The carriers are free running, so they will remain phase coherent until the user sets a particular frequency/phase with select_frequency or next_frequency.

  • New methods:

lockin module: vivace.lockin

DirectLockin class: vivace.lockin.DirectLockin

utils module: vivace.utils

New methods for easier SSH access through Python. OBS: require third-party package Fabric.


Version 1.0.2

pulsed module: vivace.pulsed

Pulsed class: vivace.pulsed.Pulsed

LongDrive class: vivace.pulsed.LongDrive

  • Class constructor __init__

    • Bug fix assertion when use_scale


Version 1.0.1

pulsed module: vivace.pulsed

New features:

  • Each output channel now has two sine-wave generators.

  • It is now possible to jump to a given location of the frequency and scale look-up tables, rather than just stepping sequentially.

Pulsed class: vivace.pulsed.Pulsed


Version 1.0.0

General remarks

  • The API is now in its own package called vivace. If you install the package with pip/pip3, you can import it from anywhere with import vivace, no more sys.path.append nonsense!

  • The classes Pulsed, DirectLockin and MixLockin configure the clocking circuits and the firmware on the hardware when initialized, no need to do it manually through SSH or add-hoc scripts anymore!

  • When designing an experiment sequence with the class Pulsed, you can now start from time zero. No need to manually add some safety dead time at the start of your sequence!

vivace package: vivace

  • The module simpleq is renamed to pulsed.

  • The modules simple_lockin and mix45_lockin are merged into lockin.

  • New module vivace.utils.

  • Modules rflockin, generate_lockin_stimuli and generate_quantum_stimuli are made private and should not be accessed by API users.

pulsed module: vivace.pulsed

  • The class SimpleQ is renamed to Pulsed.

  • New classes TrigEvent and LongDrive used as return types by methods of Pulsed.

Pulsed class: vivace.pulsed.Pulsed

  • Class constructor __init__

    • configures the clocking circuits and the firmware on the hardware when initialized;

    • new optional parameters ext_ref_clk and force_reload.

  • Method setup_freq_lut

    • the frequency LUT can be configured for multiple ports at the same time by passing a list to output_ports.

    • parameter output_index renamed to output_ports;

    • parameter frequency_lut renamed to frequencies;

    • parameter phase_lut renamed to phases;

    • parameter repeat_count is now optional;

  • Method setup_scale_lut

    • the scale LUT can be configured for multiple ports at the same time by passing a list to output_ports.

    • parameter output_index renamed to output_ports;

    • parameter scale renamed to scales;

    • parameter repeat_count is now optional;

  • Method setup_long_drive

    • the beginning and end of the pulse can now be smoothed using rise_time and fall_time;

    • parameter template_amp renamed to amplitude;

    • new optional parameters rise_time and fall_time;

    • new return type: LongDrive, use its methods to change the length of the pulse.

  • Method setup_template

    • raises an exception when the template is out of scale, rather than printing a warning to stdout;

    • new return type: list of TrigEvent.

  • Method perform_measurement

    • automatically adds some set time at the start of the sequence to account for FPGA reset (~20 ns);

    • prints also data tranfer time;

    • raises exceptions when period is too short or too long.

  • Method output_pulse

    • can now take either a single pulse or a list of pulses to be output at the same time;

    • parameter templates renamed to pulse_info.

  • Method output_carrier

    • parameter port_list renamed to output_ports.

  • Method set_store_ports

    • parameter store_ports renamed to input_ports.

  • Method next_frequency

    • parameter out_port_list renamed to output_ports.

  • Method next_scale

    • parameter out_port_list renamed to output_ports.

  • New methods: