Ejemplo n.º 1
0
def generate_sequence(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' #ch1
        chan_mwQ = 'MW_Qmod' #ch3
    
    
    
    if lt1:
        MW_pulse_mod_risetime = 2
    else:
        MW_pulse_mod_risetime = 6

    seq.add_element(name = 'spin_control', trigger_wait = True, goto_target = 'spin_control')

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

    seq.add_pulse('mwburst', channel = chan_mwI, element = 'spin_control',
            start = 0, duration = par['RO_duration']*1000, 
            amplitude = amplitude_ssbmod, start_reference = 'wait',
            link_start_to = 'end', shape = 'rectangular')

    seq.add_pulse('pulse_mod', channel = chan_mw_pm, element = 'spin_control',
        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()
    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
Ejemplo n.º 3
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}
Ejemplo n.º 4
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()
    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
def generate_sequence_SE(do_program=True):

    #######################################
    ###### SPIN ECHO SEQUENCE #############
    #######################################

    seq = Sequence("spin_control")
    awgcfg.configure_sequence(seq, "mw")
    # vars for the channel names
    chan_mw_pm = "MW_pulsemod"  # is connected to ch1m1

    par["sequence_wait_time"] = int(ceil(((max_wait_time + pi_2_pulse_length) * 2 + pi_2_pulse_length + 100) / 1e3) + 1)

    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=0.68,
            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=0.68,
            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.add_pulse(
            "final_wait",
            channel=chan_mw_pm,
            element="spin_control_" + str(i + 1),
            start_reference="second_pi_over_2",
            link_start_to="end",
            duration=50,
            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()
Ejemplo n.º 7
0
    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
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/')

awgcfg.configure_sequence(seq,'mw')

#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('trigger','ch4m2', high=1.0)
#seq.add_channel('pm','ch1m1', high=2.0, cable_delay=27)

chan_mw_pm = 'MW_pulsemod'
chan_mwI = 'MW_Imod_lt1'
chan_mwQ = 'MW_Qmod_lt1'

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

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')
Ejemplo n.º 9
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()
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()
Ejemplo n.º 11
0
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):
        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))
        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()
Ejemplo n.º 12
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()
Ejemplo n.º 13
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}
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_alasers = 'AOM_Newfocus'   # ok
    chan_eom = 'EOM_Matisse'
    chan_eom_aom = 'EOM_AOM_Matisse'

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

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

    seq.add_pulse('spinpumping',chan_alasers, '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', 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):

        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')

    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_alasers, '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()
Ejemplo n.º 15
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()
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()
Ejemplo n.º 17
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()
def generate_sequence(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"  # ch1
        chan_mwQ = "MW_Qmod"  # ch3

    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)

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

        if length[i] != 0:
            seq.add_pulse(
                "mwburst",
                channel=chan_mwI,
                element="spin_control_" + str(i + 1),
                start=0,
                duration=length[i],
                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="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()
Ejemplo n.º 19
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')
Ejemplo n.º 20
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_alasers = 'AOM_Newfocus'  # ok
    chan_eom = 'EOM_Matisse'
    chan_eom_aom = 'EOM_AOM_Matisse'

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

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

    seq.add_pulse('spinpumping',
                  chan_alasers,
                  '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',
                  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):

        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')

    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_alasers,
                  '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()
Ejemplo n.º 21
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_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()
Ejemplo n.º 24
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/')

awgcfg.configure_sequence(seq, 'mw')

#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('trigger', 'ch4m2', high=1.0)
#seq.add_channel('pm','ch1m1', high=2.0, cable_delay=27)

chan_mw_pm = 'MW_pulsemod'
chan_mwI = 'MW_Imod_lt1'
chan_mwQ = 'MW_Qmod_lt1'

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

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')
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_alasers = "AOM_Newfocus"  # ok
    chan_eom = "EOM_Matisse"
    chan_eom_aom = "EOM_AOM_Matisse"

    awgcfg.configure_sequence(
        seq, "hydraharp", LDE={chan_eom_aom: {"high": par_eom_aom_amplitude}, chan_alasers: {"high": par_sp_voltage}}
    )

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

    seq.add_pulse("spinpumping", chan_alasers, "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,
            start_reference="spinpumping",
            link_start_to="start",
            duration=50,
            amplitude=0.0,
        )

    seq.add_pulse(
        "start",
        chan_hhsync,
        "optical_rabi",
        start=0,
        start_reference="spinpumping",
        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):

        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",
        )

    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_alasers, "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
Ejemplo n.º 26
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')
Ejemplo n.º 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_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()