def generate_sequence(do_program=True):
    seq = Sequence('spin_control')
    # vars for the channel names
    chan_mw_pm = 'MW_pulsemod'
    chan_mwI = 'MW_Imod'
    chan_mwQ = 'MW_Qmod'
    
    #awgcfg.configure_sequence(seq, mw = {chan_mw_pm: {'AWG_channel': 'ch1m1'}})
   
    awgcfg.configure_sequence(seq,'mw')

    for i in np.arange(nr_of_datapoints):
        if i == nr_of_datapoints-1:
            seq.add_element(name = 'spin_control_'+str(i+1), 
                trigger_wait = True, goto_target = 'spin_control_1')
        else:
            seq.add_element(name = 'spin_control_'+str(i+1), 
                trigger_wait = True)

        seq.add_pulse('wait_'+str(i+1), chan_mw_pm, 'spin_control_'+str(i+1), 
                start = 0, duration = 1500, amplitude = 0)
        seq.add_pulse('PM_microwave_'+str(length[i]), chan_mw_pm, 
                'spin_control_'+str(i+1), start = 0, duration = length[i], 
                start_reference='wait_'+str(i+1),
                link_start_to = 'end')
        seq.add_pulse('I_microwave_'+str(length[i]), chan_mwI, 
                'spin_control_'+str(i+1), start = 0, duration = length[i], 
                start_reference='wait_'+str(i+1),
                link_start_to = 'end')
    

    seq.set_instrument(awg)
    seq.set_clock(1e9)
    seq.set_send_waveforms(do_program)
    seq.set_send_sequence(do_program)
    seq.set_program_channels(True)
    seq.set_start_sequence(False)
    seq.force_HW_sequencing(True)
    seq.send_sequence()
    def generate_sequence(self, do_program=True):
        awg.set_event_jump_timing('SYNC')
        self.seq = Sequence('lde')
        seq = self.seq

        # channels
        chan_hhsync = 'HH_sync'  # historically PH_start
        chan_hh_ma1 = 'HH_MA1'  # historically PH_sync
        chan_plusync = 'PLU_gate'

        chan_alaser = 'AOM_Newfocus'
        chan_eom = 'EOM_Matisse'
        chan_eom_aom = 'EOM_AOM_Matisse'

        chan_mw_pm = 'MW_pulsemod'
        chan_mwI_lt2 = 'MW_Imod'
        chan_mwQ_lt2 = 'MW_Qmod'
        chan_mwI_lt1 = 'MW_Imod_lt1'
        chan_mwQ_lt1 = 'MW_Qmod_lt1'

        # check if MWpi and optical pi don't overlap:

        if self.wait_after_opt_pi >= self.opt_pi_separation - \
                self.eom_pulse_duration - self.pi_lt2_duration:
            print '!!! =================== !!!'
            print 'WARNING: pi pulse and 2nd optical pi pulse might overlap!'
            print 'Decrease variable wait_after_opt_pi'
            print '!!! =================== !!!'

        # TODO study the current AWG configuration, then adapt this
        awgcfg.configure_sequence(
            self.seq,
            'hydraharp',
            'mw',
            LDE={
                chan_eom_aom: {
                    'high': self.eom_aom_amplitude
                },
                chan_alaser: {
                    'high': self.A_SP_amplitude,
                }
            },
        )
        seq.add_element('lde',
                        goto_target='idle',
                        repetitions=self.max_LDE_attempts,
                        event_jump_target='idle',
                        trigger_wait=True)

        # 1: spin pumping
        seq.add_pulse(
            'initialdelay',
            chan_alaser,
            'lde',
            start=0,
            duration=10,
            amplitude=0,
        )
        seq.add_pulse('spinpumping',
                      chan_alaser,
                      'lde',
                      start=0,
                      duration=self.SP_duration,
                      start_reference='initialdelay',
                      link_start_to='end',
                      amplitude=1)

        # 2: Pi/2 pulses on both spins
        seq.add_pulse('pi/2-1 lt2',
                      chan_mwI_lt2,
                      'lde',
                      duration=self.pi2_lt2_duration,
                      amplitude=self.pi2_lt2_amplitude,
                      start_reference='spinpumping',
                      start=self.wait_after_SP,
                      link_start_to='end')
        seq.add_pulse('pi/2-1 lt1',
                      chan_mwI_lt1,
                      'lde',
                      duration=self.pi2_lt1_duration,
                      amplitude=self.pi2_lt1_amplitude,
                      start_reference='pi/2-1 lt2',
                      start=(self.pi2_lt2_duration - self.pi2_lt1_duration) /
                      2,
                      link_start_to='start')

        seq.add_pulse('pi/2-1 pm', chan_mw_pm, 'lde',
                amplitude = self.MW_pulsemod_amplitude,
                duration = max(self.pi2_lt2_duration+\
                        2*self.MW_pulsemod_risetime_lt2,
                    self.pi2_lt1_duration+\
                            2*self.MW_pulsemod_risetime_lt1),
                start = min(-self.MW_pulsemod_risetime_lt2,
                    (self.pi2_lt2_duration-self.pi2_lt1_duration)/2 - \
                            self.MW_pulsemod_risetime_lt1),
                start_reference = 'pi/2-1 lt2',
                link_start_to = 'start' )

        # 3a: optical pi-pulse no 1
        i = 1
        last = 'pi/2-1 pm'

        seq.add_pulse('start' + str(i),
                      chan_hhsync,
                      'lde',
                      start=self.wait_after_pi2,
                      duration=50,
                      amplitude=2.0,
                      start_reference=last,
                      link_start_to='end')
        last = 'start' + str(i)

        seq.add_pulse('mrkr' + str(i),
                      chan_hh_ma1,
                      'lde',
                      start=-20,
                      duration=50,
                      amplitude=2.0,
                      start_reference=last,
                      link_start_to='start')

        seq.add_pulse('start' + str(i) + 'delay',
                      chan_hhsync,
                      'lde',
                      start=0,
                      duration=50,
                      amplitude=0,
                      start_reference=last,
                      link_start_to='end')
        last = 'start' + str(i) + 'delay'

        seq.add_pulse('AOM' + str(i),
                      chan_eom_aom,
                      'lde',
                      start=self.aom_start,
                      duration=self.aom_duration,
                      start_reference=last,
                      link_start_to='start')

        seq.add_pulse('EOM_off' + str(i),
                      chan_eom,
                      'lde',
                      amplitude=self.eom_off_amplitude,
                      start=self.eom_start,
                      duration=self.eom_off_duration,
                      start_reference=last,
                      link_start_to='start')

        seq.add_pulse('EOM_pulse'+str(i),  chan_eom, 'lde',
                amplitude = self.eom_pulse_amplitude - self.eom_off_amplitude,
                start = self.eom_start + self.eom_off_duration/2 + \
                        self.eom_pulse_offset, duration = self.eom_pulse_duration,
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_overshoot1'+str(i),  chan_eom, 'lde',
                amplitude = self.eom_overshoot1,
                start = self.eom_start + self.eom_off_duration/2 + \
                        self.eom_pulse_offset + self.eom_pulse_duration,
                duration = self.eom_overshoot_duration1,
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_overshoot2'+str(i),  chan_eom, 'lde',
                amplitude = self.eom_overshoot2,
                start = self.eom_start + self.eom_off_duration/2 + \
                        self.eom_pulse_offset + self.eom_pulse_duration + \
                        self.eom_overshoot_duration1,
                duration = self.eom_overshoot_duration2,
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_off_comp' + str(i),
                      chan_eom,
                      'lde',
                      amplitude=-self.eom_off_amplitude,
                      start=self.eom_start + self.eom_off_duration,
                      duration=self.eom_off_duration,
                      start_reference=last,
                      link_start_to='start')

        seq.add_pulse('EOM_pulse_comp'+str(i),  chan_eom, 'lde',
                amplitude = -self.eom_pulse_amplitude + self.eom_off_amplitude,
                start = self.eom_start+self.eom_off_duration + \
                        int(self.eom_off_duration/2) + self.eom_pulse_offset,
                duration = self.eom_pulse_duration,
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_overshoot1_comp'+str(i),  chan_eom, 'lde',
                amplitude = -self.eom_overshoot1,
                start = self.eom_start+self.eom_off_duration + \
                        int(self.eom_off_duration/2) + self.eom_pulse_offset + \
                        self.eom_pulse_duration,
                duration = self.eom_overshoot_duration1,
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_overshoot2_comp'+str(i),  chan_eom, 'lde',
                amplitude = -self.eom_overshoot2,
                start = self.eom_start+self.eom_off_duration + \
                        int(self.eom_off_duration/2) + self.eom_pulse_offset + \
                        self.eom_pulse_duration + self.eom_overshoot_duration1,
                duration = self.eom_overshoot_duration2,
                start_reference = last, link_start_to = 'start')
        last = 'EOM_pulse' + str(i)

        # 3b: add pre-sync pulses for the HH
        for j in range(self.presync_pulses):
            if not debug_mode:
                pre_sync_amp = 2.0
            else:
                pre_sync_amp = 0.0

            seq.add_pulse('presync' + str(j),
                          chan_hhsync,
                          'lde',
                          start=-(j + 1) * self.opt_pi_separation,
                          duration=50,
                          amplitude=pre_sync_amp,
                          start_reference='start' + str(i),
                          link_start_to='start')

        # 3c: add PLU gate
        seq.add_pulse('plu-gate' + str(i),
                      chan_plusync,
                      'lde',
                      start=0,
                      duration=self.plu_gate_duration,
                      amplitude=2.0,
                      start_reference='EOM_pulse' + str(i),
                      link_start_to='end')

        # 4: spin pi pulses
        seq.add_pulse('pi lt2',
                      chan_mwI_lt2,
                      'lde',
                      duration=self.pi_lt2_duration,
                      amplitude=self.pi_lt2_amplitude,
                      start_reference=last,
                      start=self.wait_after_opt_pi,
                      link_start_to='end')
        seq.add_pulse('pi lt1',
                      chan_mwI_lt1,
                      'lde',
                      duration=self.pi_lt1_duration,
                      amplitude=self.pi_lt1_amplitude,
                      start_reference='pi lt2',
                      start=(self.pi_lt2_duration - self.pi_lt1_duration) / 2,
                      link_start_to='start')
        seq.add_pulse('pi pm', chan_mw_pm, 'lde',
                amplitude = self.MW_pulsemod_amplitude,
                duration = max(self.pi_lt2_duration+\
                        2*self.MW_pulsemod_risetime_lt2,
                    self.pi_lt1_duration+\
                            2*self.MW_pulsemod_risetime_lt1),
                start = min(-self.MW_pulsemod_risetime_lt2,
                    (self.pi_lt2_duration-self.pi_lt1_duration)/2 - \
                            self.MW_pulsemod_risetime_lt1),
                start_reference = 'pi lt2',
                link_start_to = 'start')

        # 5a: optical pi-pulse no2
        i = 2

        seq.add_pulse('start' + str(i),
                      chan_hhsync,
                      'lde',
                      start=self.opt_pi_separation,
                      duration=50,
                      amplitude=2.0,
                      start_reference='start' + str(i - 1),
                      link_start_to='start')
        last = 'start' + str(i)

        seq.add_pulse('start' + str(i) + 'delay',
                      chan_hhsync,
                      'lde',
                      start=0,
                      duration=50,
                      amplitude=0,
                      start_reference=last,
                      link_start_to='end')
        last = 'start' + str(i) + 'delay'

        seq.add_pulse('AOM' + str(i),
                      chan_eom_aom,
                      'lde',
                      start=self.aom_start,
                      duration=self.aom_duration,
                      start_reference=last,
                      link_start_to='start')

        seq.add_pulse('EOM_off' + str(i),
                      chan_eom,
                      'lde',
                      amplitude=self.eom_off_amplitude,
                      start=self.eom_start,
                      duration=self.eom_off_duration,
                      start_reference=last,
                      link_start_to='start')

        seq.add_pulse('EOM_pulse'+str(i),  chan_eom, 'lde',
                amplitude = self.eom_pulse_amplitude - self.eom_off_amplitude,
                start = self.eom_start + self.eom_off_duration/2 + \
                        self.eom_pulse_offset, duration = self.eom_pulse_duration,
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_overshoot1'+str(i),  chan_eom, 'lde',
                amplitude = self.eom_overshoot1,
                start = self.eom_start + self.eom_off_duration/2 + \
                        self.eom_pulse_offset + self.eom_pulse_duration,
                duration = self.eom_overshoot_duration1,
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_overshoot2'+str(i),  chan_eom, 'lde',
                amplitude = self.eom_overshoot2,
                start = self.eom_start + self.eom_off_duration/2 + \
                        self.eom_pulse_offset + self.eom_pulse_duration + \
                        self.eom_overshoot_duration1,
                duration = self.eom_overshoot_duration2,
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_off_comp' + str(i),
                      chan_eom,
                      'lde',
                      amplitude=-self.eom_off_amplitude,
                      start=self.eom_start + self.eom_off_duration,
                      duration=self.eom_off_duration,
                      start_reference=last,
                      link_start_to='start')

        seq.add_pulse('EOM_pulse_comp'+str(i),  chan_eom, 'lde',
                amplitude = -self.eom_pulse_amplitude + self.eom_off_amplitude,
                start = self.eom_start+self.eom_off_duration + \
                        int(self.eom_off_duration/2) + self.eom_pulse_offset,
                duration = self.eom_pulse_duration,
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_overshoot1_comp'+str(i),  chan_eom, 'lde',
                amplitude = -self.eom_overshoot1,
                start = self.eom_start+self.eom_off_duration + \
                        int(self.eom_off_duration/2) + self.eom_pulse_offset + \
                        self.eom_pulse_duration,
                duration = self.eom_overshoot_duration1,
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_overshoot2_comp'+str(i),  chan_eom, 'lde',
                amplitude = -self.eom_overshoot2,
                start = self.eom_start+self.eom_off_duration + \
                        int(self.eom_off_duration/2) + self.eom_pulse_offset + \
                        self.eom_pulse_duration + self.eom_overshoot_duration1,
                duration = self.eom_overshoot_duration2,
                start_reference = last, link_start_to = 'start')
        last = 'EOM_pulse' + str(i)

        # 5b: add post-sync pulses for the HH
        for j in range(self.postsync_pulses):
            if not debug_mode:
                post_sync_amp = 2.0
            else:
                post_sync_amp = 0.0

            seq.add_pulse('postsync' + str(j),
                          chan_hhsync,
                          'lde',
                          start=(j + 1) * self.opt_pi_separation,
                          duration=50,
                          amplitude=post_sync_amp,
                          start_reference='start' + str(i),
                          link_start_to='start')

        # 5c: add PLU gate
        seq.add_pulse('plu-gate' + str(i),
                      chan_plusync,
                      'lde',
                      start=self.plu_2_start_offset,
                      duration=self.plu_gate_duration,
                      amplitude=2.0,
                      start_reference='EOM_pulse' + str(i),
                      link_start_to='end')

        # 5d: two additional PLU gates
        seq.add_pulse('plu-gate3',
                      chan_plusync,
                      'lde',
                      start=self.plu_3_delay,
                      duration=self.plu_gate_duration,
                      amplitude=2.0,
                      start_reference='plu-gate2',
                      link_start_to='end')
        seq.add_pulse('plu-gate4',
                      chan_plusync,
                      'lde',
                      start=self.plu_4_delay,
                      duration=self.plu_gate_duration,
                      amplitude=2.0,
                      start_reference='plu-gate2',
                      link_start_to='end')

        # 6: basis rotation
        if m.basis_rot:
            Iamplt1 = self.basis_rot_I_amplitude_lt1
            Qamplt1 = self.basis_rot_Q_amplitude_lt1
            Iamplt2 = self.basis_rot_I_amplitude_lt2
            Qamplt2 = self.basis_rot_Q_amplitude_lt2
            PMamp = self.MW_pulsemod_amplitude
        else:
            Iamplt1 = Qamplt1 = Iamplt2 = Qamplt2 = PMamp = 0

        seq.add_pulse('basis rot lt2 I',
                      chan_mwI_lt2,
                      'lde',
                      duration=self.basis_rot_duration_lt2,
                      amplitude=Iamplt2,
                      start_reference=last,
                      start=self.wait_after_opt_pi2,
                      link_start_to='end')
        seq.add_pulse('basis rot lt2 Q',
                      chan_mwQ_lt2,
                      'lde',
                      duration=self.basis_rot_duration_lt2,
                      amplitude=Qamplt2,
                      start_reference=last,
                      start=self.wait_after_opt_pi2,
                      link_start_to='end')

        seq.add_pulse('basis rot lt1 I', chan_mwI_lt1, 'lde',
                duration = self.basis_rot_duration_lt1,
                amplitude = Iamplt1,
                start_reference = 'basis rot lt2 I',
                start = (self.basis_rot_duration_lt2-\
                        self.basis_rot_duration_lt1)/2,
                link_start_to = 'start' )
        seq.add_pulse('basis rot lt1 Q', chan_mwQ_lt1, 'lde',
                duration = self.basis_rot_duration_lt1,
                amplitude = Qamplt1,
                start_reference = 'basis rot lt2 I',
                start = (self.basis_rot_duration_lt2-\
                        self.basis_rot_duration_lt1)/2,
                link_start_to = 'start' )

        seq.add_pulse('basis rot pm', chan_mw_pm, 'lde',
                amplitude = PMamp,
                duration = max(self.basis_rot_duration_lt2+\
                        2*self.MW_pulsemod_risetime_lt2,
                    self.basis_rot_duration_lt1+\
                            2*self.MW_pulsemod_risetime_lt1),
                start = min(-self.MW_pulsemod_risetime_lt2,
                    (self.basis_rot_duration_lt2-\
                            self.basis_rot_duration_lt1)/2 - \
                            self.MW_pulsemod_risetime_lt1),
                start_reference = 'basis rot lt2 I',
                link_start_to = 'start')

        # 7: final delay
        seq.add_pulse('final delay',
                      chan_hhsync,
                      'lde',
                      amplitude=0,
                      duration=self.finaldelay,
                      start=0,
                      start_reference='plu-gate4',
                      link_start_to='end')

        # idle element
        seq.add_element('idle', goto_target='lde')
        seq.add_pulse('empty',
                      chan_alaser,
                      'idle',
                      start=0,
                      duration=1000,
                      amplitude=0)

        seq.set_instrument(awg)
        seq.set_clock(1e9)
        seq.set_send_waveforms(do_program)
        seq.set_send_sequence(do_program)
        seq.set_program_channels(True)
        seq.set_start_sequence(False)
        seq.force_HW_sequencing(True)
        seq.send_sequence()

        return seq
