In [2]:
from IPython.display import Image
from IPython.core.display import HTML
from urllib import request
HTML(request.urlopen('http://bit.ly/1Bf5Hft').read().decode('UTF-8'))

from numpy import linspace, sqrt, log, cos
from scipy.constants import epsilon_0, h, hbar, pi, elementary_charge, c
from scipy.special import ellipk
from scipy import signal

import plotly.plotly as py
from plotly.tools import mpl_to_plotly
from plotly.offline import init_notebook_mode, iplot_mpl, iplot
init_notebook_mode()

import sys
sys.path.append('/mnt/labshare/Programs/python/HelperFunctions/')
from myfunctions import *
from plottingFunctions import *
from plotlylayouts import *
import peakutils



In [3]:
init_notebook_mode()



In [6]:
from IPython.core.display import HTML
from urllib import request
HTML(request.urlopen('http://bit.ly/1Bf5Hft').read().decode('UTF-8'))


Out[6]:

Overview

This chip was cooled down on the DR in the second week of June, 2016, in a 4-sided 6.25mm box, on Cold Finger 1.

Only the first metal

Connections

  • Input - IN1
  • Output - OUT5

In [6]:
Image("CH025 Images/Chip Layout.png")


Out[6]:

Cavity Characterization


In [10]:
tls.embed("plourdelab", '494')


Out[10]:

Qubit Characterization

Spectroscopy

Both qubits should have identical junction loops and capacitor bodies. However, Q1 is placed ~1 mm further in along the length of the cavity to reduce coupling and have a different $g$.

Only a few data points were taken in order to perform the $\chi$ shift measurement, but we can still fit the data points to a qubit energy curve.

The frequency of the qubit is given by

$$ E_{01} = \sqrt{ 8 E_C * E_J} $$

where

$$ E_J = \left| E_{J\Sigma}\cos{\left(\frac{\pi\phi}{\phi_0}\right)}\sqrt{ 1 + d^2\tan^2{\left(\frac{\pi\phi}{\phi_0}\right)} }\right| $$

After converting the DC Source voltage to flux $\phi$ with the mutual inductance, we can fit to the above equation using $d, E_C, E_{J\Sigma}$

Qubit 1

  • EJs: 13.4703
  • EjsErr: 2.2103
  • d: 0.3540
  • Ec: 0.2260

In [11]:
tls.embed('plourdelab', '489')


Out[11]:

Qubit 2

  • EJs: 4.9712 GHz
  • d: 0.5954
  • Ec: 0.2260 GHz

In [12]:
tls.embed('plourdelab', '487')


Out[12]:

T1

The qubit T1s were consistently between 10 and 20 $\mu s$ throughout all of these experiments.

Sample T1


In [36]:
tls.embed('plourdelab', '485')


Out[36]:

In [5]:
tls.embed('plourdelab', '493')


Out[5]:

Qubit 2 seems to have lower $T_1$ values, and currently we are attributing this to coupling to the drive line (before the resonator capacitor).

A sample T1 on Qubit 1 at 4.3 GHz.

Purcell Limit on T1

(From Koch, et al PRA 2007)

Purcell-induced relaxation rate:

$$ \gamma_\kappa^{(0,1)} = \kappa\frac{g_{0,1}^2}{(\omega_{01} - \omega_r)^2} $$

So filling in:

  • $g_1 = 70.7$ MHz
  • $g_2 = 94.1$ MHz
  • $\kappa = 0.303$ MHz
  • $\omega_r = 4.994$ GHz

In [6]:
g1 = 70.7e6
g2 = 94.1e6
kappa = 500e3
wr = 4.994e9
wq = linspace(4, 5, 101)*1e9

gamma1 = kappa * g1**2 / (wq-wr)**2
gamma2 = kappa * g2**2 / (wq-wr)**2
data = []
layout, trace = LinePlot('Purcell Limit on T1', x=wq, y=1/gamma1)
trace.update(mode='lines', name='Q1');data.append(trace)
layout, trace = LinePlot('Purcell Limit on T1', x=wq, y=1/gamma2)
trace.update(mode='lines', name='Q2');data.append(trace)

iplot(Figure(data=data, layout=layout))


Spontaneous Emission Limit on T1


In [44]:
d = 2 * elementary_charge * 40e-6 #40 um
t1rad = 12*pi*epsilon_0*hbar*c**3 / (d**2 * (wq*2*pi)**3)
layout, trace = LinePlot("Spontaneous Emission Limit", x=wq, y=t1rad)
trace.update(mode='lines')
iplot(Figure(data=[trace], layout=layout))


Understanding g

The two qubits are coupled to the cavity at different points, giving us different coupling strengths and therefore different $g$s. The coupling strength should follow from amplitude of a standing wave in the cavity at any given point. We wish to see if our $g$s follow this.

$$ g_i \propto V_{0,i} $$

and from our data,

  • $g_1 = 70.7$ MHz
  • $g_2 = 94.1$ MHz

First, let's plot how a standing wave looks in our cavity as a function of position from the input of the cavity. The cavity is 20 mm long. Q1 is centered 1.69 mm from the input, and Q2 is centered 740 $\mu m$ from the input.

  • $x_{q1} = 1.69 / (2 * 20)$ of a wavelength.
  • $x_{q2} = .740 / (2 * 20)$ of a wavelength.

So, comparing the two, we should have.

$$ \frac{g_2}{g_1} = \frac{\cos{(0.74 \pi)}}{\cos{(1.69 \pi)}} $$

plugging in our values for $g_1$ and $g_2$, we get

$$ 1.3308 \approx 1.2178 $$

which is pretty close ($<10\%$).


In [23]:
x = linspace(0, 20000, 1001)
y = cos(pi*x/20000)

data = []
layout, trace = LinePlot('Wave amplitude in cavity', x=x, y=y)
trace.update(mode='lines', name="Amplitude in Cavity")
data.append(trace)

layout2, trace = LinePlot('Q1 Position', x=[1690, 1690], y=[-1, 1])
trace.update(mode='lines', name="Q1")
data.append(trace)

layout2, trace = LinePlot('Q2 Position', x=[740, 740], y=[-1, 1])
trace.update(mode='lines', name="Q2")
data.append(trace)
iplot(Figure(data=data, layout=layout))


Maybe we can get them closer by integrating the voltage along the length of the capacitance, instead of picking the value of the center.

$$ \frac{g_2}{g_1} \approx \frac{\int_{1.495}^{1.89}{\cos{\left(\frac{x \pi}{40}\right)} \mathrm{d}x}}{\int_{0.535}^{0.945}{\cos{\left(\frac{x \pi}{40}\right)} \mathrm{d}x}} $$

And we get

$$ \frac{g_2}{g_1} \approx \frac{0.39}{.409} $$

In [8]:
.409/.39


Out[8]:
1.0487179487179485

Chi Shift Optimization

4 Peaks

Here I tune the qubits such that all 4 peaks are clear, and within 20MHz of each other.

Q1: 4.297 GHz

Q2: 4.094 GHz


In [5]:
tls.embed('plourdelab', '483')


Out[5]:

In [26]:
tls.embed('plourdelab', '465')


Out[26]:

3 Peaks

Now that I know where the 4 peaks lie, I can tweak the qubit frequencies to try to overlap the odd parity peaks.

Q1: 4.20 GHz

Q2: 4.091 GHz


In [4]:
tls.embed('plourdelab', '481')


Out[4]:

Picking a power that shows the best contrast between peaks (by eye).


In [24]:
tls.embed('plourdelab', '497')


Out[24]:

Stark Shift Calibration


In [6]:
iplot(py.get_figure('plourdelab', '479'))



In [86]:
fig = py.get_figure('plourdelab', '479')

In [196]:
i = 4

x = array(fig.data[i].x)
data = -array(fig.data[i].y)

# Calculate some background from first few points
bg  = mean(data[0:50])
data = data-bg

amp = fig.data[i].name

layout, trace = LinePlot("Amp = " + amp, x=x, y=data)
trace.update(mode='lines')

