示例#1
0
    def build_sequence(self):
        PulseSequence.build_sequence(self)

        wtpts = self.get_waveform_times('qubit drive I')
        mtpts = self.get_marker_times('qubit buffer')

        ii = 0
        # TODO: pulseblaster out of sync bug#

        awg_trig_len = 100
        start_pulseblaster(self.exp_period_ns, awg_trig_len, self.origin + self.measurement_delay,
                           self.card_trig_width, self.measurement_width)
        run_pulseblaster()

        self.markers['readout pulse'][ii] = ap.square(mtpts, 1, self.origin + self.measurement_delay,
                                                       self.measurement_width)
        self.markers['card trigger'][ii] = ap.square(mtpts, 1,
                                                      self.origin - self.card_delay + self.measurement_delay,
                                                      self.card_trig_width)

        pulse_probe_len = self.pulse_probe_len
        a = self.a

        if self.pulse_type == 'square':
            self.waveforms['qubit drive I'][ii] = ap.sideband(wtpts,
                                                               ap.square(wtpts, a,
                                                                          self.origin - pulse_probe_len - 3 * self.ramp_sigma,
                                                                          pulse_probe_len, self.ramp_sigma),
                                                               np.zeros(len(wtpts)),
                                                              self.pulse_probe_cfg['iq_freq'], 0)[0]
            self.waveforms['qubit drive Q'][ii] = ap.sideband(wtpts,
                                                               ap.square(wtpts, a,
                                                                          self.origin - pulse_probe_len - 3 * self.ramp_sigma,
                                                                          pulse_probe_len, self.ramp_sigma),
                                                               np.zeros(len(wtpts)),
                                                              self.pulse_probe_cfg['iq_freq'], 0)[1]
            self.markers['qubit buffer'][ii] = ap.square(mtpts, 1,
                                                          self.origin - pulse_probe_len - 3 * self.ramp_sigma - self.marker_start_buffer,
                                                          pulse_probe_len + 4 * self.ramp_sigma + self.marker_start_buffer)

            high_values_indices = self.markers['qubit buffer'][ii] > 1
            self.markers['qubit buffer'][ii][high_values_indices] = 1

        if self.pulse_type == 'gauss':
            self.waveforms['qubit drive I'][ii] = ap.sideband(wtpts,
                                                               ap.gauss(wtpts, a, self.origin - 3 * pulse_probe_len,
                                                                         pulse_probe_len), np.zeros(len(wtpts)),
                                                              self.pulse_probe_cfg['iq_freq'], 0)[0]
            self.waveforms['qubit drive Q'][ii] = ap.sideband(wtpts,
                                                               ap.gauss(wtpts, a, self.origin - 3 * pulse_probe_len,
                                                                         pulse_probe_len), np.zeros(len(wtpts)),
                                                              self.pulse_probe_cfg['iq_freq'], 0)[1]
            self.markers['qubit buffer'][ii] = ap.square(mtpts, 1, self.origin - 6 * pulse_probe_len - self.marker_start_buffer,
                                                           6 * pulse_probe_len + self.marker_start_buffer)

            high_values_indices = self.markers['qubit buffer'][ii] > 1
            self.markers['qubit buffer'][ii][high_values_indices] = 1
示例#2
0
    def build_sequence(self):
        PulseSequence.build_sequence(self)

        wtpts = self.get_waveform_times('qubit drive I')
        mtpts = self.get_marker_times('qubit buffer')

        ii = 0
        self.markers['readout pulse'][ii] = ap.square(
            mtpts, 1, self.origin + self.measurement_delay,
            self.measurement_width)
        self.markers['card trigger'][ii] = ap.square(
            mtpts, 1, self.origin - self.card_delay + self.measurement_delay,
            self.card_trig_width)

        pulse_probe_len = self.pulse_probe_len
        a = self.a

        if self.pulse_type == 'square':
            self.waveforms['qubit drive I'][ii] = ap.sideband(
                wtpts,
                ap.square(wtpts, a,
                          self.origin - pulse_probe_len - 3 * self.ramp_sigma,
                          pulse_probe_len, self.ramp_sigma),
                np.zeros(len(wtpts)), 0, 0)[0]
            self.waveforms['qubit drive Q'][ii] = ap.sideband(
                wtpts,
                ap.square(wtpts, a,
                          self.origin - pulse_probe_len - 3 * self.ramp_sigma,
                          pulse_probe_len, self.ramp_sigma),
                np.zeros(len(wtpts)), 0, 0)[1]
            self.markers['qubit buffer'][ii] = ap.square(
                mtpts, 1, self.origin - pulse_probe_len - 3 * self.ramp_sigma -
                self.marker_start_buffer, pulse_probe_len +
                4 * self.ramp_sigma + self.marker_start_buffer)

            high_values_indices = self.markers['qubit buffer'][ii] > 1
            self.markers['qubit buffer'][ii][high_values_indices] = 1

        if self.pulse_type == 'gauss':
            self.waveforms['qubit drive I'][ii] = ap.sideband(
                wtpts,
                ap.gauss(wtpts, a,
                         self.origin - 3 * pulse_probe_len, pulse_probe_len),
                np.zeros(len(wtpts)), self.fe_sideband_freq, self.phase)[0]
            self.waveforms['qubit drive Q'][ii] = ap.sideband(
                wtpts,
                ap.gauss(wtpts, a,
                         self.origin - 3 * pulse_probe_len, pulse_probe_len),
                np.zeros(len(wtpts)), self.fe_sideband_freq, self.phase)[1]
            self.markers['qubit buffer'][ii] = ap.square(
                mtpts, 1,
                self.origin - 6 * pulse_probe_len - self.marker_start_buffer,
                6 * pulse_probe_len + self.marker_start_buffer)

            high_values_indices = self.markers['qubit buffer'][ii] > 1
            self.markers['qubit buffer'][ii][high_values_indices] = 1
示例#3
0
    def build_sequence(self):
        PulseSequence.build_sequence(self)

        wtpts = self.get_waveform_times('qubit drive I')
        mtpts = self.get_marker_times('qubit buffer')

        ii = 0
        self.markers['readout pulse'][ii] = ap.square(mtpts, 1, self.origin + self.measurement_delay,
                                                       self.measurement_width)
        self.markers['card trigger'][ii] = ap.square(mtpts, 1,
                                                      self.origin - self.card_delay + self.measurement_delay,
                                                      self.card_trig_width)

        pulse_probe_len = self.pulse_probe_len
        a = self.a

        if self.pulse_type == 'square':
            self.waveforms['qubit drive I'][ii] = ap.sideband(wtpts,
                                                               ap.square(wtpts, a,
                                                                          self.origin - pulse_probe_len - 3 * self.ramp_sigma,
                                                                          pulse_probe_len, self.ramp_sigma),
                                                               np.zeros(len(wtpts)),
                                                               0, 0)[0]
            self.waveforms['qubit drive Q'][ii] = ap.sideband(wtpts,
                                                               ap.square(wtpts, a,
                                                                          self.origin - pulse_probe_len - 3 * self.ramp_sigma,
                                                                          pulse_probe_len, self.ramp_sigma),
                                                               np.zeros(len(wtpts)),
                                                               0, 0)[1]
            self.markers['qubit buffer'][ii] = ap.square(mtpts, 1,
                                                          self.origin - pulse_probe_len - 3 * self.ramp_sigma - self.marker_start_buffer,
                                                          pulse_probe_len + 4 * self.ramp_sigma + self.marker_start_buffer)

            high_values_indices = self.markers['qubit buffer'][ii] > 1
            self.markers['qubit buffer'][ii][high_values_indices] = 1

        if self.pulse_type == 'gauss':
            self.waveforms['qubit drive I'][ii] = ap.sideband(wtpts,
                                                               ap.gauss(wtpts, a, self.origin - 3 * pulse_probe_len,
                                                                         pulse_probe_len), np.zeros(len(wtpts)),
                                                               self.fe_sideband_freq, self.phase)[0]
            self.waveforms['qubit drive Q'][ii] = ap.sideband(wtpts,
                                                               ap.gauss(wtpts, a, self.origin - 3 * pulse_probe_len,
                                                                         pulse_probe_len), np.zeros(len(wtpts)),
                                                               self.fe_sideband_freq, self.phase)[1]
            self.markers['qubit buffer'][ii] = ap.square(mtpts, 1, self.origin - 6 * pulse_probe_len - self.marker_start_buffer,
                                                           6 * pulse_probe_len + self.marker_start_buffer)

            high_values_indices = self.markers['qubit buffer'][ii] > 1
            self.markers['qubit buffer'][ii][high_values_indices] = 1
def flux_gauss(ftpts, pulse_location, pulse):
    waveforms_qubit_flux = ap.sideband(
        ftpts,
        ap.gauss(ftpts, pulse.amp, pulse_location - 0.5 * pulse.span_length, pulse.length),
        np.zeros(len(ftpts)),
        pulse.freq,
        pulse.phase,
    )[1]
    return waveforms_qubit_flux
示例#5
0
    def build_sequence(self):
        PulseSequence.build_sequence(self)

        wtpts = self.get_waveform_times('qubit drive I')
        mtpts = self.get_marker_times('qubit buffer')

        ii = 0
        w = self.pi_length
        a = self.pulse_cfg['a']

        # TODO: pulseblaster out of sync bug#

        awg_trig_len = 100
        start_pulseblaster(self.exp_period_ns, awg_trig_len,
                           self.origin + self.measurement_delay,
                           self.card_trig_width, self.measurement_width)
        run_pulseblaster()

        if self.pi_pulse:
            if self.pulse_type == 'square':
                self.waveforms['qubit drive I'][ii], self.waveforms['qubit drive Q'][ii] = \
                    ap.sideband(wtpts,
                                 ap.square(wtpts, a, self.origin - w - 2 * self.ramp_sigma , w,
                                            self.ramp_sigma), np.zeros(len(wtpts)),
                                 self.pulse_cfg['iq_freq'], 0)

                self.markers['qubit buffer'][ii] = ap.square(
                    mtpts, 1, self.origin - w - 4 * self.ramp_sigma -
                    self.marker_start_buffer,
                    w + 4 * self.ramp_sigma + self.marker_start_buffer)

            if self.pulse_type == 'gauss':
                gauss_sigma = w  #covention for the width of gauss pulse
                self.waveforms['qubit drive I'][ii], self.waveforms['qubit drive Q'][ii] = \
                    ap.sideband(wtpts,
                                 ap.gauss(wtpts, a, self.origin - 3 * gauss_sigma , gauss_sigma),
                                 np.zeros(len(wtpts)),
                                 self.pulse_cfg['iq_freq'], 0)
                self.markers['qubit buffer'][ii] = ap.square(
                    mtpts, 1,
                    self.origin - 6 * gauss_sigma - self.marker_start_buffer,
                    6 * gauss_sigma + self.marker_start_buffer)

        self.markers['readout pulse'][ii] = ap.square(
            mtpts, 1, self.origin + self.measurement_delay,
            self.measurement_width)
        self.markers['card trigger'][ii] = ap.square(
            mtpts, 1, self.origin - self.card_delay + self.measurement_delay,
            self.card_trig_width)
