Beispiel #1
0
        def _generate_elements(self, elems):
            # Center of the structure
            (x0, y0) = self.position

            # elems += i3.Rectangle(layer=self.layer, center=(x0, y0),
            #                       box_size=(self.length + self.release_margin, self.width + self.release_margin))

            elems += i3.Rectangle(layer=self.layer,
                                  center=(300, 300),
                                  box_size=(200, 200))

            rec = i3.Rectangle(layer=self.layer,
                               center=(0, 0),
                               box_size=(200, 200))
            layer2 = i3.Layer(2)
            remove = i3.Wedge(layer=layer2,
                              begin_coord=(-100, 0),
                              end_coord=(-50, 0),
                              begin_width=8,
                              end_width=0.001)
            elems += rec
            elems += remove

            generated1 = self.layer - layer2
            mapping = {generated1: self.layer}
            output_elems = i3.get_elements_for_generated_layers(elems, mapping)
            # # elems = elems | wedge,
            # haha = rec | remove,
            # elems += remove,
            # # elems +=rec,
            # elems = elems.extend(haha),
            return output_elems
Beispiel #2
0
 def _generate_elements(self, elems):
     # The shape of the coupon you want to print
     for i in range(16):
         elems += i3.PolygonText(layer=i3.Layer(5),
                                 coordinate=(500, -3 + i * 30),
                                 text=str(300 + i * 50),
                                 alignment=(i3.TEXT.ALIGN.CENTER,
                                            i3.TEXT.ALIGN.TOP),
                                 font=i3.TEXT.FONT.DEFAULT,
                                 height=22,
                                 transformation=i3.Rotation((0.0, 0.0),
                                                            0.0))
         elems += i3.PolygonText(layer=i3.Layer(5),
                                 coordinate=(4950, -3 + i * 30),
                                 text=str(300 + i * 50),
                                 alignment=(i3.TEXT.ALIGN.CENTER,
                                            i3.TEXT.ALIGN.TOP),
                                 font=i3.TEXT.FONT.DEFAULT,
                                 height=22,
                                 transformation=i3.Rotation((0.0, 0.0),
                                                            0.0))
     for i in range(16):
         elems += i3.PolygonText(layer=i3.Layer(5),
                                 coordinate=(500, 507 + i * 30),
                                 text=str(300 + i * 50),
                                 alignment=(i3.TEXT.ALIGN.CENTER,
                                            i3.TEXT.ALIGN.TOP),
                                 font=i3.TEXT.FONT.DEFAULT,
                                 height=22,
                                 transformation=i3.Rotation((0.0, 0.0),
                                                            0.0))
         elems += i3.PolygonText(layer=i3.Layer(5),
                                 coordinate=(4950, 507 + i * 30),
                                 text=str(300 + i * 50),
                                 alignment=(i3.TEXT.ALIGN.CENTER,
                                            i3.TEXT.ALIGN.TOP),
                                 font=i3.TEXT.FONT.DEFAULT,
                                 height=22,
                                 transformation=i3.Rotation((0.0, 0.0),
                                                            0.0))
     for i in range(16):
         elems += i3.PolygonText(layer=i3.Layer(5),
                                 coordinate=(500, 1017 + i * 30),
                                 text=str(300 + i * 50),
                                 alignment=(i3.TEXT.ALIGN.CENTER,
                                            i3.TEXT.ALIGN.TOP),
                                 font=i3.TEXT.FONT.DEFAULT,
                                 height=22,
                                 transformation=i3.Rotation((0.0, 0.0),
                                                            0.0))
         elems += i3.PolygonText(layer=i3.Layer(5),
                                 coordinate=(4950, 1017 + i * 30),
                                 text=str(300 + i * 50),
                                 alignment=(i3.TEXT.ALIGN.CENTER,
                                            i3.TEXT.ALIGN.TOP),
                                 font=i3.TEXT.FONT.DEFAULT,
                                 height=22,
                                 transformation=i3.Rotation((0.0, 0.0),
                                                            0.0))
     return elems
