Esempio n. 1
0
    def define_elements(self, elems):
        # define a column
        from picazzo.io.column import IoColumnGroup
        my_column = IoColumnGroup(
            south_east=(2000.0, 0.0),  # column width = 2000um
            y_spacing=25.0)  # vertical spacing between waveguides

        # define a component
        from picazzo.filters.ring import RingRect180DropFilter
        my_ring = RingRect180DropFilter(name="My_Ring")

        # add the component to the column
        my_column.add(
            my_ring,
            # the following are parameters of the IOFibcoup adapter, which are passed on
            taper_length=
            50.0,  # taper from component to intermediate waveguide. Default = 300.
            wg_width=2.0,  # width of intermediate waveguide. Default = 3.0
            trench_width=
            2.0,  # trench width of intermediate waveguide. Default from TECH
            connect_length=100.0,  # horizontal length of Fanout. Default = 40.0
            bend_radius=30.0,  # bend radius of Fanout. Default from TECH 
            minimum_straight=8.0,  # minimum straight sections
            fibcoup=TECH.IO.FIBCOUP.DEFAULT_GRATING,  # default fiber coupler
            fibcoup_offset=
            30.0,  # offset of grating coupler from the edge. Default = 25.6
            fibcoup_taper_length=
            200.0,  # Taper length from intermedeate waveguide to fiber coupler
            merged_waveguides=False  # bundle waveguide in Fanout
        )
        elems += my_column
        return elems
Esempio n. 2
0
    def define_elements(self, elems):
        # define a column
        from picazzo.io.column import IoColumnGroup
        from picazzo.io.fibcoup import IoFibcoupGeneric
        my_column = IoColumnGroup(
            south_east=(2000.0, 0.0),  # column width = 2000um
            y_spacing=25.0,  # vertical spacing between waveguides
            adapter=IoFibcoupGeneric)  # new default adapter

        # define a component
        from picazzo.filters.ring import RingRect180DropFilter
        my_ring = RingRect180DropFilter(name="My_Ring")

        # add the component to the column
        my_column.add(
            my_ring,
            west_fibcoups=[
                TECH.IO.FIBCOUP.DEFAULT_GRATING_TE,
                TECH.IO.FIBCOUP.DEFAULT_GRATING_TM
            ],  # list
            east_fibcoup_taper_lengths=[50.0, 300.0, 500.0],  # list
        )  # each individual fiber coupler interface can now be set separately
        # if there are more parts than elements in a list, the adapter will cycle through
        # the elements in the list. in this case, the west fiber couplers will
        # alternate between TE and TM. The east taper lengths will cycle between the
        # three values.
        # The cycling restarts with each new invokation of the adapter.
        # all parameters of IoFibcoup can be used, but with prefix 'east_' or 'west_',
        # and converted to plural
        elems += my_column
        return elems
Esempio n. 3
0
    def define_elements(self, elems):
        # define a column
        from picazzo.io.column import IoColumnGroup
        from picazzo.io.fibcoup import IoFibcoupAsymmetric
        my_column = IoColumnGroup(
            south_east=(2000.0, 0.0),  # column width = 2000um
            y_spacing=25.0,  # vertical spacing between waveguides
            adapter=IoFibcoupAsymmetric)  # new default adapter

        # define a component
        from picazzo.filters.ring import RingRect180DropFilter
        my_ring = RingRect180DropFilter(name="My_Ring")

        # add the component to the column
        my_column.add(
            my_ring,
            west_fibcoup=TECH.IO.FIBCOUP.DEFAULT_GRATING_TE,
            east_fibcoup=TECH.IO.FIBCOUP.DEFAULT_GRATING_TM,
            east_merged_waveguides=False,
        )  # all adapter parameters can be set for east and west separately
        # all the regular parameters if IoFibcoup can be used, now with prefix
        # 'east_' or "west_' (see previous example).

        elems += my_column
        return elems
Esempio n. 4
0
    def define_elements(self, elems):
        # define a column
        from picazzo.io.column import IoColumnGroup
        my_column = IoColumnGroup(
            south_east=(2000.0, 0.0),  # column width = 2000um
            y_spacing=25.0)  # vertical spacing between waveguides

        # define a component
        from picazzo.filters.ring import RingRect180DropFilter
        my_ring = RingRect180DropFilter(name="My_Ring")

        # add the component to the column
        my_column.add(my_ring)

        elems += my_column
        return elems