def gauss(wtpts, mtpts, origin, marker_start_buffer, marker_end_buffer, pulse_location, pulse):
    qubit_waveforms = ap.sideband(
        wtpts,
        ap.gauss(wtpts, pulse.amp, origin - pulse_location - 0.5 * pulse.span_length, pulse.length),
        np.zeros(len(wtpts)),
        pulse.freq,
        pulse.phase,
    )
    qubit_marker = ap.square(
        mtpts,
        1,
        origin - pulse_location - pulse.span_length - marker_start_buffer,
        pulse.span_length + marker_start_buffer - marker_end_buffer,
    )
    return (qubit_waveforms, qubit_marker)
示例#7
0
    def build_sequence(self):
        PulseSequence.build_sequence(self)

        wtpts = self.get_waveform_times('qubit drive I')
        mtpts = self.get_marker_times('qubit buffer')

        ii = 0
        w =self.pi_length
        a=self.pulse_cfg['a']

        # TODO: pulseblaster out of sync bug#

        awg_trig_len = 100
        start_pulseblaster(self.exp_period_ns, awg_trig_len, self.origin + self.measurement_delay,
                           self.card_trig_width, self.measurement_width)
        run_pulseblaster()

        if self.pi_pulse:
            if self.pulse_type == 'square':
                    self.waveforms['qubit drive I'][ii], self.waveforms['qubit drive Q'][ii] = \
                        ap.sideband(wtpts,
                                     ap.square(wtpts, a, self.origin - w - 2 * self.ramp_sigma , w,
                                                self.ramp_sigma), np.zeros(len(wtpts)),
                                     self.pulse_cfg['iq_freq'], 0)

                    self.markers['qubit buffer'][ii] = ap.square(mtpts, 1,
                                                                  self.origin - w - 4 * self.ramp_sigma - self.marker_start_buffer,
                                                                  w + 4 * self.ramp_sigma + self.marker_start_buffer)

            if self.pulse_type == 'gauss':
                gauss_sigma = w  #covention for the width of gauss pulse
                self.waveforms['qubit drive I'][ii], self.waveforms['qubit drive Q'][ii] = \
                    ap.sideband(wtpts,
                                 ap.gauss(wtpts, a, self.origin - 3 * gauss_sigma , gauss_sigma),
                                 np.zeros(len(wtpts)),
                                 self.pulse_cfg['iq_freq'], 0)
                self.markers['qubit buffer'][ii] = ap.square(mtpts, 1, self.origin - 6 * gauss_sigma - self.marker_start_buffer ,
                                                              6 * gauss_sigma + self.marker_start_buffer)

        self.markers['readout pulse'][ii] = ap.square(mtpts, 1, self.origin + self.measurement_delay,
                                                       self.measurement_width)
        self.markers['card trigger'][ii] = ap.square(mtpts, 1,
                                                      self.origin - self.card_delay + self.measurement_delay,
                                                      self.card_trig_width)
示例#8
0
    def build_sequence(self):
        PulseSequence.build_sequence(self)

        wtpts = self.get_waveform_times('qubit drive I')
        mtpts = self.get_marker_times('qubit buffer')

        for ii, d in enumerate(self.histo_pts):
            self.markers['readout pulse'][ii] = ap.square(mtpts, 1, self.origin + self.measurement_delay,
                                                           self.measurement_width)
            self.markers['card trigger'][ii] = ap.square(mtpts, 1,
                                                          self.origin - self.card_delay + self.measurement_delay,
                                                          self.card_trig_width)

            w = self.pi_length
            a = d * self.a

            if self.pulse_type == 'square':
                self.waveforms['qubit drive I'][ii], self.waveforms['qubit drive Q'][ii] = \
                    ap.sideband(wtpts,
                                 ap.square(wtpts, a, self.origin - w - 2 * self.ramp_sigma , w,
                                            self.ramp_sigma), np.zeros(len(wtpts)),
                                 self.pulse_cfg['iq_freq'], 0)

                self.markers['qubit buffer'][ii] = ap.square(mtpts, 1,
                                                              self.origin - w - 4 * self.ramp_sigma - self.marker_start_buffer,
                                                              w + 4 * self.ramp_sigma + self.marker_start_buffer)

            if self.pulse_type == 'gauss':
                gauss_sigma = w  #covention for the width of gauss pulse
                self.waveforms['qubit drive I'][ii], self.waveforms['qubit drive Q'][ii] = \
                    ap.sideband(wtpts,
                                 ap.gauss(wtpts, a, self.origin - 3 * gauss_sigma , gauss_sigma),
                                 np.zeros(len(wtpts)),
                                 self.pulse_cfg['iq_freq'], 0)

                self.markers['qubit buffer'][ii] = ap.square(mtpts, 1, self.origin - 6 * gauss_sigma - self.marker_start_buffer ,
                                                              6 * gauss_sigma + self.marker_start_buffer)
