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)
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)
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)