Пример #1
0
def phaseError(data,qubit,amplifyingPulses = 0, averaging = 40,phases = list(arange(0,math.pi*2.0,math.pi/10.0)),hot = False,flank = 5,delay = 0,updateNormalization = False,saveData = True):
  
  from instruments.qubit import PulseSequence
  
  data.setName("XPhi Sequence - %s" % qubit.name())
  data.setParameters(instrumentManager.parameters())
  data.parameters()["defaultPlot"] = [("phi","psw_normalized"),("phi","psw_normalized_fit")]
  
  if "pulses.xy.useDrag" in qubit.parameters() and qubit.parameters()["pulses.xy.useDrag"]:
  	data.setName(data.name()+" - DRAG")
  
  f_sb = qubit.parameters()["pulses.xy.f_sb"]
  qubit.setDriveFrequency(qubit.parameters()["frequencies.f01"]+f_sb)
  qubit.setDriveAmplitude(I = qubit.parameters()["pulses.xy.drive_amplitude"],Q = qubit.parameters()["pulses.xy.drive_amplitude"])
  
  data.setName(data.name()+" - %d amplifying pulses" % amplifyingPulses)
  failed = False
  try:
  	for phi in phases:
  		seq = PulseSequence()
  		seq.addPulse(qubit.generateRabiPulse(phase = math.pi/2.0,angle = 0.0,f_sb = f_sb,sidebandDelay = seq.position()))
  		for i in range(0,amplifyingPulses):
  			seq.addWait(10)
  			seq.addPulse(qubit.generateRabiPulse(phase = math.pi/2.0,angle = 0.0,f_sb = f_sb,sidebandDelay = seq.position()))	
  			seq.addWait(10)
  			seq.addPulse(qubit.generateRabiPulse(phase = math.pi/2.0,angle = math.pi,f_sb = f_sb,sidebandDelay = seq.position()))
  		seq.addWait(delay)
  		seq.addPulse(qubit.generateRabiPulse(phase = math.pi/2.0,angle = phi,f_sb = f_sb,sidebandDelay = seq.position()))
  		waveform = seq.getWaveform(endAt = qubit.parameters()["timing.readout"])
  		if hot:
  			figure("waveform")
  			cla()
  			plot(real(waveform[-seq.position():]))
  			plot(imag(waveform[-seq.position():]))
  		qubit.loadWaveform(waveform,readout = qubit.parameters()["timing.readout"])
  		data.set(phi = phi*180.0/math.pi)
  		data.set(psw_normalized = qubit.Psw(normalize = True,ntimes = averaging))
  		data.set(**acqiris.Psw())
  		data.commit()
  except StopThread:
  	pass
  except:
  	failed = True
  finally:
    if failed:
    	raise
    fitfunc = lambda p, x: p[2]+p[0]*(1.0+scipy.cos(-p[1]+x/180.0*math.pi))/2.0
    errfunc = lambda p, x, y,ff: numpy.linalg.norm((ff(p,x)-y))		  
    ps = [max(data.column("psw_normalized"))-min(data.column("psw_normalized")),mean(data.column("psw_normalized")),0]
    p1 = data.column("psw_normalized")
    p1s = scipy.optimize.fmin(errfunc, ps,args=(data.column("phi"),p1,fitfunc))
    rsquare = 1.0-numpy.cov(p1-fitfunc(p1s,data.column("phi")))/numpy.cov(p1)
    data.createColumn("psw_normalized_fit",fitfunc(p1s,data.column("phi")))	
    data.setDescription(data.description()+("\nPhase lag:%g deg" % (p1s[1]*180.0/math.pi))) 
    data.setName(data.name() + (" - phi = %g deg" % (p1s[1]*180.0/math.pi)))
    if saveData:
      data.savetxt()
    return (p1s[1]*180.0/math.pi)
Пример #2
0
    f_sb_12 = qubit.parameters()["pulses.xy.f_sb12"]
    t_pi_12 = qubit.parameters()["pulses.xy.t_pi12"]
  try:
    for duration in durations:
      seq = PulseSequence()
      l = len(qubit.generateRabiPulse(phase = phase))
      zLen = len(qubit.generateZPulse(length = duration))
      if amplitude != 0:
        zSeq = PulseSequence()
        zSeq.addPulse(baseForm)
        zSeq.setPosition(0)
        zSeq.addPulse(qubit.generateZPulse(length = duration,delay = qubit.parameters()["timing.readout"]-zLen-l)*amplitude)
        qubit.loadFluxlineWaveform(zSeq.getWaveform(),compensateResponse = False)

      if transition == 01 or 02 == transition:
        seq.addPulse(qubit.generateRabiPulse(angle = angle,phase = phase,f_sb = f_sb-f_offset,sidebandDelay = seq.position()))
        seq.addWait(zLen)
        seq.addPulse(qubit.generateRabiPulse(angle = angle,phase = phase,f_sb = f_sb-f_offset,sidebandDelay = seq.position()))
      elif transition == 12:
        seq.addPulse(qubit.generateRabiPulse(angle = angle,phase = math.pi,f_sb = f_sb,sidebandDelay = seq.position()))
        seq.addPulse(qubit.generateRabiPulse(angle = angle,length = t_pi_12/2.0*phase/math.pi*2.0,f_sb = f_sb_12-f_offset,sidebandDelay = seq.position()))
        seq.addWait(zLen)
        seq.addPulse(qubit.generateRabiPulse(angle = angle,length = t_pi_12/2.0*phase/math.pi*2.0,f_sb = f_sb_12-f_offset,sidebandDelay = seq.position()))
        seq.addPulse(qubit.generateRabiPulse(angle = angle,phase = math.pi,f_sb = f_sb,sidebandDelay = seq.position()))

      if use12Pulse:
        seq.addPulse(qubit.generateRabiPulse(angle = angle,phase = t_pi_12,f_sb = f_sb_12,sidebandDelay = seq.position()))
        
      qubit.loadWaveform(seq.getWaveform(endAt = qubit.parameters()["timing.readout"]),readout = qubit.parameters()["timing.readout"])
      if callback != None:
        callback(duration)
Пример #3
0
def rabi(qubit,durations,data = None,variable ="p1x",f_sb = -0.1,amplitude = 1.0,averaging = 20,delay = 0,use12Pulse = False,callback = None,angle = 0,compositePulse = False,gaussian = True,flank = 3,saveData = True):
  if data == None:
    data = Datacube()
  data.setParameters(instrumentManager.parameters())
  data.parameters()["defaultPlot"]=[["duration",variable]]

  data.setName("Rabi Sequence - %s" % qubit.name())
  qubit.setDriveFrequency(qubit.parameters()["frequencies.f01"]+f_sb)
  qubit.setDriveAmplitude(I = amplitude,Q = amplitude)
  qubit.turnOnDrive()
  try:
    for duration in durations:
      if compositePulse:
        seq = PulseSequence()
        seq.addPulse(qubit.generateRabiPulse(angle = angle,length = duration/2.0,f_sb = f_sb,sidebandDelay = seq.position(),gaussian = gaussian))
        seq.addWait(0)
        seq.addPulse(qubit.generateRabiPulse(angle = angle,length = duration/2.0,f_sb = f_sb,sidebandDelay = seq.position(),gaussian = gaussian))
        qubit.loadWaveform(seq.getWaveform(endAt = qubit.parameters()["timing.readout"]-delay),readout = qubit.parameters()["timing.readout"])
      else:
        seq = PulseSequence()
        seq.addPulse(qubit.generateRabiPulse(angle = angle,length = duration,f_sb = f_sb,sidebandDelay = seq.position(),gaussian = gaussian))
        if use12Pulse:
          f_carrier = qubit.parameters()["frequencies.f01"]+f_sb
          f_sb_12 = -(qubit.parameters()["frequencies.f12"]-f_carrier)
          t_pi_12 = qubit.parameters()["pulses.xy.t_pi12"]
          seq.addPulse(qubit.generateRabiPulse(angle = angle,length = t_pi_12,f_sb = f_sb_12,sidebandDelay = seq.position()))
        qubit.loadWaveform(seq.getWaveform())#endAt = qubit.parameters()["timing.readout"]-delay),readout = qubit.parameters()["timing.readout"])
        
      if callback != None:
        callback(duration)
      acqiris.bifurcationMap(ntimes = averaging)
      data.set(duration = duration)
      data.set(**acqiris.Psw())
      data.commit()
  except:
    import traceback
    traceback.print_exc()
  finally:
    (params,rsquare) = fitRabiFrequency(data,variable,withOffset = True)
    if rsquare > 0.5:
      qubit.parameters()["pulses.xy.t_pi"] = float(params[1]/2.0)
      qubit.parameters()["pulses.xy.drive_amplitude"] = float(amplitude)
      qubit.parameters()["pulses.xy.f_sb"] = float(f_sb)
      data.parameters()["rabiFit"] = params
      qubit.loadRabiPulse(flank = flank,angle = angle,phase = math.pi,readout = qubit.parameters()["timing.readout"],f_sb = f_sb)
    else:
      print "Rabi fit is not good, resetting parameters..."
      qubit.parameters()["pulses.xy.t_pi"] = None
      qubit.parameters()["pulses.xy.drive_amplitude"] = None
      qubit.parameters()["pulses.xy.f_sb"] = None
    if saveData:
      data.savetxt()
  return data
Пример #4
0
                rhoBeforeSwap = targetRho.copy()

                driveSequence1.addPulse(qubit1.generateRabiPulse(f_sb=f_sb1, phase=math.pi / 2.0, angle=math.pi / 2.0))
                driveSequence2.addPulse(qubit2.generateRabiPulse(f_sb=f_sb2, phase=math.pi / 2.0, angle=math.pi / 2.0))

                maxLen = max(len(driveSequence1), len(driveSequence2))

                driveSequence1.addWait(maxLen - len(driveSequence1))
                driveSequence2.addWait(maxLen - len(driveSequence2))

            if step >= 2:

                # We apply the tag operator...

                fluxSequence1.addPulse(zPulse * fluxAnticrossing, position=driveSequence1.position())
                fluxSequence2.addWait(fluxSequence1.position() - fluxSequence2.position())

                fluxSequence1.addPulse(qubit1.generateZPulse(length=6, gaussian=False) * alpha)
                fluxSequence2.addPulse(qubit2.generateZPulse(length=6, gaussian=False) * beta)

                fluxSequence1.addWait(3)
                fluxSequence2.addWait(3)

                driveSequence1.addWait(fluxSequence1.position() - driveSequence1.position())
                driveSequence2.addWait(fluxSequence2.position() - driveSequence2.position())

                targetRho = swap * targetRho * adjoint(swap)

            if step >= 3: