Source code for qiskit_metal.qlibrary.sample_shapes.n_square_spiral

# -*- 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.
"""File contains dictionary for NSquareSpiral and the make()."""

from qiskit_metal import draw, Dict
from qiskit_metal.qlibrary.core import QComponent
import numpy as np


[docs] class NSquareSpiral(QComponent): """A n count square spiral. Inherits `QComponent` class. Description: A n count square spiral. :: ____________ | _____ | | | | | | | | | | |________| | .. image:: NSquareSpiral.png .. meta:: N Square Spiral Default Options: Convention: Values (unless noted) are strings with units included, (e.g., '30um') * n: '3' -- Number of turns of the spiral * width: '1um' -- the width of the line of the spiral * radius: '40um' -- The 'radius' of the inner portion of the spiral * gap: '4um' -- The distance between each layer of the spiral * subtract: 'False' * helper: 'False' """ default_options = Dict(n='3', width='1um', radius='40um', gap='4um', subtract='False', helper='False') """Default drawing options""" TOOLTIP = """An n count square spiral"""
[docs] def make(self): """The make function implements the logic that creates the geoemtry (poly, path, etc.) from the qcomponent.options dictionary of parameters, and the adds them to the design, using qcomponent.add_qgeometry(...), adding in extra needed information, such as layer, subtract, etc.""" p = self.p # p for parsed parameters. Access to the parsed options. n = int(p.n) # Create the geometry spiral_list = [] for step in range(n): point_value = p.radius / 2 + step * (p.width + p.gap) spiral_list.append((-point_value, -point_value)) spiral_list.append((point_value, -point_value)) spiral_list.append((point_value, point_value)) spiral_list.append((-point_value - (p.width + p.gap), point_value)) point_value = p.radius / 2 + (step + 1) * (p.width + p.gap) spiral_list.append((-point_value, -point_value)) spiral_list = draw.LineString(spiral_list) spiral_list = draw.rotate(spiral_list, p.orientation, origin=(0, 0)) spiral_list = draw.translate(spiral_list, p.pos_x, p.pos_y) ############################################## # add qgeometry self.add_qgeometry('path', {'n_spiral': spiral_list}, width=p.width, subtract=p.subtract, helper=p.helper, layer=p.layer, chip=p.chip) points = np.array(spiral_list.coords) # FIX POINTS, self.add_pin('spiralPin', points=points[-2:], width=p.width, input_as_norm=True)