Пример #1
0
    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)
Пример #2
0
    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)
Пример #3
0
    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)
Пример #4
0
    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)
Пример #5
0
    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