Source code for qiskit_metal.qlibrary.qubits.SQUID_loop

# -*- coding: utf-8 -*-

# This code is part of Qiskit.
#
# (C) Copyright IBM 2017, 2021.
#
# This code is licensed under the Apache License, Version 2.0. You may
# obtain a copy of this license in the LICENSE.txt file in the root directory
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
#
# Any modifications or derivative works of this code must retain this
# copyright notice, and modified files need to carry a notice indicating
# that they have been altered from the originals.
"""SQUID_loop.

.. code-block:
:      
    |                                                   |
    |                                                   |
    |-----seg a-----|JJ|-- seg b-------|                |
    |                                  |              plate 2
    |                                  |                |
  plate1                             seg c ---seg d-----|
    |                                  |                |
    |                                  |                |
    |--seg a lower--|JJ|--seg b lower--|                |
    |                                                   |
    |                                                   |
"""
from qiskit_metal import draw, Dict
from qiskit_metal.qlibrary.core.base import QComponent
import numpy as np


[docs] class SQUID_LOOP(QComponent): """ The base "SQUID_LOOP" inherits the "QComponent" class. This creates a simple SQUID loop consisting of two Josephson junctions (JJs) located on opposite sides of a rectangular loop. The design consists of eight separate rectangles: plate1, segment a (and segment a lower), segment b (and segment b lower), segment c, segment d and plate 2. The two JJs are located between segments and a and b (and also between segments a lower and b lower.) .. image:: SQUID_LOOP.png .. meta:: Squid Loop Default Options: * plate1_width: '5.5um' -- width of plate1 (left) * plate1_height: '40um' -- height of plate1 (left) * plate1_pos_x: '0' -- origin of the plate1 (left) * plate1_pos_y: '0' -- origin of the plate1 (left) * squid_gap: '10um' -- space between 'seg a' and 'seg a lower' * segment_a_length: '10um' -- length of seg a * segment_a_width: '1um' -- width of seg a * JJ_gap: '0.5um' -- space between seg a and seg b * segment_b_length: '5um' -- length of seg b * segment_b_width: '1um' -- width of seg b * segment_c_width: '10um' -- length of seg c * segment_d_length: '10um' -- length of seg d * segment_d_width: '2um' -- width of seg d * plate2_width: '6um' -- width of plate 2 (right) * plate2_height: '30um' -- height of plate 2 (right) """ # Default drawing options default_options = Dict(plate1_width='5.5um', plate1_height='40um', plate1_pos_x='0', plate1_pos_y='0', squid_gap='10um', segment_a_length='10um', segment_a_width='1um', JJ_gap='0.5um', segment_b_length='5um', segment_b_width='1um', segment_c_width='1um', segment_d_length='10um', segment_d_width='2um', plate2_width='6um', plate2_height='30um') """Default drawing options""" # Name prefix of component, if user doesn't provide name component_metadata = Dict(short_name='component') """Component metadata"""
[docs] def make(self): """Convert self.options into QGeometry.""" p = self.parse_options() # Parse the string options into numbers # draw the lower pad as a rectangle plate1 = draw.rectangle(p.plate1_width, p.plate1_height, p.plate1_pos_x, p.plate1_pos_y) segment_a = draw.rectangle(p.segment_a_length, p.segment_a_width, 0.5 * (p.plate1_width + p.segment_a_length), 0.5 * (p.squid_gap + p.segment_a_width)) segment_a_lower = draw.translate( segment_a, 0.0, -1.0 * (p.squid_gap + p.segment_a_width)) segment_b = draw.rectangle( p.segment_b_length, p.segment_b_width, 0.5 * (p.plate1_width + p.segment_b_length) + p.JJ_gap + p.segment_a_length, 0.5 * (p.squid_gap + p.segment_b_width)) segment_b_lower = draw.translate( segment_b, 0.0, -1.0 * (p.squid_gap + p.segment_b_width)) segment_c = draw.rectangle( p.segment_c_width, p.squid_gap + p.segment_a_width + p.segment_b_width, 0.5 * (p.plate1_width + p.segment_c_width) + p.segment_a_length + p.segment_b_length + p.JJ_gap, p.plate1_pos_y) segment_d = draw.rectangle( p.segment_d_length, p.segment_d_width, 0.5 * (p.plate1_width + p.segment_d_length) + p.segment_a_length + p.segment_b_length + p.JJ_gap + p.segment_c_width, p.plate1_pos_y) plate2 = draw.rectangle( p.plate2_width, p.plate2_height, 0.5 * (p.plate1_width + p.plate2_width) + p.segment_a_length + p.JJ_gap + p.segment_b_length + p.segment_c_width + p.segment_d_length, p.plate1_pos_y) design1 = draw.union(plate1, segment_a, segment_a_lower, segment_b, segment_b_lower, segment_c, segment_d, plate2) # now translate and rotate the final structure design1 = draw.rotate(design1, p.orientation, origin=(0, 0)) design1 = draw.translate(design1, p.pos_x, p.pos_y) geom = {'design': design1} self.add_qgeometry('poly', geom, layer=p.layer, subtract=False)