예제 #3
0
def generate_sequence(do_program=True):
    seq = Sequence('conditionalrepumptest')

    # vars for the channel names
    chan_hhsync = 'HH_sync'  # historically PH_start
    chan_hh_ma1 = 'HH_MA1'  # historically PH_sync
    chan_exlaser = 'AOM_Matisse'  # ok
    chan_alaser = 'AOM_Newfocus'  # ok
    chan_adwinsync = 'ADwin_sync'  # ok
    chan_eom = 'EOM_Matisse'
    chan_eom_aom = 'EOM_AOM_Matisse'

    awgcfg.configure_sequence(seq,
                              'basics',
                              'hydraharp',
                              ssro={chan_alaser: {
                                  'high': par_cr_A_amplitude
                              }})

    seq.add_element('preselect',
                    goto_target='preselect',
                    event_jump_target='wait_for_ADwin')

    seq.add_pulse('cr1',
                  chan_exlaser,
                  'preselect',
                  duration=par_cr_duration,
                  amplitude=par_cr_Ex_amplitude)

    seq.add_pulse('cr1_2',
                  chan_alaser,
                  'preselect',
                  start=0,
                  duration=0,
                  amplitude=par_cr_A_amplitude,
                  start_reference='cr1',
                  link_start_to='start',
                  duration_reference='cr1',
                  link_duration_to='duration')

    seq.add_pulse('ADwin_ionization_probe',
                  chan_adwinsync,
                  'preselect',
                  start=0,
                  duration=-20000,
                  start_reference='cr1',
                  link_start_to='start',
                  duration_reference='cr1',
                  link_duration_to='duration')

    seq.add_element('wait_for_ADwin',
                    trigger_wait=True,
                    goto_target='optical_rabi')
    seq.add_pulse('probe1',
                  chan_exlaser,
                  'wait_for_ADwin',
                  start=0,
                  duration=1000,
                  amplitude=par_cr_Ex_amplitude)
    seq.add_pulse('probe2',
                  chan_alaser,
                  'wait_for_ADwin',
                  start=-125,
                  duration=1000,
                  amplitude=par_cr_A_amplitude)

    seq.set_instrument(ins_awg)
    seq.set_clock(1e9)
    seq.set_send_waveforms(do_program)
    seq.set_send_sequence(do_program)
    seq.set_program_channels(True)
    seq.set_start_sequence(True)
    seq.force_HW_sequencing(True)
    seq.send_sequence()

    return True
    def generate_sequence(self, fstart, fstop, fsteps, do_program=True):
        seq = Sequence(self.name)

        # vars for the channel names
        chan_mwpulsemod = 'MW_pulsemod'
        chan_mwI = 'MW_Imod'
        chan_mwQ = 'MW_Qmod'
        chan_green = 'AOM_Green'
        chan_hhsync = 'HH_sync'

        basicscfg = {'AOM_Green': {'high': 0.6}}
        awgcfg.configure_sequence(seq, 'hydraharp', 'mw', basics=basicscfg)

        # sweep the modulation freq
        for i, f_mod in enumerate(np.linspace(fstart, fstop, fsteps)):

            ###################################################################
            # the actual rabi sequence and readout

            ename = 'desrseq%d' % i
            kw = {} if i < fsteps - 1 else {'goto_target': 'desrseq0'}
            seq.add_element(ename, **kw)

            seq.add_pulse('wait_for_singlets',
                          chan_hhsync,
                          ename,
                          duration=1500,
                          amplitude=0)

            seq.add_IQmod_pulse(name='mwburst',
                                channel=(chan_mwI, chan_mwQ),
                                element=ename,
                                start=0,
                                duration=self.pipulse,
                                start_reference='wait_for_singlets',
                                link_start_to='end',
                                frequency=f_mod,
                                amplitude=self.amplitude_mod)

            seq.clone_channel(chan_mwpulsemod,
                              chan_mwI,
                              ename,
                              start=-self.MW_pulse_mod_risetime,
                              duration=2 * self.MW_pulse_mod_risetime,
                              link_start_to='start',
                              link_duration_to='duration',
                              amplitude=2.0)

            seq.add_pulse('readout',
                          chan_green,
                          ename,
                          start=500,
                          duration=2000,
                          start_reference='mwburst-I',
                          link_start_to='end')

            seq.add_pulse('start_counting',
                          chan_hhsync,
                          ename,
                          start=-100,
                          duration=50,
                          start_reference='readout',
                          link_start_to='start')
            ###################################################################

        seq.set_instrument(self.ins_awg)
        seq.set_clock(1e9)
        seq.set_send_waveforms(do_program)
        seq.set_send_sequence(do_program)
        seq.set_program_channels(True)
        seq.set_start_sequence(False)
        seq.force_HW_sequencing(True)
        seq.send_sequence()

        return True
예제 #5
0
def generate_sequence(do_program=True):
    seq = Sequence('tpqi_remote')

    # vars for the channel names
    chan_hhsync = 'HH_sync'  # historically PH_start
    chan_hh_ma1 = 'HH_MA1'  # historically PH_sync
    chan_exlaser = 'AOM_Matisse'  # ok
    chan_alaser_lt2 = 'AOM_Newfocus'  # ok
    chan_alaser_lt1 = 'AOM_Newfocus_lt1'
    chan_adwinsync = 'ADwin_sync'  # ok
    chan_eom = 'EOM_Matisse'
    chan_eom_aom = 'EOM_AOM_Matisse'

    awgcfg.configure_sequence(
        seq,
        'hydraharp',
        optical_rabi={
            chan_eom_aom: {
                'high': par_eom_aom_amplitude
            },
            chan_alaser_lt1: {
                'high': par_sp_voltage_lt1
            }
        },
        ssro={chan_alaser_lt2: {
            'high': par_sp_voltage_lt2
        }})

    seq.add_element(
        'optical_rabi',
        goto_target='idle')  #'optical_rabi',event_jump_target='idle')

    seq.add_pulse('spinpumping_LT1',
                  chan_alaser_lt1,
                  'optical_rabi',
                  start=0,
                  duration=par_sp_duration)

    seq.add_pulse('spinpumping_LT2',
                  chan_alaser_lt2,
                  'optical_rabi',
                  start=0,
                  duration=par_sp_duration)

    #Define a start point for the sequence, set amplitude to 0. actual sync pulse comes later
    if debug_mode:
        seq.add_pulse('hh_debug_sync',
                      chan_hhsync,
                      'optical_rabi',
                      start=0,
                      duration=50,
                      amplitude=0.0)

    seq.add_pulse('start',
                  chan_hhsync,
                  'optical_rabi',
                  start=0,
                  start_reference='spinpumping_LT1',
                  link_start_to='end',
                  duration=50,
                  amplitude=0.0)

    last_start = 'start'
    seq.add_pulse('start_marker',
                  chan_hh_ma1,
                  'optical_rabi',
                  start=par_rabi_cycle_duration / 2,
                  start_reference='start',
                  link_start_to='end',
                  duration=50)

    for i in arange(par_rabi_reps):
        #FIXME position for the initialization pulse

        seq.add_pulse('start' + str(i),
                      chan_hhsync,
                      'optical_rabi',
                      start=par_rabi_cycle_duration,
                      duration=50,
                      amplitude=2.0,
                      start_reference=last_start,
                      link_start_to='start')
        last_start = 'start' + str(i)

        seq.add_pulse('start' + str(i) + 'delay',
                      chan_hhsync,
                      'optical_rabi',
                      start=0,
                      duration=50,
                      amplitude=0,
                      start_reference=last_start,
                      link_start_to='end')
        last = 'start' + str(i) + 'delay'

        seq.add_pulse('AOM' + str(i),
                      chan_eom_aom,
                      'optical_rabi',
                      start=par_aom_start,
                      duration=par_aom_duration,
                      start_reference=last,
                      link_start_to='start')

        seq.add_pulse('EOM_off' + str(i),
                      chan_eom,
                      'optical_rabi',
                      amplitude=par_eom_off_amplitude,
                      start=par_eom_start,
                      duration=par_eom_off_duration,
                      start_reference=last,
                      link_start_to='start')

        seq.add_pulse('EOM_pulse'+str(i),  chan_eom, 'optical_rabi',
                amplitude = par_eom_pulse_amplitude - par_eom_off_amplitude,
                start = par_eom_start + par_eom_off_duration/2 + \
                        par_eom_pulse_offset, duration = par_eom_pulse_duration,
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_overshoot1'+str(i),  chan_eom, 'optical_rabi',
                amplitude = par_eom_overshoot1,
                start = par_eom_start + par_eom_off_duration/2 + \
                        par_eom_pulse_offset + par_eom_pulse_duration,
                duration = par_eom_overshoot_duration1,
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_overshoot2'+str(i),  chan_eom, 'optical_rabi',
                amplitude = par_eom_overshoot2,
                start = par_eom_start + par_eom_off_duration/2 + \
                        par_eom_pulse_offset + par_eom_pulse_duration + \
                        par_eom_overshoot_duration1,
                duration = par_eom_overshoot_duration2,
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_off_comp' + str(i),
                      chan_eom,
                      'optical_rabi',
                      amplitude=-par_eom_off_amplitude,
                      start=par_eom_start + par_eom_off_duration,
                      duration=par_eom_off_duration,
                      start_reference=last,
                      link_start_to='start')

        seq.add_pulse('EOM_pulse_comp'+str(i),  chan_eom, 'optical_rabi',
                amplitude = -par_eom_pulse_amplitude + par_eom_off_amplitude,
                start = par_eom_start+par_eom_off_duration + \
                        int(par_eom_off_duration/2) + par_eom_pulse_offset,
                duration = par_eom_pulse_duration,
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_overshoot1_comp'+str(i),  chan_eom, 'optical_rabi',
                amplitude = -par_eom_overshoot1,
                start = par_eom_start+par_eom_off_duration + \
                        int(par_eom_off_duration/2) + par_eom_pulse_offset + \
                        par_eom_pulse_duration,
                duration = par_eom_overshoot_duration1,
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_overshoot2_comp'+str(i),  chan_eom, 'optical_rabi',
                amplitude = -par_eom_overshoot2,
                start = par_eom_start+par_eom_off_duration + \
                        int(par_eom_off_duration/2) + par_eom_pulse_offset + \
                        par_eom_pulse_duration + par_eom_overshoot_duration1,
                duration = par_eom_overshoot_duration2,
                start_reference = last, link_start_to = 'start')

        if use_pulse_gating_module:
            seq.add_pulse('gate'+str(i),  chan_pulse_gating_module, 'optical_rabi',
                amplitude = 2.,
                start = par_eom_start + par_eom_off_duration/2 + \
                        par_eom_pulse_offset + par_gate_start_offset,
                duration = par_gate_duration,
                start_reference = last, link_start_to = 'start')

    first_sync = 'start0'
    last_sync = 'start' + str(par_rabi_reps - 1)

    if not debug_mode:
        last = first_sync
        for i in arange(par_pre_rabi_syncs):
            seq.add_pulse('pre_start' + str(i),
                          chan_hhsync,
                          'optical_rabi',
                          start=-par_rabi_cycle_duration,
                          duration=50,
                          start_reference=last,
                          link_start_to='start')
            last = 'pre_start' + str(i)

        last = last_sync
        for i in arange(par_post_rabi_syncs):
            seq.add_pulse('post_start' + str(i),
                          chan_hhsync,
                          'optical_rabi',
                          start=par_rabi_cycle_duration,
                          duration=50,
                          start_reference=last,
                          link_start_to='start')
            last = 'post_start' + str(i)

    seq.add_element('idle',
                    goto_target='idle',
                    event_jump_target='optical_rabi')
    seq.add_pulse('empty',
                  chan_exlaser,
                  'idle',
                  start=0,
                  duration=1000,
                  amplitude=0)

    seq.set_instrument(awg)
    seq.set_clock(1e9)
    seq.set_send_waveforms(do_program)
    seq.set_send_sequence(do_program)
    seq.set_program_channels(True)
    seq.set_start_sequence(False)
    seq.force_HW_sequencing(True)
    seq.send_sequence()
예제 #6
0
from measurement.config import awgchannels_lt2 as awgcfg
from measurement.AWG_HW_sequencer_v2 import Sequence

seq = Sequence('argh')

os.chdir('D:/measuring/qtlab/')
reload(awgcfg)
os.chdir('D:/measuring/user/scripts/lt2_scripts/')

SMB100_lt1.set_frequency(2.8295E9)
SMB100.set_power(15)
SMB100_lt1.set_pulm('on')
SMB100_lt1.set_iq('on')

awgcfg.configure_sequence(seq, 'mw', 'LDE', 'hydraharp')

#seq.add_channel('PH_start', 'ch4m2', cable_delay=0)
#seq.add_channel('Green', 'ch2m1', cable_delay=604, high=0.5)
#seq.add_channel('MW_pulsemod', 'ch2m2', high=2.0, cable_delay = 0)
#seq.add_channel('MW_Imod', 'ch1', high=0.9, low=-0.9)
#seq.add_channel('MW_Qmod', 'ch4', high=0.9, low=-0.9, cable_delay = 0)
#seq.add_channel('pm','ch1m1', high=2.0, cable_delay=27)

