Quick Demo

This notebook is a brief domonstration of the usage of CircuitQ for the Transmon as an exemplary circuit.

Please refer to the Tutorial section for more details.

[1]:
import circuitq as cq

import networkx as nx
import numpy as np
import matplotlib.pyplot as plt

Exemplary Circuit: Transmon

Create circuit

Transmon Circuit

[2]:
graph = nx.MultiGraph()
graph.add_edge(0,1, element = 'C')
graph.add_edge(0,1, element = 'J')

circuit = cq.CircuitQ(graph)

Symbolic Hamiltonian

[3]:
circuit.h
[3]:
$\displaystyle - E_{J010} \cos{\left(\frac{\Phi_{1}}{\Phi_{o}} \right)} + \frac{0.5 q_{1}^{2}}{C_{01}}$

Parameters

[4]:
circuit.h_parameters
[4]:
[C_{01}, E_{J010}]

Numerical Hamiltonian

[5]:
h_num = circuit.get_numerical_hamiltonian(401, grid_length=np.pi*circuit.phi_0)

Diagonalization

[6]:
eigv, eigs = circuit.get_eigensystem()

Plot Spectrum

[7]:
circuit.transform_charge_to_flux()
eigs = circuit.estates_in_phi_basis
n_states = 5
state_scaling = 15 * (eigv[n_states-1]-eigv[0]/n_states)
h = 6.62607015e-34
y_scaling = 1/(h *1e9)

def potential(phi):
    return -circuit.c_v["E"]*np.cos(phi/circuit.phi_0)
plt.plot(circuit.flux_list, potential(circuit.flux_list)*y_scaling, lw=0.7)
for n in range(n_states):
    plt.plot(circuit.flux_list,
             (eigv[n] + np.real(eigs[n]*np.conjugate(eigs[n]))*state_scaling)*y_scaling,
             label="Eigenstate " +str(n))
plt.legend()
plt.xticks(np.linspace(-1*np.pi, 1*np.pi, 3)*circuit.phi_0 ,
           [r'$-\pi$',r'$0$',r'$\pi$'])
plt.xlabel(r"$\Phi_1/ \Phi_o$")
plt.ylabel(r"Energy in GHz$\cdot$h")
plt.show()
_images/transmon_demo_13_0.png

\(T1\) Times

[8]:
T1_qp = circuit.get_T1_quasiparticles()
print("Quasiparticles noise contribution T1 = {:e} s".format(T1_qp))
Quasiparticles noise contribution T1 = 3.103361e-03 s
[9]:
T1_c = circuit.get_T1_dielectric_loss()
print("Charge noise contribution T1 = {:e} s".format(T1_c))
Charge noise contribution T1 = 1.836958e-04 s
[10]:
print("Total T1 = {:e} s".format( 1/( 1/T1_qp + 1/T1_c)))
Total T1 = 1.734300e-04 s