Source code for gdsfactory.components.ring_single_dut

from __future__ import annotations

from functools import partial

import gdsfactory as gf
from gdsfactory.component import Component
from gdsfactory.components.bend_euler import bend_euler
from gdsfactory.components.coupler_ring import coupler_ring
from gdsfactory.components.straight import straight
from gdsfactory.components.taper import taper
from gdsfactory.snap import assert_on_2x_grid
from gdsfactory.typings import ComponentSpec

taper2 = partial(taper, width2=3)


[docs] @gf.cell def ring_single_dut( component: ComponentSpec = taper2, gap: float = 0.2, length_x: float = 4, length_y: float = 0, radius: float = 5.0, coupler: ComponentSpec = coupler_ring, bend: ComponentSpec = bend_euler, straight: ComponentSpec = straight, with_component: bool = True, port_name: str = "o1", **kwargs, ) -> Component: """Single bus ring made of two couplers (ct: top, cb: bottom) connected. with two vertical straights (wyl: left, wyr: right) (Component Under Test) in the middle to extract loss from quality factor. Args: component: device under test. gap: in um. length: in um. length_y: in um. radius: in um. coupler: coupler function. bend: bend function. with_component: True adds component. False adds waveguide. port_name: for component input. kwargs: cross_section settings. Args: with_component: if False changes component for just a straight. .. code:: bl-wt-br | | length_y wl component | | --==cb==-- gap length_x """ component = gf.get_component(component) assert_on_2x_grid(gap) coupler = gf.get_component( coupler, gap=gap, length_x=length_x, radius=radius, **kwargs ) component_xsize = component.get_ports_xsize() straight_side = straight(length=length_y + component_xsize, **kwargs) straight_top = straight(length=length_x, **kwargs) bend = gf.get_component(bend, radius=radius, **kwargs) c = Component() cb = c << coupler wl = c << straight_side dut = c << component if with_component else c << straight_side bl = c << bend br = c << bend wt = c << straight_top wl.connect(port="o2", destination=cb.ports["o2"]) bl.connect(port="o2", destination=wl.ports["o1"]) wt.connect(port="o1", destination=bl.ports["o1"]) br.connect(port="o2", destination=wt.ports["o2"]) dut.connect(port=port_name, destination=br.ports["o1"]) c.add_port("o2", port=cb.ports["o4"]) c.add_port("o1", port=cb.ports["o1"]) return c
if __name__ == "__main__": c = ring_single_dut() c.show(show_ports=True)