From bdbb03e2dec4e9945c93b92fd05016c96a5da691 Mon Sep 17 00:00:00 2001 From: GabrielePalazzo <73099233+GabrielePalazzo@users.noreply.github.com> Date: Mon, 13 Nov 2023 15:09:02 +0400 Subject: [PATCH] Improved code for selection of measurement start --- src/qibolab/instruments/zhinst.py | 40 ++++++++----------------------- 1 file changed, 10 insertions(+), 30 deletions(-) diff --git a/src/qibolab/instruments/zhinst.py b/src/qibolab/instruments/zhinst.py index 0326349c1f..47790c7e13 100644 --- a/src/qibolab/instruments/zhinst.py +++ b/src/qibolab/instruments/zhinst.py @@ -892,39 +892,16 @@ def measure_relax(self, exp, qubits, relaxation_time, acquisition_type): """qubit readout pulse, data acquisition and qubit relaxation""" play_after = None - # TODO: This need to be simplified !!! - if len(self.sequence_qibo.qf_pulses) != 0 and len(self.sequence_qibo.qd_pulses) != 0: - play_after = ( - self.play_after_set(self.sequence_qibo.qf_pulses, "bias") - if self.sequence_qibo.qf_pulses.finish > self.sequence_qibo.qd_pulses.finish - else self.play_after_set(self.sequence_qibo.qd_pulses, "drive") - ) - if len(self.sequence_qibo.cf_pulses) != 0 and len(self.sequence_qibo.qd_pulses) != 0: - play_after = ( - self.play_after_set(self.sequence_qibo.cf_pulses, "bias_coupler") - if self.sequence_qibo.cf_pulses.finish > self.sequence_qibo.qd_pulses.finish - else self.play_after_set(self.sequence_qibo.qd_pulses, "drive") - ) + qf_finish = self.sequence_qibo.qf_pulses.finish + qd_finish = self.sequence_qibo.qd_pulses.finish + cf_finish = self.sequence_qibo.cf_pulses.finish - elif len(self.sequence_qibo.qf_pulses) != 0: + if qf_finish > qd_finish and qf_finish > cf_finish: play_after = self.play_after_set(self.sequence_qibo.qf_pulses, "bias") - elif len(self.sequence_qibo.qd_pulses) != 0: + elif qd_finish > qf_finish and qd_finish > cf_finish: play_after = self.play_after_set(self.sequence_qibo.qd_pulses, "drive") - elif ( - len(self.sequence_qibo.qf_pulses) != 0 - and len(self.sequence_qibo.qd_pulses) != 0 - and len(self.sequence_qibo.cf_pulses) != 0 - ): - seq_qf = self.sequence_qibo.qf_pulses.finish - seq_qd = self.sequence_qibo.qd_pulses.finish - seq_cf = self.sequence_qibo.cf_pulses.finish - # add here for flux coupler pulses - if seq_qf > seq_qd and seq_qf > seq_cf: - play_after = self.play_after_set(self.sequence_qibo.qf_pulses, "bias") - elif seq_qd > seq_qf and seq_qd > seq_cf: - play_after = self.play_after_set(self.sequence_qibo.qd_pulses, "drive") - elif seq_cf > seq_qf and seq_cf > seq_qd: - play_after = self.play_after_set(self.sequence_qibo.cf_pulse, "bias_coupler") + elif cf_finish > qf_finish and cf_finish > qd_finish: + play_after = self.play_after_set(self.sequence_qibo.cf_pulses, "bias_coupler") readout_schedule = defaultdict(list) qubit_readout_schedule = defaultdict(list) @@ -948,6 +925,9 @@ def measure_relax(self, exp, qubits, relaxation_time, acquisition_type): for pulse, q, iq_angle in zip(pulses, qubits, iq_angles): pulse.zhpulse.uid += str(i) + # TODO: if the measure sequence starts after the last pulse, add a delay + # if the delay is too large (i.e. 5us), + # throw an exception / no delay / maximum delay possible if play_after is None: exp.delay( signal=f"measure{q}",