Beispiel #3
0
class Release(i3.PCell):
    _name_prefix = "RELEASE"

    # Center of the structure
    position = i3.Coord2Property(default=(0.0, 0.0))

    # Layer
    lay_release = i3.Layer(number=4, name="release")
    layer = i3.LayerProperty(default=lay_release)

    # Mesa parameters
    length = i3.PositiveNumberProperty(default=800.0)
    width = i3.PositiveNumberProperty(default=40.0)

    release_margin = i3.PositiveNumberProperty(default=12.5)
    release_tether_period = i3.PositiveNumberProperty(default=45.0)
    release_tether_length = i3.PositiveNumberProperty(default=17.5)
    release_tether_width = i3.PositiveNumberProperty(default=8.0)

    class Layout(i3.LayoutView):
        def _generate_elements(self, elems):
            # Center of the structure
            (x0, y0) = self.position

            # elems += i3.Rectangle(layer=self.layer, center=(x0, y0),
            #                       box_size=(self.length + self.release_margin, self.width + self.release_margin))

            elems += i3.Rectangle(layer=self.layer,
                                  center=(300, 300),
                                  box_size=(200, 200))

            rec = i3.Rectangle(layer=self.layer,
                               center=(0, 0),
                               box_size=(200, 200))
            layer2 = i3.Layer(2)
            remove = i3.Wedge(layer=layer2,
                              begin_coord=(-100, 0),
                              end_coord=(-50, 0),
                              begin_width=8,
                              end_width=0.001)
            elems += rec
            elems += remove

            generated1 = self.layer - layer2
            mapping = {generated1: self.layer}
            output_elems = i3.get_elements_for_generated_layers(elems, mapping)
            # # elems = elems | wedge,
            # haha = rec | remove,
            # elems += remove,
            # # elems +=rec,
            # elems = elems.extend(haha),
            return output_elems
Beispiel #4
0
class Release(i3.PCell):
    _name_prefix = "RELEASE"

    # Layer
    lay_release = i3.Layer(number=1, name="release")
    layer = i3.LayerProperty(default=lay_release)

    # Mesa parameters
    length = i3.PositiveNumberProperty(default=40.0)
    width = i3.PositiveNumberProperty(default=8.0)

    class Layout(i3.LayoutView):
        def _generate_elements(self, elems):

            elems += i3.Rectangle(layer=self.layer,
                                  center=(0, 0),
                                  box_size=(self.length, self.width))
            return elems
        def _generate_elements(self, elems):
            # Center of the structure
            (x0, y0) = self.position
            # RELEASE

            c1 = Coupon(length=2750, nb=16)  #2750 label A no need for shrink
            elems += i3.SRef(reference=c1,
                             position=self.position,
                             transformation=i3.Translation(
                                 (0, 0)) + i3.Translation((-16000, -25000)))
            elems += i3.PolygonText(layer=i3.Layer(number=4, name="release"),
                                    text="A16",
                                    font=2,
                                    height=1000.0,
                                    transformation=i3.Translation(
                                        (45075, -12500)))
            c2 = Coupon(length=2250, shrink=500, nb=16)
            elems += i3.SRef(reference=c2,
                             position=self.position,
                             transformation=i3.Translation(
                                 (0, 23240)) + i3.Translation(
                                     (-16000, -25000)))
            elems += i3.PolygonText(layer=i3.Layer(number=4, name="release"),
                                    text="B16",
                                    font=2,
                                    height=200.0,
                                    transformation=i3.Translation(
                                        (35865, 20437.5)))

            c3 = Coupon(length=1500, shrink=1250, nb=16)
            elems += i3.SRef(reference=c3,
                             position=self.position,
                             transformation=i3.Translation(
                                 (0, 46480)) + i3.Translation(
                                     (-16000, -25000)))
            elems += i3.PolygonText(layer=i3.Layer(number=4, name="release"),
                                    text="C16",
                                    font=2,
                                    height=1000.0,
                                    transformation=i3.Translation(
                                        (-10000, 46677.5)))

            c4 = Coupon(length=2750, nb=8)
            elems += i3.SRef(reference=c4,
                             position=self.position,
                             transformation=i3.Translation((-28000, -38160)))
            elems += i3.PolygonText(layer=i3.Layer(number=4, name="release"),
                                    text="A8",
                                    font=2,
                                    height=1000.0,
                                    transformation=i3.Translation(
                                        (32650, -30000)))
            c5 = Coupon(length=2250, shrink=500, nb=12)
            elems += i3.SRef(reference=c5,
                             position=self.position,
                             transformation=i3.Rotation(rotation=90) +
                             i3.Translation((-18417.5, -23917.5)))
            elems += i3.PolygonText(layer=i3.Layer(number=4, name="release"),
                                    text="B12",
                                    font=2,
                                    height=1000.0,
                                    transformation=i3.Translation(
                                        (-27695, 29707.5)))
            c6 = Coupon(length=1500, shrink=1250, nb=10)
            elems += i3.SRef(reference=c6,
                             position=self.position,
                             transformation=i3.Rotation(rotation=90) +
                             i3.Translation((-36617.5, -23917.5)))
            elems += i3.PolygonText(layer=i3.Layer(number=4, name="release"),
                                    text="C10",
                                    font=2,
                                    height=1000.0,
                                    transformation=i3.Translation(
                                        (-40000, 18832.5)))
            c7 = Coupon(length=1500, shrink=1250, nb=10)
            elems += i3.SRef(reference=c7,
                             position=self.position,
                             transformation=i3.Translation((-22000, -53840)))
            elems += i3.PolygonText(layer=i3.Layer(number=4, name="release"),
                                    text="C10",
                                    font=2,
                                    height=1000.0,
                                    transformation=i3.Translation(
                                        (20950, -41500)))

            c8 = Coupon(length=2250, shrink=500, nb=14)
            elems += i3.SRef(reference=c8,
                             position=self.position,
                             transformation=i3.Translation((38750, -1760)))
            elems += i3.PolygonText(layer=i3.Layer(number=4, name="release"),
                                    text="B14",
                                    font=2,
                                    height=1000.0,
                                    transformation=i3.Translation(
                                        (48000, -3802.5)))
            c9 = Coupon(length=1500, shrink=1250, nb=14)
            elems += i3.SRef(reference=c9,
                             position=self.position,
                             transformation=i3.Translation((27500, 21480)))
            elems += i3.PolygonText(layer=i3.Layer(number=4, name="release"),
                                    text="C14",
                                    font=2,
                                    height=200.0,
                                    transformation=i3.Translation(
                                        (44000, 20437.5)))

            elems += i3.Circle(layer=i3.Layer(number=5, name="tether"),
                               center=(0.0, 0.0),
                               radius=50000)
            return elems
