MZIContainerArm

class picazzo3.filters.mzi.cell.MZIContainerArm

A Mach-Zehnder arm which contains another cell and connects it to the splitter and combiner port

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, Automatic transitions will be added to the contents if the trace templates are not matched

port_labels: List with type restriction, allowed types: <class ‘str’> and length == 2

Names of the two ports to be processed

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

Views

class Layout
Parameters:
contents_length: float and Real, number and number >= 0

The physical length of the optical path of the content. If not set manually, it will default to the distance between the content ports used.

horizontal_contents_offset: float

Horizontal offset (from the center of the MZI Arm) of the transformed content

extra_length: float and Real, number and number >= 0

Extra length that will be added in the arm

min_straight: float and Real, number and number >= 0

Minimum straight length between bends

combiner_port: OpticalPort

Port interface of the combiner to which the output of this arm is connected

splitter_port: OpticalPort

Port interface of the splitter to which the input of this arm is connected

routes:

routes along which the waveguides will be generated

routing_direction: List with value restriction, allowed values: [C2(0.000000, 1.000000), C2(0.000000, -1.000000)]

direction of routing (DIRECTION.NORTH or DIRECTION.SOUTH)

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.

Examples

import si_fab.all as pdk  # noqa: F401
from picazzo3.filters.mzi import MZIContainerArm
from picazzo3.filters.ring import RingRect180DropFilter
import ipkiss3.all as i3

ring = RingRect180DropFilter(name="my_ring_in_the_mzi_arm1")
ring.Layout(bend_radius=10.0)

mziarm = MZIContainerArm(name="my_mzi_container_arm", contents=ring, port_labels=["in1", "out1"])

layout = mziarm.Layout(
    extra_length=30.0,
    splitter_port=i3.OpticalPort(position=(0.0, 0.0), angle_deg=30.0),
    combiner_port=i3.OpticalPort(position=(60.0, 5.0), angle_deg=120.0),
    contents_transformation=i3.Rotation(rotation=30.0),
)
layout.visualize(annotate=True)
../../../../../_images/picazzo3-filters-mzi-cell-MZIContainerArm-1.png
import si_fab.all as pdk  # noqa: F401
from picazzo3.filters.mzi import MZIContainerArm
from picazzo3.filters.ring import RingRect180DropFilter
import ipkiss3.all as i3

ring = RingRect180DropFilter(name="my_ring_in_the_mzi_arm2")
ring.Layout(bend_radius=10.0)

mziarm = MZIContainerArm(name="my_mzi_container_arm2", contents=ring, port_labels=["out2", "out1"])

layout = mziarm.Layout(
    extra_length=30.0,
    splitter_port=i3.OpticalPort(position=(0.0, 0.0), angle_deg=30.0),
    combiner_port=i3.OpticalPort(position=(80.0, 5.0), angle_deg=120.0),
    contents_transformation=i3.Rotation(rotation=30.0),
    routing_direction=i3.DIRECTION.SOUTH,
)
layout.visualize(annotate=True)
../../../../../_images/picazzo3-filters-mzi-cell-MZIContainerArm-2.png
import si_fab.all as pdk  # noqa: F401
from picazzo3.filters.mzi import MZIContainerArm
from picazzo3.filters.ring import RingRect180DropFilter
import ipkiss3.all as i3

ring = RingRect180DropFilter(name="my_ring_in_the_mzi_arm3")
ring.Layout(bend_radius=10.0)

mziarm = MZIContainerArm(name="my_mzi_container_arm3", contents=ring, port_labels=["in1", "out1"])

layout = mziarm.Layout(
    extra_length=0.0,
    splitter_port=i3.OpticalPort(position=(0.0, 0.0), angle_deg=30.0),
    combiner_port=i3.OpticalPort(position=(30.0, 5.0), angle_deg=120.0),
    contents_transformation=i3.Rotation(rotation=30.0),
)
layout.visualize(annotate=True)
../../../../../_images/picazzo3-filters-mzi-cell-MZIContainerArm-3.png