Esempio n. 5
0
    def define_elements(self, elems):
        # define a column
        from picazzo.io.column import IoColumnGroup
        my_column = IoColumnGroup(
            south_east=(2000.0, 0.0),  # column width = 2000um
            y_spacing=25.0)  # vertical spacing between waveguides

        # define a component
        from picazzo.filters.ring import RingRect180DropFilter
        my_ring = RingRect180DropFilter(name="My_Ring")

        # add the component to the column
        from picazzo.io.fibcoup import IoFibcoup
        my_column.add(
            my_ring,
            offset=(50, 50),  # offset the structure from the center
            adapter=IoFibcoup,  # this is the default adapter.
            transformation=Rotation(rotation=10.0))  # transform the structure

        elems += my_column
        return elems
Esempio n. 6
0
 def define_elements(self, elems):
     # alignment waveguide      
     layout = IoColumnGroup(y_spacing=25.0, south_east=(6000.0,0.0))
     
     wg_def2 = WgElDefinition(wg_width=0.5,trench_width=7.0)
     align2_wg = wg_def2(shape = [(0.0,0.0), (100.0,0.0)])
     align2 = Structure(name="align2", elements=[align2_wg], ports=align2_wg.ports)
     layout += align2
     
     wg_def3 = WgElDefinition(wg_width=2.0,trench_width=7.0)
     align3_wg = wg_def3(shape = [(0.0,0.0), (200.0,0.0)])
     align3 = Structure(name="align3", elements=[align3_wg], ports=align3_wg.ports)
     layout += align3
     
     elems += layout
     return elems
Esempio n. 7
0
    def define_elements(self, elems):
        # define a column
        from picazzo.io.column import IoColumnGroup
        my_column = IoColumnGroup(south_east=(2000.0, 0.0), y_spacing=25.0)

        from picazzo.filters.ring import RingRect180DropFilter
        for r in [5.0, 6.0, 7.0]:
            my_ring = RingRect180DropFilter(bend_radius=r)
            my_column.add(my_ring)
        my_column.add_blocktitle("RING")

        elems += my_column
        return elems
Esempio n. 8
0
    def define_elements(self, elems):
        # define a column
        from picazzo.io.column import IoColumnGroup
        my_column = IoColumnGroup(south_east=(2000.0, 0.0), y_spacing=25.0)

        from picazzo.filters.ring import RingRect180DropFilter
        from picazzo.container import RoutePortsAroundCorner
        for r in [5.0, 6.0, 7.0]:
            my_ring = RingRect180DropFilter(bend_radius=r)
            my_ring_routed = RoutePortsAroundCorner(
                structure=my_ring,
                port_labels=["W1"],
                first_step_direction=NORTH,
                output_direction=EAST,
                spacing=5.0,
            )  # routes add port to the east
            my_column.add(my_ring_routed)
            my_column.add_emptyline_west(2)

        my_column.add_blocktitle("RING")
        elems += my_column
        return elems
Esempio n. 9
0
    def define_elements(self, elems):
        # define a column
        from picazzo.io.column import IoColumnGroup
        my_column = IoColumnGroup(south_east=(2000.0, 0.0), y_spacing=25.0)

        from picazzo.filters.ring import RingRect180DropFilter
        from picazzo.container import RoutePortsAroundCorner
        for r in [25.0, 30.0, 35.0]:  # we make the rings 5 times larger
            my_ring = RingRect180DropFilter(bend_radius=r)
            my_ring_routed = RoutePortsAroundCorner(
                structure=my_ring,
                port_labels=["W1"],
                first_step_direction=NORTH,
                output_direction=EAST,
                spacing=5.0,
            )  # routes add port to the east
            my_column.add(my_ring_routed)
            my_column.straighten_to_north(
            )  # levels out both sides, taking into account the
            # size of the last structure in the middle

        my_column.add_blocktitle("RING")
        elems += my_column
        return elems