Ejemplo n.º 1
0
def cutback_bend(bend90, straight_length=5.0, n_steps=6, n_stairs=5):
    """ Deprecated! use cutback_bend90 instead!
    this is a stair

    .. code::
            _
          _|
        _|

        _ this is a step

    """

    wg = waveguide(length=straight_length, width=bend90.ports["W0"].width)
    # Define a map between symbols and (component, input port, output port)
    string_to_device_in_out_ports = {
        "A": (bend90, "W0", "N0"),
        "B": (bend90, "N0", "W0"),
        "S": (wg, "W0", "E0"),
    }

    # Generate the sequence of staircases
    s = ""
    for i in range(n_stairs):
        s += "ASBS" * n_steps
        s += "ASAS" if i % 2 == 0 else "BSBS"
    s = s[:-4]

    # Create the component from the sequence
    c = component_sequence(s,
                           string_to_device_in_out_ports,
                           start_orientation=90)
    c.update_settings(n_bends=n_steps * n_stairs * 2 + n_stairs * 2 - 2)
    return c
Ejemplo n.º 2
0
def test_extend_ports():
    import pp.components as pc

    c = pc.waveguide(width=2)
    c = pc.cross(width=2)
    ce = extend_ports(c)
    assert len(c.ports) == len(ce.ports)
    return ce
Ejemplo n.º 3
0
def splitter_tree(
        coupler,
        n_o_outputs=4,
        bend_radius=10.0,
        separation=50,
        termination_component=waveguide(length=0.1),
):
    n_o_outputs = n_o_outputs
    c = pp.Component()

    coupler = pp.call_if_func(coupler)
    _coupler = c.add_ref(coupler)
    coupler_sep = coupler.ports["E1"].y - coupler.ports["E0"].y

    if n_o_outputs > 2:
        _cmp = splitter_tree(
            coupler=coupler,
            n_o_outputs=n_o_outputs // 2,
            bend_radius=bend_radius,
            separation=separation / 2,
        )
    else:
        _cmp = termination_component

    a = separation or _cmp.ports["W0"].y - _coupler.size_info.south
    if a < coupler_sep:
        tree_top = _cmp.ref(port_id="W0", position=_coupler.ports["E1"])
        tree_bot = _cmp.ref(
            port_id="W0",
            position=_coupler.ports["E0"],
            v_mirror=False  # True
        )

    else:
        d = 2 * bend_radius + 1
        a = max(a, d)

        tree_top = _cmp.ref(port_id="W0",
                            position=_coupler.ports["E1"].position + (d, a))
        tree_bot = _cmp.ref(
            port_id="W0",
            position=_coupler.ports["E0"].position + (d, -a),
            v_mirror=False,  # True,
        )

        c.add(connect_strip(coupler.ports["E1"], tree_top.ports["W0"]))
        c.add(connect_strip(coupler.ports["E0"], tree_bot.ports["W0"]))

    i = 0
    for p in get_ports_facing(tree_bot, "E"):
        c.add_port(name="{}".format(i), port=p)
        i += 1

    for p in get_ports_facing(tree_top, "E"):
        c.add_port(name="{}".format(i), port=p)
        i += 1

    c.add(tree_bot)
    c.add(tree_top)
    c.add_port(name="W0", port=_coupler.ports["W0"])

    return c
Ejemplo n.º 4
0
    p0 = gca1.ports[gc_port_name].position
    p1 = gca2.ports[gc_port_name].position
    a = bend_radius_align_ports + 0.5
    b = max(2 * a, grating_separation / 2)
    y_bot_align_route = (y_bot_align_route if y_bot_align_route is not None
                         else -gsi.width - 5.0)

    route = [
        p0,
        p0 + (0, a),
        p0 + (b, a),
        p0 + (b, y_bot_align_route),
        p1 + (-b, y_bot_align_route),
        p1 + (-b, a),
        p1 + (0, a),
        p1,
    ]
    bend90 = bend_factory(radius=bend_radius_align_ports)
    loop_back = round_corners(route, bend90, waveguide_factory)
    elements = [gca1, gca2, loop_back]
    return elements


if __name__ == "__main__":
    import pp

    c = waveguide()
    c.add(
        gen_loopback(c.ports["W0"], c.ports["E0"], gc=pp.c.grating_coupler_te))
    pp.show(c)
Ejemplo n.º 5
0
def test_properties_containers(component_type, data_regression):
    # pp.clear_cache()
    c = component_factory[component_type](component=waveguide())
    data_regression.check(c.get_settings())
Ejemplo n.º 6
0
def waveguide_with_loopback() -> pp.Component:
    c = waveguide()
    c.add(
        gen_loopback(c.ports["W0"], c.ports["E0"], gc=pp.c.grating_coupler_te))
    return c
Ejemplo n.º 7
0
def test_extend_ports():
    import pp.components as pc

    c = pc.waveguide()
    ce = extend_ports(c)
    assert len(c.ports) == len(ce.ports)
Ejemplo n.º 8
0
    output_port_ext = output_port_ext or port_labels[-1]

    for port_label in port_list:
        port = component.ports.get(port_label)
        extension = c << extension_factory(length=length, width=port.width)
        extension.connect(input_port_ext, port)
        c.add_port(port_label, port=extension.ports[output_port_ext])
    return c


def test_extend_ports():
    import pp.components as pc

    c = pc.waveguide()
    ce = extend_ports(c)
    assert len(c.ports) == len(ce.ports)


if __name__ == "__main__":
    test_extend_ports()
    import pp.components as pc

    # c = pc.bend_circular()
    # ce = extend_ports(c, port_list=['W0'])

    c = pc.waveguide(layer=(3, 0))
    ce = extend_ports(c)
    print(ce)
    print(len(ce.ports))
    pp.show(ce)