Acquire a Basel DAC sweep with an MFLI

In this measurement, the Basel DAC generates the sweep and its synchronization output triggers an MFLI. The sweep tree mirrors that signal flow: the DAC is the root and the lock-in is its acquiring child.

Build the sweep tree

from qcdrivers.buffered.basel import NodeBaselDAC
from qcdrivers.buffered.zurich import NodeMFLI

buffered_sweep = {
    "instrument": NodeBaselDAC(inst=dac),
    "sweeps": [gate_sweep],
    "nodes": [
        {
            "instrument": NodeMFLI(inst=lockin),
            "dependent": [lockin_r, lockin_p],
            "grid_mode": "exact",
            "input_trigger": get_trigger_channel(gate),
            "trigger_level": 0.3,
            "trigger_delay": 2e-6,
        }
    ],
}

measure.run([buffered_sweep], dependents=[], **run_dict)

The child node settings describe the acquisition:

  • dependent lists the measured parameters, here amplitude and phase.

  • input_trigger selects the MFLI trigger input connected to the DAC board.

  • grid_mode="exact" requests one acquired sample for every sweep point.

  • trigger_delay compensates the delay between the DAC update and trigger.

Set the demodulator sample rate high enough for the requested point delay, and close any LabOne DAQ module before starting the run. A stale DAQ session can prevent Qanary from fetching the new acquisition.

For a two-dimensional scan, both sweeps must use the same point delay. Put the inner sweep last in "sweeps" and select the trigger input driven by that inner-axis DAC board.

Full example: buffered_basel_with_mfli.py