def prepare(m): funcs.prepare(m) m.CORPSE_pi = pulselib.IQ_CORPSE_pi_pulse( 'CORPSE pi-pulse', I_channel='MW_Imod', Q_channel='MW_Qmod', PM_channel='MW_pulsemod', PM_risetime=m.params['MW_pulse_mod_risetime'], frequency=m.params['CORPSE_pi_mod_frq'], amplitude=m.params['CORPSE_pi_amp'], length_60=m.params['CORPSE_pi_60_duration'], length_m300=m.params['CORPSE_pi_m300_duration'], length_420=m.params['CORPSE_pi_420_duration']) m.CORPSE_pi2 = pulselib.IQ_CORPSE_pi2_pulse( 'CORPSE pi2-pulse', I_channel='MW_Imod', Q_channel='MW_Qmod', PM_channel='MW_pulsemod', PM_risetime=m.params['MW_pulse_mod_risetime'], frequency=m.params['CORPSE_pi2_mod_frq'], amplitude=m.params['CORPSE_pi2_amp'], length_24p3=m.params['CORPSE_pi2_24p3_duration'], length_m318p6=m.params['CORPSE_pi2_m318p6_duration'], length_384p3=m.params['CORPSE_pi2_384p3_duration'])
def generate_sequence(self, upload=True): # MBI element mbi_elt = self._MBI_element() # electron manipulation pulses T = pulse.SquarePulse(channel='MW_pulsemod', length=10e-9, amplitude=0) CORPSE_pi = pulselib.IQ_CORPSE_pi_pulse( 'CORPSE pi-pulse', I_channel='MW_Imod', Q_channel='MW_Qmod', PM_channel='MW_pulsemod', PM_risetime=self.params['MW_pulse_mod_risetime'], frequency=self.params['CORPSE_pi_mod_frq'], amplitude=self.params['CORPSE_pi_amp'], length_60=self.params['CORPSE_pi_60_duration'], length_m300=self.params['CORPSE_pi_m300_duration'], length_420=self.params['CORPSE_pi_420_duration']) sync_elt = element.Element('adwin_sync', pulsar=qt.pulsar) adwin_sync = pulse.SquarePulse(channel='adwin_sync', length=10e-6, amplitude=2) sync_elt.append(adwin_sync) wait_1us = element.Element('1us_delay', pulsar=qt.pulsar) wait_1us.append(pulse.cp(T, length=1e-6)) elts = [] for i in range(self.params['pts']): e = element.Element('CORPSE-{}'.format(i), pulsar=qt.pulsar) e.append( T, pulse.cp(CORPSE_pi, amplitude=self.params['CORPSE_pi_sweep_amps'][i])) elts.append(e) # sequence seq = pulsar.Sequence('CORPSE pi calibration') for i, e in enumerate(elts): seq.append(name='MBI-%d' % i, wfname=mbi_elt.name, trigger_wait=True, goto_target='MBI-%d' % i, jump_target=e.name + '-0') for j in range(self.params['multiplicity']): seq.append(name=e.name + '-{}'.format(j), wfname=e.name, trigger_wait=(j == 0)) seq.append(name='wait-{}-{}'.format(i, j), wfname=wait_1us.name, repetitions=self.params['delay_reps']) seq.append(name='sync-{}'.format(i), wfname=sync_elt.name) # program AWG if upload: qt.pulsar.upload(mbi_elt, sync_elt, wait_1us, *elts) qt.pulsar.program_sequence(seq)
def generate_sequence(self, upload=True): mbi_elt = self._MBI_element() T_MW = pulse.SquarePulse(channel='MW_pulsemod', length = 50e-9, amplitude = 0) T_SP = pulse.SquarePulse(channel='Velocity1AOM', length = 200e-9, amplitude = 0) CNOT_pi2pi = pulselib.MW_IQmod_pulse('pi2pi pulse mI=-1', I_channel = 'MW_Imod', Q_channel = 'MW_Qmod', PM_channel = 'MW_pulsemod', PM_risetime = self.params['MW_pulse_mod_risetime'], frequency = self.params['pi2pi_mIm1_mod_frq'], amplitude = self.params['pi2pi_mIm1_amp'], length = self.params['pi2pi_mIm1_duration']) CORPSE_pi = pulselib.IQ_CORPSE_pi_pulse('CORPSE pi-pulse', I_channel = 'MW_Imod', Q_channel = 'MW_Qmod', PM_channel = 'MW_pulsemod', PM_risetime = self.params['MW_pulse_mod_risetime'], frequency = self.params['CORPSE_pi_mod_frq'], amplitude = self.params['CORPSE_pi_amp'], length_60 = self.params['CORPSE_pi_60_duration'], length_m300 = self.params['CORPSE_pi_m300_duration'], length_420 = self.params['CORPSE_pi_420_duration']) SP_pulse = pulse.SquarePulse(channel = 'Velocity1AOM', amplitude = 1.0) sync_elt = element.Element('adwin_sync', pulsar=qt.pulsar) adwin_sync = pulse.SquarePulse(channel='adwin_sync', length = self.params['AWG_to_adwin_ttl_trigger_duration'], amplitude = 2) sync_elt.append(adwin_sync) N_ro_elt = element.Element('N_RO', pulsar=qt.pulsar, global_time = True) # N_ro_elt.append(T_SP) # N_ro_elt.append(pulse.cp(SP_pulse, # length = self.params['RO_SP_duration']), # ) N_ro_elt.append(T_MW) N_ro_elt.append(CORPSE_pi) N_ro_elt.append(T_MW) N_ro_elt.append(CNOT_pi2pi) N_ro_elt.append(pulse.cp(T_MW, length=1e-6)) # N_ro_elt.append(adwin_sync) seq = pulsar.Sequence('N-RR') seq.append(name = 'MBI', wfname = mbi_elt.name, trigger_wait = True, goto_target = 'MBI', jump_target = 'RO-1') for i in range(self.params['nr_of_ROsequences']): seq.append(name = 'RO-{}'.format(i+1), wfname = N_ro_elt.name, trigger_wait = True) seq.append(name = 'sync-{}'.format(i+1), wfname = sync_elt.name) if upload: qt.pulsar.upload(mbi_elt, sync_elt, N_ro_elt) qt.pulsar.program_sequence(seq)
def pulse_defs_lt1(msmt): # a waiting pulse on the MW pulsemod channel msmt.T = pulse.SquarePulse(channel='MW_pulsemod', length=50e-9, amplitude=0) msmt.TIQ = pulse.SquarePulse(channel='MW_Imod', length=10e-9, amplitude=0) # mw pulses msmt.e_pulse = pulselib.MW_IQmod_pulse( 'MW pulse', I_channel='MW_Imod', Q_channel='MW_Qmod', PM_channel='MW_pulsemod', PM_risetime=msmt.params_lt1['MW_pulse_mod_risetime']) msmt.fast_pi = pulselib.MW_IQmod_pulse( 'MW pi pulse', I_channel='MW_Imod', Q_channel='MW_Qmod', PM_channel='MW_pulsemod', PM_risetime=msmt.params_lt1['MW_pulse_mod_risetime'], frequency=msmt.params_lt1['fast_pi_mod_frq'], amplitude=msmt.params_lt1['fast_pi_amp'], length=msmt.params_lt1['fast_pi_duration']) msmt.fast_pi2 = pulselib.MW_IQmod_pulse( 'MW pi2 pulse', I_channel='MW_Imod', Q_channel='MW_Qmod', PM_channel='MW_pulsemod', PM_risetime=msmt.params_lt1['MW_pulse_mod_risetime'], frequency=msmt.params_lt1['fast_pi2_mod_frq'], amplitude=msmt.params_lt1['fast_pi2_amp'], length=msmt.params_lt1['fast_pi2_duration']) msmt.slow_pi = pulselib.MW_IQmod_pulse( 'slow pi', I_channel='MW_Imod', Q_channel='MW_Qmod', PM_channel='MW_pulsemod', PM_risetime=msmt.params_lt1['MW_pulse_mod_risetime'], frequency=msmt.params_lt1['selective_pi_mod_frq'], amplitude=msmt.params_lt1['selective_pi_amp'], length=msmt.params_lt1['selective_pi_duration']) msmt.shelving_pulse = pulselib.MW_IQmod_pulse( 'MBI shelving pulse', I_channel='MW_Imod', Q_channel='MW_Qmod', PM_channel='MW_pulsemod', frequency=msmt.params_lt1['AWG_MBI_MW_pulse_mod_frq'], amplitude=msmt.params_lt1['fast_pi_amp'], length=msmt.params_lt1['fast_pi_duration'], PM_risetime=msmt.params_lt1['MW_pulse_mod_risetime']) # CORPSE pi pulse msmt.CORPSE_pi = pulselib.IQ_CORPSE_pi_pulse( 'CORPSE pi-pulse', I_channel='MW_Imod', Q_channel='MW_Qmod', PM_channel='MW_pulsemod', PM_risetime=msmt.params_lt1['MW_pulse_mod_risetime'], frequency=msmt.params_lt1['CORPSE_pi_mod_frq'], amplitude=msmt.params_lt1['CORPSE_pi_amp'], length_60=msmt.params_lt1['CORPSE_pi_60_duration'], length_m300=msmt.params_lt1['CORPSE_pi_m300_duration'], length_420=msmt.params_lt1['CORPSE_pi_420_duration']) # CNOT operations on the electron msmt.pi2pi_m1 = pulselib.MW_IQmod_pulse( 'pi2pi pulse mI=-1', I_channel='MW_Imod', Q_channel='MW_Qmod', PM_channel='MW_pulsemod', PM_risetime=msmt.params_lt1['MW_pulse_mod_risetime'], frequency=msmt.params_lt1['pi2pi_mIm1_mod_frq'], amplitude=msmt.params_lt1['pi2pi_mIm1_amp'], length=msmt.params_lt1['pi2pi_mIm1_duration']) msmt.pi2pi_0 = pulselib.MW_IQmod_pulse( 'pi2pi pulse mI=0', I_channel='MW_Imod', Q_channel='MW_Qmod', PM_channel='MW_pulsemod', PM_risetime=msmt.params_lt1['MW_pulse_mod_risetime'], frequency=msmt.params_lt1['pi2pi_mI0_mod_frq'], amplitude=msmt.params_lt1['pi2pi_mI0_amp'], length=msmt.params_lt1['pi2pi_mI0_duration']) # rf pulses msmt.TN = pulse.SquarePulse(channel='RF', length=100e-9, amplitude=0) msmt.N_pulse = pulselib.RF_erf_envelope( channel='RF', frequency=msmt.params_lt1['N_0-1_splitting_ms-1']) msmt.N_pi = pulselib.RF_erf_envelope( channel='RF', frequency=msmt.params_lt1['N_0-1_splitting_ms-1'], length=msmt.params_lt1['N_pi_duration'], amplitude=msmt.params_lt1['N_pi_amp']) msmt.N_pi2 = pulselib.RF_erf_envelope( channel='RF', frequency=msmt.params_lt1['N_0-1_splitting_ms-1'], length=msmt.params_lt1['N_pi2_duration'], amplitude=msmt.params_lt1['N_pi2_amp']) ### synchronizing, etc msmt.adwin_lt1_trigger_pulse = pulse.SquarePulse(channel='adwin_sync', length=10e-6, amplitude=2) msmt.adwin_lt1_trigger_pulse_mbi = pulse.SquarePulse(channel='adwin_sync', length=17e-6, amplitude=2) # mbi pulse trigger should be longer, because it needs to receive a jump from the ADwin while still going. # it also needs to be short enough such that it is finished when the ADWin triggers the next element msmt.AWG_LT2_trigger_pulse = pulse.SquarePulse(channel='AWG_LT2_trigger', length=10e-9, amplitude=2) msmt.HH_sync = pulse.SquarePulse(channel='HH_sync', length=50e-9, amplitude=1.0) # light msmt.SP_pulse = pulse.SquarePulse(channel='Velocity1AOM', amplitude=1.0) msmt.yellow_pulse = pulse.SquarePulse(channel='YellowAOM', amplitude=1.0)
def _pulse_defs(self): ### electron manipulation pulses # a waiting pulse on the MW pulsemod channel self.T = pulse.SquarePulse(channel='MW_pulsemod', length=10e-9, amplitude=0) self.TIQ = pulse.SquarePulse(channel='MW_Imod', length=10e-9, amplitude=0) # some not yet specified pulse on the electron self.e_pulse = pulselib.MW_IQmod_pulse( 'MW pulse', I_channel='MW_Imod', Q_channel='MW_Qmod', PM_channel='MW_pulsemod', PM_risetime=self.params['MW_pulse_mod_risetime']) # slow pi-pulse for MBI self.slow_pi = pulselib.MW_IQmod_pulse( 'slow pi', I_channel='MW_Imod', Q_channel='MW_Qmod', PM_channel='MW_pulsemod', PM_risetime=self.params['MW_pulse_mod_risetime'], frequency=self.params['selective_pi_mod_frq'], amplitude=self.params['selective_pi_amp'], length=self.params['selective_pi_duration']) # reasonably fast pi and pi/2 pulses self.pi_4MHz = pulselib.MW_IQmod_pulse( '4MHz pi', I_channel='MW_Imod', Q_channel='MW_Qmod', PM_channel='MW_pulsemod', PM_risetime=self.params['MW_pulse_mod_risetime'], frequency=self.params['4MHz_pi_mod_frq'], amplitude=self.params['4MHz_pi_amp'], length=self.params['4MHz_pi_duration']) self.pi2_4MHz = pulselib.MW_IQmod_pulse( '4MHz pi2', I_channel='MW_Imod', Q_channel='MW_Qmod', PM_channel='MW_pulsemod', PM_risetime=self.params['MW_pulse_mod_risetime'], frequency=self.params['4MHz_pi2_mod_frq'], amplitude=self.params['4MHz_pi2_amp'], length=self.params['4MHz_pi2_duration']) # shelving pi-pulse to bring electron to ms=-1 after mbi self.shelving_pulse = pulselib.MW_IQmod_pulse( 'MBI shelving pulse', I_channel='MW_Imod', Q_channel='MW_Qmod', PM_channel='MW_pulsemod', frequency=self.params['AWG_MBI_MW_pulse_mod_frq'], amplitude=self.params['AWG_shelving_pulse_amp'], length=self.params['AWG_shelving_pulse_duration'], PM_risetime=self.params['MW_pulse_mod_risetime']) # CORPSE pi pulse self.CORPSE_pi = pulselib.IQ_CORPSE_pi_pulse( 'CORPSE pi-pulse', I_channel='MW_Imod', Q_channel='MW_Qmod', PM_channel='MW_pulsemod', PM_risetime=self.params['MW_pulse_mod_risetime'], frequency=self.params['CORPSE_pi_mod_frq'], amplitude=self.params['CORPSE_pi_amp'], length_60=self.params['CORPSE_pi_60_duration'], length_m300=self.params['CORPSE_pi_m300_duration'], length_420=self.params['CORPSE_pi_420_duration']) # CNOT operation on the electron self.pi2pi_m1 = pulselib.MW_IQmod_pulse( 'pi2pi pulse mI=-1', I_channel='MW_Imod', Q_channel='MW_Qmod', PM_channel='MW_pulsemod', PM_risetime=self.params['MW_pulse_mod_risetime'], frequency=self.params['pi2pi_mIm1_mod_frq'], amplitude=self.params['pi2pi_mIm1_amp'], length=self.params['pi2pi_mIm1_duration']) ### nuclear spin manipulation pulses self.TN = pulse.SquarePulse(channel='RF', length=100e-9, amplitude=0) self.N_pulse = pulselib.RF_erf_envelope( channel='RF', frequency=self.params['N_0-1_splitting_ms-1']) self.N_pi = pulselib.RF_erf_envelope( channel='RF', frequency=self.params['N_0-1_splitting_ms-1'], length=self.params['N_pi_duration'], amplitude=self.params['N_pi_amp']) self.N_pi2 = pulselib.RF_erf_envelope( channel='RF', frequency=self.params['N_0-1_splitting_ms-1'], length=self.params['N_pi2_duration'], amplitude=self.params['N_pi2_amp']) ### synchronizing, etc self.adwin_sync = pulse.SquarePulse(channel='adwin_sync', length=10e-6, amplitude=2) ### useful elements self.mbi_elt = self._MBI_element() self.sync_elt = element.Element('adwin_sync', pulsar=qt.pulsar) self.sync_elt.append(self.adwin_sync)