silq.instrument_interfaces.spincore package

Submodules

silq.instrument_interfaces.spincore.PulseBlasterDDS_interface module

class silq.instrument_interfaces.spincore.PulseBlasterDDS_interface.PulseBlasterDDSInterface(instrument_name, **kwargs)[source]

Bases: silq.instrument_interfaces.interface.InstrumentInterface

Interface for the Pulseblaster DDS

When a PulseSequence is targeted in the Layout, the pulses are directed to the appropriate interface. Each interface is responsible for translating all pulses directed to it into instrument commands. During the actual measurement, the instrument’s operations will correspond to that required by the pulse sequence.

One important issue with the DDS is that it requires an inverted trigger, i.e. high voltage is the default, and a low voltage indicates a trigger. Not every interface has been programmed to handle this (so far only the PulseBlaster ESRPRO has).

The interface also contains a list of all available channels in the instrument.

Parameters

instrument_name – name of instrument for which this is an interface

Note

For a given instrument, its associated interface can be found using

get_instrument_interface

get_additional_pulses(connections)[source]

Additional pulses needed by instrument after targeting of main pulses

Parameters

connections – List of all connections in the layout

Return type

List[Pulse]

Returns

List containing trigger pulse if not primary instrument

setup(repeat=True, **kwargs)[source]

Set up instrument after layout has been targeted by pulse sequence.

Parameters
  • repeat (bool) – Repeat the pulse sequence indefinitely. If False, calling Layout.start will only run the pulse sequence once.

  • **kwargs – Ignored kwargs passed by layout.

Returns

setup flags (see Layout.flags)

start()[source]

Start instrument

stop()[source]

Stop instrument

class silq.instrument_interfaces.spincore.PulseBlasterDDS_interface.SinePulseImplementation(pulse_requirements=[])[source]

Bases: silq.pulses.pulse_modules.PulseImplementation

implement(frequencies, phases, amplitudes)[source]

Implements a targeted pulse for an InstrumentInterface.

This method is called during InstrumentInterface.setup.

Implementation of a targeted pulse is very dependent on the interface. For an AWG, this method may return a list of waveform points. For a triggering source, this method may return the triggering time. In very simple cases, this method may not even be necessary.

Parameters
  • *args – Interface-specific args to use

  • **kwargs – Interface-specific kwargs to use

Returns

Instrument-specific return values.

See also

Other interface source codes may serve as a guide for this method.

pulse_class

alias of silq.pulses.pulse_types.SinePulse

silq.instrument_interfaces.spincore.PulseBlasterESRPRO_interface module

class silq.instrument_interfaces.spincore.PulseBlasterESRPRO_interface.MarkerPulseImplementation(pulse_requirements=[])[source]

Bases: silq.pulses.pulse_modules.PulseImplementation

implement(t)[source]

Implements a targeted pulse for an InstrumentInterface.

This method is called during InstrumentInterface.setup.

Implementation of a targeted pulse is very dependent on the interface. For an AWG, this method may return a list of waveform points. For a triggering source, this method may return the triggering time. In very simple cases, this method may not even be necessary.

Parameters
  • *args – Interface-specific args to use

  • **kwargs – Interface-specific kwargs to use

Returns

Instrument-specific return values.

See also

Other interface source codes may serve as a guide for this method.

pulse_class

alias of silq.pulses.pulse_types.MarkerPulse

target_pulse(pulse, interface, **kwargs)[source]

Tailors a PulseImplementation to a specific pulse.

Targeting happens in three stages:

  1. Both the pulse and pulse implementation are copied.

  2. PulseImplementation of the copied pulse is set to the copied pulse implementation, and PulseImplementation.pulse is set to the copied pulse. This way, they can both reference each other.

  3. The targeted pulse is returned

Parameters
  • pulse (Pulse) – Pulse to be targeted.

  • interface (InstrumentInterface) – PulseImplementation belongs.

  • connections (List[Connection]) – All connections in Layout.

  • **kwargs – Additional unused kwargs

Raises

TypeError – Pulse class does not match PulseImplementation.pulse_class

class silq.instrument_interfaces.spincore.PulseBlasterESRPRO_interface.PulseBlasterESRPROInterface(instrument_name, channels=(1, 2, 3, 4), **kwargs)[source]

Bases: silq.instrument_interfaces.interface.InstrumentInterface

Interface for the Pulseblaster ESR PRO

When a PulseSequence is targeted in the Layout, the pulses are directed to the appropriate interface. Each interface is responsible for translating all pulses directed to it into instrument commands. During the actual measurement, the instrument’s operations will correspond to that required by the pulse sequence.

The interface also contains a list of all available channels in the instrument.

Parameters
  • instrument_name – name of instrument for which this is an interface

  • channels – List of channel indices. Default is (1, 2, 3, 4) corresponding to the BNC output connections. Additional channels are available on the board, requiring external connectors.

Note

For a given instrument, its associated interface can be found using

get_instrument_interface

Todo

Check if interface works if it is not the primary instrument.

setup(repeat=True, output_connections=[], **kwargs)[source]

Set up instrument after layout has been targeted by pulse sequence.

Parameters
  • repeat (bool) – Repeat the pulse sequence indefinitely. If False, calling Layout.start will only run the pulse sequence once.

  • output_connections (list) – Output Connection list of instrument, needed to setup the instrument.

  • **kwargs – Ignored kwargs passed by layout.

Returns

setup flags (see Layout.flags).

the post_start_actions flag is set to [self.start] if there are connections that need to have high voltage in the inactive state. This signifies that the pulse blaster should be started last, which ensures that other instrument have the right voltage.

start()[source]

Start instrument

stop()[source]

Stop instrument

class silq.instrument_interfaces.spincore.PulseBlasterESRPRO_interface.TriggerPulseImplementation(pulse_requirements=[])[source]

Bases: silq.pulses.pulse_modules.PulseImplementation

implement(t)[source]

Implements a targeted pulse for an InstrumentInterface.

This method is called during InstrumentInterface.setup.

Implementation of a targeted pulse is very dependent on the interface. For an AWG, this method may return a list of waveform points. For a triggering source, this method may return the triggering time. In very simple cases, this method may not even be necessary.

Parameters
  • *args – Interface-specific args to use

  • **kwargs – Interface-specific kwargs to use

Returns

Instrument-specific return values.

See also

Other interface source codes may serve as a guide for this method.

pulse_class

alias of silq.pulses.pulse_types.TriggerPulse

target_pulse(pulse, interface, **kwargs)[source]

Tailors a PulseImplementation to a specific pulse.

Targeting happens in three stages:

  1. Both the pulse and pulse implementation are copied.

  2. PulseImplementation of the copied pulse is set to the copied pulse implementation, and PulseImplementation.pulse is set to the copied pulse. This way, they can both reference each other.

  3. The targeted pulse is returned

Parameters
  • pulse (Pulse) – Pulse to be targeted.

  • interface (InstrumentInterface) – PulseImplementation belongs.

  • connections (List[Connection]) – All connections in Layout.

  • **kwargs – Additional unused kwargs

Raises

TypeError – Pulse class does not match PulseImplementation.pulse_class

Module contents