Skip to content

Commit

Permalink
Merge pull request #25 from thomasdorch/refactor-import_gds
Browse files Browse the repository at this point in the history
Import gds cells directly
  • Loading branch information
joamatab authored Apr 27, 2022
2 parents b111f1c + b190d3b commit 5d0decc
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 65 deletions.
32 changes: 21 additions & 11 deletions ubcpdk/components/cells.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ def y_splitter() -> Component:
from gdsfactory.add_labels import add_siepic_labels
from gdsfactory.add_pins import add_pins_bbox_siepic

from ubcpdk.import_gds import import_gds_siepic_pins
from ubcpdk.import_gds import import_gds
from ubcpdk.tech import strip, LAYER_STACK, LAYER
from ubcpdk.import_gds import remove_pins_recursive

Expand All @@ -32,43 +32,53 @@ def y_splitter() -> Component:


dc_broadband_te = gf.partial(
import_gds_siepic_pins,
import_gds,
"ebeam_bdc_te1550.gds",
name="ebeam_bdc_te1550",
model="ebeam_bdc_te1550",
doc="Broadband directional coupler TE1550 50/50 power.",
)

dc_broadband_tm = gf.partial(
import_gds_siepic_pins,
import_gds,
"ebeam_bdc_tm1550.gds",
name="ebeam_bdc_tm1550",
model="ebeam_bdc_tm1550",
doc="Broadband directional coupler TM1550 50/50 power.",
)

dc_adiabatic = gf.partial(
import_gds_siepic_pins,
import_gds,
"ebeam_adiabatic_te1550.gds",
name="ebeam_adiabatic_te1550",
model="ebeam_adiabatic_te1550",
doc="Adiabatic directional coupler TE1550 50/50 power.",
)

y_adiabatic = gf.partial(
import_gds_siepic_pins,
import_gds,
"ebeam_y_adiabatic.gds",
doc="Adiabatic Y junction TE1550 50/50 power.",
name="ebeam_y_adiabatic",
model="ebeam_y_adiabatic",
doc="Adiabatic Y junction TE1550 50/50 power.",
)

y_splitter = gf.partial(
import_gds_siepic_pins,
import_gds,
"ebeam_y_1550.gds",
doc="Y junction TE1550 50/50 power.",
name="ebeam_y_1550",
model="ebeam_y_1550",
opt1="opt_a1",
opt2="opt_b1",
opt3="opt_b2",
layout_model_port_pairs=(
("opt1", "opt_a1"),
("opt2", "opt_b1"),
("opt3", "opt_b2")
)
)
crossing = gf.partial(
import_gds_siepic_pins,
import_gds,
"ebeam_crossing4.gds",
model="ebeam_crossing4",
doc="TE waveguide crossing.",
)

Expand Down
42 changes: 24 additions & 18 deletions ubcpdk/components/grating_couplers.py
Original file line number Diff line number Diff line change
@@ -1,56 +1,62 @@
import gdsfactory as gf
from ubcpdk.import_gds import (
add_ports_renamed_gratings,
add_ports_siepic_gratings,
import_gds_siepic_pins,
import_gds
)