示例#9
0
    def build_sequence(self):
        PulseSequence.build_sequence(self)

        # waveform dict
        self.waveforms_dict = {}
        self.waveforms_tpts_dict = {}

        for awg in self.awg_info:
            for waveform in awg['waveforms']:
                self.waveforms_dict[waveform['name']] = self.waveforms[waveform['name']]
                self.waveforms_tpts_dict[waveform['name']] = self.get_waveform_times(waveform['name'])

        wtpts = self.get_waveform_times('qubit drive I')
#        mtpts = self.get_marker_times('qubit buffer')

        ii = 0
        # TODO: pulseblaster out of sync bug#

        awg_trig_len = 100
        start_pulseblaster(self.exp_period_ns, awg_trig_len, self.origin+self.card_delay, self.origin + self.measurement_delay,
                           self.card_trig_width, self.measurement_width)
        run_pulseblaster()

        # self.markers['readout pulse'][ii] = ap.square(mtpts, 1, self.origin + self.measurement_delay,
        #                                                self.measurement_width)
        # self.markers['card trigger'][ii] = ap.square(mtpts, 1,
        #                                               self.origin - self.card_delay + self.measurement_delay,
        #                                               self.card_trig_width)

        pulse_probe_len = self.pulse_probe_len
        a = self.a

        if self.pulse_type == 'square':
            if 'qubit drive I' in self.waveforms_dict:
                self.waveforms['qubit drive I'][ii] = ap.sideband(wtpts,
                                                                   ap.square(wtpts, a,
                                                                              self.origin - pulse_probe_len - 3 * self.ramp_sigma,
                                                                              pulse_probe_len, self.ramp_sigma),
                                                                   np.zeros(len(wtpts)),
                                                                  self.pulse_probe_cfg['iq_freq'], 0)[0]
            if 'qubit drive Q' in self.waveforms_dict:
                self.waveforms['qubit drive Q'][ii] = ap.sideband(wtpts,
                                                                   ap.square(wtpts, a,
                                                                              self.origin - pulse_probe_len - 3 * self.ramp_sigma,
                                                                          pulse_probe_len, self.ramp_sigma),
                                                               np.zeros(len(wtpts)),
                                                              self.pulse_probe_cfg['iq_freq'], 0)[1]
            # self.markers['qubit buffer'][ii] = ap.square(mtpts, 1,
            #                                               self.origin - pulse_probe_len - 3 * self.ramp_sigma - self.marker_start_buffer,
            #                                               pulse_probe_len + 4 * self.ramp_sigma + self.marker_start_buffer)
            #
            # high_values_indices = self.markers['qubit buffer'][ii] > 1
            # self.markers['qubit buffer'][ii][high_values_indices] = 1

        if self.pulse_type == 'gauss':
            if 'qubit drive I' in self.waveforms_dict:
                self.waveforms['qubit drive I'][ii] = ap.sideband(wtpts,
                                                               ap.gauss(wtpts, a, self.origin - 3 * pulse_probe_len,
                                                                         pulse_probe_len), np.zeros(len(wtpts)),
                                                              self.pulse_probe_cfg['iq_freq'], 0)[0]
            if 'qubit drive Q' in self.waveforms_dict:
                self.waveforms['qubit drive Q'][ii] = ap.sideband(wtpts,
                                                               ap.gauss(wtpts, a, self.origin - 3 * pulse_probe_len,
                                                                         pulse_probe_len), np.zeros(len(wtpts)),
                                                              self.pulse_probe_cfg['iq_freq'], 0)[1]
            # self.markers['qubit buffer'][ii] = ap.square(mtpts, 1, self.origin - 6 * pulse_probe_len - self.marker_start_buffer,
            #                                                6 * pulse_probe_len + self.marker_start_buffer)
            #
            # high_values_indices = self.markers['qubit buffer'][ii] > 1
            # self.markers['qubit buffer'][ii][high_values_indices] = 1

        ## heterodyne pulse
        self.marker_start_buffer = 0
        self.marker_end_buffer = 0

        heterodyne_pulsedata = ap.square(wtpts, self.cfg['readout']['heterodyne_a'], self.origin, self.cfg['readout']['width']+1000, 10)

        temp_h_I, temp_h_Q = \
            ap.sideband(wtpts, heterodyne_pulsedata, np.zeros(len(wtpts)), self.cfg['readout']['heterodyne_freq'], 0)

        if 'hetero_ch1' in self.waveforms_dict:
            self.waveforms['hetero_ch1'][ii] = temp_h_I
        if 'hetero_ch2' in self.waveforms_dict:
            self.waveforms['hetero_ch2'][ii] = temp_h_Q
