From cef04c153f5a0f8fe455a2ae51342218a9ddbc09 Mon Sep 17 00:00:00 2001 From: Lukas Chrostowski Date: Sun, 16 Jan 2022 23:17:52 -0800 Subject: [PATCH] EBeam layout example updates - some don't work; disabling them - @jaspreetj : could you please check the Spiral Bragg which is missing? Also the MZI sweep doesn't work. thanks Former-commit-id: 7f10f6ad5192e02b2d6142737d65454ef1f3cb62 --- klayout_dot_config/grain.xml | 10 +- .../Example - Bragg Gratings.lym | 15 +- ...le - Contra-directional couplers array.lym | 15 +- .../Example - Layout_Bragg_Spirals.lym | 17 +- .../Example - MZI.lym | 50 +++-- .../Example - mixed waveguide types.lym | 6 +- .../pymacros/Example_scripted_layouts/MZI.lym | 4 +- .../Test_structures_ring_resonators.lym | 171 ----------------- .../example_Ring_resonator_sweep.lym | 173 ++++++++++++++++++ .../EBeam/pymacros/SiEPIC_EBeam_Library.lym | 2 +- .../pymacros/SiEPIC_EBeam_Library_Beta.lym | 2 +- 11 files changed, 245 insertions(+), 220 deletions(-) delete mode 100644 klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/Test_structures_ring_resonators.lym create mode 100644 klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/example_Ring_resonator_sweep.lym diff --git a/klayout_dot_config/grain.xml b/klayout_dot_config/grain.xml index d8376f6b..38d2a7e2 100644 --- a/klayout_dot_config/grain.xml +++ b/klayout_dot_config/grain.xml @@ -1,12 +1,12 @@ siepic_ebeam_pdk - 0.3.38 + 0.3.39 0.27 SiEPIC EBeam PDK - A Process Design Kit for Silicon Photonics fabricated using Electron Beam Lithography - https://github.com/lukasc-ubc/SiEPIC_EBeam_PDK/blob/master/README.md - https://github.com/lukasc-ubc/SiEPIC_EBeam.git/trunk/klayout_dot_config + A Process Design Kit for Silicon Photonics fabricated using Electron Beam Lithography (UW, ANT, SiEPICfab) + https://github.com/siepic/SiEPIC_EBeam_PDK/blob/master/README.md + https://github.com/siepic/SiEPIC_EBeam.git/trunk/klayout_dot_config Lukas Chrostowski, Jaspreet Jhoja, Mustafa Hammood, Brett Poulsen, Jonas Flueckiger, Rounak Singh Narde, Chris Zeqin Lu, Nathan Smith, Stefan Preble, Claudio Alarcon-Reyes GitHub: lukasc-ubc, jaspreetj, mustafacc, bpoulse, jfluecki, rounaksingh, luzeqin, nsmith5, StefanPreble, clalarco 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 @@ -14,6 +14,6 @@ siepic_tools - 0.3.82 + 0.3.87 diff --git a/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/Example - Bragg Gratings.lym b/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/Example - Bragg Gratings.lym index cf1c157f..81ddbf0a 100644 --- a/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/Example - Bragg Gratings.lym +++ b/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/Example - Bragg Gratings.lym @@ -1,6 +1,6 @@ - Bragg gratings sweep layout + Bragg gratings sweep (EBeam) pymacros @@ -10,7 +10,7 @@ false true - + Examples_EBeam siepic_menu.exlayout.begin python @@ -34,7 +34,16 @@ from pya import * from SiEPIC.extend import to_itype from SiEPIC.utils import select_paths, get_layout_variables -dbu=0.001 +''' +Create a new layout using the EBeam technology, +with a top cell +''' +mw = pya.Application().instance().main_window() +ly = mw.create_layout('EBeam', 1).layout() +cell = ly.create_cell('top') +lv = mw.current_view() +lv.select_cell(cell.cell_index(), 0) +dbu = ly.dbu # linspace function without using numpy, because why not? def linspace(a, b, n): diff --git a/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/Example - Contra-directional couplers array.lym b/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/Example - Contra-directional couplers array.lym index f7d0ef4d..19cb1e33 100644 --- a/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/Example - Contra-directional couplers array.lym +++ b/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/Example - Contra-directional couplers array.lym @@ -1,6 +1,6 @@ - Contra-directional couplers sweep layout + Contra-directional couplers sweep (EBeam) pymacros @@ -10,7 +10,7 @@ false true - + Examples_EBeam siepic_menu.exlayout.begin python @@ -34,6 +34,17 @@ # Import KLayout-Python API from pya import * +''' +Create a new layout using the EBeam technology, +with a top cell +''' +mw = pya.Application().instance().main_window() +ly = mw.create_layout('EBeam', 1).layout() +cell = ly.create_cell('top') +lv = mw.current_view() +lv.select_cell(cell.cell_index(), 0) +dbu = ly.dbu + # linspace function without using numpy, because why not? def linspace_without_numpy(a, b, n): diff --git a/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/Example - Layout_Bragg_Spirals.lym b/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/Example - Layout_Bragg_Spirals.lym index c1d72f41..b2b96c4b 100644 --- a/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/Example - Layout_Bragg_Spirals.lym +++ b/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/Example - Layout_Bragg_Spirals.lym @@ -1,6 +1,6 @@ - Spiral bragg grating layout + Spiral bragg gratings (EBeam) pymacros @@ -9,8 +9,8 @@ false false - true - + false + Examples_EBeam siepic_menu.exlayout.begin python @@ -24,6 +24,17 @@ I suspect it has something to do with the way exceptions are raised or that the import pya from SiEPIC.scripts import path_to_waveguide +''' +Create a new layout using the EBeam technology, +with a top cell +''' +mw = pya.Application().instance().main_window() +ly = mw.create_layout('EBeam', 1).layout() +cell = ly.create_cell('top') +lv = mw.current_view() +lv.select_cell(cell.cell_index(), 0) +dbu = ly.dbu + ###############PARAMETERS#################### #Shared Sweep diff --git a/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/Example - MZI.lym b/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/Example - MZI.lym index 4aaf0444..f1943984 100644 --- a/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/Example - MZI.lym +++ b/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/Example - MZI.lym @@ -1,6 +1,6 @@ - MZI designs, by Jaspreet Jhoja + MZI design sweep (EBeam) pymacros @@ -9,8 +9,8 @@ false false - true - + false + Examples_EBeam siepic_menu.exlayout.begin python @@ -66,26 +66,16 @@ wg_bend_radius = 5 #change the waveguide width, default: 500nm or 0.5microns wg_width = 0.5 -lv = pya.Application.instance().main_window().current_view() - - -if lv == None: - raise Exception("No view selected") -# Find the currently selected layout. -ly = pya.Application.instance().main_window().current_view().active_cellview().layout() -if ly == None: - raise Exception("No layout") -# find the currently selected cell: -cell = pya.Application.instance().main_window().current_view().active_cellview().cell -if cell == None: - raise Exception("No cell") -# fetch the database parameters -dbu = 1 / ly.dbu - - -# clean all cells within "cell" -ly.prune_subcells(cell.cell_index(), 10) -#delete_extra_top_cells(cell) +''' +Create a new layout using the EBeam technology, +with a top cell +''' +mw = pya.Application().instance().main_window() +ly = mw.create_layout('EBeam', 1).layout() +cell = ly.create_cell('top') +lv = mw.current_view() +lv.select_cell(cell.cell_index(), 0) +dbu = ly.dbu # Layer mapping: LayerSi = pya.LayerInfo(1, 0) @@ -132,8 +122,8 @@ def draw_gc(gc_y_coord, number_of_designs): #joiner ybranch cell.insert(pya.CellInstArray(branch_imported, pya.Trans(pya.Trans.R270, ((15+2.75+wg_bend_radius)*dbu), ((gc_y_coord+127+7.5+2.75+wg_bend_radius) * dbu)), pya.Point(0,127*dbu), pya.Point(space*dbu,0), 1, number_of_designs)) - -#function Drawing L1 + ''' + #function Drawing L1 #Comment-Del: add 2.75 to go up and 2.75 to attach tp bottom points_L1 = [ [15, 127+gc_y_coord+2.75], [wg_bend_radius+15, 127+gc_y_coord+2.75], [wg_bend_radius+15, (127+gc_y_coord+2.75+wg_bend_radius)] ] L1 = layout_waveguide_abs(cell, LayerSi, points_L1, wg_width, wg_bend_radius) @@ -141,14 +131,14 @@ def draw_gc(gc_y_coord, number_of_designs): #instantiate the design for other waveguides a= pya.CellInstArray(ly.cell_by_name("ROUND_PATH"), pya.Trans(pya.Trans.R0, (space+15)*dbu, (127+gc_y_coord+2.75)*dbu), pya.Point(0,127*dbu), pya.Point(space*dbu,0), 1, number_of_designs-1) cell.insert(a) + ''' #extract coordinates for final attachments to the GC pt_f_x = wg_bend_radius+15 pt_f_y = 127+gc_y_coord+2.75+wg_bend_radius - - #waveguide joining combiner with the output GC - + ''' + #waveguide joining combiner with the output GC points_final = [[pt_f_x+2.75, pt_f_y+15],[pt_f_x +2.75, pt_f_y+16+wg_bend_radius], [pt_f_x +2.75+wg_bend_radius+wg_bend_radius, pt_f_y+16+wg_bend_radius], [pt_f_x +2.75+wg_bend_radius+wg_bend_radius, gc_y_coord], [0,gc_y_coord]] layout_waveguide_abs(cell, LayerSi, points_final, wg_width, wg_bend_radius) @@ -156,7 +146,7 @@ def draw_gc(gc_y_coord, number_of_designs): #instantiate the path for other designs a = pya.CellInstArray(ly.cell_by_name("ROUND_PATH$1"), pya.Trans(pya.Trans.R0, (space+pt_f_x+2.75)*dbu, (pt_f_y+15)*dbu), pya.Point(0,127*dbu), pya.Point(space*dbu,0), 1, number_of_designs-1) cell.insert(a) - + ''' def drawL2(dL,n, gc_y_coord): val = abs(dL-70) @@ -223,8 +213,10 @@ def drawL2(dL,n, gc_y_coord): for i in coordedit[2]: points_L2.insert(12+(coordedit[2].index(i)),i) # points_L2.pop(7) + ''' print ( points_L2) L2 = layout_waveguide_abs(cell, LayerSi, points_L2, wg_width, wg_bend_radius) + ''' # Label for automated measurements, laser on Port 2, detectors on Ports 1, 3, 4 t = pya.Trans(pya.Trans.R0,(space*n)*dbu, gc_y_coord*dbu) text = pya.Text ("opt_in_TE_1550_device_MZI"+str(n), t) diff --git a/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/Example - mixed waveguide types.lym b/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/Example - mixed waveguide types.lym index e4d2d788..9f32b925 100644 --- a/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/Example - mixed waveguide types.lym +++ b/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/Example - mixed waveguide types.lym @@ -1,6 +1,6 @@ - Mixed waveguide types + Mixed waveguide types (EBeam) pymacros @@ -9,8 +9,8 @@ false false - true - + false + Examples_EBeam siepic_menu.exlayout.begin python diff --git a/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/MZI.lym b/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/MZI.lym index 44d21b5e..dfd1c4b7 100644 --- a/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/MZI.lym +++ b/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/MZI.lym @@ -1,6 +1,6 @@ - Simple MZI + MZI (EBeam) pymacros @@ -10,7 +10,7 @@ false true - + Examples_EBeam siepic_menu.exlayout.begin python diff --git a/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/Test_structures_ring_resonators.lym b/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/Test_structures_ring_resonators.lym deleted file mode 100644 index de4cc12c..00000000 --- a/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/Test_structures_ring_resonators.lym +++ /dev/null @@ -1,171 +0,0 @@ - - - Test structures: Double-bus ring resonators - - pymacros - - - - false - false - - true - - siepic_menu.exlayout.begin - python - - ''' -Scripted layout for ring resonators using SiEPIC-Tools -in the SiEPIC-EBeam-PDK "EBeam" technology - -by Lukas Chrostowski, 2020 - -''' - -from pya import * - -# Example layout function -def dbl_bus_ring_res(): - - # Create a layout for testing a double-bus ring resonator. - # uses: - # - the SiEPIC EBeam Library - # creates the layout in the presently selected cell - # deletes everything first - - # Configure parameter sweep - pol = 'te' - if pol == 'te': - sweep_radius = [3, 3, 3, 3, 5, 10, 10, 30] - sweep_gap = [0.1, 0.12, 0.05, 0.08, 0.05, 0.1, 0.15, 0.20] - x_offset = 67 - wg_bend_radius = 5 - else: - sweep_radius = [30, 30, 30, 30, 30, 30, 30, 30, 30] - sweep_gap = [0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.60, 0.65] - x_offset = 67 - wg_bend_radius = 15 - wg_width = 0.5 - - # Import functions from SiEPIC-Tools, and get technology details - from SiEPIC.utils import get_layout_variables - TECHNOLOGY, lv, ly, cell = get_layout_variables() - dbu = ly.dbu - if TECHNOLOGY['technology_name'] not in 'EBeam': - raise Exception ('This example needs to be executed in a layout with Technology = EBeam') - - if SiEPIC.__version__ < '0.3.71': - pya.MessageBox.warning("Errors", "This example requires SiEPIC-Tools version 0.3.71 or greater.", pya.MessageBox.Ok) - - # Import functions from SiEPIC-Tools - from SiEPIC.extend import to_itype - from SiEPIC.scripts import connect_cell, connect_pins_with_waveguide - - # clean all cells within the present cell - ly.prune_subcells(cell.cell_index(), 10) - - # Layer mapping: - LayerSiN = ly.layer(TECHNOLOGY['Si']) - fpLayerN = cell.layout().layer(TECHNOLOGY['FloorPlan']) - TextLayerN = cell.layout().layer(TECHNOLOGY['Text']) - - # Draw the floor plan - cell.shapes(fpLayerN).insert(Box(0,0, 610/dbu, 405/dbu)) - - # Create a sub-cell for our Ring resonator layout - top_cell = cell - cell = cell.layout().create_cell("RingResonator") - if pol == 'te': - t = Trans(Trans.R0, 40 / dbu, 12 / dbu) - else: - # rotate the layout since EBeam TM grating couplers have an angle that is negative - t = Trans(Trans.R180, 560 / dbu, 393 / dbu) - - # place the cell in the top cell - top_cell.insert(CellInstArray(cell.cell_index(), t)) - - # Import cell from the SiEPIC EBeam Library - cell_ebeam_gc = ly.create_cell("ebeam_gc_%s1550" % pol, "EBeam") - # get the length of the grating coupler from the cell - gc_length = cell_ebeam_gc.bbox().width()*dbu - # spacing of the fibre array to be used for testing - GC_pitch = 127 - - # Loop through the parameter sweep - for i in range(len(sweep_gap)): - - # place layout at location: - if i==0: - x=0 - else: - # next device is placed at the right-most element + length of the grating coupler - x = inst_dc2.bbox().right*dbu + gc_length + 1 - - # get the parameters - r = sweep_radius[i] - g = sweep_gap[i] - - # Grating couplers, Ports 0, 1, 2, 3 (from the bottom up) - instGCs = [] - for i in range(0,4): - t = Trans(Trans.R0, to_itype(x,dbu), i*127/dbu) - instGCs.append( cell.insert(CellInstArray(cell_ebeam_gc.cell_index(), t)) ) - - # Label for automated measurements, laser on Port 2, detectors on Ports 1, 3, 4 - t = Trans(Trans.R90, to_itype(x,dbu), to_itype(GC_pitch*2,dbu)) - text = Text ("opt_in_%s_1550_device_RingDouble%sr%sg%s" % (pol.upper(), pol.upper(),r,int(round(g*1000))), t) - text.halign = 1 - cell.shapes(TextLayerN).insert(text).text_size = 5/dbu - - # Label for automated measurements, laser on Port 1, detectors on Ports 2, 3 - t = Trans(Trans.R0, to_itype(x,dbu), to_itype(GC_pitch*3,dbu)) - text = Text ("opt_in_%s_1550_device_RingDouble%sr%sg%sB" % (pol.upper(), pol.upper(),r,int(round(g*1000))), t) - text.halign = 1 - cell.shapes(TextLayerN).insert(text).text_size = 5/dbu - - # Ring resonator from directional coupler PCells - cell_dc = ly.create_cell("ebeam_dc_halfring_straight", "EBeam", { "r": r, "w": wg_width, "g": g, "bustype": 0 } ) - y_ring = GC_pitch*3/2 - # first directional coupler - t1 = Trans(Trans.R270, to_itype(x+wg_bend_radius, dbu), to_itype(y_ring, dbu)) - inst_dc1 = cell.insert(CellInstArray(cell_dc.cell_index(), t1)) - # add 2nd directional coupler, snapped to the first one - inst_dc2 = connect_cell(inst_dc1, 'pin2', cell_dc, 'pin4') - - # Create paths for waveguides, with the type defined in WAVEGUIDES.xml in the PDK - waveguide_type='Strip TE 1550 nm, w=500 nm' - - # GC1 to bottom-left of ring pin3 - connect_pins_with_waveguide(instGCs[1], 'opt1', inst_dc1, 'pin3', waveguide_type=waveguide_type) - - # GC2 to top-left of ring pin1 - connect_pins_with_waveguide(instGCs[2], 'opt1', inst_dc1, 'pin1', waveguide_type=waveguide_type) - - # GC0 to top-right of ring - connect_pins_with_waveguide(instGCs[0], 'opt1', inst_dc2, 'pin1', waveguide_type=waveguide_type) - - # GC3 to bottom-right of ring - connect_pins_with_waveguide(instGCs[3], 'opt1', inst_dc2, 'pin3', waveguide_type=waveguide_type) - - # Zoom out - lv.clear_object_selection() - lv.zoom_fit() - lv.max_hier() - - # Save a screenshot of the layout: - dir_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "Test_structures_ring_resonators.png") - lv.save_screenshot(dir_path) - - # Save the layout, without PCell info, for fabrication - save_options = pya.SaveLayoutOptions() - save_options.write_context_info=False # remove $$$CONTEXT_INFO$$$ - save_options.format='GDS' # standard format - save_options.format='OASIS' # smaller file size - save_options.oasis_compression_level=10 - file_out = os.path.join(os.path.dirname(os.path.realpath(__file__)), "Test_structures_ring_resonators.%s" % save_options.format[0:3]) - print("saving output %s: %s" % (save_options.format, file_out) ) - ly.write(file_out,save_options) - -dbl_bus_ring_res() - - diff --git a/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/example_Ring_resonator_sweep.lym b/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/example_Ring_resonator_sweep.lym new file mode 100644 index 00000000..89601279 --- /dev/null +++ b/klayout_dot_config/tech/EBeam/pymacros/Example_scripted_layouts/example_Ring_resonator_sweep.lym @@ -0,0 +1,173 @@ + + + Double-bus ring resonator sweep (EBeam) + + pymacros + + + + false + false + + true + Examples_EBeam + siepic_menu.exlayout.begin + python + + ''' +Scripted layout for ring resonators using SiEPIC-Tools +in the SiEPIC-EBeam-PDK "EBeam" technology + +by Lukas Chrostowski, 2020-2022 + +''' + +from pya import * + +# Example layout function +def dbl_bus_ring_res(): + + # Create a layout for testing a double-bus ring resonator. + # uses: + # - the SiEPIC EBeam Library + # creates the layout in the presently selected cell + # deletes everything first + + # Configure parameter sweep + pol = 'te' + if pol == 'te': + sweep_radius = [3, 3, 3, 3, 5, 10, 10, 30] + sweep_gap = [0.1, 0.12, 0.05, 0.08, 0.05, 0.1, 0.15, 0.20] + x_offset = 67 + wg_bend_radius = 5 + else: + sweep_radius = [30, 30, 30, 30, 30, 30, 30, 30, 30] + sweep_gap = [0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.60, 0.65] + x_offset = 67 + wg_bend_radius = 15 + + wg_width = 0.5 + + ''' + Create a new layout using the EBeam technology, + with a top cell + ''' + mw = pya.Application().instance().main_window() + ly = mw.create_layout('EBeam', 1).layout() + cell = ly.create_cell('top') + lv = mw.current_view() + lv.select_cell(cell.cell_index(), 0) + dbu = ly.dbu + + if SiEPIC.__version__ < '0.3.71': + pya.MessageBox.warning("Errors", "This example requires SiEPIC-Tools version 0.3.71 or greater.", pya.MessageBox.Ok) + + # Import functions from SiEPIC-Tools + from SiEPIC.extend import to_itype + from SiEPIC.scripts import connect_cell, connect_pins_with_waveguide + + # Layer mapping: + LayerSiN = ly.layer(TECHNOLOGY['Si']) + fpLayerN = cell.layout().layer(TECHNOLOGY['FloorPlan']) + TextLayerN = cell.layout().layer(TECHNOLOGY['Text']) + + # Draw the floor plan + cell.shapes(fpLayerN).insert(Box(0,0, 610/dbu, 405/dbu)) + + # Create a sub-cell for our Ring resonator layout + top_cell = cell + cell = cell.layout().create_cell("RingResonator") + if pol == 'te': + t = Trans(Trans.R0, 40 / dbu, 12 / dbu) + else: + # rotate the layout since EBeam TM grating couplers have an angle that is negative + t = Trans(Trans.R180, 560 / dbu, 393 / dbu) + + # place the cell in the top cell + top_cell.insert(CellInstArray(cell.cell_index(), t)) + + # Import cell from the SiEPIC EBeam Library + cell_ebeam_gc = ly.create_cell("ebeam_gc_%s1550" % pol, "EBeam") + # get the length of the grating coupler from the cell + gc_length = cell_ebeam_gc.bbox().width()*dbu + # spacing of the fibre array to be used for testing + GC_pitch = 127 + + # Loop through the parameter sweep + for i in range(len(sweep_gap)): + + # place layout at location: + if i==0: + x=0 + else: + # next device is placed at the right-most element + length of the grating coupler + x = inst_dc2.bbox().right*dbu + gc_length + 1 + + # get the parameters + r = sweep_radius[i] + g = sweep_gap[i] + + # Grating couplers, Ports 0, 1, 2, 3 (from the bottom up) + instGCs = [] + for i in range(0,4): + t = Trans(Trans.R0, to_itype(x,dbu), i*127/dbu) + instGCs.append( cell.insert(CellInstArray(cell_ebeam_gc.cell_index(), t)) ) + + # Label for automated measurements, laser on Port 2, detectors on Ports 1, 3, 4 + t = Trans(Trans.R90, to_itype(x,dbu), to_itype(GC_pitch*2,dbu)) + text = Text ("opt_in_%s_1550_device_RingDouble%sr%sg%s" % (pol.upper(), pol.upper(),r,int(round(g*1000))), t) + text.halign = 1 + cell.shapes(TextLayerN).insert(text).text_size = 5/dbu + + # Label for automated measurements, laser on Port 1, detectors on Ports 2, 3 + t = Trans(Trans.R0, to_itype(x,dbu), to_itype(GC_pitch*3,dbu)) + text = Text ("opt_in_%s_1550_device_RingDouble%sr%sg%sB" % (pol.upper(), pol.upper(),r,int(round(g*1000))), t) + text.halign = 1 + cell.shapes(TextLayerN).insert(text).text_size = 5/dbu + + # Ring resonator from directional coupler PCells + cell_dc = ly.create_cell("ebeam_dc_halfring_straight", "EBeam", { "r": r, "w": wg_width, "g": g, "bustype": 0 } ) + y_ring = GC_pitch*3/2 + # first directional coupler + t1 = Trans(Trans.R270, to_itype(x+wg_bend_radius, dbu), to_itype(y_ring, dbu)) + inst_dc1 = cell.insert(CellInstArray(cell_dc.cell_index(), t1)) + # add 2nd directional coupler, snapped to the first one + inst_dc2 = connect_cell(inst_dc1, 'pin2', cell_dc, 'pin4') + + # Create paths for waveguides, with the type defined in WAVEGUIDES.xml in the PDK + waveguide_type='Strip TE 1550 nm, w=500 nm' + + # GC1 to bottom-left of ring pin3 + connect_pins_with_waveguide(instGCs[1], 'opt1', inst_dc1, 'pin3', waveguide_type=waveguide_type) + + # GC2 to top-left of ring pin1 + connect_pins_with_waveguide(instGCs[2], 'opt1', inst_dc1, 'pin1', waveguide_type=waveguide_type) + + # GC0 to top-right of ring + connect_pins_with_waveguide(instGCs[0], 'opt1', inst_dc2, 'pin1', waveguide_type=waveguide_type) + + # GC3 to bottom-right of ring + connect_pins_with_waveguide(instGCs[3], 'opt1', inst_dc2, 'pin3', waveguide_type=waveguide_type) + + # Zoom out + lv.clear_object_selection() + lv.zoom_fit() + lv.max_hier() + + # Save a screenshot of the layout: + dir_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "Test_structures_ring_resonators.png") + lv.save_screenshot(dir_path) + + # Save the layout, without PCell info, for fabrication + save_options = pya.SaveLayoutOptions() + save_options.write_context_info=False # remove $$$CONTEXT_INFO$$$ + save_options.format='GDS' # standard format + save_options.format='OASIS' # smaller file size + save_options.oasis_compression_level=10 + file_out = os.path.join(os.path.dirname(os.path.realpath(__file__)), "Test_structures_ring_resonators.%s" % save_options.format[0:3]) + print("saving output %s: %s" % (save_options.format, file_out) ) + ly.write(file_out,save_options) + +dbl_bus_ring_res() + + diff --git a/klayout_dot_config/tech/EBeam/pymacros/SiEPIC_EBeam_Library.lym b/klayout_dot_config/tech/EBeam/pymacros/SiEPIC_EBeam_Library.lym index ebc0b92c..4deb0aec 100644 --- a/klayout_dot_config/tech/EBeam/pymacros/SiEPIC_EBeam_Library.lym +++ b/klayout_dot_config/tech/EBeam/pymacros/SiEPIC_EBeam_Library.lym @@ -157,7 +157,7 @@ class SiEPIC_EBeam_Library(Library): print("Initializing '%s' Library." % library) # Set the description - self.description = "v0.3.37, Components with models" + self.description = "v0.3.39, Components with models" # Save the path, used for loading WAVEGUIDES.XML import os diff --git a/klayout_dot_config/tech/EBeam/pymacros/SiEPIC_EBeam_Library_Beta.lym b/klayout_dot_config/tech/EBeam/pymacros/SiEPIC_EBeam_Library_Beta.lym index 7b736581..4eebf58d 100644 --- a/klayout_dot_config/tech/EBeam/pymacros/SiEPIC_EBeam_Library_Beta.lym +++ b/klayout_dot_config/tech/EBeam/pymacros/SiEPIC_EBeam_Library_Beta.lym @@ -178,7 +178,7 @@ class SiEPIC_EBeam_Library_Beta(Library): print("Initializing '%s' Library." % library) # Set the description - self.description = "v0.3.37, Beta components" + self.description = "v0.3.39, Beta components" # Save the path, used for loading WAVEGUIDES.XML import os