diff --git a/CHANGELOG.md b/CHANGELOG.md index c4b55065..4df0f9f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## [1.3.6] + +- change pin length from 100nm to 10nm + ## [1.3.5](https://github.com/gdsfactory/ubc/pull/9) - pins are compatible with siepic diff --git a/requirements.txt b/requirements.txt index b17d8bf1..cee563bb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -e . lygadgets -gdsfactory[full]==4.3.8 +gdsfactory[full]==4.4.0 modes diff --git a/ubcpdk/components/__init__.py b/ubcpdk/components/__init__.py index 3d9ade98..12c3c456 100644 --- a/ubcpdk/components/__init__.py +++ b/ubcpdk/components/__init__.py @@ -16,8 +16,6 @@ y_adiabatic, y_splitter, bend_euler, -) -from ubcpdk.components.crossing import ( crossing, ring_with_crossing, ) diff --git a/ubcpdk/components/add_fiber_array.py b/ubcpdk/components/add_fiber_array.py index ae2cb94c..461ac0a8 100644 --- a/ubcpdk/components/add_fiber_array.py +++ b/ubcpdk/components/add_fiber_array.py @@ -177,6 +177,7 @@ def add_fiber_array( # c = gc_tm1550() # print(c.get_ports_array()) # print(c.ports.keys()) - c = pdk.straight() + # c = pdk.straight() + c = pdk.mzi() c = add_fiber_array(component=c) c.show() diff --git a/ubcpdk/components/cells.py b/ubcpdk/components/cells.py index 55488c15..fa5cdf4d 100644 --- a/ubcpdk/components/cells.py +++ b/ubcpdk/components/cells.py @@ -7,40 +7,46 @@ def y_splitter() -> Component: import gdsfactory as gf from gdsfactory.add_pins import add_pins_bbox_siepic -from ubcpdk.import_gds import import_gds +from ubcpdk.import_gds import import_gds_siepic_pins from ubcpdk.components.straight import straight dc_broadband_te = gf.partial( - import_gds, + import_gds_siepic_pins, "ebeam_bdc_te1550.gds", doc="Broadband directional coupler TE1550 50/50 power.", ) dc_broadband_tm = gf.partial( - import_gds, + import_gds_siepic_pins, "ebeam_bdc_tm1550.gds", doc="Broadband directional coupler TM1550 50/50 power.", ) dc_adiabatic = gf.partial( - import_gds, + import_gds_siepic_pins, "ebeam_adiabatic_te1550.gds", doc="Adiabatic directional coupler TE1550 50/50 power.", ) y_adiabatic = gf.partial( - import_gds, + import_gds_siepic_pins, "ebeam_y_adiabatic.gds", doc="Adiabatic Y junction TE1550 50/50 power.", ) y_splitter = gf.partial( - import_gds, + import_gds_siepic_pins, "ebeam_y_1550.gds", doc="Y junction TE1550 50/50 power.", ) +crossing = gf.partial( + import_gds_siepic_pins, + "ebeam_crossing4.gds", + doc="TE waveguide crossing.", +) + bend_euler = gf.partial(gf.components.bend_euler, decorator=add_pins_bbox_siepic) mzi = gf.partial( @@ -50,6 +56,7 @@ def y_splitter() -> Component: ebeam_dc_halfring_straight = gf.partial(gf.components.coupler_ring) ebeam_dc_te1550 = gf.partial(gf.components.coupler) spiral = gf.partial(gf.components.spiral_external_io) +ring_with_crossing = gf.partial(gf.components.ring_single_dut, component=crossing) if __name__ == "__main__": @@ -63,7 +70,7 @@ def y_splitter() -> Component: # print(c.ports.keys()) # c = straight() # c = add_fiber_array(component=c) - c = mzi(splitter=y_splitter) + # c = mzi(splitter=y_splitter) # c = gc_te1550() # c = y_splitter() diff --git a/ubcpdk/components/crossing.py b/ubcpdk/components/crossing.py deleted file mode 100644 index f34144b1..00000000 --- a/ubcpdk/components/crossing.py +++ /dev/null @@ -1,18 +0,0 @@ -from gdsfactory.component import Component -from gdsfactory.components.ring_single_dut import ring_single_dut - -from ubcpdk.import_gds import import_gds - - -def crossing() -> Component: - """TE waveguide crossing.""" - return import_gds("ebeam_crossing4.gds") - - -def ring_with_crossing(**kwargs) -> Component: - return ring_single_dut(component=crossing(), **kwargs) - - -if __name__ == "__main__": - c = ring_with_crossing() - c.show() diff --git a/ubcpdk/import_gds.py b/ubcpdk/import_gds.py index a2d54a0b..461740ec 100644 --- a/ubcpdk/import_gds.py +++ b/ubcpdk/import_gds.py @@ -75,23 +75,21 @@ def add_ports(component: Component) -> Component: c.add_port(port) return c + def add_ports_from_siepic_pins( - component: Component, - optical_pin_layer: Layer = LAYER.PORT, - electrical_pin_layer: Layer = LAYER.PORTE, + component: Component, + optical_pin_layer: Layer = LAYER.PORT, + electrical_pin_layer: Layer = LAYER.PORTE, ) -> Component: """Add ports from SiEPIC-type cells. - Looks for label, path pairs - - Args: - component: component - optical_pin_layer: layer for optical pins - electrical_pin_layer: layer for electrical pins - """ - pin_layers = { - 'optical': optical_pin_layer, - 'electrical': electrical_pin_layer - } + Looks for label, path pairs + + Args: + component: component + optical_pin_layer: layer for optical pins + electrical_pin_layer: layer for electrical pins + """ + pin_layers = {"optical": optical_pin_layer, "electrical": electrical_pin_layer} from numpy import arctan2, degrees, isclose # TODO: Add opt-in ports for Lumerical Interconnect simulations @@ -114,12 +112,12 @@ def add_ports_from_siepic_pins( label = l labels.pop(i) if label is None: - print(f'Warning: label not found for path: ({p1}, {p2})') + print(f"Warning: label not found for path: ({p1}, {p2})") continue if optical_pin_layer[0] in path.layers: - port_type = 'optical' + port_type = "optical" elif electrical_pin_layer[0] in pin_layers: - port_type = 'electrical' + port_type = "electrical" else: continue @@ -128,7 +126,7 @@ def add_ports_from_siepic_pins( # If the port name is already used, add a number to it i = 1 while port_name in c.ports: - port_name += f'_{i}' + port_name += f"_{i}" angle = round(degrees(arctan2(p2[1] - p1[1], p2[0] - p1[0])) % 360) port = Port( @@ -137,34 +135,35 @@ def add_ports_from_siepic_pins( width=path.widths[0][0], orientation=angle, layer=pin_layers[port_type], - port_type=port_type + port_type=port_type, ) c.add_port(port) return c + def add_siepic_labels( - component: Component, - component_name_label: str = None, - library: str = 'Design kits/ebeam', - label_layer: Layer = LAYER.DEVREC + component: Component, + component_name_label: str = None, + library: str = "Design kits/ebeam", + label_layer: Layer = LAYER.DEVREC, ) -> Component: """ - Args: - component: component - component_name_label: name of component for SiEPIC label (defaults to component name) - library: Lumerical Interconnect library for SiEPIC label - label_layer: layer for writing SiEPIC labels + Args: + component: component + component_name_label: name of component for SiEPIC label (defaults to component name) + library: Lumerical Interconnect library for SiEPIC label + label_layer: layer for writing SiEPIC labels """ c = component c.add_label( - text=f'Component={c.name if not component_name_label else component_name_label}', + text=f"Component={c.name if not component_name_label else component_name_label}", position=c.center + (0, c.size_info.height / 6), layer=label_layer, ) c.add_label( - text=f'Lumerical_INTERCONNECT_library={library}', + text=f"Lumerical_INTERCONNECT_library={library}", position=c.center - (0, c.size_info.height / 6), layer=label_layer, ) @@ -188,13 +187,17 @@ def add_siepic_labels( add_pins_bbox_siepic, gf.port.auto_rename_ports, remove_pins, - add_ports_from_siepic_pins + add_ports_from_siepic_pins, +) + +import_gds_siepic_pins = gf.partial( + gf.import_gds, gdsdir=PATH.gds, decorator=add_ports_renamed_siepic ) -import_gds_siepic_pins = gf.partial(gf.import_gds, gdsdir=PATH.gds, decorator=add_ports_renamed_siepic) if __name__ == "__main__": gdsname = "ebeam_crossing4.gds" + gdsname = "ebeam_y_1550.gds" c = import_gds_siepic_pins(gdsname) # print(c.ports) c.show(show_ports=False) diff --git a/ubcpdk/tech.py b/ubcpdk/tech.py index 5cb7e075..74191400 100644 --- a/ubcpdk/tech.py +++ b/ubcpdk/tech.py @@ -36,7 +36,7 @@ class LayerMapUbc: WG2: Layer = (31, 0) DEVREC: Layer = (68, 0) LABEL: Layer = (10, 0) - PORT: Layer = (1, 10) # PinRec + PORT: Layer = (1, 10) # PinRec PORTE: Layer = (1, 11) # PinRecM FLOORPLAN: Layer = (99, 0) diff --git a/ubcpdk/tests/test_components.gds/gds_ref/bend_euler_92fd2590.gds b/ubcpdk/tests/test_components.gds/gds_ref/bend_euler_92fd2590.gds index 3261ca2f..8ff44432 100644 Binary files a/ubcpdk/tests/test_components.gds/gds_ref/bend_euler_92fd2590.gds and b/ubcpdk/tests/test_components.gds/gds_ref/bend_euler_92fd2590.gds differ diff --git a/ubcpdk/tests/test_components.gds/gds_ref/ebeam_adiabatic_te1550.gds b/ubcpdk/tests/test_components.gds/gds_ref/ebeam_adiabatic_te1550.gds index 0b1e0396..8354d169 100644 Binary files a/ubcpdk/tests/test_components.gds/gds_ref/ebeam_adiabatic_te1550.gds and b/ubcpdk/tests/test_components.gds/gds_ref/ebeam_adiabatic_te1550.gds differ diff --git a/ubcpdk/tests/test_components.gds/gds_ref/ebeam_bdc_te1550.gds b/ubcpdk/tests/test_components.gds/gds_ref/ebeam_bdc_te1550.gds index 4da91baf..b2c638cc 100644 Binary files a/ubcpdk/tests/test_components.gds/gds_ref/ebeam_bdc_te1550.gds and b/ubcpdk/tests/test_components.gds/gds_ref/ebeam_bdc_te1550.gds differ diff --git a/ubcpdk/tests/test_components.gds/gds_ref/ebeam_bdc_tm1550.gds b/ubcpdk/tests/test_components.gds/gds_ref/ebeam_bdc_tm1550.gds index 35367c47..28660224 100644 Binary files a/ubcpdk/tests/test_components.gds/gds_ref/ebeam_bdc_tm1550.gds and b/ubcpdk/tests/test_components.gds/gds_ref/ebeam_bdc_tm1550.gds differ diff --git a/ubcpdk/tests/test_components.gds/gds_ref/ebeam_crossing4.gds b/ubcpdk/tests/test_components.gds/gds_ref/ebeam_crossing4.gds index 09d28f13..84ceaf3f 100644 Binary files a/ubcpdk/tests/test_components.gds/gds_ref/ebeam_crossing4.gds and b/ubcpdk/tests/test_components.gds/gds_ref/ebeam_crossing4.gds differ diff --git a/ubcpdk/tests/test_components.gds/gds_ref/ebeam_y_1550.gds b/ubcpdk/tests/test_components.gds/gds_ref/ebeam_y_1550.gds index a120b683..55956a18 100644 Binary files a/ubcpdk/tests/test_components.gds/gds_ref/ebeam_y_1550.gds and b/ubcpdk/tests/test_components.gds/gds_ref/ebeam_y_1550.gds differ diff --git a/ubcpdk/tests/test_components.gds/gds_ref/ebeam_y_adiabatic.gds b/ubcpdk/tests/test_components.gds/gds_ref/ebeam_y_adiabatic.gds index 2dd53d35..688bffc2 100644 Binary files a/ubcpdk/tests/test_components.gds/gds_ref/ebeam_y_adiabatic.gds and b/ubcpdk/tests/test_components.gds/gds_ref/ebeam_y_adiabatic.gds differ diff --git a/ubcpdk/tests/test_components.gds/gds_ref/ring_single_dut_aa824f1c.gds b/ubcpdk/tests/test_components.gds/gds_ref/ring_single_dut_aa824f1c.gds new file mode 100644 index 00000000..ec00d1f2 Binary files /dev/null and b/ubcpdk/tests/test_components.gds/gds_ref/ring_single_dut_aa824f1c.gds differ diff --git a/ubcpdk/tests/test_components.gds/gds_ref/rotate_f258530e.gds b/ubcpdk/tests/test_components.gds/gds_ref/rotate_f258530e.gds index c40163fd..8c6fb52a 100644 Binary files a/ubcpdk/tests/test_components.gds/gds_ref/rotate_f258530e.gds and b/ubcpdk/tests/test_components.gds/gds_ref/rotate_f258530e.gds differ diff --git a/ubcpdk/tests/test_components.gds/gds_ref/straight_87bde41b_strai_83238d66.gds b/ubcpdk/tests/test_components.gds/gds_ref/straight_87bde41b_strai_83238d66.gds index 185ed324..c69a9eaf 100644 Binary files a/ubcpdk/tests/test_components.gds/gds_ref/straight_87bde41b_strai_83238d66.gds and b/ubcpdk/tests/test_components.gds/gds_ref/straight_87bde41b_strai_83238d66.gds differ diff --git a/ubcpdk/tests/test_components.gds/gds_ref/straight_87bde41b_straight.gds b/ubcpdk/tests/test_components.gds/gds_ref/straight_87bde41b_straight.gds index 9ca6ecee..7af52000 100644 Binary files a/ubcpdk/tests/test_components.gds/gds_ref/straight_87bde41b_straight.gds and b/ubcpdk/tests/test_components.gds/gds_ref/straight_87bde41b_straight.gds differ diff --git a/ubcpdk/tests/test_components/test_pdk_settings_ring_with_crossing_.yml b/ubcpdk/tests/test_components/test_pdk_settings_ring_with_crossing_.yml index 05e2ea0a..acf998bd 100644 --- a/ubcpdk/tests/test_components/test_pdk_settings_ring_with_crossing_.yml +++ b/ubcpdk/tests/test_components/test_pdk_settings_ring_with_crossing_.yml @@ -1,8 +1,17 @@ settings: changed: component: - settings: {} - version: 0.0.1 + decorator: + - function: add_ports_from_siepic_pins + - function: remove_pins + - function: auto_rename_ports + - - function: add_bbox_siepic + - function: add_pins_siepic + - function: add_siepic_labels + doc: TE waveguide crossing. + function: import_gds + gdsdir: gds + gdspath: ebeam_crossing4.gds child: {} default: bend: @@ -24,8 +33,17 @@ settings: bend: function: bend_euler component: - settings: {} - version: 0.0.1 + decorator: + - function: add_ports_from_siepic_pins + - function: remove_pins + - function: auto_rename_ports + - - function: add_bbox_siepic + - function: add_pins_siepic + - function: add_siepic_labels + doc: TE waveguide crossing. + function: import_gds + gdsdir: gds + gdspath: ebeam_crossing4.gds coupler: function: coupler_ring gap: 0.2 @@ -40,5 +58,5 @@ settings: info: {} info_version: 2 module: gdsfactory.components.ring_single_dut - name: ring_single_dut_9c01015b + name: ring_single_dut_aa824f1c version: 0.0.1