********* 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: :mod:`vivace.pulsed` ----------------------------------- Pulsed class: :class:`vivace.pulsed.Pulsed` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Fix a bug in :meth:`setup_long_drive ` that caused a crash when using the `output_marker` parameter. .... Version 1.4.3 ============= pulsed module: :mod:`vivace.pulsed` ----------------------------------- Pulsed class: :class:`vivace.pulsed.Pulsed` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Partially revert a change to :meth:`perform_measurement ` that allowed for "infinite" template-matching data (:meth:`match `), as that limited the functionality of having averaged data (:meth:`store `) at the same time. .... Version 1.4.2 ============= pulsed module: :mod:`vivace.pulsed` ----------------------------------- Pulsed class: :class:`vivace.pulsed.Pulsed` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * It is now possible to run :meth:`perform_measurement ` without any :meth:`store `, i.e. with only :meth:`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: :mod:`vivace.lockin` ----------------------------------- MixLockin class: :class:`vivace.lockin.MixLockin` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Simplify and clarify usage of :meth:`configure_mixer `. New method signature! .... Version 1.4.1 ============= pulsed module: :mod:`vivace.pulsed` ----------------------------------- Pulsed class: :class:`vivace.pulsed.Pulsed` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * To abort a measurement started with :meth:`perform_measurement `, simply hit `Ctrl + C`. * Method :meth:`setup_long_drive ` checks for validity of `rise_time` and `fall_time` and raises a :obj:`ValueError` exception if needed. * Fix bug in :meth:`update_flat_duration `. lockin module: :mod:`vivace.lockin` ----------------------------------- MixLockin class: :class:`vivace.lockin.MixLockin` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Fix bug in :meth:`configure_mixer ` when setting an even Nyquist zone. .... Version 1.4.0 ============= pulsed module: :mod:`vivace.pulsed` ----------------------------------- Pulsed class: :class:`vivace.pulsed.Pulsed` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * New method :meth:`output_digital_marker ` allows the user to program the digital output ports during the experiment to mark some event. * :meth:`setup_long_drive ` and :meth:`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: :mod:`vivace.lockin` ----------------------------------- MixLockin class: :class:`vivace.lockin.MixLockin` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * New method :meth:`configure_mixer ` replaces :meth:`set_mixer_frequency ` and :meth:`set_nyquist_zone ` (now deprecated). The new method correctly handles changes in the up/downconverted spectrum due to operation in different Nyquist bands. .... 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 :class:`Pulsed `, :class:`DirectLockin ` and :class:`MixLockin `. Useful when accessing multiple Vivace behind a NAT. lockin module: :mod:`vivace.lockin` ----------------------------------- MixLockin class: :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: :mod:`vivace.pulsed` ----------------------------------- Pulsed class: :class:`vivace.pulsed.Pulsed` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * The class constructor will check the firmware :meth:`version ` is compatible with the API :meth:`version `, and raise a :obj:`RuntimeError` otherwise. * Method :meth:`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 :meth:`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 :meth:`setup_HL_readout ` to conveniently set up a high/low sideband measurement across a pair of input ports. * Method :meth:`enable_output` renamed to :meth:`blank_output `, the first argument is changed from `state` to `blank`, with opposite meaning. lockin module: :mod:`vivace.lockin` ----------------------------------- DirectLockin class: :class:`vivace.lockin.DirectLockin` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * The class constructor will check the firmware :meth:`version ` is compatible with the API :meth:`version `, and raise a :obj:`RuntimeError` otherwise. * Method :meth:`enable_output` renamed to :meth:`blank_output `, the first argument is changed from `state` to `blank`, with opposite meaning. utils module: :mod:`vivace.utils` --------------------------------- * New method :meth:`templates_for_IQ_readout ` to conveniently create a pair of input templates for IQ demodulation. .... Version 1.1.0 ============= version module: :mod:`vivace.version` ------------------------------------- New module to obtain version information. The `vivace` package now also has the `__version__` attribute. pulsed module: :mod:`vivace.pulsed` ----------------------------------- Pulsed class: :class:`vivace.pulsed.Pulsed` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Method removed :meth:`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 :meth:`select_frequency ` or :meth:`next_frequency `. * New methods: * :meth:`set_output_bias ` * :meth:`enable_output ` (renamed to :meth:`blank_output ` in a later release) lockin module: :mod:`vivace.lockin` ----------------------------------- DirectLockin class: :class:`vivace.lockin.DirectLockin` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * New methods: * :meth:`set_output_bias ` * :meth:`enable_output ` (renamed to :meth:`blank_output ` in a later release) utils module: :mod:`vivace.utils` --------------------------------- New methods for easier SSH access through Python. OBS: require third-party package `Fabric `_. * :meth:`ssh_connect ` * :meth:`ssh_execute ` * :meth:`ssh_reboot ` * :meth:`ssh_upload ` * :meth:`ssh_download ` .... Version 1.0.2 ============= pulsed module: :mod:`vivace.pulsed` ----------------------------------- Pulsed class: :class:`vivace.pulsed.Pulsed` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Method :meth:`perform_measurement ` * Bug fix setting up carrier for templates LongDrive class: :class:`vivace.pulsed.LongDrive` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Class constructor :mod:`__init__ ` * Bug fix assertion when use_scale .... Version 1.0.1 ============= pulsed module: :mod:`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: :class:`vivace.pulsed.Pulsed` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Class constructor :mod:`__init__ ` * added optional parameter `address` to specify the IP address or hostname of the Vivace to connect to. * Method :meth:`setup_freq_lut ` * new required parameter `carrier`. * Method :meth:`setup_long_drive ` * new required parameter `carrier`. * Method :meth:`setup_template ` * type of parameter `envelope` changed to :class:`int`, default to `0`; this parameter now controls which of the two carriers should be used for the template. * Method :meth:`perform_measurement ` * return two empty :class:`numpy.ndarray` in case `dry_run` is `True`. * New methods: * :meth:`select_frequency ` * :meth:`select_scale ` .... Version 1.0.0 ============= General remarks --------------- * The API is now in its own package called :mod:`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 :class:`Pulsed `, :class:`DirectLockin ` and :class:`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 :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: :mod:`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: :mod:`vivace.pulsed` ----------------------------------- * The class *SimpleQ* is renamed to *Pulsed*. * New classes *TrigEvent* and *LongDrive* used as return types by methods of *Pulsed*. Pulsed class: :class:`vivace.pulsed.Pulsed` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Class constructor :mod:`__init__ ` * configures the clocking circuits and the firmware on the hardware when initialized; * new optional parameters `ext_ref_clk` and `force_reload`. * Method :meth:`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 :meth:`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 :meth:`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: :class:`LongDrive `, use its methods to change the length of the pulse. * Method :meth:`setup_template ` * raises an exception when the template is out of scale, rather than printing a warning to stdout; * new return type: list of :class:`TrigEvent `. * Method :meth:`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 :meth:`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 :meth:`output_carrier ` * parameter `port_list` renamed to `output_ports`. * Method :meth:`set_store_ports ` * parameter `store_ports` renamed to `input_ports`. * Method :meth:`next_frequency ` * parameter `out_port_list` renamed to `output_ports`. * Method :meth:`next_scale ` * parameter `out_port_list` renamed to `output_ports`. * New methods: * :meth:`setup_template_matching_pair ` * :meth:`setup_condition ` * :meth:`match ` * :meth:`get_template_matching_data `