## Filter data
fdata = signal.savgol_filter(data, 5, 3)
asd, ftrace = LinePlot("", x=x, y=fdata)
ftrace.update(mode='lines')
## Find peaks

ind = peakutils.indexes(fdata, thres=.45, min_dist=10)
print("Found {} Peaks".format(len(ind)))
layout2, trace2 = LinePlot('peakutils', x=x[ind], y=fdata[ind])
iplot(Figure(data=[trace2, ftrace], layout=layout))


Found 3 Peaks

Stark shift on qubit per photon is

$$ 2g^2 / \Delta $$

Given $g=94$ MHz, and $\Delta=700$ MHz, we expect a shift of 4 MHz per photon. Plotting the


In [66]:
g = 94
delta = 700
starkshift = 2 * g**2 / delta / (2*pi)

print("We expect a shift of {:f} MHz".format(starkshift))


We expect a shift of 4.017980 MHz

In [178]:
amps = []
for i in fig.data:
    amps.append(i.name)

In [202]:
filtereddata = []
xs = []
ys = []
f1 = 5
f2 = 3
for i, amp in enumerate(fig.data):
    amp = amp.y
    filtered = signal.savgol_filter(array(amp) - i, f1, f2)
    filtereddata.append(filtered)
    
    ind = peakutils.indexes(filtered, thres=.45, min_dist=10)
    xs.append(x[ind[1]])
    ys.append(amps[i])

layout, trace = HeatmapPlot("Filtered Data")
trace.x = x;trace.y=amps;trace.z=filtereddata

trace2 = Scatter(x=xs, y=ys)
iplot(Figure(data=[trace, trace2], layout=layout))



In [192]:
ys


Out[192]:
['0',
 '0',
 '0',
 '0',
 '0',
 '0',
 '0',
 '0',
 '0',
 '0',
 '0',
 '0',
 '0',
 '0.05',
 '0.05',
 '0.05',
 '0.05',
 '0.05',
 '0.05',
 '0.05',
 '0.05',
 '0.05',
 '0.05',
 '0.05',
 '0.05',
 '0.05',
 '0.1',
 '0.1',
 '0.1',
 '0.1',
 '0.1',
 '0.1',
 '0.1',
 '0.1',
 '0.1',
 '0.1',
 '0.1',
 '0.1',
 '0.1',
 '0.15',
 '0.15',
 '0.15',
 '0.15',
 '0.15',
 '0.15',
 '0.15',
 '0.15',
 '0.15',
 '0.15',
 '0.15',
 '0.15',
 '0.15',
 '0.2',
 '0.2',
 '0.2',
 '0.2',
 '0.2',
 '0.2',
 '0.2',
 '0.2',
 '0.2',
 '0.2',
 '0.2',
 '0.2',
 '0.2',
 '0.2',
 '0.25',
 '0.25',
 '0.25',
 '0.25',
 '0.25',
 '0.25',
 '0.25',
 '0.25',
 '0.25',
 '0.25',
 '0.25',
 '0.25',
 '0.25',
 '0.3',
 '0.3',
 '0.3',
 '0.3',
 '0.3',
 '0.3',
 '0.3',
 '0.3',
 '0.3',
 '0.3',
 '0.3',
 '0.3',
 '0.35',
 '0.35',
 '0.35',
 '0.35',
 '0.35',
 '0.35',
 '0.35',
 '0.35',
 '0.35',
 '0.35',
 '0.35',
 '0.35',
 '0.4',
 '0.4',
 '0.4',
 '0.4',
 '0.4',
 '0.4',
 '0.4',
 '0.4',
 '0.4',
 '0.4',
 '0.4',
 '0.45',
 '0.45',
 '0.45',
 '0.45',
 '0.45',
 '0.45',
 '0.45',
 '0.45',
 '0.45',
 '0.45',
 '0.5',
 '0.5',
 '0.5',
 '0.5',
 '0.5',
 '0.5',
 '0.5',
 '0.5',
 '0.5',
 '0.5',
 '0.5']

In [ ]: