def prepare(self, upload_tek_seq=True, **kw): self.AWG.stop() n_cls = self.nr_cliffords time_tape = [] pulse_length = self.LutMan.gauss_width.get()*4 for seed in range(self.nr_seeds): for n_cl in n_cls: cliffords = rb.randomized_benchmarking_sequence(n_cl) cl_tape = rb.convert_clifford_sequence_to_tape( cliffords, self.LutMan.lut_mapping.get()) for i, tape_elt in enumerate(cl_tape): if i == 0: # wait_time is in ns wait_time = (self.max_seq_duration*1e9 - (len(cl_tape)-1)*self.pulse_delay_ns - pulse_length) else: wait_time = self.pulse_delay_ns - pulse_length end_of_marker = (i == (len(cl_tape)-1)) entry = self.CBox.create_timing_tape_entry( wait_time, tape_elt, end_of_marker, prepend_elt=0) time_tape.extend(entry) for cal_pt in self.cal_points: wait_time = self.max_seq_duration*1e9 - pulse_length time_tape.extend(self.CBox.create_timing_tape_entry( wait_time, cal_pt, True, prepend_elt=0)) # print('Total tape length', len(time_tape)) for awg in range(3): self.CBox.set('AWG{}_mode'.format(awg), 'Segmented') self.CBox.set_segmented_tape(awg, time_tape) self.CBox.restart_awg_tape(awg) if upload_tek_seq: self.upload_tek_seq()
def get_resetless_rb_detector(self, nr_cliff, starting_seed=1, nr_seeds='max', pulse_p_elt='min', MC=None, upload=True): if MC is None: MC = self.MC if pulse_p_elt == 'min': safety_factor = 5 if nr_cliff < 8 else 3 pulse_p_elt = int(safety_factor*nr_cliff) if nr_seeds == 'max': nr_seeds = 29184//pulse_p_elt if nr_seeds*pulse_p_elt > 29184: raise ValueError( 'Too many pulses ({}), {} seeds, {} pulse_p_elt'.format( nr_seeds*pulse_p_elt, nr_seeds, pulse_p_elt)) resetless_interval = ( np.round(pulse_p_elt*self.pulse_delay.get()*1e6)+2.5)*1e-6 combined_tape = [] for i in range(nr_seeds): if starting_seed is not None: seed = starting_seed*1000*i else: seed = None rb_seq = rb.randomized_benchmarking_sequence(nr_cliff, desired_net_cl=3, seed=seed) tape = rb.convert_clifford_sequence_to_tape( rb_seq, self.LutMan.lut_mapping.get()) if len(tape) > pulse_p_elt: raise ValueError( 'Too many pulses ({}), {} pulse_p_elt'.format( len(tape), pulse_p_elt)) combined_tape += [0]*(pulse_p_elt-len(tape))+tape # Rename IF in awg_swf_resetless tape s = awg_swf.Resetless_tape( n_pulses=pulse_p_elt, tape=combined_tape, IF=self.f_RO_mod.get(), pulse_delay=self.pulse_delay.get(), resetless_interval=resetless_interval, RO_pulse_delay=self.RO_pulse_delay.get(), RO_pulse_length=self.RO_pulse_length.get(), RO_trigger_delay=self.RO_acq_marker_delay.get(), AWG=self.AWG, CBox=self.CBox, upload=upload) d = cdet.CBox_trace_error_fraction_detector( 'Resetless rb det', MC=MC, AWG=self.AWG, CBox=self.CBox, sequence_swf=s, threshold=self.RO_threshold.get(), save_raw_trace=False) return d