ContainerWithRoundedWaveguides

class picazzo3.container.container_waveguides.ContainerWithRoundedWaveguides

Container with waveguides (picazzo3.container.container_waveguides.ContainerWithWaveguides) which generates its waveguides from a given waveguide_template and routes. You can specify a bend radius and rounding algorithm for the waveguides in the Layout view.

Parameters:
trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

Template for all ports, defaults to TECH.PCELLS.WG.DEFAULT.When set to None, the waveguide templates of the ports will be used.

auto_transition: ( bool, bool_ or int )

If True, automatically transition all ports of contents to the given trace template. If False, no transitions are applied, which might lead to a discontinuity in the waveguide. Also, if trace_template is None, no transitions are applied.

port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to be processed. Set to None to process all ports.

external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

contents: PCell

the contents of the container: the child cell

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters:
waveguides: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked
trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

list of templates to apply to all ports

Examples

import si_fab.all as pdk  # noqa: F401
from picazzo3.filters.ring import RingRect180DropFilter
from picazzo3.container.container_waveguides import ContainerWithRoundedWaveguides
from ipkiss3 import all as i3

my_ring = RingRect180DropFilter(name="my_ring3")
my_ring_layout = my_ring.Layout()

port_labels = ["E1", "W0"]

shapes = []
for pl in port_labels:
    p = my_ring_layout.ports[pl]
    shape = i3.Shape(points=[p.position])
    shape.add_polar(15.0, p.angle_deg)
    shape.add_polar(15.0, p.angle_deg + 90.0)
    shapes.append(shape)

my_container = ContainerWithRoundedWaveguides(
    name="my_waveguide_container3", contents=my_ring, port_labels=port_labels
)
layout = my_container.Layout(routes=shapes, bend_radius=10.0)

layout.visualize(annotate=True)
../../../../../_images/picazzo3-container-container_waveguides-ContainerWithRoundedWaveguides-1.png

Views

class Layout
Parameters:
routes:

routes along which the waveguides will be generated

contents_transformation: GenericNoDistortTransform

transformation to apply to the contents

flatten_contents: ( bool, bool_ or int )

if True, it will insert the contents as elements in the layout, rather than as an Instance

view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.

The name of the view

manhattan: ( bool, bool_ or int )

Adds rectangular blocks in the bends to avoid as much as possible non-manhattan angles.

angle_step: float and number > 0

Angle step for rounding.

rounding_algorithm:

Rounding algorithm used to generate the bends. Can be circular, spline, ….

bend_radius: float and number > 0

Bend radius for the auto-generated bends.