Source code for gdsfactory.components.mzi_arm
from __future__ import annotations
from gdsfactory.cell import cell
from gdsfactory.component import Component
from gdsfactory.components.bend_euler import bend_euler
from gdsfactory.components.component_sequence import component_sequence
from gdsfactory.components.straight import straight as straight_function
from gdsfactory.typings import ComponentSpec
[docs]
@cell
def mzi_arm(
length_y_left: float = 0.8,
length_y_right: float = 0.8,
length_x: float = 0.1,
bend: ComponentSpec = bend_euler,
straight: ComponentSpec = straight_function,
straight_x: ComponentSpec | None = None,
straight_y: ComponentSpec | None = None,
**kwargs,
) -> Component:
"""Mzi.
Args:
length_y_left: vertical length.
length_y_right: vertical length.
length_x: horizontal length.
bend: 90 degrees bend library.
straight: straight function.
straight_x: straight for length_x.
straight_y: straight for length_y.
kwargs: cross_section settings.
.. code::
B__Lx__B
| |
Ly Lyr
| |
B B
"""
bend = bend(**kwargs)
straight_y = straight_y or straight
straight_x = straight_x or straight
straight_x = straight_x(length=length_x, **kwargs)
symbol_to_component = {
"b": (bend, "o1", "o2"),
"B": (bend, "o2", "o1"),
"L": (straight_y(length=length_y_left, **kwargs), "o1", "o2"),
"R": (
straight_y(
length=length_y_right
+ abs(straight_x.get_ports_ysize(port_type="optical")),
**kwargs,
),
"o1",
"o2",
),
"-": (straight_x, "o1", "o2"),
}
# Each character in the sequence represents a component
sequence = "bLB-BRb"
c = component_sequence(sequence=sequence, symbol_to_component=symbol_to_component)
# Add any electrical ports from references
for ref_name, ref in c.named_references.items():
c.add_ports(ref.get_ports_list(port_type="electrical"), prefix=ref_name)
c.unlock()
c.auto_rename_ports()
c.info["length_x"] = length_x
c.info["length_xsize"] = straight_x.get_ports_xsize()
return c
if __name__ == "__main__":
import gdsfactory as gf
c = mzi_arm(straight_x=gf.components.straight_heater_metal)
c.pprint_ports()
c.show(show_ports=True)