示例#10
0
    def build_sequence(self):
        PulseSequence.build_sequence(self)

        # waveform dict
        self.waveforms_dict = {}
        self.waveforms_tpts_dict = {}

        for awg in self.awg_info:
            for waveform in awg['waveforms']:
                self.waveforms_dict[waveform['name']] = self.waveforms[waveform['name']]
                self.waveforms_tpts_dict[waveform['name']] = self.get_waveform_times(waveform['name'])

        wtpts = self.get_waveform_times('qubit drive I')
        # mtpts = self.get_marker_times('qubit buffer')

        # todo: why no pulse blaster code here? c.f. vacuum rabi

        awg_trig_len = 100
        start_pulseblaster(self.exp_period_ns, awg_trig_len, self.origin + self.card_delay,
                           self.origin + self.measurement_delay,
                           self.card_trig_width, self.measurement_width)


        for ii, d in enumerate(self.histo_pts):

            # self.markers['readout pulse'][ii] = ap.square(mtpts, 1, self.origin + self.measurement_delay,
            #                                                self.measurement_width)
            # self.markers['card trigger'][ii] = ap.square(mtpts, 1,
            #                                               self.origin - self.card_delay + self.measurement_delay,
            #                                               self.card_trig_width)

            w = self.pi_length
            if ii>0:
                a = self.pi_a
            else:
                a = 0

            w_ef = self.pi_ef_length
            if ii>1:
                a_ef = self.pi_ef_a
            else:
                a_ef = 0

            if 'qubit drive I' in self.waveforms_dict:
                self.waveforms['qubit drive I'][ii] = np.zeros(len(wtpts))
            if 'qubit drive Q' in self.waveforms_dict:
                self.waveforms['qubit drive Q'][ii] = np.zeros(len(wtpts))

            if self.pulse_type == 'square':
                pulsedata = ap.square(wtpts, a,
                                      self.origin - (w + 2 * self.ramp_sigma) - (w_ef + 4 * self.ramp_sigma), w,
                                      self.ramp_sigma)
                pulsedata_ef = ap.square(wtpts, a_ef, self.origin - (w + 2 * self.ramp_sigma), w_ef, self.ramp_sigma)

            if self.pulse_type == 'gauss':
                pulsedata = ap.gauss(wtpts, a, self.origin - 3 * w - 6 * w_ef, w)
                pulsedata_ef = ap.gauss(wtpts, a_ef, self.origin - 3 * w_ef, w_ef)

            temp_I, temp_Q = ap.sideband(wtpts, pulsedata, np.zeros(len(wtpts)), self.pulse_cfg['iq_freq'], 0)
            if 'qubit drive I' in self.waveforms_dict:
                self.waveforms['qubit drive I'][ii] += temp_I
            if 'qubit drive Q' in self.waveforms_dict:
                self.waveforms['qubit drive Q'][ii] += temp_Q

            # ef pulse shifted in freq by alpha
            # consistent with implementation in ef_rabi
            temp_I_ef, temp_Q_ef = ap.sideband(wtpts, pulsedata_ef, np.zeros(len(wtpts)),
                                         self.pulse_cfg['iq_freq'] + self.cfg['qubit']['alpha'], 0)
            if 'qubit drive I' in self.waveforms_dict:
                self.waveforms['qubit drive I'][ii] += temp_I_ef
            if 'qubit drive Q' in self.waveforms_dict:
                self.waveforms['qubit drive Q'][ii] += temp_Q_ef

            # self.markers['qubit buffer'][ii] = ap.square(mtpts, 1,
            #                                              self.origin - self.max_pulse_width - self.marker_start_buffer,
            #                                              self.max_pulse_width + self.marker_start_buffer)

            ## heterodyne pulse
            self.marker_start_buffer = 0
            self.marker_end_buffer = 0


            heterodyne_pulsedata = ap.square(wtpts, self.readout_cfg['heterodyne_a'], self.origin, self.readout_cfg['width'] + 1000, 10)

            temp_h_I, temp_h_Q = \
                ap.sideband(wtpts, heterodyne_pulsedata, np.zeros(len(wtpts)), self.cfg['readout']['heterodyne_freq'],
                            0)

            if 'hetero_ch1' in self.waveforms_dict:
                self.waveforms['hetero_ch1'][ii] = temp_h_I
            if 'hetero_ch2' in self.waveforms_dict:
                self.waveforms['hetero_ch2'][ii] = temp_h_Q
            ##

            ## flux pulses

            # this is to align flux pulse to readout? (diff in 2 pxdac cards)
            hw_delay = self.cfg['flux_pulse_info']['pxdac_hw_delay']

            if self.cfg['flux_pulse_info']['on_during_drive'] and self.cfg['flux_pulse_info']['on_during_readout']:

                flux_width = max(self.max_pulse_width + self.readout_cfg['delay'] + self.readout_cfg['width'] \
                                 - self.cfg['flux_pulse_info']['flux_drive_delay'], 0)
                flux_comp_width = flux_width  # self.cfg['flux_pulse_info']['dc_comp_pulse_length']
                flux_delay = self.cfg['flux_pulse_info']['flux_drive_delay'] + hw_delay
                flux_idle = 100.0
                flux_start = self.origin - self.max_pulse_width + flux_delay
                flux_comp_start = flux_start + flux_width + flux_idle

            elif (self.cfg['flux_pulse_info']['on_during_drive']) and (
            not self.cfg['flux_pulse_info']['on_during_readout']):

                flux_width = max(self.max_pulse_width - self.cfg['flux_pulse_info']['flux_drive_delay'], 0)
                flux_comp_width = flux_width  # self.cfg['flux_pulse_info']['dc_comp_pulse_length']
                flux_delay = self.cfg['flux_pulse_info']['flux_drive_delay'] + hw_delay
                flux_idle = self.readout_cfg['delay'] + self.readout_cfg['width'] + 100
                flux_start = self.origin - self.max_pulse_width + flux_delay
                flux_comp_start = flux_start + flux_width + flux_idle

            elif (not self.cfg['flux_pulse_info']['on_during_drive']) and (self.cfg['flux_pulse_info']['on_during_readout']):

                flux_width = self.readout_cfg['delay'] + self.readout_cfg['width']
                flux_comp_width = flux_width  # self.cfg['flux_pulse_info']['dc_comp_pulse_length']
                flux_delay = hw_delay
                flux_idle = 100.0
                flux_start = self.origin + flux_delay
                flux_comp_start = flux_start + flux_width + flux_idle

            else:
                flux_width = 0
                flux_comp_width = 0
                flux_delay = 0
                flux_idle = 0
                flux_start = self.origin
                flux_comp_start = flux_start

            flux_a = self.cfg['flux_pulse_info']['flux_a']
            flux_freq = self.cfg['flux_pulse_info']['flux_freq']
            # pulse_exponent = self.cfg['flux_pulse_info']['pulse_exponent']
            sigma = self.cfg["pulse_info"]["square_exp"]["ramp_sigma"]

            for jj in range(4):

                # flux_area = flux_width * flux_a[ii]
                flux_comp_a = - flux_a[jj]  # flux_area/float(flux_comp_width)

                f_I = np.zeros(len(self.waveforms_tpts_dict['flux_%d' % (jj + 1)]))
                f_Q = np.zeros(len(self.waveforms_tpts_dict['flux_%d' % (jj + 1)]))

                if flux_width > 0:
                    # self.psb.append('flux_' + str(ii + 1), 'general', 'square', amp=flux_a[ii],
                    #                 length=flux_width, freq=flux_freq[ii],
                    #                 delay=flux_delay)

                    flux_pulsedata = ap.square(self.waveforms_tpts_dict['flux_%d' % (jj + 1)], flux_a[jj], flux_start,
                                               flux_width, sigma)
                    temp_f_I, temp_f_Q = \
                        ap.sideband(self.waveforms_tpts_dict['flux_%d' % (jj + 1)], flux_pulsedata,
                                    np.zeros(len(self.waveforms_tpts_dict['flux_%d' % (jj + 1)])),
                                    flux_freq[jj], 0)
                    f_I += temp_f_I
                    f_Q += temp_f_Q

                if flux_comp_width > 0:
                    # self.psb.append('flux_' + str(ii + 1), 'general', 'square', amp=flux_comp_a,
                    #                 length=flux_comp_width, freq=flux_freq[ii],
                    #                 delay=flux_delay + flux_idle)

                    flux_pulsedata = ap.square(self.waveforms_tpts_dict['flux_%d' % (jj + 1)], flux_comp_a, flux_comp_start,
                                               flux_comp_width, sigma)
                    temp_f_I, temp_f_Q = \
                        ap.sideband(self.waveforms_tpts_dict['flux_%d' % (jj + 1)], flux_pulsedata,
                                    np.zeros(len(self.waveforms_tpts_dict['flux_%d' % (jj + 1)])),
                                    flux_freq[jj], 0)
                    f_I += temp_f_I
                    f_Q += temp_f_Q

                if 'flux_%d' %(jj+1) in self.waveforms_dict:
                    self.waveforms['flux_%d' %(jj+1)][ii] = f_I
