MZIContainerArm

class picazzo3.filters.mzi.cell.MZIContainerArm(*args, **kwargs)

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

Parameters:

auto_transition: optional

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: <type ‘str’> and length == 2, optional

Names of the two ports to be processed

trace_template: optional

Template for all ports. If None, the waveguide templates of the ports will be used

contents: PCell, optional

the contents of the container: the child cell

external_port_names: optional

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

cell_instances: _PCellInstanceDict, optional

name: optional

The unique name of the pcell

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

list of templates to apply to all ports

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

Views

Layout
Parameters:

angle_step: float and number > 0, optional

angle step for rounding

contents_length: float and Real, number and number >= 0, optional

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.

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

Extra length that will be added in the arm

flatten_contents: optional

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

horizontal_contents_offset: float, optional

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

manhattan: optional

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

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

Minimum straight length between bends

rounding_algorithm: optional

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

routing_direction: optional

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

splitter_port: OpticalPort, optional

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

view_name: str, optional

The name of the view

combiner_port: OpticalPort, optional

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

routes: optional

routes along which the waveguides will be generated

contents_transformation: GenericNoDistortTransform, optional

bend_radius: float and number > 0, optional

bend radius for the auto-generated bends

grid: float and number > 0, locked

design grid. Extracted by default from TECH.METRICS.GRID

grids_per_unit: locked

Number of grid cells per design unit

units_per_grid: locked

Ratio of grid cell and design unit

unit: float and number > 0, locked

design unit. Extracted by default from TECH.METRICS.UNIT

Examples

from technologies import silicon_photonics
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()
../../../../_images/picazzo3-filters-mzi-cell-MZIContainerArm-1.png
from technologies import silicon_photonics
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()
../../../../_images/picazzo3-filters-mzi-cell-MZIContainerArm-2.png
from technologies import silicon_photonics
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()
../../../../_images/picazzo3-filters-mzi-cell-MZIContainerArm-3.png