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): from picazzo.filters.ring import RingRect180DropFilter from ipkiss.plugins.photonics.wg.basic import WgElDefinition huge_ring = RingRect180DropFilter( ring_wg_definition=WgElDefinition(wg_width=0.5), coupler_wg_definitions=[ WgElDefinition(wg_width=0.4), WgElDefinition(wg_width=0.6) ], coupler_spacings=[5.0, 5.0], straights=(60.0, 120.0), bend_radius=110.0) from picazzo.io.fibcoup import IoFibcoup from picazzo.fibcoup.uniform import UniformLineGrating grating = UniformLineGrating( origin=(0.0, 0.0), period=0.689, line_width=0.423, n_o_periods=20, wg_definition=WgElDefinition(wg_width=9.0), process=TECH.PROCESS.FC) ring_with_fibcoup = IoFibcoup(struct=huge_ring, offset=(0.0, 0.0), y_spacing=huge_ring.size_info().height, south_west=(0.0, 0.0), south_east=(1500.0, 0.0), fibcoup=grating) elems += SRef(reference=ring_with_fibcoup) 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), # 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): # 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_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
# GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # i-depot BBIE 7396, 7556, 7748 # # Contact: [email protected] from technologies.si_photonics.picazzo.default import * from ipkiss.all import * # our basic component that we will use... from picazzo.filters.ring import RingRect180DropFilter my_ring = RingRect180DropFilter(name="My_Ring") from picazzo.container import RoutePortsAroundCorner # Routing using default parameters my_ring_routed = RoutePortsAroundCorner( structure=my_ring, port_labels=["W1", "W0"], # ports to be routed first_step_direction=SOUTH, # when rounding corner, go this direction first output_direction=EAST) # final output direction my_ring_routed.write_gdsii("route_ports_1.gds") # customizing: similar as fanout my_ring_routed_2 = RoutePortsAroundCorner( structure=my_ring, port_labels=["W1", "W0"],
# # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # i-depot BBIE 7396, 7556, 7748 # # Contact: [email protected] from technologies.si_photonics.picazzo.default import * from ipkiss.all import * # our basic component that we will use... from picazzo.filters.ring import RingRect180DropFilter my_ring = RingRect180DropFilter(name="My_Ring") from picazzo.container import TaperDeepPorts from ipkiss.plugins.photonics.wg import WgElDefinition my_ring_tapered = TaperDeepPorts(structure=my_ring, port_labels=["W0", "E0", "E1"], end_wg_def=WgElDefinition(wg_width=0.7)) my_ring_tapered.write_gdsii("taper_ports_1.gds") from picazzo.wg.wgdefs.wg_fc import ShallowWgElDefinition my_shallow_wg = ShallowWgElDefinition( wg_width=0.6) # a shallow etched waveguide my_shallow_ring = RingRect180DropFilter( name="My_Shallow_Ring",
def get_ring(self, radius): from picazzo.filters.ring import RingRect180DropFilter return RingRect180DropFilter(bend_radius=radius, straights=(0.0, 0.0), coupler_spacings=[0.67, 0.67])