示例#11
0
    def build_sequence(self):
        PulseSequence.build_sequence(self)

        wtpts = self.get_waveform_times('qubit drive I')
        #        mtpts = self.get_marker_times('qubit buffer')

        ii = 0
        w = self.pi_length
        a = self.pulse_cfg['pi_a']

        w_ef = self.pi_ef_length
        a_ef = self.pulse_cfg['pi_ef_a']

        # TODO: pulseblaster out of sync bug#

        awg_trig_len = 100
        start_pulseblaster(self.exp_period_ns, awg_trig_len,
                           self.origin + self.card_delay,
                           self.origin + self.measurement_delay,
                           self.card_trig_width, self.measurement_width)
        run_pulseblaster()

        # waveform dict
        self.waveforms_dict = {}
        self.waveforms_tpts_dict = {}

        for awg in self.awg_info:
            for waveform in awg['waveforms']:
                self.waveforms_dict[waveform['name']] = self.waveforms[
                    waveform['name']]
                self.waveforms_tpts_dict[
                    waveform['name']] = self.get_waveform_times(
                        waveform['name'])

        if 'qubit drive I' in self.waveforms_dict:
            self.waveforms['qubit drive I'][ii] = np.zeros(len(wtpts))

        if 'qubit drive Q' in self.waveforms_dict:
            self.waveforms['qubit drive Q'][ii] = np.zeros(len(wtpts))

        if self.pi_pulse:

            if self.pulse_type == 'square':
                pulsedata = ap.square(
                    wtpts, a, self.origin - (w + 2 * self.ramp_sigma) -
                    (w_ef + 4 * self.ramp_sigma), w, self.ramp_sigma)

            if self.pulse_type == 'gauss':
                pulsedata = ap.gauss(wtpts, a, self.origin - 3 * w - 6 * w_ef,
                                     w)

            temp_I, temp_Q = ap.sideband(wtpts, pulsedata,
                                         np.zeros(len(wtpts)),
                                         self.pulse_cfg['iq_freq'], 0)

            if 'qubit drive I' in self.waveforms_dict:
                self.waveforms['qubit drive I'][ii] += temp_I
            if 'qubit drive Q' in self.waveforms_dict:
                self.waveforms['qubit drive Q'][ii] += temp_Q

        if self.pi_ef_pulse:

            if self.pulse_type == 'square':
                pulsedata = ap.square(wtpts, a_ef,
                                      self.origin - (w + 2 * self.ramp_sigma),
                                      w_ef, self.ramp_sigma)

            if self.pulse_type == 'gauss':
                pulsedata = ap.gauss(wtpts, a_ef, self.origin - 3 * w_ef, w_ef)

            # ef pulse shifted in freq by alpha
            # consistent with implementation in ef_rabi
            temp_I, temp_Q = ap.sideband(
                wtpts, pulsedata, np.zeros(len(wtpts)),
                self.pulse_cfg['iq_freq'] + self.cfg['qubit']['alpha'], 0)
            if 'qubit drive I' in self.waveforms_dict:
                self.waveforms['qubit drive I'][ii] += temp_I
            if 'qubit drive Q' in self.waveforms_dict:
                self.waveforms['qubit drive Q'][ii] += temp_Q

        # self.waveforms['qubit drive I'][ii], self.waveforms['qubit drive Q'][ii] = \
        #         ap.sideband(wtpts, pulsedata, np.zeros(len(wtpts)), self.pulse_cfg['iq_freq'], 0)

        ## heterodyne pulse
        self.marker_start_buffer = 0
        self.marker_end_buffer = 0

        heterodyne_pulsedata = ap.square(wtpts,
                                         self.cfg['readout']['heterodyne_a'],
                                         self.origin,
                                         self.cfg['readout']['width'] + 1000,
                                         10)

        temp_h_I, temp_h_Q =\
            ap.sideband(wtpts, heterodyne_pulsedata, np.zeros(len(wtpts)), self.cfg['readout']['heterodyne_freq'], 0)

        if 'hetero_ch1' in self.waveforms_dict:
            self.waveforms['hetero_ch1'][ii] = temp_h_I
        if 'hetero_ch2' in self.waveforms_dict:
            self.waveforms['hetero_ch2'][ii] = temp_h_Q
示例#12
0
    def build_sequence(self):
        PulseSequence.build_sequence(self)

        # waveform dict
        self.waveforms_dict = {}
        self.waveforms_tpts_dict = {}

        for awg in self.awg_info:
            for waveform in awg['waveforms']:
                self.waveforms_dict[waveform['name']] = self.waveforms[
                    waveform['name']]
                self.waveforms_tpts_dict[
                    waveform['name']] = self.get_waveform_times(
                        waveform['name'])

        wtpts = self.get_waveform_times('qubit drive I')
        #        mtpts = self.get_marker_times('qubit buffer')

        ii = 0
        # TODO: pulseblaster out of sync bug#

        awg_trig_len = 100
        start_pulseblaster(self.exp_period_ns, awg_trig_len,
                           self.origin + self.card_delay,
                           self.origin + self.measurement_delay,
                           self.card_trig_width, self.measurement_width)
        run_pulseblaster()

        # self.markers['readout pulse'][ii] = ap.square(mtpts, 1, self.origin + self.measurement_delay,
        #                                                self.measurement_width)
        # self.markers['card trigger'][ii] = ap.square(mtpts, 1,
        #                                               self.origin - self.card_delay + self.measurement_delay,
        #                                               self.card_trig_width)

        pulse_probe_len = self.pulse_probe_len
        a = self.a

        if self.pulse_type == 'square':
            if 'qubit drive I' in self.waveforms_dict:
                self.waveforms['qubit drive I'][ii] = ap.sideband(
                    wtpts,
                    ap.square(
                        wtpts, a,
                        self.origin - pulse_probe_len - 3 * self.ramp_sigma,
                        pulse_probe_len, self.ramp_sigma),
                    np.zeros(len(wtpts)), self.pulse_probe_cfg['iq_freq'],
                    0)[0]
            if 'qubit drive Q' in self.waveforms_dict:
                self.waveforms['qubit drive Q'][ii] = ap.sideband(
                    wtpts,
                    ap.square(
                        wtpts, a,
                        self.origin - pulse_probe_len - 3 * self.ramp_sigma,
                        pulse_probe_len, self.ramp_sigma),
                    np.zeros(len(wtpts)), self.pulse_probe_cfg['iq_freq'],
                    0)[1]
            # self.markers['qubit buffer'][ii] = ap.square(mtpts, 1,
            #                                               self.origin - pulse_probe_len - 3 * self.ramp_sigma - self.marker_start_buffer,
            #                                               pulse_probe_len + 4 * self.ramp_sigma + self.marker_start_buffer)
            #
            # high_values_indices = self.markers['qubit buffer'][ii] > 1
            # self.markers['qubit buffer'][ii][high_values_indices] = 1

        if self.pulse_type == 'gauss':
            if 'qubit drive I' in self.waveforms_dict:
                self.waveforms['qubit drive I'][ii] = ap.sideband(
                    wtpts,
                    ap.gauss(wtpts, a, self.origin - 3 * pulse_probe_len,
                             pulse_probe_len), np.zeros(len(wtpts)),
                    self.pulse_probe_cfg['iq_freq'], 0)[0]
            if 'qubit drive Q' in self.waveforms_dict:
                self.waveforms['qubit drive Q'][ii] = ap.sideband(
                    wtpts,
                    ap.gauss(wtpts, a, self.origin - 3 * pulse_probe_len,
                             pulse_probe_len), np.zeros(len(wtpts)),
                    self.pulse_probe_cfg['iq_freq'], 0)[1]
            # self.markers['qubit buffer'][ii] = ap.square(mtpts, 1, self.origin - 6 * pulse_probe_len - self.marker_start_buffer,
            #                                                6 * pulse_probe_len + self.marker_start_buffer)
            #
            # high_values_indices = self.markers['qubit buffer'][ii] > 1
            # self.markers['qubit buffer'][ii][high_values_indices] = 1

        ## heterodyne pulse
        self.marker_start_buffer = 0
        self.marker_end_buffer = 0

        heterodyne_pulsedata = ap.square(wtpts,
                                         self.cfg['readout']['heterodyne_a'],
                                         self.origin,
                                         self.cfg['readout']['width'] + 1000,
                                         10)

        temp_h_I, temp_h_Q = \
            ap.sideband(wtpts, heterodyne_pulsedata, np.zeros(len(wtpts)), self.cfg['readout']['heterodyne_freq'], 0)

        if 'hetero_ch1' in self.waveforms_dict:
            self.waveforms['hetero_ch1'][ii] = temp_h_I
        if 'hetero_ch2' in self.waveforms_dict:
            self.waveforms['hetero_ch2'][ii] = temp_h_Q