Beispiel #6
0
# This example shows how to use Boolean operations on Boundary elements

import ipkiss3.all as i3
import matplotlib.pyplot as plt

#1. Define two elements
circle = i3.Circle(layer=i3.Layer(1), center=(0.0, 0.0), radius=10.0)
rectangle = i3.RoundedRectangle(layer=i3.Layer(1), center=(8.0, 7.0), box_size=(12.0, 8.0), radius=1.0)

#2. Boolean operations between two shapes
# AND, OR, XOR and NOT are supported
# Each operation returns a *list* of Boundary elements, so make sure to process them further as a list
elems_and = circle & rectangle
elems_or = circle | rectangle
elems_xor = circle ^ rectangle
elems_not = circle - rectangle

#3. make a layout with the elements so we can visualize them and save to GDSII
layout_original = i3.LayoutCell(name="original").Layout(elements=([circle, rectangle]+elems_and))
layout_and = i3.LayoutCell(name="AND").Layout(elements=elems_and)
layout_or = i3.LayoutCell(name="OR").Layout(elements=elems_or)
layout_xor = i3.LayoutCell(name="XOR").Layout(elements=elems_xor)
layout_not = i3.LayoutCell(name="NOT").Layout(elements=elems_not)

layout=i3.LayoutCell(name="boolean_ops_shape").Layout(elements=[
    i3.SRef(layout_original, (0.0, 0.0)),
    i3.SRef(layout_and, (50.0, 0.0)),
    i3.SRef(layout_or, (100.0, 0.0)),
    i3.SRef(layout_xor, (150.0, 0.0)),
    i3.SRef(layout_not, (200.0, 0.0))
])
Beispiel #7
0
# This example shows how to generate elements on generated layers.

import ipkiss3.all as i3

# drawn layers
layer1 = i3.Layer(1)
layer2 = i3.Layer(2)
layer3 = i3.Layer(3)

# original layout
rect = i3.RoundedRectangle(layer=layer3,
                           center=(0.0, 0.0),
                           box_size=(30.0, 30.0),
                           radius=2.0)
circle = i3.Circle(layer=layer1, center=(0.0, 0.0), radius=10.0)
circle_path = i3.CirclePath(layer=layer2,
                            center=(9.0, 9.0),
                            radius=6.0,
                            line_width=1.0)

layout = i3.LayoutCell(name="original").Layout(
    elements=[rect, circle, circle_path])
layout.visualize()

# specify generated layers and the layer to use in the output
generated1 = (layer1 ^ layer2) & layer1
generated2 = ~layer3
mapping = {generated1: i3.Layer(10), generated2: i3.Layer(20)}

# generated layout
output_elems = i3.get_elements_for_generated_layers(layout.layout, mapping)
Beispiel #8
0
import ipkiss3.all as i3

# LAYER DEFINITIONS
# -----------------

lay_mesa = i3.Layer(number = 0, name = "mesa")
lay_quantum_well = i3.Layer(number = 1, name = "quantum well")
lay_n_contact = i3.Layer(number = 2, name = "n contact")
lay_island = i3.Layer(number = 3, name = "island")
lay_release = i3.Layer(number = 4, name = "release")
lay_tether = i3.Layer(number = 5, name = "tether")
lay_p_contact = i3.Layer(number = 6, name = "p contact")
lay_BCB_etch = i3.Layer(number = 7, name = "BCB etch")