def sequence(self, pulse_times, frequencies, phases, amplitudes, cycle_time=40e-6, pre_trig_time=0.1e-6, trig_time=0.1e-6): """ Parameters: ---------- pulse times : sequence pulse times (in sec.) frequencies : sequence pulse frequencies (in Hz) phases : sequence pulse phases (in radians) amplitudes : sequence pulse amplitudes cycle_time : numeric, in s (default: 40e-6) time per pulse element (in sec.) difference between pulse time and cycle time results in 0 output for that time. pre_trig_time : numeric, in s (default: 100e-9) delay time before anything happens in the sequence. trig_time : numeric, in s (default: 100e-9) length of the trigger pulse. (the signal pulse starts after the trigger pulse ends.) """ pulse_times = np.array(pulse_times) low_times = cycle_time - pulse_times - pre_trig_time - trig_time elements = [] for pulse_time, low_time, frq, phase, amp in zip( pulse_times, low_times, frequencies, phases, amplitudes): bps = bbtools.BluePrints(chan_map=self.chan_map, length=cycle_time, sample_rate=self.SR) bps['pulse'].insertSegment(0, ramp, (0, 0), dur=pre_trig_time) bps['pulse'].insertSegment(1, ramp, (0, 0), name='trigger', dur=trig_time) bps['pulse'].insertSegment(2, sine, (frq, amp, 0, phase), name='pulse', dur=pulse_time) bps['pulse'].insertSegment(3, ramp, (0, 0), dur=low_time) bps['ats_trigger'] = [(pre_trig_time, trig_time)] elements.append(bbtools.blueprints2element(bps)) return bbtools.elements2sequence(elements, self.name)
def sequence(self, delays, pulse_time, readout_time, amplitude=0.5, cycle_time=10e-6, pre_pulse_time=1e-6, after_pulse_time=0.02e-6, alazar_trigger_time=100e-9, marker_buffer=20e-9, cavity_lifetime=0.3e-6): pulse_time = np.round(pulse_time / 1e-9) * 1e-9 elements = [] for D in delays: D = np.round(D / 1e-9) * 1e-9 t_pulse = pre_pulse_time + 4 * pulse_time + D + after_pulse_time bps = bbtools.BluePrints(chan_map=self.chan_map, length=cycle_time, sample_rate=self.SR) bps['I'].insertSegment(0, ramp, (0, 0), dur=pre_pulse_time) bps['I'].insertSegment(1, ramp, (amplitude, amplitude), dur=pulse_time) bps['I'].insertSegment(2, ramp, (0, 0), dur=D / 2) bps['I'].insertSegment(3, ramp, (amplitude, amplitude), dur=pulse_time * 2) bps['I'].insertSegment(2, ramp, (0, 0), dur=D / 2) bps['I'].insertSegment(1, ramp, (amplitude, amplitude), dur=pulse_time) bps['I'].insertSegment(4, ramp, (0, 0), dur=cycle_time - (pre_pulse_time + 4 * pulse_time + D)) bps['qb_pulse'] = [ (pre_pulse_time - marker_buffer, pulse_time + 2 * marker_buffer), (pre_pulse_time + pulse_time + D / 2 - marker_buffer, 2 * pulse_time + 2 * marker_buffer), (pre_pulse_time + 3 * pulse_time + D - marker_buffer, pulse_time + 2 * marker_buffer) ] bps['ats_trigger'] = [(t_pulse + cavity_lifetime, alazar_trigger_time)] bps['ro_pulse'] = [(t_pulse, readout_time)] elements.append(bbtools.blueprints2element(bps)) return bbtools.elements2sequence(elements, self.name)
def sequence(self, pulse_times=None, amplitudes=None, pulse_time=20e-9, amplitude=0.5, readout_time=2.6e-9, cycle_time=10e-6, pre_pulse_time=1e-6, after_pulse_time=0.02e-6, alazar_trigger_time=100e-9, marker_buffer=20e-9, cavity_lifetime=0.3e-6): ii = 0 if type(amplitudes) is np.ndarray: ii += 1 if type(pulse_times) is np.ndarray: ii += -1 if ii == 0: raise ValueError('pulse_times xor amplitudes has to be given.') elif ii == 1: pulse_times = np.ones_like(amplitudes) * pulse_time elif ii == -1: amplitudes = np.ones_like(pulse_times) * amplitude elements = [] for amplitude, pulse_time in zip(amplitudes, pulse_times): pulse_time = np.round(pulse_time / 1e-9) * 1e-9 t_pulse = pre_pulse_time + pulse_time + after_pulse_time bps = bbtools.BluePrints(chan_map=self.chan_map, length=cycle_time, sample_rate=self.SR) bps['I'].insertSegment(0, ramp, (0, 0), dur=pre_pulse_time) bps['I'].insertSegment(1, ramp, (amplitude, amplitude), dur=pulse_time) bps['I'].insertSegment(2, ramp, (0, 0), dur=cycle_time - pre_pulse_time - pulse_time) bps['qb_pulse'] = [(pre_pulse_time - marker_buffer, pulse_time + 2 * marker_buffer)] bps['ats_trigger'] = [(t_pulse + cavity_lifetime, alazar_trigger_time)] bps['ro_pulse'] = [(t_pulse, readout_time)] elements.append(bbtools.blueprints2element(bps)) return bbtools.elements2sequence(elements, self.name)
def sequence(self, trig_time=1e-6, cycle_time=5e-3, pre_trig_time=1e-6, use_event_seq=False): chan_map = { 1: ['I', 'ats_trigger', 'ro_pulse'], 2: [None, 'qb_pulse', None], } elements = [] if use_event_seq: bps = bbtools.BluePrints(chan_map=chan_map, length=cycle_time, sample_rate=self.SR) bps['I'].insertSegment(0, ramp, (0, 0), dur=cycle_time) elements.append(bbtools.blueprints2element(bps)) # readout sequence end_buffer = 1e-6 low_time = cycle_time - trig_time - pre_trig_time - end_buffer bps = bbtools.BluePrints(chan_map=chan_map, length=cycle_time, sample_rate=self.SR) bps['I'].insertSegment(0, ramp, (0, 0), dur=cycle_time) bps['ats_trigger'] = [(pre_trig_time, trig_time)] if 'ro_pulse' in bps.map: t0, t1 = 0, cycle_time bps['ro_pulse'] = [(t0, t1)] for k, v in bps.map.items(): # This condition I am not changing right now when renaming the channels. I'l look into it later if '_trigger' in k and k not in ['ats_trigger', 'ro_trigger']: t0, t1 = pre_trig_time + trig_time, low_time bps[k] = [(t0, t1)] elements.append(bbtools.blueprints2element(bps)) # Adding event seq return bbtools.elements2sequence(elements, self.name)
def sequence(self, trig_time=1e-6, cycle_time=10e-6, pre_trig_time=1e-6, ncycles=1, nreps_per_cycle=1, debug_signal=False, ro_trigger_always_on=False): """ :param trig_time: length of the trigger pulse [s] :param cycle_time: length of each element [s] :param pre_trig_time: buffer between start of the element and start of the trigger [s] :param ncycles: how many elements to generate :param nreps_per_cycle: repetitions per element :param debug_signal: if True, and channel ``pulse`` is defined, play a sine wave of f = 1 MHz on that. :param ro_trigger_always_on: if True (and ``ro_trigger`` defined), ro trigger is always on (no pre/post buffer). """ end_buffer = 1e-6 low_time = cycle_time - trig_time - pre_trig_time - end_buffer elements = [] for i in range(ncycles): bps = bbtools.BluePrints(chan_map=self.chan_map, length=cycle_time, sample_rate=self.SR) if debug_signal: bps['pulse'].insertSegment(0, ramp, (0, 0), dur=pre_trig_time) bps['pulse'].insertSegment(1, ramp, (0, 0), name='trigger', dur=trig_time) bps['pulse'].insertSegment(2, sine, (1e6, 0.5, 0, 0), name='dbg_pulse', dur=low_time) bps['pulse'].insertSegment(3, ramp, (0, 0), dur=end_buffer) else: bps['pulse'].insertSegment(0, ramp, (0, 0), dur=cycle_time) bps['ats_trigger'] = [(pre_trig_time, trig_time)] if 'ro_trigger' in bps.map: if ro_trigger_always_on: t0, t1 = 0, cycle_time else: t0, t1 = pre_trig_time + trig_time, low_time bps['ro_trigger'] = [(t0, t1)] else: print('ro_trigger not defined. omitting.') for k, v in bps.map.items(): if '_trigger' in k and k not in ['ats_trigger', 'ro_trigger']: t0, t1 = pre_trig_time + trig_time, low_time bps[k] = [(t0, t1)] elements.append(bbtools.blueprints2element(bps)) seq = bbtools.elements2sequence(elements, self.name) for i in range(ncycles): seq.setSequencingNumberOfRepetitions(i + 1, nreps_per_cycle) return seq