MW_pulse_mod_risetime = 10  #6 = correct for LT2, 2 =  correct for LT1
MW_Imod_duration = 1000

elt = 'test'
seq.add_element(elt, goto_target=elt)
#seq.add_pulse('PH', 'PH_start', elt, start=0, duration=50)

#seq.add_pulse('Green', 'Green', elt, start=0, amplitude = 1, duration=5000,start_reference = 'PH',link_start_to='end')
예제 #7
0
    #if photon_pulse_nr[i]>0.5:
    #    if (i+1)%4==0:
    #        ch0_events[i-3]=1
    #        ch0_events[i-2]=1
    #        events+=1

#    else:
#        ch1_events[i]=1

ch0_events[0] = 0
ch0_events[1] = 1

#ch0_events[12]=0
#ch0_events[13]=1

seq = Sequence('PLU_test')
seq.add_channel('sync', 'ch2m2', cable_delay=0, high=2, low=0)
seq.add_channel('ch0', 'ch1', cable_delay=0, high=2, low=0)
seq.add_channel('ch1', 'ch1m2', cable_delay=0, high=2, low=0)
seq.add_channel('ma3', 'ch2m1', cable_delay=40, high=2, low=0)
seq.add_channel('hhsync', 'ch3m1', cable_delay=000, high=2, low=0)

pulse_duration = 70

photon_duration = 20

elt = 'plu_test'
wait = 'wait'
elt2 = 'plu_test2'

seq.add_element(elt, repetitions=1, goto_target=elt)
예제 #8
0
#sync_intervals[3] = 3333
#sync_intervals[50] = 2343200

#ch0_delays[49] = 2300500
#ch1_delays[49] = 2300500

#ch0_delays[50] = 2300000
#ch1_delays[50] = 2300000

#sync_intervals[5] = 1423
#sync_intervals[6] = 345
#sync_intervals[7] = 6456
#sync_intervals[8] = 453
#sync_intervals[9] = 3463

seq = Sequence('HH400_test')
seq.add_channel('sync', 'ch2m2', cable_delay=20, high=2, low=0)
seq.add_channel('ch0', 'ch1m1', cable_delay=0, high=2, low=0)
seq.add_channel('ch1', 'ch1m2', cable_delay=0, high=2, low=0)
seq.add_channel('ma3', 'ch2m1', cable_delay=0, high=2, low=0)

pulse_duration = 25

# Configure hydraharp
par_binsize_T3 = 8  # resolution of recorded data in HH 1ps*2**binsize_T3

elt = 'hh_test'
seq.add_element(elt, repetitions=5, goto_target='idle')
seq.add_element('idle', repetitions=wait, goto_target='late_ph')
seq.add_element('late_ph')
seq.add_element(elt + '2', repetitions=5)
예제 #9
0
def generate_sequence(fstart = 5E6, fstop = f_stop-(f_start+5E6), steps = nr_of_datapoints, do_program = True):
    seq = Sequence('dark_esr')

    print (fstart+f_start)/1E9
    print (fstop+fstart+f_start)/1E9

    
    awgcfg.configure_sequence(seq,'mw')
    
    # vars for the channel names
    chan_mwpulsemod = 'MW_pulsemod'
    chan_mwI = 'MW_Imod'
    chan_mwQ = 'MW_Qmod'    

    # in this version we keep the center frequency and sweep the
    # modulation frequency
    f_central = (fstart+fstop)/2.0
    
    pipulse = pi_pulse_length
    amplitude_mod = 1. 
    power = 20.

    mode = 'SSB'
    amplitude_i = 0.
    amplitude_q = 0. 

    amplitude_ssbmod = 0.8
    f_ssbmod = 0.

    MW_pulse_mod_risetime = 20

    # sweep the modulation freq
    for i, f_mod in enumerate(linspace(fstart, fstop, steps)):
    
        ###################################################################
        # the actual rabi sequence and readout
        
        ename = 'desrseq%d' % i
        kw = {} if i < steps-1 else {'goto_target': 'desrseq0'}
        seq.add_element(ename, trigger_wait = True, **kw)
        
        seq.add_IQmod_pulse(name = 'mwburst', channel = (chan_mwI,chan_mwQ), 
            element = ename, start = 0, duration = pipulse,  
            frequency = f_mod, 
            amplitude = amplitude_mod)
                             
        seq.clone_channel(chan_mwpulsemod, chan_mwI, ename,
            start=-MW_pulse_mod_risetime, duration=2*MW_pulse_mod_risetime, 
            link_start_to = 'start', link_duration_to = 'duration', 
            amplitude = 2.0)

        ###################################################################

    

    seq.set_instrument(awg)
    seq.set_clock(1e9)
    seq.set_send_waveforms(do_program)
    seq.set_send_sequence(do_program)
    seq.set_program_channels(True)
    seq.set_start_sequence(False)
    seq.force_HW_sequencing(True)
    seq.send_sequence()
def generate_sequence_SE(do_program=True):
    seq = Sequence('spin_control')
    awgcfg.configure_sequence(seq, 'mw')
    # vars for the channel names
    chan_mw_pm = 'MW_pulsemod'  #is connected to ch1m1

    if lt1:
        chan_mwI = 'MW_Imod_lt1'
        chan_mwQ = 'MW_Qmod_lt1'
    else:
        chan_mwI = 'MW_Imod'
        chan_mwQ = 'MW_Qmod'

    if lt1:
        MW_pulse_mod_risetime = 2
    else:
        MW_pulse_mod_risetime = 6

    for i in np.arange(nr_of_datapoints):
        if i == nr_of_datapoints - 1:
            seq.add_element(name='spin_control_' + str(i + 1),
                            trigger_wait=True,
                            goto_target='spin_control_1')
        else:
            seq.add_element(name='spin_control_' + str(i + 1),
                            trigger_wait=True)

        seq.add_pulse('wait',
                      channel=chan_mw_pm,
                      element='spin_control_' + str(i + 1),
                      start=0,
                      duration=50,
                      amplitude=0)

        seq.add_pulse('first_pi_over_2',
                      channel=chan_mwI,
                      element='spin_control_' + str(i + 1),
                      start=0,
                      duration=pi_2_pulse_length,
                      amplitude=amplitude_ssbmod,
                      start_reference='wait',
                      link_start_to='end',
                      shape='rectangular')

        seq.add_pulse('pulse_mod',
                      channel=chan_mw_pm,
                      element='spin_control_' + str(i + 1),
                      start=-MW_pulse_mod_risetime,
                      duration=2 * MW_pulse_mod_risetime,
                      start_reference='first_pi_over_2',
                      link_start_to='start',
                      duration_reference='first_pi_over_2',
                      link_duration_to='duration',
                      amplitude=2.0)

        seq.add_pulse('tau',
                      channel=chan_mw_pm,
                      element='spin_control_' + str(i + 1),
                      start_reference='first_pi_over_2',
                      link_start_to='end',
                      duration=tau[i],
                      amplitude=0)

        seq.add_pulse('pi',
                      channel=chan_mwI,
                      element='spin_control_' + str(i + 1),
                      start=0,
                      duration=pi_pulse_length,
                      amplitude=amplitude_ssbmod,
                      start_reference='tau',
                      link_start_to='end',
                      shape='rectangular')

        seq.add_pulse('pulse_mod_2',
                      channel=chan_mw_pm,
                      element='spin_control_' + str(i + 1),
                      start=-MW_pulse_mod_risetime,
                      duration=2 * MW_pulse_mod_risetime,
                      start_reference='pi',
                      link_start_to='start',
                      duration_reference='pi',
                      link_duration_to='duration',
                      amplitude=2.0)

        seq.add_pulse('tau_2',
                      channel=chan_mw_pm,
                      element='spin_control_' + str(i + 1),
                      start_reference='pi',
                      link_start_to='end',
                      duration=tau[i],
                      amplitude=0)

        seq.add_pulse('second_pi_over_2',
                      channel=chan_mwI,
                      element='spin_control_' + str(i + 1),
                      start=0,
                      duration=pi_2_pulse_length,
                      amplitude=amplitude_ssbmod,
                      start_reference='tau_2',
                      link_start_to='end',
                      shape='rectangular')

        seq.add_pulse('pulse_mod2',
                      channel=chan_mw_pm,
                      element='spin_control_' + str(i + 1),
                      start=-MW_pulse_mod_risetime,
                      duration=2 * MW_pulse_mod_risetime,
                      start_reference='second_pi_over_2',
                      link_start_to='start',
                      duration_reference='second_pi_over_2',
                      link_duration_to='duration',
                      amplitude=2.0)

    seq.set_instrument(awg)
    seq.set_clock(1e9)
    seq.set_send_waveforms(do_program)
    seq.set_send_sequence(do_program)
    seq.set_program_channels(True)
    seq.set_start_sequence(False)
    seq.force_HW_sequencing(True)
    seq.send_sequence()
from measurement.AWG_HW_sequencer_v2 import Sequence

seq = Sequence('preselect')
seq.add_channel('Ex', 'ch1m1', cable_delay=0, high=1)
seq.add_channel('A2', 'ch1m2', cable_delay=604, high=1)
seq.add_channel('ADwin_sync', 'ch3m2', high=2.0, cable_delay=0)
#seq.add_channel('MW_Imod', 'ch1', high=0.9, low=-0.9, cable_delay = 199)
#seq.add_channel('MW_Qmod', 'ch4', high=0.9, low=-0.9, cable_delay = 0)

MW_pulse_mod_risetime = 0

seq.add_element('preselect', event_jump_target='wait_for_ADwin')

seq.add_pulse('cr1', 'Ex', 'preselect', duration=1000, amplitude=1)

seq.add_pulse('cr1_2',
              'A2',
              'preselect',
              start=0,
              duration=0,
              amplitude=1,
              start_reference='cr1',
              link_start_to='start',
              duration_reference='cr1',
              link_duration_to='duration')

