Source code for gdsfactory.components.loop_mirror
"""Sagnac loop_mirror."""
from __future__ import annotations
import gdsfactory as gf
from gdsfactory.component import Component
from gdsfactory.components.mmi1x2 import mmi1x2
from gdsfactory.components.spiral_external_io import spiral_external_io
from gdsfactory.routing.manhattan import route_manhattan
from gdsfactory.typings import ComponentSpec
[docs]
@gf.cell
def loop_mirror(
component: ComponentSpec = mmi1x2, bend90: ComponentSpec = "bend_euler"
) -> Component:
"""Returns Sagnac loop_mirror.
Args:
component: 1x2 splitter.
bend90: 90 deg bend.
"""
c = Component()
component = gf.get_component(component)
bend90 = gf.get_component(bend90)
cref = c.add_ref(component)
routes = route_manhattan(
cref.ports["o3"],
cref.ports["o2"],
straight=gf.components.straight,
bend=bend90,
)
c.add(routes.references)
c.add_port(name="o1", port=cref.ports["o1"])
c.absorb(cref)
return c
@gf.cell
def loop_mirror_with_delay(
loop_mirror: ComponentSpec = loop_mirror, spiral: ComponentSpec = spiral_external_io
) -> Component:
"""Returns loop_mirror with spiral for delay.
Args:
loop_mirror: loop_mirror spec.
spiral: for delay.
Notes:
Delay = 13e-12.
# delay = length/speed
# length=delay*speed
13e-12*3e8/4.2*1e6
"""
c = Component()
lm = c << gf.get_component(loop_mirror)
s = c << spiral_external_io()
lm.connect("o1", s.ports["o1"])
return c
if __name__ == "__main__":
# c = loop_mirror()
# c = loop_mirror_rotated()
c = loop_mirror_with_delay()
c.show(show_ports=True)