Source code for qiskit_metal.qlibrary.lumped.cap_3_interdigital

# -*- 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.

from qiskit_metal import draw
from qiskit_metal.toolbox_python.attr_dict import Dict
from qiskit_metal.qlibrary.core import QComponent


[docs] class Cap3Interdigital(QComponent): """Create a three finger planar capacitor with a ground pocket cuttout. The width of the fingers is determined by the trace width. Inherits QComponent class. Capacitor Metal Geometry and Ground Cutout Pocket: * finger length - length of each finger * pocket_buffer_width_x - sets size of pocket in +-x direction, added to cap size * pocket_buffer_width_y - sets size of pocket in +-y direction, added to cap size this also determines the lead in line lengths pocket is a negative shape that is cut out of the ground plane Pins: There are two pins on the capacitor at either end The pins attach directly to the built in lead length and only needs a width defined * trace_width - center trace width of the trace lead line and cap fingers Sketch: Below is a sketch of the capacitor :: | ----------- | | | | | | | | | | | | | | | ----------- | .. image:: Cap3Interdigital.png .. meta:: Cap 3 Interdigital Default Options: * trace_width: '10um' * finger_length: '65um' * pocket_buffer_width_x: '10um' * pocket_buffer_width_y: '30um' """ # Define structure functions default_options = Dict(trace_width='10um', finger_length='65um', pocket_buffer_width_x='10um', pocket_buffer_width_y='30um') """Default drawing options""" TOOLTIP = """Create a three finger planar capacitor with a ground pocket cuttout."""
[docs] def make(self): """This is executed by the user to generate the qgeometry for the component.""" p = self.p ######################################################### # Make the shapely polygons for the main cap structure pad = draw.rectangle(p.trace_width * 5, p.trace_width) pad_top = draw.translate(pad, 0, +(p.trace_width * 2 + p.finger_length) / 2) pad_bot = draw.translate(pad, 0, -(p.trace_width * 2 + p.finger_length) / 2) finger = draw.rectangle(p.trace_width, p.finger_length) cent_finger = draw.translate(finger, 0, +(p.trace_width) / 2) left_finger = draw.translate(finger, -(p.trace_width * 2), -(p.trace_width) / 2) right_finger = draw.translate(finger, +(p.trace_width * 2), -(p.trace_width) / 2) # Make the shapely polygons for the leads in the pocket (length=pocket_buffer_width_y) trace_temp_1 = draw.rectangle(p.trace_width, p.pocket_buffer_width_y) trace_top = draw.translate( trace_temp_1, 0, +(p.finger_length + p.trace_width * 3 + p.pocket_buffer_width_y * 2) / 2 - p.pocket_buffer_width_y / 2) trace_bot = draw.translate( trace_temp_1, 0, -(p.finger_length + p.trace_width * 3 + p.pocket_buffer_width_y * 2) / 2 + p.pocket_buffer_width_y / 2) # Make the shapely polygons for pocket ground plane cuttout pocket = draw.rectangle( p.trace_width * 5 + p.pocket_buffer_width_x * 2, p.finger_length + p.trace_width * 3 + p.pocket_buffer_width_y * 2) # These variables are used to graphically locate the pin locations top_pin_line = draw.LineString([ (-p.trace_width / 2, (p.finger_length + p.trace_width * 3 + p.pocket_buffer_width_y * 2) / 2), (+p.trace_width / 2, (p.finger_length + p.trace_width * 3 + p.pocket_buffer_width_y * 2) / 2) ]) bot_pin_line = draw.LineString([( -p.trace_width / 2, -(p.finger_length + p.trace_width * 3 + p.pocket_buffer_width_y * 2) / 2), (+p.trace_width / 2, -(p.finger_length + p.trace_width * 3 + p.pocket_buffer_width_y * 2) / 2)]) # Create polygon object list polys1 = [ top_pin_line, bot_pin_line, pad_top, pad_bot, cent_finger, left_finger, right_finger, pocket, trace_top, trace_bot ] # Rotates and translates all the objects as requested. Uses package functions # in 'draw_utility' for easy rotation/translation polys1 = draw.rotate(polys1, p.orientation, origin=(0, 0)) polys1 = draw.translate(polys1, xoff=p.pos_x, yoff=p.pos_y) [ top_pin_line, bot_pin_line, pad_top, pad_bot, cent_finger, left_finger, right_finger, pocket, trace_top, trace_bot ] = polys1 # Adds the object to the qgeometry table self.add_qgeometry('poly', dict(pad_top=pad_top, pad_bot=pad_bot, cent_finger=cent_finger, left_finger=left_finger, right_finger=right_finger, trace_top=trace_top, trace_bot=trace_bot), layer=p.layer) #subtracts out ground plane on the layer its on self.add_qgeometry('poly', dict(pocket=pocket), subtract=True, layer=p.layer) # Generates its own pins self.add_pin('a', top_pin_line.coords, p.trace_width) self.add_pin('b', bot_pin_line.coords[::-1], p.trace_width)