示例#13
0
    def build_sequence(self):
        PulseSequence.build_sequence(self)

        wtpts = self.get_waveform_times('qubit drive I')
        mtpts = self.get_marker_times('qubit buffer')

        ii = 0
        # TODO: pulseblaster out of sync bug#

        awg_trig_len = 100
        start_pulseblaster(self.exp_period_ns, awg_trig_len,
                           self.origin + self.measurement_delay,
                           self.card_trig_width, self.measurement_width)
        run_pulseblaster()

        self.markers['readout pulse'][ii] = ap.square(
            mtpts, 1, self.origin + self.measurement_delay,
            self.measurement_width)
        self.markers['card trigger'][ii] = ap.square(
            mtpts, 1, self.origin - self.card_delay + self.measurement_delay,
            self.card_trig_width)

        pulse_probe_len = self.pulse_probe_len
        a = self.a

        if self.pulse_type == 'square':
            self.waveforms['qubit drive I'][ii] = ap.sideband(
                wtpts,
                ap.square(wtpts, a,
                          self.origin - pulse_probe_len - 3 * self.ramp_sigma,
                          pulse_probe_len, self.ramp_sigma),
                np.zeros(len(wtpts)), self.pulse_probe_cfg['iq_freq'], 0)[0]
            self.waveforms['qubit drive Q'][ii] = ap.sideband(
                wtpts,
                ap.square(wtpts, a,
                          self.origin - pulse_probe_len - 3 * self.ramp_sigma,
                          pulse_probe_len, self.ramp_sigma),
                np.zeros(len(wtpts)), self.pulse_probe_cfg['iq_freq'], 0)[1]
            self.markers['qubit buffer'][ii] = ap.square(
                mtpts, 1, self.origin - pulse_probe_len - 3 * self.ramp_sigma -
                self.marker_start_buffer, pulse_probe_len +
                4 * self.ramp_sigma + self.marker_start_buffer)

            high_values_indices = self.markers['qubit buffer'][ii] > 1
            self.markers['qubit buffer'][ii][high_values_indices] = 1

        if self.pulse_type == 'gauss':
            self.waveforms['qubit drive I'][ii] = ap.sideband(
                wtpts,
                ap.gauss(wtpts, a,
                         self.origin - 3 * pulse_probe_len, pulse_probe_len),
                np.zeros(len(wtpts)), self.pulse_probe_cfg['iq_freq'], 0)[0]
            self.waveforms['qubit drive Q'][ii] = ap.sideband(
                wtpts,
                ap.gauss(wtpts, a,
                         self.origin - 3 * pulse_probe_len, pulse_probe_len),
                np.zeros(len(wtpts)), self.pulse_probe_cfg['iq_freq'], 0)[1]
            self.markers['qubit buffer'][ii] = ap.square(
                mtpts, 1,
                self.origin - 6 * pulse_probe_len - self.marker_start_buffer,
                6 * pulse_probe_len + self.marker_start_buffer)

            high_values_indices = self.markers['qubit buffer'][ii] > 1
            self.markers['qubit buffer'][ii][high_values_indices] = 1