# This rotation is causing issues in interconnect
add_ports_rotate180 = gf.compose(gf.functions.rotate180, add_ports_renamed_gratings)
add_ports_rotate180_siepic = gf.compose(
gf.functions.rotate180, add_ports_siepic_gratings
import_gc = gf.compose(
gf.functions.rotate180,
import_gds,
)

import_gc = gf.partial(
import_gds_siepic_pins,
decorator=add_ports_rotate180,
)

import_gc_interconnect = gf.partial(
import_gds_siepic_pins,
decorator=add_ports_rotate180_siepic,
)

gc_te1550 = gf.partial(
import_gc_interconnect,
import_gc,
"ebeam_gc_te1550.gds",
polarization="te",
wavelength=1.55,
model="ebeam_gc_te1550",
opt1="opt_wg",
name="ebeam_gc_te1550",
layout_model_port_pairs=(
("opt1", "opt_wg"),
)
)

gc_te1550_broadband = gf.partial(
import_gc,
"ebeam_gc_te1550_broadband.gds",
name="ebeam_gc_te1550_broadband",
model="ebeam_gc_te1550_broadband",
polarization="te",
wavelength=1.55,
layout_model_port_pairs=(
("opt1", "opt_wg"),
)
)


gc_te1310 = gf.partial(
import_gc,
"ebeam_gc_te1310.gds",
name="ebeam_gc_te1310",
model="ebeam_gc_te1310",
polarization="te",
wavelength=1.31,
layout_model_port_pairs=(
("opt1", "opt_wg"),
)
)

gc_tm1550 = gf.partial(
import_gc,
"ebeam_gc_tm1550.gds",
name="ebeam_gc_tm1550",
model="ebeam_gc_tm1550",
polarization="tm",
wavelength=1.55,
layout_model_port_pairs=(
("opt1", "opt_wg"),
)
)


Expand Down
72 changes: 36 additions & 36 deletions ubcpdk/import_gds.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
from gdsfactory.component import Component
from gdsfactory.port import Port
from gdsfactory.types import Layer
from gdsfactory.add_pins import add_pins_bbox_siepic

from ubcpdk.tech import LAYER
from ubcpdk.config import PATH
Expand Down Expand Up @@ -179,44 +178,45 @@ def add_siepic_labels_and_simulation_info(
return c


import_gds = gf.partial(
gf.import_gds,
gdsdir=PATH.gds,
library="Design kits/ebeam",
decorator=add_ports_from_siepic_pins
)
#
# gratings have a 2nm square that is sticking out 1nm
add_pins_gratings = gf.partial(add_pins_bbox_siepic, padding=-1e-3)

add_ports_renamed = gf.compose(
add_pins_bbox_siepic, gf.port.auto_rename_ports, remove_pins, add_ports
)
add_ports_renamed_gratings = gf.compose(
add_pins_gratings, gf.port.auto_rename_ports, remove_pins, add_ports
)

import_gds = gf.partial(gf.import_gds, gdsdir=PATH.gds, decorator=add_ports_renamed)

add_ports_siepic = gf.compose(
add_siepic_labels_and_simulation_info,
add_pins_bbox_siepic,
remove_pins,
add_ports_from_siepic_pins,
)

add_ports_siepic_gratings = gf.compose(
add_siepic_labels_and_simulation_info,
add_pins_gratings,
remove_pins,
add_ports_from_siepic_pins,
)

import_gds_siepic_pins = gf.partial(
gf.import_gds, gdsdir=PATH.gds, decorator=add_ports_siepic
)

import_gds_siepic_pins_gratings = gf.partial(
gf.import_gds, gdsdir=PATH.gds, decorator=add_ports_siepic_gratings
)

# add_pins_gratings = gf.partial(add_pins_bbox_siepic, padding=-1e-3)
#
# add_ports_renamed = gf.compose(
# add_pins_bbox_siepic, gf.port.auto_rename_ports, remove_pins, add_ports_from_siepic_pins
# )
# add_ports_renamed_gratings = gf.compose(
# add_pins_gratings, gf.port.auto_rename_ports, remove_pins, add_ports_from_siepic_pins
# )
#
# # add_ports_siepic = gf.compose(
# # add_pins_bbox_siepic,
# # remove_pins,
# # add_ports_from_siepic_pins,
# # )
# #
# add_ports_siepic_gratings = gf.compose(
# add_pins_gratings,
# remove_pins,
# add_ports_from_siepic_pins,
# )
#
# import_gds_siepic_pins = gf.partial(import_gds, gdsdir=PATH.gds)
#
# import_gds_siepic_pins_gratings = gf.partial(
# import_gds_siepic_pins,
# decorator=add_ports_siepic_gratings
# )

if __name__ == "__main__":
gdsname = "ebeam_crossing4.gds"
# gdsname = "ebeam_crossing4.gds"
gdsname = "ebeam_y_1550.gds"
c = import_gds_siepic_pins(gdsname)
c = import_gds(gdsname)
# print(c.ports)
c.show(show_ports=False)

0 comments on commit 5d0decc

Please sign in to comment.