Source code for gdsfactory.components.splitter_chain

from __future__ import annotations

import gdsfactory as gf
from gdsfactory.component import Component
from gdsfactory.components.bend_s import bend_s
from gdsfactory.components.mmi1x2 import mmi1x2
from gdsfactory.typings import ComponentSpec


[docs] @gf.cell_with_child def splitter_chain( splitter: ComponentSpec = mmi1x2, columns: int = 3, bend: ComponentSpec = bend_s, ) -> Component: """Chain of splitters. Args: splitter: splitter to chain. columns: number of splitters to chain. bend: bend to connect splitters. .. code:: __o5 __| __| |__o4 o1 _| |__o3 |__o2 __o2 o1 _| |__o3 """ c = gf.Component() splitter_component = gf.get_component(splitter) cref = c.add_ref(splitter_component) splitter_ports_east = cref.get_ports_list(port_type="optical", orientation=0) e1_port_name = splitter_ports_east[0].name e0_port_name = splitter_ports_east[1].name bend = gf.get_component(bend) c.add_port(name="o1", port=cref.ports["o1"]) c.add_port(name="o2", port=cref.ports[e0_port_name]) for i in range(1, columns): bref = c.add_ref(bend) bref.connect(port="o1", destination=cref.ports[e1_port_name]) cref = c.add_ref(splitter_component) cref.connect(port="o1", destination=bref.ports["o2"]) c.add_port(name=f"o{i+2}", port=cref.ports[e0_port_name]) c.add_port(name=f"o{i+3}", port=cref.ports[e1_port_name]) c.copy_child_info(splitter_component) return c
if __name__ == "__main__": # component = splitter_chain(splitter=gf.components.mmi1x2, columns=4) component = splitter_chain() component.show()