From cc5db26428ed238df755c9f4712f5c3b5c2fb836 Mon Sep 17 00:00:00 2001 From: Hayk Sargsyan <52532457+hay-k@users.noreply.github.com> Date: Fri, 20 Sep 2024 14:06:36 +0400 Subject: [PATCH] workaround to make sure RO pulse does not overlap with duration-swept pulse --- src/qibolab/instruments/qblox/controller.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/qibolab/instruments/qblox/controller.py b/src/qibolab/instruments/qblox/controller.py index d4623036f..a82ca6635 100644 --- a/src/qibolab/instruments/qblox/controller.py +++ b/src/qibolab/instruments/qblox/controller.py @@ -282,11 +282,19 @@ def sweep( serial_map = {p.serial: p.serial for p in sequence_copy.ro_pulses} for sweeper in sweepers_copy: - if sweeper.parameter is Parameter.start and not any( + if sweeper.parameter in (Parameter.duration, Parameter.start) and not any( pulse.type is PulseType.READOUT for pulse in sweeper.pulses ): - for pulse in sequence_copy: - if pulse.type is PulseType.READOUT: + for pulse in sequence_copy.ro_pulses: + current_serial = pulse.serial + if sweeper.parameter is Parameter.duration: + sweep_values = sweeper.get_values(sweeper.pulses[0].duration) + if ( + max_finish := sweeper.pulses[0].start + np.max(sweep_values) + ) > pulse.start: + pulse.start = max_finish + serial_map[pulse.serial] = current_serial + if sweeper.parameter is Parameter.start: idx = sequence_copy.index(pulse) padded_pulse = ReadoutPulse( start=0, @@ -313,7 +321,7 @@ def sweep( channel=pulse.channel, qubit=pulse.qubit, ) - serial_map[padded_pulse.serial] = pulse.serial + serial_map[padded_pulse.serial] = current_serial sequence_copy[idx] = padded_pulse sweeper.pulses.append(padded_pulse)