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
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
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
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
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
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
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
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
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