seq.add_pulse('ADwin_ionization_probe',
              'ADwin_sync',
              'preselect',
              start=0,
              duration=20000,
    def generate_sequence(self, PLstart, PLstop, PLsteps, do_program=True):
        seq = Sequence(self.name)

        # vars for the channel names
        chan_mwpulsemod = 'MW_pulsemod'
        chan_mwI = 'MW_Imod'
        chan_mwQ = 'MW_Qmod'
        chan_green = 'AOM_Green'
        chan_hhsync = 'HH_sync'

        basicscfg = {'AOM_Green': {'high': 0.8}}
        awgcfg.configure_sequence(seq, 'hydraharp', 'mw', basics=basicscfg)

        # sweep the pulse length
        for i, pulselength in enumerate(np.linspace(PLstart, PLstop, PLsteps)):

            ###################################################################
            # the actual rabi sequence and readout

            print pulselength
            ename = 'rabiseq%d' % i
            kw = {} if i < PLsteps - 1 else {'goto_target': 'rabiseq0'}
            seq.add_element(ename, **kw)

            seq.add_pulse('wait_for_singlets',
                          chan_hhsync,
                          ename,
                          duration=1500,
                          amplitude=0)

            if self.mode == 'SSB':
                seq.add_IQmod_pulse(name='mwburst',
                                    channel=(chan_mwI, chan_mwQ),
                                    element=ename,
                                    start=0,
                                    duration=pulselength,
                                    start_reference='wait_for_singlets',
                                    link_start_to='end',
                                    frequency=self.f_ssbmod,
                                    amplitude=1)

            elif self.mode == 'I+Q':
                seq.add_pulse('mwburst',
                              chan_mwI,
                              ename,
                              start=0,
                              duration=pulselength,
                              start_reference='wait_for_singlets',
                              link_start_to='end',
                              amplitude=self.amplitude_i)

                seq.add_pulse('mwburst',
                              chan_mwQ,
                              ename,
                              start=0,
                              duration=pulselength,
                              start_reference='wait_for_singlets',
                              link_start_to='end',
                              amplitude=self.amplitude_q)
            else:
                print 'Invalid mode for the sequence! Abort.'
                return False

            seq.clone_channel(chan_mwpulsemod,
                              chan_mwI,
                              ename,
                              start=-self.MW_pulse_mod_risetime,
                              duration=2 * self.MW_pulse_mod_risetime,
                              link_start_to='start',
                              link_duration_to='duration',
                              amplitude=2.0)

            ref = 'mwburst' if self.mode == 'I+Q' else 'mwburst-I'
            #seq.add_pulse('readout', 'AOM_green', ename, start = 500,
            #        duration = 1000, start_reference=ref,
            #        link_start_to = 'end')

            seq.add_pulse('readout',
                          chan_green,
                          ename,
                          start=500 + PLstop,
                          duration=10000,
                          start_reference='wait_for_singlets',
                          link_start_to='end')

            seq.add_pulse('start_counting',
                          chan_hhsync,
                          ename,
                          start=-100,
                          duration=50,
                          start_reference='readout',
                          link_start_to='start')
            ###################################################################

        seq.set_instrument(self.ins_awg)
        seq.set_clock(1e9)
        seq.set_send_waveforms(do_program)
        seq.set_send_sequence(do_program)
        seq.set_program_channels(True)
        seq.set_start_sequence(False)
        seq.force_HW_sequencing(True)
        seq.send_sequence()

        return True
예제 #13
0
def generate_sequence_readout_pulse(do_program=True):
    seq = Sequence('spin_control')
    awgcfg.configure_sequence(seq,'mw_weak_meas')
    # vars for the channel names
    chan_mw_pm = 'MW_pulsemod' #is connected to ch1m1
    
    if lt1:
        chan_mwI = 'MW_Imod_lt1'
        chan_mwQ = 'MW_Qmod_lt1'
    else:
        chan_mwI = 'MW_Imod'
        chan_mwQ = 'MW_Qmod'
        chan_RF  = 'RF'
    
    if lt1:
        MW_pulse_mod_risetime = 2
    else:
        MW_pulse_mod_risetime = 6

    for i in np.arange(nr_of_datapoints):
        seq.add_element(name='MBI_pulse'+str(i),trigger_wait=True, event_jump_target='spin_control_'+str(i+1),goto_target='MBI_pulse'+str(i))
        seq.add_pulse('wait', channel = chan_mwI, element ='MBI_pulse'+str(i),
                start = 0, duration = 100, amplitude = 0)
        seq.add_pulse('pi_pulse', channel = chan_mwI, element = 'MBI_pulse'+str(i),
                start = 0, duration = pi_pulse_length, amplitude = shelving*amplitude_ssbmod, start_reference = 'wait',
                link_start_to = 'end', shape = 'rectangular')
        
        seq.add_pulse('pulse_mod', channel = chan_mw_pm, element = 'MBI_pulse'+str(i),
            start=-MW_pulse_mod_risetime, duration=2*MW_pulse_mod_risetime, 
            start_reference = 'pi_pulse', link_start_to = 'start', 
            duration_reference = 'pi_pulse', link_duration_to = 'duration', 
            amplitude = shelving*2.0)
        seq.add_pulse('wait2', channel = chan_mwI, element ='MBI_pulse'+str(i),
                start = 0, start_reference ='pi_pulse',link_start_to='end',duration = 100, amplitude = 0)
        seq.add_pulse('MBI_pulse', channel = chan_mwI, element = 'MBI_pulse'+str(i),
                start = 0, duration = MBI_pulse_length, amplitude = MBI_amp, start_reference = 'wait2',
                link_start_to = 'end', shape = 'sine',frequency=MBI_f+hf)
        
        seq.add_pulse('pulse_mod2', channel = chan_mw_pm, element = 'MBI_pulse'+str(i),
            start=-MW_pulse_mod_risetime, duration=2*MW_pulse_mod_risetime, 
            start_reference = 'MBI_pulse', link_start_to = 'start', 
            duration_reference = 'MBI_pulse', link_duration_to = 'duration', 
            amplitude = 2.0)
        seq.add_pulse('wait_for_ADwin', channel = chan_mwI, element = 'MBI_pulse'+str(i),
                start = 0, duration = 1000*(par['MBI_RO_duration']+par['wait_for_MBI_pulse'])-MBI_pulse_length+1000., amplitude = 0, start_reference = 'MBI_pulse',
                link_start_to = 'end', shape = 'rectangular')
        if i == nr_of_datapoints-1:
            seq.add_element(name = 'spin_control_'+str(i+1), 
                trigger_wait = True, goto_target = 'MBI_pulse0')
        else:
            seq.add_element(name = 'spin_control_'+str(i+1), 
                trigger_wait = True)

        seq.add_pulse('wait', channel = chan_mw_pm, element = 'spin_control_'+str(i+1),
                start = 0, duration = 100+first_wait_time, amplitude = 0)
        seq.add_pulse('shelving_pulse', channel = chan_mwI, element = 'spin_control_'+str(i+1),
                start = 2000, duration =shelving_duration, amplitude = shelving_amp, start_reference = 'wait',
                link_start_to = 'end', shape = 'sine',frequency=MBI_f+hf,envelope='erf')            
        seq.add_pulse('pulse_mod', channel = chan_mw_pm, element = 'spin_control_'+str(i+1),
            start=-MW_pulse_mod_risetime, duration=2*MW_pulse_mod_risetime, 
            start_reference = 'shelving_pulse', link_start_to = 'start', 
            duration_reference = 'shelving_pulse', link_duration_to = 'duration', 
            amplitude = 2.0)
        seq.add_pulse('wait2', channel = chan_mw_pm, element = 'spin_control_'+str(i+1),
                start = 0, duration = 100, amplitude = 0,start_reference='shelving_pulse',link_start_to='end')

        seq.add_pulse('readout_pulse', channel = chan_mwI, element = 'spin_control_'+str(i+1),
                start = 2000, duration =RO_duration[i], amplitude = pi2pi_amp, start_reference = 'wait2',
                link_start_to = 'end', shape = 'sine',frequency=MBI_f+hf,envelope='erf')            
        seq.add_pulse('pulse_mod2', channel = chan_mw_pm, element = 'spin_control_'+str(i+1),
            start=-MW_pulse_mod_risetime, duration=2*MW_pulse_mod_risetime, 
            start_reference = 'readout_pulse', link_start_to = 'start', 
            duration_reference = 'readout_pulse', link_duration_to = 'duration', 
            amplitude = 2.0)

    seq.set_instrument(awg)
    seq.set_clock(1e9)
    seq.set_send_waveforms(do_program)
    seq.set_send_sequence(do_program)
    seq.set_program_channels(True)
    seq.set_start_sequence(False)
    seq.force_HW_sequencing(True)
    seq.send_sequence()
예제 #14
0
def XY8_cycles_multiple_elements(sweep_param,pulse_dict,lt1 = False,do_program=True):
    '''
    This sequence consists of a number of decoupling-pulses per sweepparam
    every pulse is in a single element, tau is repeated to decrease number of points
    
    sweep_param = numpy array with number of Pi-pulses per element
    pulse_dict={
                "Pi":{"duration": ...,
                      "amplitude": ...},

                "istate_pulse": {"duration":... , 
                                 "amplitude":...}, First pulse to create init state
                
                
                "duty_cycle_time": ...,            waiting time at the end of each element
                "tau_el_length":...
                }
    '''
    seq = Sequence('XY8')
    awgcfg.configure_sequence(seq,'mw')
    
    # vars for the channel names
    chan_mw_pm = 'MW_pulsemod' #is connected to ch1m1
    
    if lt1:
        chan_mwI = 'MW_Imod_lt1'
        chan_mwQ = 'MW_Qmod_lt1'
    else:
        chan_mwI = 'MW_Imod'
        chan_mwQ = 'MW_Qmod'
    
#FIXME: take this from a dictionary
    if lt1:
        MW_pulse_mod_risetime = 10
    else:
        MW_pulse_mod_risetime = 10

    nr_of_datapoints = len(sweep_param)
    nr_of_XY8_cycles =  pulse_dict["nr_of_XY8_cycles"]
    pulse_nr = 8*nr_of_XY8_cycles

    pi = pulse_dict["Pi"]
    tau_sweep = sweep_param
    duty_cycle_time = pulse_dict["duty_cycle_time"]
    istate_pulse = pulse_dict["init_state_pulse"]

    tau_len=pulse_dict["tau_el_length"]          # ns

    for i in np.arange(nr_of_datapoints):
       
        #create element for each datapoint and link last element to first   
        el_name = 'Pi_over2_'+str(i+1)
        seq.add_element(name = el_name, 
            trigger_wait = True)
        seq.add_pulse(name='first_wait', channel = chan_mw_pm, 
                element = el_name,start = 0, 
                duration = 960, amplitude = 0)
        seq.add_pulse(name='Pi/2_pulse' , channel = chan_mwI, element = el_name,
            start_reference = 'first_wait', link_start_to = 'end', start = 0, 
            duration = istate_pulse["duration"], amplitude = istate_pulse["amplitude"], shape = 'rectangular')

        seq.add_pulse(name='Pi/2_pulse_mod', channel = chan_mw_pm, element = el_name,
            start=-MW_pulse_mod_risetime, duration=2*MW_pulse_mod_risetime, 
            start_reference = 'Pi/2_pulse', link_start_to = 'start', 
            duration_reference = 'Pi/2_pulse', link_duration_to = 'duration', 
            amplitude = 2.0)

        pulse_idx = 0
        tau_idx=0
        for j in np.arange(pulse_nr):
            if np.mod(j,8)+1 in [1,3,6,8]:
                chan = chan_mwI
                pulse_el_name = 'X'+str(pulse_idx)+'_'+str(i+1)
            else:
                chan = chan_mwQ
                pulse_el_name = 'Y'+str(pulse_idx)+'_'+str(i+1)
            
            ## tau1
            cur_el_name='tau'+str(tau_idx)+'_'+str(i+1)
            seq.add_element(name=cur_el_name,trigger_wait = False,repetitions=tau_sweep[i])
            seq.add_pulse(name='tau'+str(tau_idx),channel=chan_mw_pm,element=cur_el_name,
                        start=0,duration=tau_len-int(1000./tau_sweep[i]/2.))
            tau_idx+=1

            ## pi pulse
            seq.add_element(name=pulse_el_name,trigger_wait = False,repetitions=1)
            
            seq.add_pulse(name='extra_wait'+str(j), channel = chan_mw_pm, 
                element = pulse_el_name,start = 0, 
                duration = 500.-int(pi["duration"]/2), amplitude = 0)
            seq.add_pulse('pi' + str(j), channel = chan, element = pulse_el_name,
                start = 0, duration = pi["duration"], amplitude = pi["amplitude"], shape = 'rectangular',
                start_reference='extra_wait'+str(j),link_start_to='end')
            seq.add_pulse('pulse_mod' + str(j), channel = chan_mw_pm, element = pulse_el_name,
                start=-MW_pulse_mod_risetime, duration=2*MW_pulse_mod_risetime, 
                start_reference = 'pi' + str(j), link_start_to = 'start', 
                duration_reference = 'pi'+str(j), link_duration_to = 'duration', 
                amplitude = 2.0)
            seq.add_pulse(name='extra_wait_2'+str(j), channel = chan_mw_pm, 
                element = pulse_el_name,start = 0, 
                duration = 500.-int(pi["duration"]/2), amplitude = 0,start_reference='pi'+str(j),link_start_to='end')
            pulse_idx+=1
            
            ## tau2
            cur_el_name='tau'+str(tau_idx)+'_'+str(i+1)
            seq.add_element(name=cur_el_name,trigger_wait = False,repetitions=tau_sweep[i])
            seq.add_pulse(name='tau'+str(tau_idx),channel=chan_mw_pm,element=cur_el_name,
                        start=0,duration=tau_len-int(1000./tau_sweep[i]/2.))
            tau_idx+=1
                    
        ##Final readout pulse
        cur_el_name = 'readout'+str(i+1)
        if i == nr_of_datapoints-1:
            print 'going to nr 1'
            target= 'Pi_over2_'+str(1)
        else:
            target='none'
        seq.add_element(name = cur_el_name ,trigger_wait = False,goto_target=target)
        seq.add_pulse('readout_pulse' , channel = chan_mwI, element = cur_el_name,
            start = 0, duration = istate_pulse["duration"], amplitude = istate_pulse["amplitude"], shape = 'rectangular')
        seq.add_pulse('Pi/2_pulse_mod', channel = chan_mw_pm, element = cur_el_name,
            start=-MW_pulse_mod_risetime, duration=2*MW_pulse_mod_risetime, 
            start_reference = 'readout_pulse', link_start_to = 'start', 
            duration_reference = 'readout_pulse', link_duration_to = 'duration', 
            amplitude = 2.0)

        seq.add_pulse('final_wait', channel = chan_mw_pm, element = cur_el_name,
                start_reference = 'readout_pulse',link_start_to ='end', 
                duration = duty_cycle_time, amplitude = 0)
    print 'start to set AWG specs'
    seq.set_instrument(awg)
    seq.set_clock(1e9)
    seq.set_send_waveforms(do_program)
    seq.set_send_sequence(do_program)
    seq.set_program_channels(True)
    seq.set_start_sequence(False)
    seq.force_HW_sequencing(True)
    a = seq.send_sequence()
    print 'done sending AWG sequence'
     
    tau_max = tau_len*(tau_sweep.max())
    max_seq_time = pulse_nr*(pi["duration"]+2*tau_max)+duty_cycle_time+50+2*istate_pulse["duration"]
    print 'max seq time %d' % max_seq_time
    name= '%d XY8_cycles' % nr_of_XY8_cycles
    return {"seqname":name, "max_seq_time":max_seq_time}
예제 #15
0
def XY8_cycles(sweep_param,pulse_dict,lt1 = False,do_program=True):
    '''
    This sequence consists of a number of decoupling-pulses per element
    
    sweep_param = numpy array with number of Pi-pulses per element
    pulse_dict={
                "Pi":{"duration": ...,
                      "amplitude": ...},

                "istate_pulse": {"duration":... , 
                                 "amplitude":...}, First pulse to create init state
                
                
                "duty_cycle_time": ...,            waiting time at the end of each element
                }
    '''
    seq = Sequence('XY8')
    awgcfg.configure_sequence(seq,'mw')
    
    # vars for the channel names
    chan_mw_pm = 'MW_pulsemod' #is connected to ch1m1
    superposition_pulse=False
    
    if lt1:
        chan_mwI = 'MW_Imod_lt1'
        chan_mwQ = 'MW_Qmod_lt1'
    else:
        chan_mwI = 'MW_Imod'
        chan_mwQ = 'MW_Qmod'
    
#FIXME: take this from a dictionary
    if lt1:
        MW_pulse_mod_risetime = 10
    else:
        MW_pulse_mod_risetime = 10

    nr_of_datapoints = len(sweep_param)
    nr_of_XY8_cycles =  pulse_dict["nr_of_XY8_cycles"]
    pulse_nr = 8*nr_of_XY8_cycles

    pi = pulse_dict["Pi"]
    tau_sweep = sweep_param
    duty_cycle_time = pulse_dict["duty_cycle_time"]
    istate_pulse = pulse_dict["init_state_pulse"]
    
    for i in np.arange(nr_of_datapoints):

        #create element for each datapoint and link last element to first
        if i == nr_of_datapoints-1:
            seq.add_element(name = 'spin_control_'+str(i+1), 
                trigger_wait = True, goto_target = 'spin_control_1')
        else:
            seq.add_element(name = 'spin_control_'+str(i+1), 
                trigger_wait = True)

   
        tau=tau_sweep[i]

        seq.add_pulse('first_wait', channel = chan_mw_pm, 
                element = 'spin_control_'+str(i+1),start = 0, 
                duration = 50, amplitude = 0)

        seq.add_pulse('init_state_pulse' , channel = chan_mwI, element = 'spin_control_'+str(i+1),
            start_reference = 'first_wait', link_start_to = 'end', start = 0, 
            duration = istate_pulse["duration"], amplitude = istate_pulse["amplitude"], shape = 'rectangular')

        seq.add_pulse('init_state_pulse_mod', channel = chan_mw_pm, element = 'spin_control_'+str(i+1),
            start=-MW_pulse_mod_risetime, duration=2*MW_pulse_mod_risetime, 
            start_reference = 'init_state_pulse', link_start_to = 'start', 
            duration_reference = 'init_state_pulse', link_duration_to = 'duration', 
            amplitude = 2.0)
        
        last = 'init_state_pulse'

        for j in np.arange(pulse_nr):
            if np.mod(j,8)+1 in [1,3,6,8]:
                chan = chan_mwI
            else:
                chan = chan_mwQ

            seq.add_pulse('wait_before' + str(j), channel = chan_mw_pm, element = 'spin_control_'+str(i+1), 
                start_reference = last, link_start_to='end',start = 0, 
                duration = tau, amplitude = 0)
           
            seq.add_pulse('pi' + str(j), channel = chan, element = 'spin_control_'+str(i+1),
                start = 0, start_reference = 'wait_before'+str(j), link_start_to = 'end', 
                duration = pi["duration"], amplitude = pi["amplitude"], shape = 'rectangular')

            seq.add_pulse('pulse_mod' + str(j), channel = chan_mw_pm, element = 'spin_control_'+str(i+1),
                start=-MW_pulse_mod_risetime, duration=2*MW_pulse_mod_risetime, 
                start_reference = 'pi' + str(j), link_start_to = 'start', 
                duration_reference = 'pi'+str(j), link_duration_to = 'duration', 
                amplitude = 2.0)

            seq.add_pulse('wait_after' + str(j), channel = chan_mw_pm, element = 'spin_control_'+str(i+1), 
                start_reference = 'pi'+str(j), link_start_to='end',start = 0, 
                duration = tau, amplitude = 0)
            
            last = 'wait_after'+str(j)
        
        seq.add_pulse('readout_pulse' , channel = chan_mwI, element = 'spin_control_'+str(i+1),
            start_reference = last, link_start_to = 'end', start = 0, 
            duration = istate_pulse["duration"], amplitude = -istate_pulse["amplitude"], shape = 'rectangular')

        seq.add_pulse('init_state_pulse_mod', channel = chan_mw_pm, element = 'spin_control_'+str(i+1),
            start=-MW_pulse_mod_risetime, duration=2*MW_pulse_mod_risetime, 
            start_reference = 'readout_pulse', link_start_to = 'start', 
            duration_reference = 'init_state_pulse', link_duration_to = 'duration', 
            amplitude = 2.0)

        seq.add_pulse('final_wait', channel = chan_mw_pm, element = 'spin_control_'+str(i+1),
                start_reference = 'readout_pulse',link_start_to ='end', 
                duration = duty_cycle_time, amplitude = 0)

    seq.set_instrument(awg)
    seq.set_clock(1e9)
    seq.set_send_waveforms(do_program)
    seq.set_send_sequence(do_program)
    seq.set_program_channels(True)
    seq.set_start_sequence(False)
    seq.force_HW_sequencing(True)
    max_seq_time = seq.send_sequence()

    name= '%d XY8_cycles' % nr_of_XY8_cycles
    return {"seqname":name, "max_seq_time":max_seq_time}
예제 #16
0
def generate_sequence(do_program=True):
    seq = Sequence('tpqi_remote')

    # vars for the channel names
    chan_hhsync = 'HH_sync'  # historically PH_start
    chan_hh_ma1 = 'HH_MA1'  # historically PH_sync
    chan_exlaser = 'AOM_Matisse'  # ok
    chan_alaser_lt2 = 'AOM_Newfocus'  # ok
    chan_alaser_lt1 = 'AOM_Newfocus_lt1'
    chan_adwinsync = 'ADwin_sync'  # ok
    chan_eom = 'EOM_Matisse'
    chan_eom_aom = 'EOM_AOM_Matisse'

    awgcfg.configure_sequence(
        seq,
        'hydraharp',
        'ssro',
        optical_rabi={chan_eom_aom: {
            'high': par_eom_aom_amplitude
        }})

    #int(par_adwin_aom_duration*1e4)

    seq.add_element(
        'optical_rabi',
        goto_target='idle')  #'optical_rabi',event_jump_target='idle')

    seq.add_pulse('spinpumping_LT1',
                  chan_alaser_lt1,
                  'optical_rabi',
                  start=0,
                  duration=par_sp_duration,
                  amplitude=par_sp_voltage_lt1)

    seq.add_pulse('spinpumping_LT2',
                  chan_alaser_lt2,
                  'optical_rabi',
                  start=0,
                  duration=par_sp_duration,
                  amplitude=par_sp_voltage_lt2)

    #Define a start point for the sequence, set amplitude to 0. actual sync pulse comes later
    seq.add_pulse('start',
                  chan_hhsync,
                  'optical_rabi',
                  start=0,
                  start_reference='spinpumping_LT1',
                  link_start_to='end',
                  duration=50,
                  amplitude=0.0)
    last = 'start'

    for i in arange(par_rabi_reps):
        #FIXME position for the initialization pulse

        seq.add_pulse('start' + str(i),
                      chan_hhsync,
                      'optical_rabi',
                      start=par_rabi_cycle_duration,
                      duration=50,
                      start_reference=last,
                      link_start_to='start')
        last = 'start' + str(i)

        seq.add_pulse('AOM' + str(i),
                      chan_eom_aom,
                      'optical_rabi',
                      start=par_aom_start,
                      duration=par_aom_duration,
                      start_reference=last,
                      link_start_to='start')

        seq.add_pulse('EOM_off' + str(i),
                      chan_eom,
                      'optical_rabi',
                      amplitude=par_eom_off_amplitude,
                      start=par_eom_start,
                      duration=par_eom_off_duration,
                      start_reference=last,
                      link_start_to='start')

        seq.add_pulse('EOM_pulse'+str(i),  chan_eom, 'optical_rabi',
                amplitude = par_eom_pulse_amplitude - par_eom_off_amplitude,
                start = par_eom_start + par_eom_off_duration/2 + \
                        par_eom_pulse_offset, duration = par_eom_pulse_duration,
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_overshoot1'+str(i),  chan_eom, 'optical_rabi',
                amplitude = par_eom_overshoot1,
                start = par_eom_start + par_eom_off_duration/2 + \
                        par_eom_pulse_offset + par_eom_pulse_duration,
                duration = par_eom_overshoot_duration1,
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_overshoot2'+str(i),  chan_eom, 'optical_rabi',
                amplitude = par_eom_overshoot2,
                start = par_eom_start + par_eom_off_duration/2 + \
                        par_eom_pulse_offset + par_eom_pulse_duration + \
                        par_eom_overshoot_duration1,
                duration = par_eom_overshoot_duration2,
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_off_comp' + str(i),
                      chan_eom,
                      'optical_rabi',
                      amplitude=-par_eom_off_amplitude,
                      start=par_eom_start + par_eom_off_duration,
                      duration=par_eom_off_duration,
                      start_reference=last,
                      link_start_to='start')

        seq.add_pulse('EOM_pulse_comp'+str(i),  chan_eom, 'optical_rabi',
                amplitude = -par_eom_pulse_amplitude + par_eom_off_amplitude,
                start = par_eom_start+par_eom_off_duration + \
                        int(par_eom_off_duration/2) + par_eom_pulse_offset,
                duration = par_eom_pulse_duration,
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_overshoot1_comp'+str(i),  chan_eom, 'optical_rabi',
                amplitude = -par_eom_overshoot1,
                start = par_eom_start+par_eom_off_duration + \
                        int(par_eom_off_duration/2) + par_eom_pulse_offset + \
                        par_eom_pulse_duration,
                duration = par_eom_overshoot_duration1,
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_overshoot2_comp'+str(i),  chan_eom, 'optical_rabi',
                amplitude = -par_eom_overshoot2,
                start = par_eom_start+par_eom_off_duration + \
                        int(par_eom_off_duration/2) + par_eom_pulse_offset + \
                        par_eom_pulse_duration + par_eom_overshoot_duration1,
                duration = par_eom_overshoot_duration2,
                start_reference = last, link_start_to = 'start')

    seq.add_element('idle',
                    goto_target='idle',
                    event_jump_target='optical_rabi')
    seq.add_pulse('empty',
                  chan_exlaser,
                  'idle',
                  start=0,
                  duration=1000,
                  amplitude=0)

    #seq.add_pulse('probe2', chan_alaser, 'wait_for_ADwin', start=-125, duration = 1000,
    #        amplitude = par_cr_A_amplitude)
    #seq.add_pulse('probemw', chan_mw, 'wait_for_ADwin', start=-525, duration = 1000,
    #       amplitude = 1.0)

    seq.set_instrument(awg)
    seq.set_clock(1e9)
    seq.set_send_waveforms(do_program)
    seq.set_send_sequence(do_program)
    seq.set_program_channels(True)
    seq.set_start_sequence(False)
    seq.force_HW_sequencing(True)
    seq.send_sequence()
    def generate_sequence(self, fstart, fstop, fsteps, do_program=True):
        seq = Sequence(self.name)

        # MWs
        seq.add_channel('MW_pulsemod', 'ch2m2', high=2.0, cable_delay=199)
        seq.add_channel('MW_Imod', 'ch1', high=0.9, low=-0.9, cable_delay=199)
        seq.add_channel('MW_Qmod', 'ch4', high=0.9, low=-0.9, cable_delay=199)

        # Light
        seq.add_channel('AOM_green', 'ch2m1', cable_delay=604, high=0.5)

        # PH data aquisition
        seq.add_channel('PH_start', 'ch4m2', cable_delay=0)
        seq.add_channel('PH_MA1', 'ch3m1', cable_delay=0, high=2.0)

        #######################################################################
        # creates two start pulses to compensate
        # for PH bug (misses first 2 start pulses)

        #ename = 'sync'
        #seq.add_element(ename)

        #seq.add_pulse('PH_sync1', 'PH_start', ename, duration = 50)
        #seq.add_pulse('PH_sync2', 'PH_start', ename, start = 500, duration = 50,
        #        start_reference = 'PH_sync1', link_start_to = 'end')
        #seq.add_pulse('PH_sync_wait', 'PH_start', ename, start = 500,
        #        duration = 50, start_reference = 'PH_sync2',
        #        link_start_to = 'end', amplitude = 0)
        #######################################################################

        # sweep the pulse length
        for i, f_mod in enumerate(np.linspace(fstart, fstop, fsteps)):

            ###################################################################
            # the actual rabi sequence and readout

            ename = 'esrseq%d' % i
            kw = {} if i < fsteps - 1 else {'goto_target': 'esrseq0'}
            seq.add_element(ename, **kw)

            seq.add_pulse('wait_for_singlets',
                          'PH_start',
                          ename,
                          duration=1000,
                          amplitude=0)

            seq.add_IQmod_pulse(name='mwburst',
                                channel=('MW_Imod', 'MW_Qmod'),
                                element=ename,
                                start=0,
                                duration=self.pipulse,
                                start_reference='wait_for_singlets',
                                link_start_to='end',
                                frequency=f_mod,
                                amplitude=self.amplitude_mod)

            seq.clone_channel('MW_pulsemod',
                              'MW_Imod',
                              ename,
                              start=-MW_pulse_mod_risetime,
                              duration=2 * MW_pulse_mod_risetime,
                              link_start_to='start',
                              link_duration_to='duration',
                              amplitude=2.0)

            seq.add_pulse('readout',
                          'AOM_green',
                          ename,
                          start=500,
                          duration=1000,
                          start_reference='mwburst-I',
                          link_start_to='end')

            seq.add_pulse('start_counting',
                          'PH_start',
                          ename,
                          start=-100,
                          duration=50,
                          start_reference='readout',
                          link_start_to='start')
            ###################################################################

        seq.set_instrument(self.ins_awg)
        seq.set_clock(1e9)
        seq.set_send_waveforms(do_program)
        seq.set_send_sequence(do_program)
        seq.set_program_channels(True)
        seq.set_start_sequence(False)
        seq.force_HW_sequencing(True)
        seq.send_sequence()
예제 #18
0
def DSC_Pulses_time(do_program=True):
        '''
    This sequence consists of a fixed number of CORPSE pulses 
    and sweeps the time between the individual pulses in the CORPSE pulse sequence
    
    sweep_param = numpy array with time between each pulse in the CORPSE pulses sequence
    pulse_dict={
                "Pi":{"duration": ..., "amplitude":... ,},
                "istate_pulse": {"duration":... , "amplitude":...,  First pulse to create init state
                                "Do_Pulse": Boolean},
                "time_between_pulses": ...,                         waiting time between the CORPSE-pulses
                "duty_cycle_time": ...,                             waiting time at the end of each element
                "nr_of_pulses": ...,
                }
    '''
    seq = Sequence('spin_control')
    awgcfg.configure_sequence(seq,'mw')
    # vars for the channel names
    chan_mw_pm = 'MW_pulsemod' #is connected to ch1m1
    
    if lt1:
        chan_mwI = 'MW_Imod_lt1'
        chan_mwQ = 'MW_Qmod_lt1'
    else:
        chan_mwI = 'MW_Imod'
        chan_mwQ = 'MW_Qmod'
    
    if lt1:
        MW_pulse_mod_risetime = 10
    else:
        MW_pulse_mod_risetime = 10
예제 #19
0
    def generate_sequence(self, do_program=True):
        seq = Sequence(self.name)

        # vars for the channel names
        chan_mwpulsemod = 'MW_pulsemod'
        chan_mwI = 'MW_Imod'
        chan_mwQ = 'MW_Qmod'
        chan_green = 'AOM_Green'
        chan_phstart = 'PH_start'
        chan_phsync = 'PH_sync'
        chan_exlaser = 'AOM_Matisse'
        chan_alaser = 'AOM_Newfocus'
        chan_adwinsync = 'ADwin_sync'

        awgcfg.configure_sequence(seq, 'basics', 'picoharp', 'mw', 
                ssro={ chan_alaser: {'high': self.par_cr_A_amplitude } } )
        
        commonseq.phsync_element(seq)
        
        
        seq.add_element('initialize')
        seq.add_pulse('green_initialize', chan_green, 'initialize', start = 0, duration = 10000)
                
        seq.add_element('preselect', event_jump_target = 'wait_for_ADwin')
        
        seq.add_pulse('cr1', chan_exlaser, 'preselect', duration = self.par_cr_duration, 
                amplitude = self.par_cr_Ex_amplitude)

        seq.add_pulse('cr1_2', chan_alaser, 'preselect', start = 0, duration = 0, 
                amplitude = self.par_cr_A_amplitude, start_reference = 'cr1', link_start_to = 'start', 
                duration_reference = 'cr1', link_duration_to = 'duration')

        seq.add_pulse('ADwin_ionization_probe', chan_adwinsync, 'preselect', start = 0, 
            duration = -20000, start_reference = 'cr1', link_start_to = 'start', 
            duration_reference = 'cr1', link_duration_to = 'duration')

        seq.add_element('readout', goto_target = 'readout', event_jump_target = 'wait_for_ADwin')

        seq.add_pulse('wait_a', chan_exlaser, 'readout', start = 0, duration = 500, 
                amplitude = 0)

        seq.add_pulse('sp', chan_exlaser, 'readout', start = 0, duration = self.par_sp_duration, 
                amplitude = self.par_sp_Ex_amplitude, start_reference = 'wait_a', link_start_to = 'end')

        seq.add_pulse('sp_2', chan_alaser, 'readout', start = 0, duration = 0, 
                amplitude = self.par_sp_A_amplitude, start_reference = 'sp', link_start_to = 'start', 
                duration_reference = 'sp', link_duration_to = 'duration')

        seq.add_pulse('ro',  chan_exlaser, 'readout', start = 6000, duration = self.par_ro_duration, 
            amplitude = self.par_ro_Ex_amplitude, start_reference = 'sp', link_start_to = 'end')
            
        seq.add_pulse('ro_2',  chan_alaser, 'readout', start = 0, duration = 0, 
            amplitude = self.par_ro_A_amplitude,  start_reference = 'ro',  link_start_to = 'start', 
            duration_reference = 'ro',  link_duration_to = 'duration')

        seq.add_pulse('cr2', chan_exlaser, 'readout', start = 1000, duration = self.par_cr_duration, 
                amplitude = self.par_cr_Ex_amplitude, start_reference = 'ro', link_start_to = 'end')

        seq.add_pulse('cr2_2', chan_alaser, 'readout', start = 0, duration = 0, 
                amplitude = self.par_cr_A_amplitude, start_reference = 'cr2', link_start_to = 'start', 
                duration_reference = 'cr2', link_duration_to = 'duration')

        seq.add_pulse('start_sp',  chan_phstart, 'readout', start = -100, duration = 50, 
                start_reference = 'sp',  link_start_to = 'start')

        seq.add_pulse('start_sp_filter', chan_phstart, 'readout', 
                start=-100-self.par_sp_filter_duration, duration = 50,
                start_reference='sp', link_start_to='end')

        if self.par_ro_spinfilter:
            seq.add_pulse('start_ro_sp_filter', chan_phstart, 'readout', 
                    start=-100-self.par_ro_spinfilter_duration, duration = 50,
                    start_reference='ro', link_start_to='end')

        seq.add_pulse('start_ro',  chan_phstart, 'readout', start = -100, duration = 50, 
                start_reference = 'ro',  link_start_to = 'start')
        seq.add_pulse('start_cr2', chan_phstart, 'readout', start = -100, duration = 50, 
                start_reference = 'cr2', link_start_to = 'start')

        seq.add_pulse('ADwin_ionization_probe', chan_adwinsync, 'readout', start = 0, 
            duration = -20000, start_reference = 'cr2', link_start_to = 'start', 
            duration_reference = 'cr2', link_duration_to = 'duration')


        seq.add_element('wait_for_ADwin', trigger_wait = True, goto_target = 'readout')
        seq.add_pulse('probe1', chan_exlaser, 'wait_for_ADwin', start=0, duration = 1000, 
                amplitude = self.par_cr_Ex_amplitude)
        seq.add_pulse('probe2', chan_alaser, 'wait_for_ADwin', start=-125, duration = 1000, 
                amplitude = self.par_cr_A_amplitude)

        seq.set_instrument(self.ins_awg)
        seq.set_clock(1e9)
        seq.set_send_waveforms(do_program)
        seq.set_send_sequence(do_program)
        seq.set_program_channels(True)
        seq.set_start_sequence(False)
        seq.force_HW_sequencing(True)
        seq.send_sequence()
        
        return True
예제 #20
0
def DSC_pulses_amp(sweep_param,pulse_dict,lt1 = False,do_program=True,do_program=True):
    '''
    This sequence consists of a fixed number of CORPSE pulses 
    and sweeps their amplitude
    
    sweep_param = numpy array with amplitude of CORPSE-pulses
    pulse_dict={
                "Pi":{"duration": ...},
                "istate_pulse": {"duration":... , "amplitude":...,  First pulse to create init state
                                "Do_Pulse": Boolean},
                "time_between_pulses": ...,                         waiting time between the CORPSE-pulses
                "time_between_CORPSE":...,                          waiting time between each individual pulse inside the CORPSE pulse sequence
                "duty_cycle_time": ...,                             waiting time at the end of each element
                "nr_of_pulses": ...,
                }
    '''
    seq = Sequence('spin_control')
    awgcfg.configure_sequence(seq,'mw')
    # vars for the channel names
    chan_mw_pm = 'MW_pulsemod' #is connected to ch1m1
    
    if lt1:
        chan_mwI = 'MW_Imod_lt1'
        chan_mwQ = 'MW_Qmod_lt1'
    else:
        chan_mwI = 'MW_Imod'
        chan_mwQ = 'MW_Qmod'
    
    if lt1:
        MW_pulse_mod_risetime = 10
    else:
        MW_pulse_mod_risetime = 10

    nr_of_datapoints = len(sweep_param)
    amplitude = sweep_param

    pi = pulse_dict["Pi"]
    istate_pulse = pulse_dict["init_state_pulse"]
    time_between_pulses = pulse_dict["time_between_pulses"]
    time_between_CORPSE = pulse_dict["time_between_CORPSE"]
    duty_cycle_time = pulse_dict["duty_cycle_time"]
    nr_of_pulses = pulse_dict["nr_of_pulses"]

    pulse_420_length = int(2.*pi["duration"]*(420./360.))
    pulse_300_length = int(2.*pi["duration"]*(300./360.))
    pulse_60_length = int(2.*pi["duration"]*(60./360.))


    for i in np.arange(nr_of_datapoints):
        if i == nr_of_datapoints-1:
            seq.add_element(name = 'spin_control_'+str(i+1), 
                trigger_wait = True, goto_target = 'spin_control_1')
        else:
            seq.add_element(name = 'spin_control_'+str(i+1), 
                trigger_wait = True)

        
    
        for j in np.arange(nr_of_pulses):
        
            if j == 0:
                if init_state_pulse["Do_Pulse"]: 
                    seq.add_pulse('first_wait', channel = chan_mw_pm, 
                        element = 'spin_control_'+str(i+1),start = 0, 
                        duration = 50, amplitude = 0)

                    seq.add_pulse('init_state_pulse' + str(j), channel = chan_mwI, element = 'spin_control_'+str(i+1),
                        start_reference = 'first_wait', link_start_to = 'end', start = 0, 
                        duration = istate_pulse["duration"], amplitude = istate_pulse["amplitude"], shape = 'rectangular')

                    seq.add_pulse('init_state_pulse_mod' + str(j), channel = chan_mw_pm, element = 'spin_control_'+str(i+1),
                            start=-MW_pulse_mod_risetime, duration=2*MW_pulse_mod_risetime, 
                            start_reference = 'init_state_pulse' + str(j), link_start_to = 'start', 
                            duration_reference = 'init_state_pulse'+str(j), link_duration_to = 'duration', 
                            amplitude = 2.0)

                    seq.add_pulse('wait' + str(j), channel = chan_mw_pm, element = 'spin_control_'+str(i+1), 
                            start_reference = 'init_state_pulse' + str(j), link_start_to='end',start = 0, 
                            duration = time_between_pulses, amplitude = 0)
                else:
                    seq.add_pulse('wait' + str(j), channel = chan_mw_pm, 
                        element = 'spin_control_'+str(i+1), start = 0, 
                        duration = 50, amplitude = 0)
            else:
                seq.add_pulse('wait' + str(j), channel = chan_mw_pm, 
                        element = 'spin_control_'+str(i+1), start = 0, 
                        duration = time_between_pulses, amplitude = 0)

            seq.add_pulse('pulse_420' + str(j), channel = chan_mwI, element = 'spin_control_'+str(i+1),
                start = 0, start_reference = 'wait'+str(j),link_start_to = 'end', 
                duration = pulse_420_length, amplitude = amplitude[i], shape = 'rectangular')

            seq.add_pulse('pulse_mod_420' + str(j), channel = chan_mw_pm, element = 'spin_control_'+str(i+1),
                    start=-MW_pulse_mod_risetime, duration=2*MW_pulse_mod_risetime, 
                    start_reference = 'pulse_420' + str(j), link_start_to = 'start', 
                    duration_reference = 'pulse_420'+str(j), link_duration_to = 'duration', 
                    amplitude = 2.0)
 
            seq.add_pulse('wait_1' + str(j), channel = chan_mw_pm, element = 'spin_control_'+str(i+1),
                    start = 0,start_reference = 'pulse_mod_420'+str(j),link_start_to ='end', 
                    duration = time_between_CORPSE, amplitude = 0)

            seq.add_pulse('pulse_300' + str(j), channel = chan_mwI, element = 'spin_control_'+str(i+1),
                start = 0, start_reference = 'wait_1'+str(j), link_start_to = 'end',
                duration = pulse_300_length, amplitude = -amplitude[i],shape = 'rectangular')

            seq.add_pulse('pulse_mod_300' + str(j), channel = chan_mw_pm, element = 'spin_control_'+str(i+1),
                    start=-MW_pulse_mod_risetime, duration=2*MW_pulse_mod_risetime, 
                    start_reference = 'pulse_300' + str(j), link_start_to = 'start', 
                    duration_reference = 'pulse_300'+str(j), link_duration_to = 'duration', 
                    amplitude = 2.0)
 
            seq.add_pulse('wait_2' + str(j), channel = chan_mw_pm, element = 'spin_control_'+str(i+1),
                    start = 0,start_reference = 'pulse_mod_300'+str(j),link_start_to ='end', 
                    duration = time_between_CORPSE, amplitude = 0)

            seq.add_pulse('pulse_60' + str(j), channel = chan_mwI, element = 'spin_control_'+str(i+1),
                start = 0, start_reference = 'wait_2'+str(j), link_start_to = 'end', 
                duration = pulse_60_length, amplitude = amplitude[i],shape = 'rectangular')

            seq.add_pulse('pulse_mod_60' + str(j), channel = chan_mw_pm, element = 'spin_control_'+str(i+1),
                    start=-MW_pulse_mod_risetime, duration=2*MW_pulse_mod_risetime, 
                    start_reference = 'pulse_60' + str(j), link_start_to = 'start', 
                    duration_reference = 'pulse_60'+str(j), link_duration_to = 'duration', 
                    amplitude = 2.0)

            last = 'Pulse_60'+str(j)

        seq.add_pulse('final_wait', channel = chan_mw_pm, element = 'spin_control_'+str(i+1),
            start_reference = last,link_start_to ='end', duration = duty_cycle_time, amplitude = 0) 



    seq.set_instrument(awg)
    seq.set_clock(1e9)
    seq.set_send_waveforms(do_program)
    seq.set_send_sequence(do_program)
    seq.set_program_channels(True)
    seq.set_start_sequence(False)
    seq.force_HW_sequencing(True)
    seq.send_sequence()
예제 #21
0
def generate_sequence(fstart=f_start - f_mw,
                      fstop=f_stop - f_mw,
                      steps=nr_of_datapoints,
                      do_program=True):
    seq = Sequence('dark_esr')

    print 'start frequency = ', (fstart + f_mw) / 1E9
    print 'stop frequency = ', (fstop + f_mw) / 1E9

    awgcfg.configure_sequence(seq, 'mw')

    # vars for the channel names
    chan_mw_pm = 'MW_pulsemod'  #is connected to ch1m1

    if lt1:
        chan_mwI = 'MW_Imod_lt1'
        chan_mwQ = 'MW_Qmod_lt1'
    else:
        chan_mwI = 'MW_Imod'
        chan_mwQ = 'MW_Qmod'

    # in this version we keep the center frequency and sweep the
    # modulation frequency

    # f_central = (fstart+fstop)/2.0

    pipulse = pi_pulse_length

    mode = 'SSB'
    amplitude_i = 0.
    amplitude_q = 0.

    if lt1:
        MW_pulse_mod_risetime = 2
    else:
        MW_pulse_mod_risetime = 6

    # sweep the modulation freq
    for i, f_mod in enumerate(linspace(fstart, fstop, steps)):

        ###################################################################
        # the actual rabi sequence and readout

        ename = 'desrseq%d' % i
        kw = {} if i < steps - 1 else {'goto_target': 'desrseq0'}
        seq.add_element(ename, trigger_wait=True, **kw)

        seq.add_pulse('wait',
                      channel=chan_mw_pm,
                      element=ename,
                      start=0,
                      duration=100,
                      amplitude=0)

        seq.add_pulse(name='mwburst',
                      channel=chan_mwI,
                      element=ename,
                      start=0,
                      duration=pipulse,
                      frequency=f_mod,
                      shape='sine',
                      amplitude=amplitude_ssbmod,
                      link_start_to='end',
                      start_reference='wait')

        seq.add_pulse('pulse_mod',
                      channel=chan_mw_pm,
                      element=ename,
                      start=-MW_pulse_mod_risetime,
                      duration=2 * MW_pulse_mod_risetime,
                      start_reference='mwburst',
                      link_start_to='start',
                      duration_reference='mwburst',
                      link_duration_to='duration',
                      amplitude=2.0)

        ###################################################################

    seq.set_instrument(awg)
    seq.set_clock(1e9)
    seq.set_send_waveforms(do_program)
    seq.set_send_sequence(do_program)
    seq.set_program_channels(True)
    seq.set_start_sequence(False)
    seq.force_HW_sequencing(True)
    seq.send_sequence()
예제 #22
0
def Multiple_Pi_pulses(sweep_param,pulse_dict,lt1 = False,do_program=True):
    '''
    This sequence consists of a number of Pi-pulses per element
    
    sweep_param = numpy array with number of Pi-pulses per element
    pulse_dict={
                "Pi":{"duration": ...,"amplitude": ...},
                "istate_pulse": {"duration":... , "amplitude":...}, First pulse to create init state
                "time_between_pulses": ...,
                "duty_cycle_time": ...,                             waiting time at the end of each element
                }
    '''
    seq = Sequence('spin_control')
    awgcfg.configure_sequence(seq,'mw')
    
    # vars for the channel names
    chan_mw_pm = 'MW_pulsemod' #is connected to ch1m1
    superposition_pulse=False
    
    if lt1:
        chan_mwI = 'MW_Imod_lt1'
        chan_mwQ = 'MW_Qmod_lt1'
    else:
        chan_mwI = 'MW_Imod'
        chan_mwQ = 'MW_Qmod'
    
#FIXME: take this from a dictionary
    if lt1:
        MW_pulse_mod_risetime = 10
    else:
        MW_pulse_mod_risetime = 10

    nr_of_datapoints = len(sweep_param)
    pulse_nr = sweep_param

    pi = pulse_dict["Pi"]
    time_between_pulses = pulse_dict["time_between_pulses"]
    duty_cycle_time = pulse_dict["duty_cycle_time"]
    istate_pulse = pulse_dict["init_state_pulse"]
    
    for i in np.arange(nr_of_datapoints):

        #create element for each datapoint and link last element to first
        if i == nr_of_datapoints-1:
            seq.add_element(name = 'spin_control_'+str(i+1), 
                trigger_wait = True, goto_target = 'spin_control_1')
        else:
            seq.add_element(name = 'spin_control_'+str(i+1), 
                trigger_wait = True)

        
        for j in np.arange(pulse_nr[i]):
  
            if j == 0:
                if init_state_pulse["Do_Pulse"]: 
                    seq.add_pulse('first_wait', channel = chan_mw_pm, 
                        element = 'spin_control_'+str(i+1),start = 0, 
                        duration = 50, amplitude = 0)

                    seq.add_pulse('init_state_pulse' + str(j), channel = chan_mwI, element = 'spin_control_'+str(i+1),
                        start_reference = 'first_wait', link_start_to = 'end', start = 0, 
                        duration = istate_pulse["duration"], amplitude = istate_pulse["amplitude"], shape = 'rectangular')

                    seq.add_pulse('init_state_pulse_mod' + str(j), channel = chan_mw_pm, element = 'spin_control_'+str(i+1),
                        start=-MW_pulse_mod_risetime, duration=2*MW_pulse_mod_risetime, 
                        start_reference = 'init_state_pulse' + str(j), link_start_to = 'start', 
                        duration_reference = 'init_state_pulse'+str(j), link_duration_to = 'duration', 
                        amplitude = 2.0)

                    seq.add_pulse('wait' + str(j), channel = chan_mw_pm, element = 'spin_control_'+str(i+1), 
                        start_reference = 'init_state_pulse' + str(j), link_start_to='end',start = 0, 
                        duration = time_between_pulses, amplitude = 0)
                else:
                    seq.add_pulse('wait' + str(j), channel = chan_mw_pm, 
                        element = 'spin_control_'+str(i+1), start = 0, 
                        duration = 50, amplitude = 0)
               
            else:
    
                seq.add_pulse('wait' + str(j), channel = chan_mw_pm, element = 'spin_control_'+str(i+1),
                    start = 0,start_reference = last,link_start_to ='end', 
                    duration = time_between_pulses, amplitude = 0)
            
            
            seq.add_pulse('pi' + str(j), channel = chan_mwI, element = 'spin_control_'+str(i+1),
                start = 0, start_reference = 'wait'+str(j), link_start_to = 'end', 
                duration = pi["duration"], amplitude = pi["amplitude"], shape = 'rectangular')

            seq.add_pulse('pulse_mod' + str(j), channel = chan_mw_pm, element = 'spin_control_'+str(i+1),
                start=-MW_pulse_mod_risetime, duration=2*MW_pulse_mod_risetime, 
                start_reference = 'pi' + str(j), link_start_to = 'start', 
                duration_reference = 'pi'+str(j), link_duration_to = 'duration', 
                amplitude = 2.0)

        
            last = 'pi'+str(j)
        
        seq.add_pulse('final_wait', channel = chan_mw_pm, element = 'spin_control_'+str(i+1),
                start_reference = last,link_start_to ='end', 
                duration = duty_cycle_time, amplitude = 0)

    seq.set_instrument(awg)
    seq.set_clock(1e9)
    seq.set_send_waveforms(do_program)
    seq.set_send_sequence(do_program)
    seq.set_program_channels(True)
    seq.set_start_sequence(False)
    seq.force_HW_sequencing(True)
    seq.send_sequence()
예제 #23
0
    def generate_sequence(self, do_program=True):
        self.seq = Sequence('lde')
        seq = self.seq
        
        # channels
        chan_hhsync = 'HH_sync'         # historically PH_start
        chan_hh_ma1 = 'HH_MA1'          # historically PH_sync
        chan_plusync = 'PLU_gate'
        
        chan_alaser = 'AOM_Newfocus'
        chan_eom = 'EOM_Matisse'
        chan_eom_aom = 'EOM_AOM_Matisse'
        
        chan_mw_pm = 'MW_pulsemod'
        chan_mwI_lt2 = 'MW_Imod'
        chan_mwQ_lt2 = 'MW_Qmod'
        chan_mwI_lt1 = 'MW_Imod_lt1'
        chan_mwQ_lt1 = 'MW_Qmod_lt1'

        # TODO study the current AWG configuration, then adapt this
        awgcfg.configure_sequence(self.seq, 'hydraharp', 'mw',
                LDE = { 
                    chan_eom_aom: { 'high' : self.eom_aom_amplitude },
                    chan_alaser: { 'high' : self.A_SP_amplitude, }
                    },
                )
        seq.add_element('lde', goto_target='lde', trigger_wait=False)
                
        # 1: spin pumping
        seq.add_pulse('initialdelay', chan_alaser, 'lde',
                start = 0, duration = 10, amplitude=0, )
        seq.add_pulse('spinpumping', chan_alaser, 'lde', 
                start = 0, duration = self.SP_duration,
                start_reference='initialdelay',
                link_start_to='end', amplitude=1)

        # 2: Pi/2 pulses on both spins
        seq.add_pulse('pi/2-1 lt2', chan_mwI_lt2, 'lde',
                duration = self.pi2_lt2_duration,
                amplitude = self.pi2_lt2_amplitude,
                start_reference = 'spinpumping',
                start = self.wait_after_SP, 
                link_start_to = 'end' )
        seq.add_pulse('pi/2-1 lt1', chan_mwI_lt1, 'lde',
                duration = self.pi2_lt1_duration,
                amplitude = self.pi2_lt1_amplitude,
                start_reference = 'pi/2-1 lt2',
                start = (self.pi2_lt2_duration-self.pi2_lt1_duration)/2,
                link_start_to = 'start' )
        
        seq.add_pulse('pi/2-1 pm', chan_mw_pm, 'lde',
                amplitude = self.MW_pulsemod_amplitude,
                duration = max(self.pi2_lt2_duration+\
                        2*self.MW_pulsemod_risetime_lt2,
                    self.pi2_lt1_duration+\
                            2*self.MW_pulsemod_risetime_lt1),
                start = min(-self.MW_pulsemod_risetime_lt2,
                    (self.pi2_lt2_duration-self.pi2_lt1_duration)/2 - \
                            self.MW_pulsemod_risetime_lt1),
                start_reference = 'pi/2-1 lt2',
                link_start_to = 'start' )

        # 3a: optical pi-pulse no 1
        i = 1
        last = 'pi/2-1 pm'
        
        seq.add_pulse('start'+str(i),  chan_hhsync, 'lde',         
                start = self.wait_after_pi2, duration = 50, 
                amplitude = 2.0, start_reference = last,  
                link_start_to = 'end')
        last = 'start'+str(i)

        seq.add_pulse('mrkr'+str(i), chan_hh_ma1, 'lde',
                start=-20, duration=50,
                amplitude=0.0, start_reference=last,
                link_start_to='start')

        seq.add_pulse('start'+str(i)+'delay',  chan_hhsync, 'lde', 
                start = 0, duration = 50, amplitude = 0,
                start_reference = last,  link_start_to = 'end') 
        last = 'start'+str(i)+'delay'

        seq.add_pulse('AOM'+str(i),  chan_eom_aom, 'lde', 
                start = m.aom_start, duration = m.aom_duration, 
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_off'+str(i),  chan_eom, 'lde', 
                amplitude = m.eom_off_amplitude,
                start = m.eom_start, duration = m.eom_off_duration, 
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_pulse'+str(i),  chan_eom, 'lde', 
                amplitude = m.eom_pulse_amplitude - m.eom_off_amplitude,
                start = m.eom_start + m.eom_off_duration/2 + \
                        m.eom_pulse_offset, duration = m.eom_pulse_duration, 
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_overshoot1'+str(i),  chan_eom, 'lde', 
                amplitude = m.eom_overshoot1,
                start = m.eom_start + m.eom_off_duration/2 + \
                        m.eom_pulse_offset + m.eom_pulse_duration, 
                duration = m.eom_overshoot_duration1, 
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_overshoot2'+str(i),  chan_eom, 'lde', 
                amplitude = m.eom_overshoot2,
                start = m.eom_start + m.eom_off_duration/2 + \
                        m.eom_pulse_offset + m.eom_pulse_duration + \
                        m.eom_overshoot_duration1, 
                duration = m.eom_overshoot_duration2, 
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_off_comp'+str(i),  chan_eom, 'lde', 
                amplitude = -m.eom_off_amplitude,
                start = m.eom_start+m.eom_off_duration, 
                duration = m.eom_off_duration, 
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_pulse_comp'+str(i),  chan_eom, 'lde', 
                amplitude = -m.eom_pulse_amplitude + m.eom_off_amplitude,
                start = m.eom_start+m.eom_off_duration + \
                        int(m.eom_off_duration/2) + m.eom_pulse_offset, 
                duration = m.eom_pulse_duration, 
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_overshoot1_comp'+str(i),  chan_eom, 'lde', 
                amplitude = -m.eom_overshoot1, 
                start = m.eom_start+m.eom_off_duration + \
                        int(m.eom_off_duration/2) + m.eom_pulse_offset + \
                        m.eom_pulse_duration, 
                duration = m.eom_overshoot_duration1, 
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_overshoot2_comp'+str(i),  chan_eom, 'lde', 
                amplitude = -m.eom_overshoot2, 
                start = m.eom_start+m.eom_off_duration + \
                        int(m.eom_off_duration/2) + m.eom_pulse_offset + \
                        m.eom_pulse_duration + m.eom_overshoot_duration1, 
                duration = m.eom_overshoot_duration2, 
                start_reference = last, link_start_to = 'start')
        last = 'EOM_overshoot2_comp'+str(i)
        last = 'EOM_pulse'+str(i)

        # 3b: add pre-sync pulses for the HH
        for j in range(self.presync_pulses):
            seq.add_pulse('presync'+str(j),  chan_hhsync, 'lde',         
                    start = -(j+1)*self.opt_pi_separation, duration = 50, 
                    amplitude = 2.0, start_reference = 'start'+str(i),  
                    link_start_to = 'start')

        # 3c: add PLU gate
        seq.add_pulse('plu-gate'+str(i), chan_plusync, 'lde',
                start = 0,
                duration = self.plu_gate_duration,
                amplitude = 0.0,
                start_reference = 'EOM_pulse'+str(i),
                link_start_to = 'end' )


        # 4: spin pi pulses
        seq.add_pulse('pi lt2', chan_mwI_lt2, 'lde',
                duration = self.pi_lt2_duration,
                amplitude = self.pi_lt2_amplitude,
                start_reference = last,
                start = self.wait_after_opt_pi, 
                link_start_to = 'start' )
        seq.add_pulse('pi lt1', chan_mwI_lt1, 'lde',
                duration = self.pi_lt1_duration,
                amplitude = self.pi_lt1_amplitude,
                start_reference = 'pi lt2',
                start = (self.pi_lt2_duration-self.pi_lt1_duration)/2,
                link_start_to = 'start' )
        seq.add_pulse('pi pm', chan_mw_pm, 'lde',
                amplitude = self.MW_pulsemod_amplitude,
                duration = max(self.pi_lt2_duration+\
                        2*self.MW_pulsemod_risetime_lt2,
                    self.pi_lt1_duration+\
                            2*self.MW_pulsemod_risetime_lt1),
                start = min(-self.MW_pulsemod_risetime_lt2,
                    (self.pi_lt2_duration-self.pi_lt1_duration)/2 - \
                            self.MW_pulsemod_risetime_lt1),
                start_reference = 'pi lt2',
                link_start_to = 'start')

        # 5a: optical pi-pulse no2
        i = 2

        seq.add_pulse('start'+str(i),  chan_hhsync, 'lde',         
                start = self.opt_pi_separation, duration = 50, 
                amplitude = 2.0, start_reference = 'start'+str(i-1),  
                link_start_to = 'start') 
        last = 'start'+str(i)

        seq.add_pulse('start'+str(i)+'delay',  chan_hhsync, 'lde', 
                start = 0, duration = 50, amplitude = 0,
                start_reference = last,  link_start_to = 'end') 
        last = 'start'+str(i)+'delay'

        seq.add_pulse('AOM'+str(i),  chan_eom_aom, 'lde', 
                start = m.aom_start, duration = m.aom_duration, 
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_off'+str(i),  chan_eom, 'lde', 
                amplitude = m.eom_off_amplitude,
                start = m.eom_start, duration = m.eom_off_duration, 
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_pulse'+str(i),  chan_eom, 'lde', 
                amplitude = m.eom_pulse_amplitude - m.eom_off_amplitude,
                start = m.eom_start + m.eom_off_duration/2 + \
                        m.eom_pulse_offset, duration = m.eom_pulse_duration, 
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_overshoot1'+str(i),  chan_eom, 'lde', 
                amplitude = m.eom_overshoot1,
                start = m.eom_start + m.eom_off_duration/2 + \
                        m.eom_pulse_offset + m.eom_pulse_duration, 
                duration = m.eom_overshoot_duration1, 
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_overshoot2'+str(i),  chan_eom, 'lde', 
                amplitude = m.eom_overshoot2,
                start = m.eom_start + m.eom_off_duration/2 + \
                        m.eom_pulse_offset + m.eom_pulse_duration + \
                        m.eom_overshoot_duration1, 
                duration = m.eom_overshoot_duration2, 
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_off_comp'+str(i),  chan_eom, 'lde', 
                amplitude = -m.eom_off_amplitude,
                start = m.eom_start+m.eom_off_duration, 
                duration = m.eom_off_duration, 
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_pulse_comp'+str(i),  chan_eom, 'lde', 
                amplitude = -m.eom_pulse_amplitude + m.eom_off_amplitude,
                start = m.eom_start+m.eom_off_duration + \
                        int(m.eom_off_duration/2) + m.eom_pulse_offset, 
                duration = m.eom_pulse_duration, 
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_overshoot1_comp'+str(i),  chan_eom, 'lde', 
                amplitude = -m.eom_overshoot1, 
                start = m.eom_start+m.eom_off_duration + \
                        int(m.eom_off_duration/2) + m.eom_pulse_offset + \
                        m.eom_pulse_duration, 
                duration = m.eom_overshoot_duration1, 
                start_reference = last, link_start_to = 'start')

        seq.add_pulse('EOM_overshoot2_comp'+str(i),  chan_eom, 'lde', 
                amplitude = -m.eom_overshoot2, 
                start = m.eom_start+m.eom_off_duration + \
                        int(m.eom_off_duration/2) + m.eom_pulse_offset + \
                        m.eom_pulse_duration + m.eom_overshoot_duration1, 
                duration = m.eom_overshoot_duration2, 
                start_reference = last, link_start_to = 'start')
        last = 'EOM_overshoot2_comp'+str(i)

        # 5b: add post-sync pulses for the HH
        for j in range(self.postsync_pulses):
            seq.add_pulse('postsync'+str(j),  chan_hhsync, 'lde',         
                    start = (j+1)*self.opt_pi_separation, duration = 50, 
                    amplitude = 2.0, start_reference = 'start'+str(i),  
                    link_start_to = 'start')

        # 5c: add PLU gate
        seq.add_pulse('plu-gate'+str(i), chan_plusync, 'lde',
                start = 0,
                duration = self.plu_gate_duration,
                amplitude = 0.0,
                start_reference = 'EOM_pulse'+str(i),
                link_start_to = 'end' )

        # 5d: two additional PLU gates
        seq.add_pulse('plu-gate3', chan_plusync, 'lde',
                start = self.plu_3_delay,
                duration = self.plu_gate_duration,
                amplitude = 0.0,
                start_reference = 'plu-gate2',
                link_start_to = 'end')
        seq.add_pulse('plu-gate4', chan_plusync, 'lde',
                start = self.plu_4_delay,
                duration = self.plu_gate_duration,
                amplitude = 0.0,
                start_reference = 'plu-gate2',
                link_start_to = 'end')

        # idle element
        seq.add_element('idle', goto_target='lde')
        seq.add_pulse('empty', chan_alaser, 'idle', start=0, duration = 1000, 
            amplitude = 0)

        seq.set_instrument(awg)
        seq.set_clock(1e9)
        seq.set_send_waveforms(do_program)
        seq.set_send_sequence(do_program)
        seq.set_program_channels(True)
        seq.set_start_sequence(True)
        seq.force_HW_sequencing(True)
        seq.send_sequence()        
        
        return seq
def generate_DSC_sequence_time(do_program=True):
    seq = Sequence('spin_control')
    awgcfg.configure_sequence(seq, 'mw')
    # vars for the channel names
    chan_mw_pm = 'MW_pulsemod'  #is connected to ch1m1

    if lt1:
        chan_mwI = 'MW_Imod_lt1'
        chan_mwQ = 'MW_Qmod_lt1'
    else:
        chan_mwI = 'MW_Imod'
        chan_mwQ = 'MW_Qmod'

    if lt1:
        MW_pulse_mod_risetime = 10
    else:
        MW_pulse_mod_risetime = 10

    for i in np.arange(nr_of_datapoints):
        if i == nr_of_datapoints - 1:
            seq.add_element(name='spin_control_' + str(i + 1),
                            trigger_wait=True,
                            goto_target='spin_control_1')
        else:
            seq.add_element(name='spin_control_' + str(i + 1),
                            trigger_wait=True)

        for j in np.arange(nr_of_pulses):

            if j == 0:

                seq.add_pulse('wait' + str(j),
                              channel=chan_mw_pm,
                              element='spin_control_' + str(i + 1),
                              start=0,
                              duration=50,
                              amplitude=0)
            else:

                seq.add_pulse('wait' + str(j),
                              channel=chan_mw_pm,
                              element='spin_control_' + str(i + 1),
                              start=0,
                              start_reference=last,
                              link_start_to='end',
                              duration=time_between_pulses,
                              amplitude=0)

            seq.add_pulse('pulse_420' + str(j),
                          channel=chan_mwI,
                          element='spin_control_' + str(i + 1),
                          start=0,
                          duration=pulse_420_length,
                          amplitude=amplitude_ssbmod,
                          start_reference='wait' + str(j),
                          link_start_to='end',
                          shape='rectangular')

            seq.add_pulse('pulse_mod_420' + str(j),
                          channel=chan_mw_pm,
                          element='spin_control_' + str(i + 1),
                          start=-MW_pulse_mod_risetime,
                          duration=2 * MW_pulse_mod_risetime,
                          start_reference='pulse_420' + str(j),
                          link_start_to='start',
                          duration_reference='pulse_420' + str(j),
                          link_duration_to='duration',
                          amplitude=2.0)

            seq.add_pulse('wait_1' + str(j),
                          channel=chan_mw_pm,
                          element='spin_control_' + str(i + 1),
                          start=0,
                          start_reference='pulse_mod_420' + str(j),
                          link_start_to='end',
                          duration=time[i],
                          amplitude=0)

            seq.add_pulse('pulse_300' + str(j),
                          channel=chan_mwI,
                          element='spin_control_' + str(i + 1),
                          start=0,
                          duration=pulse_300_length,
                          amplitude=-amplitude_ssbmod,
                          start_reference='wait_1' + str(j),
                          link_start_to='end',
                          shape='rectangular')

            seq.add_pulse('pulse_mod_300' + str(j),
                          channel=chan_mw_pm,
                          element='spin_control_' + str(i + 1),
                          start=-MW_pulse_mod_risetime,
                          duration=2 * MW_pulse_mod_risetime,
                          start_reference='pulse_300' + str(j),
                          link_start_to='start',
                          duration_reference='pulse_300' + str(j),
                          link_duration_to='duration',
                          amplitude=2.0)

            seq.add_pulse('wait_2' + str(j),
                          channel=chan_mw_pm,
                          element='spin_control_' + str(i + 1),
                          start=0,
                          start_reference='pulse_mod_300' + str(j),
                          link_start_to='end',
                          duration=time[i],
                          amplitude=0)

            seq.add_pulse('pulse_60' + str(j),
                          channel=chan_mwI,
                          element='spin_control_' + str(i + 1),
                          start=0,
                          duration=pulse_60_length,
                          amplitude=amplitude_ssbmod,
                          start_reference='wait_2' + str(j),
                          link_start_to='end',
                          shape='rectangular')

            seq.add_pulse('pulse_mod_60' + str(j),
                          channel=chan_mw_pm,
                          element='spin_control_' + str(i + 1),
                          start=-MW_pulse_mod_risetime,
                          duration=2 * MW_pulse_mod_risetime,
                          start_reference='pulse_60' + str(j),
                          link_start_to='start',
                          duration_reference='pulse_60' + str(j),
                          link_duration_to='duration',
                          amplitude=2.0)

            seq.add_pulse('wait_3' + str(j),
                          channel=chan_mw_pm,
                          element='spin_control_' + str(i + 1),
                          start_reference='pulse_mod_60' + str(j),
                          link_start_to='end',
                          duration=time_between_pulses,
                          amplitude=0)

            last = 'wait_3' + str(j)

        seq.add_pulse('final_wait',
                      channel=chan_mw_pm,
                      element='spin_control_' + str(i + 1),
                      start_reference=last,
                      link_start_to='end',
                      duration=duty_cycle_time,
                      amplitude=0)

    seq.set_instrument(awg)
    seq.set_clock(1e9)
    seq.set_send_waveforms(do_program)
    seq.set_send_sequence(do_program)
    seq.set_program_channels(True)
    seq.set_start_sequence(False)
    seq.force_HW_sequencing(True)
    seq.send_sequence()
def generate_sequence(do_program=True):
        seq = Sequence(name)

        # vars for the channel names
        chan_hhsync = 'HH_sync'         # historically PH_start
        chan_hh_ma1 = 'HH_MA1'          # historically PH_sync
        chan_exlaser = 'AOM_Matisse'    # ok
        chan_alaser = 'AOM_Newfocus'    # ok
        chan_adwinsync = 'ADwin_sync'   # ok
        chan_eom = 'EOM_Matisse'
        chan_eom_aom = 'EOM_AOM_Matisse'

        awgcfg.configure_sequence(seq, 'basics', 'hydraharp', 
                optical_rabi = {chan_eom_aom: {'high': par_eom_aom_amplitude}}, 
                ssro={ chan_alaser: {'high': par_cr_A_amplitude } } )
        
        seq.add_element('preselect', event_jump_target = 'wait_for_ADwin')
        
        seq.add_pulse('cr1', chan_exlaser, 'preselect', duration = par_cr_duration, 
                amplitude = par_cr_Ex_amplitude)

        seq.add_pulse('cr1_2', chan_alaser, 'preselect', start = 0, duration = 0, 
                amplitude = par_cr_A_amplitude, start_reference = 'cr1', link_start_to = 'start', 
                duration_reference = 'cr1', link_duration_to = 'duration')

        seq.add_pulse('ADwin_ionization_probe', chan_adwinsync, 'preselect', start = 0, 
            duration = -20000, start_reference = 'cr1', link_start_to = 'start', 
            duration_reference = 'cr1', link_duration_to = 'duration')

        seq.add_element('optical_rabi', goto_target = 'preselect', repetitions = par_rabi_elt_reps)

        seq.add_pulse('start',  chan_hhsync, 'optical_rabi', start = 0, duration = 50, amplitude = 0.0)
        last = 'start'
        
        for i in arange(par_rabi_reps):
            seq.add_pulse('start'+str(i),  chan_hhsync, 'optical_rabi', start = par_rabi_cycle_duration, duration = 50, 
                start_reference = last,  link_start_to = 'start')
            last = 'start'+str(i)

            seq.add_pulse('AOM'+str(i),  chan_eom_aom, 'optical_rabi', 
                    start = par_aom_start, duration = par_aom_duration, 
                    start_reference = last, link_start_to = 'start')

            seq.add_pulse('EOM_off'+str(i),  chan_eom, 'optical_rabi', 
                    amplitude = par_eom_off_amplitude,
                    start = par_eom_start, duration = par_eom_off_duration, 
                    start_reference = last, link_start_to = 'start')

            seq.add_pulse('EOM_pulse'+str(i),  chan_eom, 'optical_rabi', 
                    amplitude = par_eom_pulse_amplitude - par_eom_off_amplitude,
                    start = par_aom_start + int(par_aom_duration/2) + par_eom_pulse_start, duration = par_eom_pulse_duration, 
                    start_reference = last, link_start_to = 'start')

            seq.add_pulse('EOM_off_comp'+str(i),  chan_eom, 'optical_rabi', 
                    amplitude = -par_eom_off_amplitude,
                    start = par_eom_start+par_eom_off_duration, duration = par_eom_off_duration, 
                    start_reference = last, link_start_to = 'start')

            seq.add_pulse('EOM_pulse_comp'+str(i),  chan_eom, 'optical_rabi', 
                    amplitude = -par_eom_pulse_amplitude + par_eom_off_amplitude,
                    start = par_eom_off_duration + par_aom_start + par_eom_pulse_start + 
                    int(par_aom_duration/2), duration = par_eom_pulse_duration, 
                    start_reference = last, link_start_to = 'start')

        seq.add_element('wait_for_ADwin', trigger_wait = True, goto_target = 'optical_rabi')
        seq.add_pulse('probe1', chan_exlaser, 'wait_for_ADwin', start=0, duration = 1000, 
                amplitude = par_cr_Ex_amplitude)
        seq.add_pulse('probe2', chan_alaser, 'wait_for_ADwin', start=-125, duration = 1000, 
                amplitude = par_cr_A_amplitude)

        seq.set_instrument(ins_awg)
        seq.set_clock(1e9)
        seq.set_send_waveforms(do_program)
        seq.set_send_sequence(do_program)
        seq.set_program_channels(True)
        seq.set_start_sequence(True)
        seq.force_HW_sequencing(True)
        seq.send_sequence()
        
        return True
name = 'optical_rabi'

par_aom_duration = 200
par_aom_start = 800
par_eom_off_duration = 100
par_eom_pulse_duration = 30
par_eom_pulse_offset = -30

par_eom_off_amplitude = -.2
par_eom_pulse_amplitude = -.1

par_eom_aom_amplitude = 0.1
par_eom_initial_idle_duration = 0

seq = Sequence(name)

# vars for the channel names
chan_HHsync = 'HH_sync'
chan_eom_aom = 'AOM_EOM_Matisse'
chan_eom = 'EOM_Matisse'

seq.add_channel('EOM_Matisse',
                'ch4',
                cable_delay=0,
                low=par_eom_off_amplitude,
                high=par_eom_pulse_amplitude)
seq.add_channel('AOM_EOM_Matisse', 'ch4m1', cable_delay=0, low=0., high=1.)
seq.add_channel('HH_sync', 'ch2m2', cable_delay=0, low=0., high=2.)

seq.add_element(name, repetitions=1, goto_target=name)
예제 #27
0
def generate_sequence(do_program=True):
    seq = Sequence('tpqi_remote')

    # vars for the channel names
    chan_hhsync = 'HH_sync'  # historically PH_start
    chan_hh_ma1 = 'HH_MA1'  # historically PH_sync
    chan_exlaser = 'AOM_Matisse'  # ok
    chan_alaser_lt2 = 'AOM_Newfocus'  # ok
    chan_alaser_lt1 = 'AOM_Newfocus_lt1'
    chan_adwinsync = 'ADwin_sync'  # ok
    chan_eom = 'EOM_Matisse'
    chan_eom_aom = 'EOM_AOM_Matisse'
    chan_apd_gate_1 = 'APD_Gate_1'
    chan_apd_gate_2 = 'APD_Gate_2'

    awgcfg.configure_sequence(
        seq,
        'hydraharp',
        'ssro',
        optical_rabi={chan_eom_aom: {
            'high': par_eom_aom_amplitude
        }})

    #int(par_adwin_aom_duration*1e4)

    seq.add_element(
        'optical_rabi',
        goto_target='idle')  #'optical_rabi',event_jump_target='idle')

    seq.add_pulse('spinpumping_LT1',
                  chan_alaser_lt1,
                  'optical_rabi',
                  start=0,
                  duration=par_sp_duration,
                  amplitude=par_sp_voltage_lt1)

    seq.add_pulse('spinpumping_LT2',
                  chan_alaser_lt2,
                  'optical_rabi',
                  start=0,
                  duration=par_sp_duration,
                  amplitude=par_sp_voltage_lt2)

    #Define a start point for the sequence, set amplitude to 0. actual sync pulse comes later
    seq.add_pulse('start',
                  chan_hhsync,
                  'optical_rabi',
                  start=-1000,
                  start_reference='spinpumping_LT1',
                  link_start_to='end',
                  duration=50,
                  amplitude=0.)
    #    seq.add_pulse('start', chan_hhsync, 'optical_rabi', start = -1000,
    #            duration = 50, amplitude = 2.0)
    last = 'start'

    seq.add_pulse('AOM',
                  chan_eom_aom,
                  'optical_rabi',
                  start=par_aom_start,
                  duration=par_aom_duration,
                  amplitude=par_eom_aom_amplitude,
                  start_reference=last,
                  link_start_to='start')

    if use_apd_gate:

        seq.add_pulse('gate_apd1',
                      chan_apd_gate_1,
                      'optical_rabi',
                      amplitude=-2.,
                      start=par_aom_start + par_gate_start_offset,
                      duration=par_gate_duration,
                      start_reference=last,
                      link_start_to='start')

        seq.add_pulse('gate_apd2',
                      chan_apd_gate_2,
                      'optical_rabi',
                      amplitude=-2.,
                      start=par_aom_start + par_gate_start_offset + 300,
                      duration=par_gate_duration,
                      start_reference=last,
                      link_start_to='start')

    seq.add_element('idle',
                    goto_target='idle',
                    event_jump_target='optical_rabi')
    seq.add_pulse('empty',
                  chan_exlaser,
                  'idle',
                  start=0,
                  duration=1000,
                  amplitude=0)

    #seq.add_pulse('probe2', chan_alaser, 'wait_for_ADwin', start=-125, duration = 1000,
    #        amplitude = par_cr_A_amplitude)
    #seq.add_pulse('probemw', chan_mw, 'wait_for_ADwin', start=-525, duration = 1000,
    #       amplitude = 1.0)

    seq.set_instrument(awg)
    seq.set_clock(1e9)
    seq.set_send_waveforms(do_program)
    seq.set_send_sequence(do_program)
    seq.set_program_channels(True)
    seq.set_start_sequence(False)
    seq.force_HW_sequencing(True)
    seq.send_sequence()
예제 #28
0
def generate_sequence(do_program=True):
    seq = Sequence('tpqi_remote')

    # vars for the channel names
    chan_hhsync = 'HH_sync'  # historically PH_start
    chan_hh_ma1 = 'HH_MA1'  # historically PH_sync
    chan_exlaser = 'AOM_Matisse'  # ok
    chan_alaser_lt2 = 'AOM_Newfocus'  # ok
    chan_alaser_lt1 = 'AOM_Newfocus_lt1'
    chan_adwinsync = 'ADwin_sync'  # ok
    chan_eom = 'EOM_Matisse'
    chan_eom_aom = 'EOM_AOM_Matisse'
    chan_plu = 'PLU_gate'
    #chan_pulse_gating_module = 'Pulse_gating_module'

    awgcfg.configure_sequence(
        seq,
        'hydraharp',
        'mw',
        LDE={
            chan_eom_aom: {
                'high': par_eom_aom_amplitude
            },
        },
    )

    #int(par_adwin_aom_duration*1e4)

    seq.add_element(
        'optical_rabi', repetitions=par_el_repetitions,
        goto_target='idle')  #'optical_rabi',event_jump_target='idle')

    seq.add_pulse('sync_start',
                  chan_hhsync,
                  'optical_rabi',
                  start=0,
                  duration=50,
                  amplitude=2.0)

    seq.add_pulse('delay',
                  chan_hhsync,
                  'optical_rabi',
                  start=0,
                  duration=50,
                  amplitude=0,
                  start_reference='sync_start',
                  link_start_to='end')

    last = 'delay'

    #XXXXXXXX

    seq.add_pulse('AOM',
                  chan_eom_aom,
                  'optical_rabi',
                  start=par_aom_start,
                  duration=par_aom_duration,
                  start_reference=last,
                  link_start_to='start')

    seq.add_pulse('EOM_off',
                  chan_eom,
                  'optical_rabi',
                  amplitude=par_eom_off_amplitude,
                  start=par_eom_start,
                  duration=par_eom_off_duration,
                  start_reference=last,
                  link_start_to='start')

    seq.add_pulse('EOM_pulse',  chan_eom, 'optical_rabi',
            amplitude = par_eom_pulse_amplitude - par_eom_off_amplitude,
            start = par_eom_start + par_eom_off_duration/2 + \
                    par_eom_pulse_offset, duration = par_eom_pulse_duration,
            start_reference = last, link_start_to = 'start')

    seq.add_pulse('EOM_overshoot1',  chan_eom, 'optical_rabi',
            amplitude = par_eom_overshoot1,
            start = par_eom_start + par_eom_off_duration/2 + \
                    par_eom_pulse_offset + par_eom_pulse_duration,
            duration = par_eom_overshoot_duration1,
            start_reference = last, link_start_to = 'start')

    seq.add_pulse('EOM_overshoot2',  chan_eom, 'optical_rabi',
            amplitude = par_eom_overshoot2,
            start = par_eom_start + par_eom_off_duration/2 + \
                    par_eom_pulse_offset + par_eom_pulse_duration + \
                    par_eom_overshoot_duration1,
            duration = par_eom_overshoot_duration2,
            start_reference = last, link_start_to = 'start')

    seq.add_pulse('EOM_off_comp',
                  chan_eom,
                  'optical_rabi',
                  amplitude=-par_eom_off_amplitude,
                  start=par_eom_start + par_eom_off_duration,
                  duration=par_eom_off_duration,
                  start_reference=last,
                  link_start_to='start')

    seq.add_pulse('EOM_pulse_comp',  chan_eom, 'optical_rabi',
            amplitude = -par_eom_pulse_amplitude + par_eom_off_amplitude,
            start = par_eom_start+par_eom_off_duration + \
                    int(par_eom_off_duration/2) + par_eom_pulse_offset,
            duration = par_eom_pulse_duration,
            start_reference = last, link_start_to = 'start')

    seq.add_pulse('EOM_overshoot1_comp',  chan_eom, 'optical_rabi',
            amplitude = -par_eom_overshoot1,
            start = par_eom_start+par_eom_off_duration + \
                    int(par_eom_off_duration/2) + par_eom_pulse_offset + \
                    par_eom_pulse_duration,
            duration = par_eom_overshoot_duration1,
            start_reference = last, link_start_to = 'start')

    seq.add_pulse('EOM_overshoot2_comp',  chan_eom, 'optical_rabi',
            amplitude = -par_eom_overshoot2,
            start = par_eom_start+par_eom_off_duration + \
                    int(par_eom_off_duration/2) + par_eom_pulse_offset + \
                    par_eom_pulse_duration + par_eom_overshoot_duration1,
            duration = par_eom_overshoot_duration2,
            start_reference = last, link_start_to = 'start')
    #XXXXXXXXXXXX
    seq.add_pulse('Gate_PLU_2',
                  chan_plu,
                  'optical_rabi',
                  start=0,
                  duration=par_plu_gate_duration,
                  start_reference='EOM_pulse',
                  link_start_to='end')

    seq.add_pulse('Gate_PLU_1',
                  chan_plu,
                  'optical_rabi',
                  start=-100,
                  duration=50,
                  start_reference='Gate_PLU_2',
                  link_start_to='start')

    seq.add_pulse('Gate_PLU_3',
                  chan_plu,
                  'optical_rabi',
                  start=300,
                  duration=150,
                  start_reference='Gate_PLU_2',
                  link_start_to='end')
    seq.add_pulse('Gate_PLU_4',
                  chan_plu,
                  'optical_rabi',
                  start=50,
                  duration=50,
                  start_reference='Gate_PLU_3',
                  link_start_to='end')

    seq.add_pulse('empty',
                  chan_hh_ma1,
                  'optical_rabi',
                  start=0,
                  start_reference='sync_start',
                  link_start_to='start',
                  duration=par_sync_period,
                  amplitude=0)

    seq.add_element('idle',
                    goto_target='idle',
                    event_jump_target='optical_rabi')

    seq.add_pulse('empty',
                  chan_hh_ma1,
                  'idle',
                  start=0,
                  duration=1000,
                  amplitude=0)

    seq.set_instrument(awg)
    seq.set_clock(1e9)
    seq.set_send_waveforms(do_program)
    seq.set_send_sequence(do_program)
    seq.set_program_channels(True)
    seq.set_start_sequence(False)
    seq.force_HW_sequencing(True)
    seq.send_sequence()