Here are the components available in the PDK
Cells#
ANT_MMI_1x2_te1550_3dB_BB#
- ubcpdk.cells.ANT_MMI_1x2_te1550_3dB_BB()[source]#
Returns ANT_MMI_1x2_te1550_3dB_BB fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ANT_MMI_1x2_te1550_3dB_BB()
c.plot()
(Source code
, png
, hires.png
, pdf
)

Alignment_Marker#
- ubcpdk.cells.Alignment_Marker()[source]#
Returns Alignment_Marker fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.Alignment_Marker()
c.plot()
(Source code
, png
, hires.png
, pdf
)

GC_SiN_TE_1310_8degOxide_BB#
- ubcpdk.cells.GC_SiN_TE_1310_8degOxide_BB()[source]#
Returns GC_SiN_TE_1310_8degOxide_BB fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.GC_SiN_TE_1310_8degOxide_BB()
c.plot()
(Source code
, png
, hires.png
, pdf
)

GC_SiN_TE_1550_8degOxide_BB#
- ubcpdk.cells.GC_SiN_TE_1550_8degOxide_BB()[source]#
Returns GC_SiN_TE_1550_8degOxide_BB fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.GC_SiN_TE_1550_8degOxide_BB()
c.plot()
(Source code
, png
, hires.png
, pdf
)

GC_TE_1310_8degOxide_BB#
from ubcpdk import PDK, cells
PDK.activate()
c = cells.GC_TE_1310_8degOxide_BB()
c.plot()
(Source code
, png
, hires.png
, pdf
)

GC_TE_1550_8degOxide_BB#
from ubcpdk import PDK, cells
PDK.activate()
c = cells.GC_TE_1550_8degOxide_BB()
c.plot()
(Source code
, png
, hires.png
, pdf
)

GC_TM_1310_8degOxide_BB#
from ubcpdk import PDK, cells
PDK.activate()
c = cells.GC_TM_1310_8degOxide_BB()
c.plot()
(Source code
, png
, hires.png
, pdf
)

GC_TM_1550_8degOxide_BB#
from ubcpdk import PDK, cells
PDK.activate()
c = cells.GC_TM_1550_8degOxide_BB()
c.plot()
(Source code
, png
, hires.png
, pdf
)

Packaging_FibreArray_8ch#
- ubcpdk.cells.Packaging_FibreArray_8ch()[source]#
Returns Packaging_FibreArray_8ch fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.Packaging_FibreArray_8ch()
c.plot()
(Source code
, png
, hires.png
, pdf
)

SEM_example#
from ubcpdk import PDK, cells
PDK.activate()
c = cells.SEM_example()
c.plot()
(Source code
, png
, hires.png
, pdf
)

add_fiber_array#
- ubcpdk.cells.add_fiber_array(component='ring_single', component_name=None, gc_port_name='o1', with_loopback=False, fanout_length=0, grating_coupler='ebeam_gc_te1550', cross_section='strip', straight='straight', taper=None, mirror_grating_coupler=True, gc_rotation=90, **kwargs)[source]#
Returns component with grating couplers and labels on each port.
Routes all component ports south. Can add align_ports loopback reference structure on the edges.
- Parameters:
component (str | Callable[[...], Component] | dict[str, Any] | DKCell) – to connect.
component_name (str | None) – for the label.
gc_port_name (str) – grating coupler input port name ‘o1’.
with_loopback (bool) – True, adds loopback structures.
fanout_length (float | None) – None # if None, automatic calculation of fanout length.
grating_coupler (str | Callable[[...], Component] | dict[str, Any] | DKCell) – grating coupler instance, function or list of functions.
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – spec.
straight (str | Callable[[...], Component] | dict[str, Any] | DKCell) – straight component.
taper (str | Callable[[...], Component] | dict[str, Any] | DKCell | None) – taper component.
kwargs – cross_section settings.
mirror_grating_coupler (bool)
gc_rotation (float)
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.add_fiber_array(component='ring_single', gc_port_name='o1', with_loopback=False, fanout_length=0, grating_coupler='ebeam_gc_te1550', cross_section='strip', straight='straight', mirror_grating_coupler=True, gc_rotation=90)
c.plot()
(Source code
, png
, hires.png
, pdf
)

add_fiber_array_pads_rf#
- ubcpdk.cells.add_fiber_array_pads_rf(component='ring_single_heater', username='JoaquinMatres', orientation=0, pad_yspacing=50, component_name=None, **kwargs)[source]#
Returns fiber array with label and electrical pads.
- Parameters:
component (str | Callable[[...], Component] | dict[str, Any] | DKCell) – to add fiber array and pads.
username (str) – for the label.
orientation (float) – for adding pads.
pad_yspacing (float) – for adding pads.
component_name (str | None) – for the label.
kwargs – for add_fiber_array.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.add_fiber_array_pads_rf(component='ring_single_heater', username='JoaquinMatres', orientation=0, pad_yspacing=50)
c.plot()
(Source code
, png
, hires.png
, pdf
)

add_pads#
- ubcpdk.cells.add_pads(component='ring_single_heater', username='JoaquinMatres', label_port_name='l_e1', **kwargs)[source]#
Returns fiber array with label and electrical pads.
- Parameters:
component (str | Callable[[...], Component] | dict[str, Any] | DKCell) – to add fiber array and pads.
username (str) – for the label.
kwargs – for add_fiber_array.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.add_pads(component='ring_single_heater', username='JoaquinMatres', label_port_name='l_e1')
c.plot()
(Source code
, png
, hires.png
, pdf
)

add_pads_rf#
- ubcpdk.cells.add_pads_rf(*, component='ring_single_heater', direction='top', spacing=(0.0, 100.0), pad_array='pad_array', select_ports=functools.partial(<function select_ports>, port_type='electrical'), port_names=None, layer='MTOP', **kwargs)#
Returns new component with electrical ports connected to top pad array.
- Parameters:
component (ComponentSpec) – to route.
direction (Literal['top', 'right']) – sets direction of the array (top or right).
spacing (Float2) – component to pad spacing.
pad_array (ComponentSpec) – function for pad_array.
select_ports (SelectPorts) – function to select electrical ports.
port_names (Strs | None) – optional port names. Overrides select_ports.
layer (LayerSpec) – for the routes.
kwargs (Any) – additional arguments.
- Keyword Arguments:
ports – Dict[str, Port] a port dict {port name: port}.
prefix – select ports with port name prefix.
suffix – select ports with port name suffix.
orientation – select ports with orientation in degrees.
width – select ports with port width.
layers_excluded – List of layers to exclude.
port_type – select ports with port type (optical, electrical, vertical_te).
clockwise – if True, sort ports clockwise, False: counter-clockwise.
- Return type:
Component
import gdsfactory as gf c = gf.components.wire_straight(length=200.) cc = gf.routing.add_electrical_pads_top(component=c, spacing=(-150, 30)) cc.plot()
(
Source code
,png
,hires.png
,pdf
)
from ubcpdk import PDK, cells
PDK.activate()
c = cells.add_pads_rf(component='ring_single_heater', direction='top', spacing=(0.0, 100.0), pad_array='pad_array', layer='MTOP')
c.plot()
(Source code
, png
, hires.png
, pdf
)

bend_euler#
- ubcpdk.cells.bend_euler(radius=None, angle=90, p=0.5, width=None, cross_section='strip', allow_min_radius_violation=False)[source]#
Regular degree euler bend.
- Parameters:
radius (float | None) – in um. Defaults to cross_section_radius.
angle (float) – total angle of the curve.
p (float) – Proportion of the curve that is an Euler curve.
width (float | None) – width to use. Defaults to cross_section.width.
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – specification (CrossSection, string, CrossSectionFactory dict).
allow_min_radius_violation (bool) – if True allows radius to be smaller than cross_section radius.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.bend_euler(angle=90, p=0.5, cross_section='strip', allow_min_radius_violation=False)
c.plot()
(Source code
, png
, hires.png
, pdf
)

bend_metal#
- ubcpdk.cells.bend_metal(radius=None, angle=90, width=None, cross_section='metal_routing')[source]#
Regular degree euler bend.
- Parameters:
radius (float | None)
angle (float)
width (float | None)
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection)
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.bend_metal(angle=90, cross_section='metal_routing')
c.plot()
(Source code
, png
, hires.png
, pdf
)

bend_s#
- ubcpdk.cells.bend_s(size=(11, 1.8), cross_section='strip', width=None, allow_min_radius_violation=False)[source]#
Return S bend with bezier curve.
stores min_bend_radius property in self.info[‘min_bend_radius’] min_bend_radius depends on height and length
- Parameters:
size (tuple[float, float]) – in x and y direction.
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – spec.
width (float | None) – width of the waveguide. If None, it will use the width of the cross_section.
allow_min_radius_violation (bool) – allows min radius violations.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.bend_s(size=(11, 1.8), cross_section='strip', allow_min_radius_violation=False)
c.plot()
(Source code
, png
, hires.png
, pdf
)

bend_s_metal#
- ubcpdk.cells.bend_s_metal(size=(11, 1.8), cross_section='metal_routing', width=None, allow_min_radius_violation=True)[source]#
Return S bend with bezier curve.
stores min_bend_radius property in self.info[‘min_bend_radius’] min_bend_radius depends on height and length
- Parameters:
size (tuple[float, float]) – in x and y direction.
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – spec.
width (float | None) – width of the waveguide. If None, it will use the width of the cross_section.
allow_min_radius_violation (bool) – allows min radius violations.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.bend_s_metal(size=(11, 1.8), cross_section='metal_routing', allow_min_radius_violation=True)
c.plot()
(Source code
, png
, hires.png
, pdf
)

compass#
- ubcpdk.cells.compass(size=(4, 2), layer='MTOP', port_type=None, port_inclusion=0.0, port_orientations=(180, 90, 0, -90), auto_rename_ports=True)[source]#
Rectangle with ports on each edge (north, south, east, and west).
- Parameters:
size (tuple[float, float]) – rectangle size.
layer (tuple[int, int] | str | int | LayerEnum) – tuple (int, int).
port_type (str | None) – optical, electrical.
port_inclusion (float) – from edge.
port_orientations (tuple[int, ...] | list[int] | None) – list of port_orientations to add. None does not add ports.
auto_rename_ports (bool) – auto rename ports.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.compass(size=(4, 2), layer='MTOP', port_inclusion=0.0, port_orientations=(180, 90, 0, -90), auto_rename_ports=True)
c.plot()
(Source code
, png
, hires.png
, pdf
)

coupler#
- ubcpdk.cells.coupler(length=14.5, gap=0.2)[source]#
Returns Symmetric coupler.
- Parameters:
length (float) – of coupling region in um.
gap (float) – of coupling region in um.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.coupler(length=14.5, gap=0.2)
c.plot()
(Source code
, png
, hires.png
, pdf
)

coupler_ring#
- ubcpdk.cells.coupler_ring(length_x=4, gap=0.2, radius=10.0, bend='bend_euler', straight='straight', cross_section='strip', cross_section_bend=None, length_extension=10)[source]#
Returns Coupler for ring.
- Parameters:
length_x (float) – length of the parallel coupled straight waveguides.
gap (float) – gap between for coupler.
radius (float) – for the bend and coupler.
bend (str | Callable[[...], Component] | dict[str, Any] | DKCell) – 90 degrees bend spec.
straight (str | Callable[[...], Component] | dict[str, Any] | DKCell) – straight spec.
cross_section (str) – cross_section spec.
cross_section_bend (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection | None) – cross_section for the bend. Defaults to cross_section.
length_extension (float) – length extension for the coupler.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.coupler_ring(length_x=4, gap=0.2, radius=10.0, bend='bend_euler', straight='straight', cross_section='strip', length_extension=10)
c.plot()
(Source code
, png
, hires.png
, pdf
)

crossing_SiN_1550#
- ubcpdk.cells.crossing_SiN_1550()[source]#
Returns crossing_SiN_1550 fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.crossing_SiN_1550()
c.plot()
(Source code
, png
, hires.png
, pdf
)

crossing_SiN_1550_extended#
- ubcpdk.cells.crossing_SiN_1550_extended()[source]#
Returns crossing_SiN_1550_extended fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.crossing_SiN_1550_extended()
c.plot()
(Source code
, png
, hires.png
, pdf
)

crossing_horizontal#
- ubcpdk.cells.crossing_horizontal()[source]#
Returns crossing_horizontal fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.crossing_horizontal()
c.plot()
(Source code
, png
, hires.png
, pdf
)

crossing_manhattan#
- ubcpdk.cells.crossing_manhattan()[source]#
Returns crossing_manhattan fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.crossing_manhattan()
c.plot()
(Source code
, png
, hires.png
, pdf
)

die#
- ubcpdk.cells.die(size=(440, 470), centered=False)[source]#
A die.
- Parameters:
size (tuple[float, float])
centered (bool)
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.die(size=(440, 470), centered=False)
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_BondPad#
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_BondPad()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_BondPad_75#
- ubcpdk.cells.ebeam_BondPad_75()[source]#
Returns ebeam_BondPad_75 fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_BondPad_75()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_DC_2m1_te895#
- ubcpdk.cells.ebeam_DC_2m1_te895()[source]#
Returns ebeam_DC_2m1_te895 fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_DC_2m1_te895()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_DC_te895#
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_DC_te895()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_MMI_2x2_5050_te1310#
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_MMI_2x2_5050_te1310()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_Polarizer_TM_1550_UQAM#
- ubcpdk.cells.ebeam_Polarizer_TM_1550_UQAM()[source]#
Returns ebeam_Polarizer_TM_1550_UQAM fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_Polarizer_TM_1550_UQAM()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_YBranch_895#
- ubcpdk.cells.ebeam_YBranch_895()[source]#
Returns ebeam_YBranch_895 fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_YBranch_895()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_YBranch_te1310#
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_YBranch_te1310()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_adiabatic_te1550#
- ubcpdk.cells.ebeam_adiabatic_te1550()[source]#
Returns ebeam_adiabatic_te1550 fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_adiabatic_te1550()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_adiabatic_tm1550#
- ubcpdk.cells.ebeam_adiabatic_tm1550()[source]#
Returns ebeam_adiabatic_tm1550 fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_adiabatic_tm1550()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_bdc_te1550#
- ubcpdk.cells.ebeam_bdc_te1550()[source]#
Returns ebeam_bdc_te1550 fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_bdc_te1550()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_bdc_tm1550#
- ubcpdk.cells.ebeam_bdc_tm1550()[source]#
Returns ebeam_bdc_tm1550 fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_bdc_tm1550()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_crossing4#
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_crossing4()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_dream_FAVE_SiN_1310_BB#
- ubcpdk.cells.ebeam_dream_FAVE_SiN_1310_BB()[source]#
Returns ebeam_dream_FAVE_SiN_1310_BB fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_dream_FAVE_SiN_1310_BB()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_dream_FAVE_SiN_1550_BB#
- ubcpdk.cells.ebeam_dream_FAVE_SiN_1550_BB()[source]#
Returns ebeam_dream_FAVE_SiN_1550_BB fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_dream_FAVE_SiN_1550_BB()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_dream_FAVE_Si_1310_BB#
- ubcpdk.cells.ebeam_dream_FAVE_Si_1310_BB()[source]#
Returns ebeam_dream_FAVE_Si_1310_BB fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_dream_FAVE_Si_1310_BB()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_dream_FAVE_Si_1550_BB#
- ubcpdk.cells.ebeam_dream_FAVE_Si_1550_BB()[source]#
Returns ebeam_dream_FAVE_Si_1550_BB fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_dream_FAVE_Si_1550_BB()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_dream_FaML_SiN_1550_BB#
- ubcpdk.cells.ebeam_dream_FaML_SiN_1550_BB()[source]#
Returns ebeam_dream_FaML_SiN_1550_BB fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_dream_FaML_SiN_1550_BB()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_dream_FaML_Si_1310_BB#
- ubcpdk.cells.ebeam_dream_FaML_Si_1310_BB()[source]#
Returns ebeam_dream_FaML_Si_1310_BB fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_dream_FaML_Si_1310_BB()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_dream_FaML_Si_1550_BB#
- ubcpdk.cells.ebeam_dream_FaML_Si_1550_BB()[source]#
Returns ebeam_dream_FaML_Si_1550_BB fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_dream_FaML_Si_1550_BB()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_dream_splitter_1x2_te1550_BB#
- ubcpdk.cells.ebeam_dream_splitter_1x2_te1550_BB()[source]#
Returns ebeam_dream_splitter_1x2_te1550_BB fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_dream_splitter_1x2_te1550_BB()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_gc_te1310#
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_gc_te1310()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_gc_te1310_broadband#
- ubcpdk.cells.ebeam_gc_te1310_broadband()[source]#
Returns ebeam_gc_te1310_broadband fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_gc_te1310_broadband()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_gc_te1550#
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_gc_te1550()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_gc_te1550_90nmSlab#
- ubcpdk.cells.ebeam_gc_te1550_90nmSlab()[source]#
Returns ebeam_gc_te1550_90nmSlab fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_gc_te1550_90nmSlab()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_gc_te1550_broadband#
- ubcpdk.cells.ebeam_gc_te1550_broadband()[source]#
Returns ebeam_gc_te1550_broadband fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_gc_te1550_broadband()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_gc_te895#
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_gc_te895()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_gc_tm1550#
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_gc_tm1550()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_routing_taper_te1550_w500nm_to_w3000nm_L20um#
- ubcpdk.cells.ebeam_routing_taper_te1550_w500nm_to_w3000nm_L20um()[source]#
Returns ebeam_routing_taper_te1550_w500nm_to_w3000nm_L20um fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_routing_taper_te1550_w500nm_to_w3000nm_L20um()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_routing_taper_te1550_w500nm_to_w3000nm_L40um#
- ubcpdk.cells.ebeam_routing_taper_te1550_w500nm_to_w3000nm_L40um()[source]#
Returns ebeam_routing_taper_te1550_w500nm_to_w3000nm_L40um fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_routing_taper_te1550_w500nm_to_w3000nm_L40um()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_sin_dream_splitter1x2_te1550_BB#
- ubcpdk.cells.ebeam_sin_dream_splitter1x2_te1550_BB()[source]#
Returns ebeam_sin_dream_splitter1x2_te1550_BB fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_sin_dream_splitter1x2_te1550_BB()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_splitter_adiabatic_swg_te1550#
- ubcpdk.cells.ebeam_splitter_adiabatic_swg_te1550()[source]#
Returns ebeam_splitter_adiabatic_swg_te1550 fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_splitter_adiabatic_swg_te1550()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_splitter_swg_assist_te1310#
- ubcpdk.cells.ebeam_splitter_swg_assist_te1310()[source]#
Returns ebeam_splitter_swg_assist_te1310 fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_splitter_swg_assist_te1310()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_splitter_swg_assist_te1310_ANT#
- ubcpdk.cells.ebeam_splitter_swg_assist_te1310_ANT()[source]#
Returns ebeam_splitter_swg_assist_te1310_ANT fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_splitter_swg_assist_te1310_ANT()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_splitter_swg_assist_te1550#
- ubcpdk.cells.ebeam_splitter_swg_assist_te1550()[source]#
Returns ebeam_splitter_swg_assist_te1550 fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_splitter_swg_assist_te1550()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_splitter_swg_assist_te1550_ANT#
- ubcpdk.cells.ebeam_splitter_swg_assist_te1550_ANT()[source]#
Returns ebeam_splitter_swg_assist_te1550_ANT fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_splitter_swg_assist_te1550_ANT()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_swg_edgecoupler#
- ubcpdk.cells.ebeam_swg_edgecoupler()[source]#
Returns ebeam_swg_edgecoupler fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_swg_edgecoupler()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_terminator_SiN_1310#
- ubcpdk.cells.ebeam_terminator_SiN_1310()[source]#
Returns ebeam_terminator_SiN_1310 fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_terminator_SiN_1310()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_terminator_SiN_1550#
- ubcpdk.cells.ebeam_terminator_SiN_1550()[source]#
Returns ebeam_terminator_SiN_1550 fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_terminator_SiN_1550()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_terminator_SiN_te895#
- ubcpdk.cells.ebeam_terminator_SiN_te895()[source]#
Returns ebeam_terminator_SiN_te895 fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_terminator_SiN_te895()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_terminator_te1310#
- ubcpdk.cells.ebeam_terminator_te1310()[source]#
Returns ebeam_terminator_te1310 fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_terminator_te1310()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_terminator_te1550#
- ubcpdk.cells.ebeam_terminator_te1550()[source]#
Returns ebeam_terminator_te1550 fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_terminator_te1550()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_terminator_tm1550#
- ubcpdk.cells.ebeam_terminator_tm1550()[source]#
Returns ebeam_terminator_tm1550 fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_terminator_tm1550()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_y_1310#
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_y_1310()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_y_1550#
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_y_1550()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_y_adiabatic#
- ubcpdk.cells.ebeam_y_adiabatic()[source]#
Returns ebeam_y_adiabatic fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_y_adiabatic()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_y_adiabatic_1310#
- ubcpdk.cells.ebeam_y_adiabatic_1310()[source]#
Returns ebeam_y_adiabatic_1310 fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_y_adiabatic_1310()
c.plot()
(Source code
, png
, hires.png
, pdf
)

ebeam_y_adiabatic_500pin#
- ubcpdk.cells.ebeam_y_adiabatic_500pin()[source]#
Returns ebeam_y_adiabatic_500pin fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ebeam_y_adiabatic_500pin()
c.plot()
(Source code
, png
, hires.png
, pdf
)

grating_coupler_elliptical#
- ubcpdk.cells.grating_coupler_elliptical(wavelength=1.55, grating_line_width=0.315, cross_section='strip')[source]#
A grating coupler with curved but parallel teeth.
- Parameters:
wavelength (float) – the center wavelength for which the grating is designed
grating_line_width – the line width of the grating
cross_section – a cross section or its name or a function generating a cross section.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.grating_coupler_elliptical(wavelength=1.55, grating_line_width=0.315, cross_section='strip')
c.plot()
(Source code
, png
, hires.png
, pdf
)

import_gds#
- ubcpdk.cells.import_gds(gdspath, cellname=None, port_type='optical', layer_pin=<LayerMapUbc.PORT: 35>, layer_port=<LayerMapUbc.WG: 1>, post_process=None, convert_paths_to_polygons=True, auto_rename_ports=True)[source]#
Returns klayout cell from GDS.
- Parameters:
gdspath (str | Path) – path to gds.
cellname (str | None) – cell name. If None uses top cell.
port_type – port type.
layer_pin – layer where pins are drawn.
layer_port – layer where ports are drawn.
post_process (Callable[[Component], Component] | None) – function to apply to component after import.
convert_paths_to_polygons (bool) – convert paths to polygons.
auto_rename_ports (bool) – rename ports.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.import_gds(port_type='optical', layer_pin=<LayerMapUbc.PORT: 35>, layer_port=<LayerMapUbc.WG: 1>, convert_paths_to_polygons=True, auto_rename_ports=True)
c.plot()
metal_via#
from ubcpdk import PDK, cells
PDK.activate()
c = cells.metal_via()
c.plot()
(Source code
, png
, hires.png
, pdf
)

mmi1x2#
- ubcpdk.cells.mmi1x2(width=None, width_taper=1.5, length_taper=20.0, length_mmi=31.0, width_mmi=6.0, gap_mmi=1.64, cross_section='strip')[source]#
An mmi1x2.
An mmi1x2 is a splitter that splits a single input to two outputs
- Parameters:
width (float | None) – the width of the waveguides connecting at the mmi ports.
width_taper (float) – the width at the base of the mmi body.
length_taper (float) – the length of the tapers going towards the mmi body.
length_mmi (float) – the length of the mmi body.
width_mmi (float) – the width of the mmi body.
gap_mmi (float) – the gap between the tapers at the mmi body.
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – a cross section or its name or a function generating a cross section.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.mmi1x2(width_taper=1.5, length_taper=20.0, length_mmi=31.0, width_mmi=6.0, gap_mmi=1.64, cross_section='strip')
c.plot()
(Source code
, png
, hires.png
, pdf
)

mmi2x2#
- ubcpdk.cells.mmi2x2(width=None, width_taper=1.5, length_taper=20.0, length_mmi=42.5, width_mmi=6.0, gap_mmi=0.5, cross_section='strip')[source]#
An mmi2x2.
An mmi2x2 is a 2x2 splitter
- Parameters:
width (float | None) – the width of the waveguides connecting at the mmi ports
width_taper (float) – the width at the base of the mmi body
length_taper (float) – the length of the tapers going towards the mmi body
length_mmi (float) – the length of the mmi body
width_mmi (float) – the width of the mmi body
gap_mmi (float) – the gap between the tapers at the mmi body
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – a cross section or its name or a function generating a cross section.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.mmi2x2(width_taper=1.5, length_taper=20.0, length_mmi=42.5, width_mmi=6.0, gap_mmi=0.5, cross_section='strip')
c.plot()
(Source code
, png
, hires.png
, pdf
)

mzi#
- ubcpdk.cells.mzi(delta_length=10, bend='bend_euler', straight='straight', splitter='coupler', combiner=None, port_e1_splitter='o3', port_e0_splitter='o4', port_e1_combiner='o3', port_e0_combiner='o4', cross_section='strip')[source]#
Mzi.
- Parameters:
delta_length (float) – bottom arm vertical extra length.
bend (str | Callable[[...], Component] | dict[str, Any] | DKCell) – 90 degrees bend library.
straight (str | Callable[[...], Component] | dict[str, Any] | DKCell) – straight function.
splitter (str | Callable[[...], Component] | dict[str, Any] | DKCell) – splitter function.
combiner (str | Callable[[...], Component] | dict[str, Any] | DKCell | None) – combiner function.
port_e1_splitter (str) – east top splitter port.
port_e0_splitter (str) – east bot splitter port.
port_e1_combiner (str) – east top combiner port.
port_e0_combiner (str) – east bot combiner port.
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – for routing (sxtop/sxbot to combiner).
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.mzi(delta_length=10, bend='bend_euler', straight='straight', splitter='coupler', port_e1_splitter='o3', port_e0_splitter='o4', port_e1_combiner='o3', port_e0_combiner='o4', cross_section='strip')
c.plot()
(Source code
, png
, hires.png
, pdf
)

mzi_1x1#
- ubcpdk.cells.mzi_1x1(delta_length=10, bend='bend_euler', straight='straight', splitter='ebeam_y_1550', combiner=None, port_e1_splitter='o2', port_e0_splitter='o3', port_e1_combiner='o2', port_e0_combiner='o3', cross_section='strip')[source]#
Mzi.
- Parameters:
delta_length (float) – bottom arm vertical extra length.
bend (str | Callable[[...], Component] | dict[str, Any] | DKCell) – 90 degrees bend library.
straight (str | Callable[[...], Component] | dict[str, Any] | DKCell) – straight function.
splitter (str | Callable[[...], Component] | dict[str, Any] | DKCell) – splitter function.
combiner (str | Callable[[...], Component] | dict[str, Any] | DKCell | None) – combiner function.
port_e1_splitter (str) – east top splitter port.
port_e0_splitter (str) – east bot splitter port.
port_e1_combiner (str) – east top combiner port.
port_e0_combiner (str) – east bot combiner port.
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – for routing (sxtop/sxbot to combiner).
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.mzi_1x1(delta_length=10, bend='bend_euler', straight='straight', splitter='ebeam_y_1550', port_e1_splitter='o2', port_e0_splitter='o3', port_e1_combiner='o2', port_e0_combiner='o3', cross_section='strip')
c.plot()
(Source code
, png
, hires.png
, pdf
)

mzi_heater#
- ubcpdk.cells.mzi_heater(delta_length=10, length_x=200, splitter='ebeam_y_1550', straight_x_top='straight_heater_metal', **kwargs)[source]#
Mzi with heater on the bottom arm.
- Parameters:
length_x (float) – horizontal length of the top arm (with heater).
delta_length (float) – bottom arm vertical extra length.
splitter (str | Callable[[...], Component] | dict[str, Any] | DKCell) – splitter function.
straight_x_top (str | Callable[[...], Component] | dict[str, Any] | DKCell) – straight function for the top arm (with heater).
kwargs – other arguments for mzi.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.mzi_heater(delta_length=10, length_x=200, splitter='ebeam_y_1550', straight_x_top='straight_heater_metal')
c.plot()
(Source code
, png
, hires.png
, pdf
)

mzi_heater_2x2#
- ubcpdk.cells.mzi_heater_2x2(delta_length=10, length_x=200, splitter='mmi2x2', combiner='mmi2x2', straight_x_top='straight_heater_metal', **kwargs)[source]#
Mzi 2x2 with heater on the top arm.
- Parameters:
length_x (float) – horizontal length of the top arm (with heater).
delta_length (float) – bottom arm vertical extra length.
splitter (str | Callable[[...], Component] | dict[str, Any] | DKCell) – splitter function.
combiner (str | Callable[[...], Component] | dict[str, Any] | DKCell) – combiner function.
straight_x_top (str | Callable[[...], Component] | dict[str, Any] | DKCell) – straight function for the top arm (with heater).
kwargs – other arguments for mzi.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.mzi_heater_2x2(delta_length=10, length_x=200, splitter='mmi2x2', combiner='mmi2x2', straight_x_top='straight_heater_metal')
c.plot()
(Source code
, png
, hires.png
, pdf
)

pack_doe#
- ubcpdk.cells.pack_doe(doe, settings, do_permutations=False, function=None, **kwargs)[source]#
Packs a component DOE (Design of Experiment) using pack.
- Parameters:
doe (str | Callable[[...], Component] | dict[str, Any] | DKCell) – function to return Components.
settings (dict[str, tuple[Any, ...]]) – component settings.
do_permutations (bool) – for each setting.
function (str | Callable[[...], Component] | dict[str, Any] | None) – to apply (add padding, grating couplers).
kwargs – for pack.
- Keyword Arguments:
spacing – Minimum distance between adjacent shapes.
aspect_ratio – (width, height) ratio of the rectangular bin.
max_size – Limits the size into which the shapes will be packed.
sort_by_area – Pre-sorts the shapes by area.
density – Values closer to 1 pack tighter but require more computation.
precision – Desired precision for rounding vertex coordinates.
text – Optional function to add text labels.
text_prefix – for labels. For example. ‘A’ for ‘A1’, ‘A2’…
text_offsets – relative to component size info anchor. Defaults to center.
text_anchors – relative to component (ce cw nc ne nw sc se sw center cc).
name_prefix – for each packed component (avoids the Unnamed cells warning). Note that the suffix contains a uuid so the name will not be deterministic.
rotation – for each component in degrees.
h_mirror – horizontal mirror in y axis (x, 1) (1, 0). This is the most common.
v_mirror – vertical mirror using x axis (1, y) (0, y).
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.pack_doe(do_permutations=False)
c.plot()
pack_doe_grid#
- ubcpdk.cells.pack_doe_grid(doe, settings, do_permutations=False, function=None, with_text=False, **kwargs)[source]#
Packs a component DOE (Design of Experiment) using grid.
- Parameters:
doe (str | Callable[[...], Component] | dict[str, Any] | DKCell) – function to return Components.
settings (dict[str, tuple[Any, ...]]) – component settings.
do_permutations (bool) – for each setting.
function (str | Callable[[...], Component] | dict[str, Any] | None) – to apply to component (add padding, grating couplers).
with_text (bool) – includes text label.
kwargs – for grid.
- Keyword Arguments:
spacing – between adjacent elements on the grid, can be a tuple for different distances in height and width.
separation – If True, guarantees elements are separated with fixed spacing if False, elements are spaced evenly along a grid.
shape – x, y shape of the grid (see np.reshape). If no shape and the list is 1D, if np.reshape were run with (1, -1).
align_x – {‘x’, ‘xmin’, ‘xmax’} for x (column) alignment along.
align_y – {‘y’, ‘ymin’, ‘ymax’} for y (row) alignment along.
edge_x – {‘x’, ‘xmin’, ‘xmax’} for x (column) (ignored if separation = True).
edge_y – {‘y’, ‘ymin’, ‘ymax’} for y (row) (ignored if separation = True).
rotation – for each component in degrees.
h_mirror – horizontal mirror y axis (x, 1) (1, 0). most common mirror.
v_mirror – vertical mirror using x axis (1, y) (0, y).
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.pack_doe_grid(do_permutations=False, with_text=False)
c.plot()
pad#
- ubcpdk.cells.pad(size=(90.0, 90.0), layer='MTOP', port_inclusion=0, port_orientation=0, port_orientations=(180, 90, 0, -90))[source]#
Returns rectangular pad with ports.
- Parameters:
size (tuple[float, float]) – x, y size.
layer (tuple[int, int] | str | int | LayerEnum) – pad layer.
bbox_layers – list of layers.
bbox_offsets – Optional offsets for each layer with respect to size. positive grows, negative shrinks the size.
port_inclusion (float) – from edge.
port_orientation (float) – in degrees.
port_orientations (tuple[int, ...] | list[int] | None)
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.pad(size=(90.0, 90.0), layer='MTOP', port_inclusion=0, port_orientation=0, port_orientations=(180, 90, 0, -90))
c.plot()
(Source code
, png
, hires.png
, pdf
)

pad_array#
- ubcpdk.cells.pad_array(pad='pad', columns=6, rows=1, column_pitch=125.0, row_pitch=125.0, port_orientation=270, size=None, layer=None, centered_ports=False, auto_rename_ports=False)[source]#
Returns 2D array of pads.
- Parameters:
pad (str | Callable[[...], Component] | dict[str, Any] | DKCell) – pad element.
columns (int) – number of columns.
rows (int) – number of rows.
column_pitch (float) – x pitch.
row_pitch (float) – y pitch.
port_orientation (float) – port orientation in deg. None for low speed DC ports.
size (tuple[float, float] | None) – pad size.
layer (tuple[int, int] | str | int | LayerEnum | None) – pad layer.
centered_ports (bool) – True add ports to center. False add ports to the edge.
auto_rename_ports (bool) – True to auto rename ports.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.pad_array(pad='pad', columns=6, rows=1, column_pitch=125.0, row_pitch=125.0, port_orientation=270, centered_ports=False, auto_rename_ports=False)
c.plot()
(Source code
, png
, hires.png
, pdf
)

pbs_1550_eskid#
from ubcpdk import PDK, cells
PDK.activate()
c = cells.pbs_1550_eskid()
c.plot()
(Source code
, png
, hires.png
, pdf
)

photonic_wirebond_surfacetaper_1310#
- ubcpdk.cells.photonic_wirebond_surfacetaper_1310()[source]#
Returns photonic_wirebond_surfacetaper_1310 fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.photonic_wirebond_surfacetaper_1310()
c.plot()
(Source code
, png
, hires.png
, pdf
)

photonic_wirebond_surfacetaper_1550#
- ubcpdk.cells.photonic_wirebond_surfacetaper_1550()[source]#
Returns photonic_wirebond_surfacetaper_1550 fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.photonic_wirebond_surfacetaper_1550()
c.plot()
(Source code
, png
, hires.png
, pdf
)

rectangle#
- ubcpdk.cells.rectangle(size=(4, 2), layer='MTOP', centered=False, port_type=None, port_orientations=(180, 90, 0, -90))[source]#
Returns a rectangle.
- Parameters:
size (tuple[float, float]) – (tuple) Width and height of rectangle.
layer (tuple[int, int] | str | int | LayerEnum) – Specific layer to put polygon geometry on.
centered (bool) – True sets center to (0, 0), False sets south-west to (0, 0).
port_type (str | None) – optical, electrical.
port_orientations (tuple[int, ...] | list[int] | None) – list of port_orientations to add. None adds no ports.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.rectangle(size=(4, 2), layer='MTOP', centered=False, port_orientations=(180, 90, 0, -90))
c.plot()
(Source code
, png
, hires.png
, pdf
)

ring_double#
- ubcpdk.cells.ring_double(gap=0.2, gap_top=None, gap_bot=None, radius=10.0, length_x=0.01, length_y=0.01, cross_section='strip', length_extension=10.0)[source]#
Returns a double bus ring.
two couplers (ct: top, cb: bottom) connected with two vertical straights (sl: left, sr: right)
- Parameters:
gap (float) – gap between for coupler.
gap_top (float | None) – gap for the top coupler. Defaults to gap.
gap_bot (float | None) – gap for the bottom coupler. Defaults to gap.
radius (float) – for the bend and coupler.
length_x (float) – ring coupler length.
length_y (float) – vertical straight length.
bend – 90 degrees bend spec.
straight – straight spec.
coupler_ring – ring coupler spec.
coupler_ring_top – top ring coupler spec. Defaults to coupler_ring.
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – cross_section spec.
length_extension (float) – straight length extension at the end of the coupler bottom ports.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ring_double(gap=0.2, radius=10.0, length_x=0.01, length_y=0.01, cross_section='strip', length_extension=10.0)
c.plot()
(Source code
, png
, hires.png
, pdf
)

ring_double_heater#
- ubcpdk.cells.ring_double_heater(gap=0.2, gap_top=None, gap_bot=None, radius=10.0, length_x=2.0, length_y=0.01, coupler_ring='coupler_ring', coupler_ring_top=None, straight='straight', bend='bend_euler', cross_section_heater='heater_metal', cross_section_waveguide_heater='strip_heater_metal', cross_section='strip', via_stack='via_stack_heater_mtop', port_orientation=None, via_stack_offset=(1, 0), via_stack_size=(4, 4), length_extension=None)[source]#
Returns a double bus ring with heater on top.
two couplers (ct: top, cb: bottom) connected with two vertical straights (sl: left, sr: right)
- Parameters:
gap (float) – gap between for coupler.
gap_top (float | None) – gap for the top coupler. Defaults to gap.
gap_bot (float | None) – gap for the bottom coupler. Defaults to gap.
radius (float) – for the bend and coupler.
length_x (float) – ring coupler length.
length_y (float) – vertical straight length.
coupler_ring (str | Callable[[...], Component] | dict[str, Any] | DKCell) – ring coupler spec.
coupler_ring_top (str | Callable[[...], Component] | dict[str, Any] | DKCell | None) – ring coupler spec for coupler away from vias (defaults to coupler_ring)
straight (str | Callable[[...], Component] | dict[str, Any] | DKCell) – straight spec.
bend (str | Callable[[...], Component] | dict[str, Any] | DKCell) – bend spec.
cross_section_heater (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – for heater.
cross_section_waveguide_heater (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – for waveguide with heater.
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – for regular waveguide.
via_stack (str | Callable[[...], Component] | dict[str, Any] | DKCell) – for heater to routing metal.
port_orientation (float | None) – for electrical ports to promote from via_stack.
via_stack_size (tuple[float, float]) – size of via_stack.
via_stack_offset (tuple[float, float]) – x,y offset for via_stack.
with_drop – adds drop ports.
length_extension (float | None) – straight length extension at the end of the coupler bottom ports. None defaults to 3.0 + radius.
- Return type:
Component
o2──────▲─────────o3 │gap_top xx──────▼─────────xxx xxx xxx xxx xxx xx xxx x xxx xx xx▲ xx xx│length_y xx xx▼ xx xx xx length_x x xx ◄───────────────► x xx xxx xx xxx xxx──────▲─────────xxx │gap o1──────▼─────────o4
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ring_double_heater(gap=0.2, radius=10.0, length_x=2.0, length_y=0.01, coupler_ring='coupler_ring', straight='straight', bend='bend_euler', cross_section_heater='heater_metal', cross_section_waveguide_heater='strip_heater_metal', cross_section='strip', via_stack='via_stack_heater_mtop', via_stack_offset=(1, 0), via_stack_size=(4, 4))
c.plot()
(Source code
, png
, hires.png
, pdf
)

ring_single#
- ubcpdk.cells.ring_single(gap=0.2, radius=10.0, length_x=4.0, length_y=0.6, cross_section='strip', length_extension=10.0)[source]#
Returns a single ring.
ring coupler (cb: bottom) connects to two vertical straights (sl: left, sr: right), two bends (bl, br) and horizontal straight (wg: top)
- Parameters:
gap (float) – gap between for coupler.
radius (float) – for the bend and coupler.
length_x (float) – ring coupler length.
length_y (float) – vertical straight length.
coupler_ring – ring coupler spec.
bend – 90 degrees bend spec.
straight – straight spec.
coupler_ring – ring coupler spec.
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – cross_section spec.
length_extension (float) – straight length extension at the end of the coupler bottom ports.
- Return type:
Component
xxxxxxxxxxxxx xxxxx xxxx xxx xxx xxx xxx xx xxx x xxx xx xx▲ xx xx│length_y xx xx▼ xx xx xx length_x x xx ◄───────────────► x xx xxx xx xxx xxx──────▲─────────xxx │gap o1──────▼─────────o2
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ring_single(gap=0.2, radius=10.0, length_x=4.0, length_y=0.6, cross_section='strip', length_extension=10.0)
c.plot()
(Source code
, png
, hires.png
, pdf
)

ring_single_heater#
- ubcpdk.cells.ring_single_heater(gap=0.2, radius=10.0, length_x=2.0, length_y=0.01, coupler_ring='coupler_ring', coupler_ring_top=None, straight='straight', bend='bend_euler', cross_section_heater='heater_metal', cross_section_waveguide_heater='strip_heater_metal', cross_section='strip', via_stack='via_stack_heater_mtop', port_orientation=None, via_stack_offset=(1, 0), via_stack_size=(4, 4), length_extension=None)[source]#
Returns a double bus ring with heater on top.
two couplers (ct: top, cb: bottom) connected with two vertical straights (sl: left, sr: right)
- Parameters:
gap (float) – gap between for coupler.
gap_top – gap for the top coupler. Defaults to gap.
gap_bot – gap for the bottom coupler. Defaults to gap.
radius (float) – for the bend and coupler.
length_x (float) – ring coupler length.
length_y (float) – vertical straight length.
coupler_ring (str | Callable[[...], Component] | dict[str, Any] | DKCell) – ring coupler spec.
coupler_ring_top (str | Callable[[...], Component] | dict[str, Any] | DKCell | None) – ring coupler spec for coupler away from vias (defaults to coupler_ring)
straight (str | Callable[[...], Component] | dict[str, Any] | DKCell) – straight spec.
bend (str | Callable[[...], Component] | dict[str, Any] | DKCell) – bend spec.
cross_section_heater (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – for heater.
cross_section_waveguide_heater (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – for waveguide with heater.
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – for regular waveguide.
via_stack (str | Callable[[...], Component] | dict[str, Any] | DKCell) – for heater to routing metal.
port_orientation (float | None) – for electrical ports to promote from via_stack.
via_stack_size (tuple[float, float]) – size of via_stack.
via_stack_offset (tuple[float, float]) – x,y offset for via_stack.
with_drop – adds drop ports.
length_extension (float | None) – straight length extension at the end of the coupler bottom ports. None defaults to 3.0 + radius.
- Return type:
Component
xxx xx xxx xxx xxx xxx xxx xxx xx xxx x xxx xx xx▲ xx xx│length_y xx xx▼ xx xx xx length_x x xx ◄───────────────► x xx xxx xx xxx xxx──────▲─────────xxx │gap o1──────▼─────────o4
from ubcpdk import PDK, cells
PDK.activate()
c = cells.ring_single_heater(gap=0.2, radius=10.0, length_x=2.0, length_y=0.01, coupler_ring='coupler_ring', straight='straight', bend='bend_euler', cross_section_heater='heater_metal', cross_section_waveguide_heater='strip_heater_metal', cross_section='strip', via_stack='via_stack_heater_mtop', via_stack_offset=(1, 0), via_stack_size=(4, 4))
c.plot()
(Source code
, png
, hires.png
, pdf
)

siepic_o_gc_te1270_BB#
- ubcpdk.cells.siepic_o_gc_te1270_BB()[source]#
Returns siepic_o_gc_te1270_BB fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.siepic_o_gc_te1270_BB()
c.plot()
(Source code
, png
, hires.png
, pdf
)

siepic_o_pwbstlas_si_BB#
- ubcpdk.cells.siepic_o_pwbstlas_si_BB()[source]#
Returns siepic_o_pwbstlas_si_BB fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.siepic_o_pwbstlas_si_BB()
c.plot()
(Source code
, png
, hires.png
, pdf
)

spiral#
- ubcpdk.cells.spiral(length=100, cross_section='strip', spacing=3, n_loops=6)[source]#
Returns a spiral double (spiral in, and then out).
- Parameters:
length (float) – length of the spiral straight section.
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – cross_section component.
spacing (float) – spacing between the spiral loops.
n_loops (int) – number of loops.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.spiral(length=100, cross_section='strip', spacing=3, n_loops=6)
c.plot()
(Source code
, png
, hires.png
, pdf
)

spiral_racetrack#
- ubcpdk.cells.spiral_racetrack(min_radius=None, straight_length=20.0, spacings=(2, 2, 3, 3, 2, 2), straight='straight', bend='bend_euler', bend_s='bend_s', cross_section='strip', cross_section_s=None, extra_90_deg_bend=False, allow_min_radius_violation=False)[source]#
Returns Racetrack-Spiral.
- Parameters:
min_radius (float | None) – smallest radius in um.
straight_length (float) – length of the straight segments in um.
spacings (Sequence[float]) – space between the center of neighboring waveguides in um.
straight (str | Callable[[...], Component] | dict[str, Any] | DKCell) – factory to generate the straight segments.
bend (str | Callable[[...], Component] | dict[str, Any] | DKCell) – factory to generate the bend segments.
bend_s (str | Callable[[...], Component] | dict[str, Any] | DKCell) – factory to generate the s-bend segments.
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – cross-section of the waveguides.
cross_section_s (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection | None) – cross-section of the s bend waveguide (optional).
extra_90_deg_bend (bool) – if True, we add an additional straight + 90 degree bent at the output, so the output port is looking down.
allow_min_radius_violation (bool) – if True, will allow the s-bend to have a smaller radius than the minimum radius.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.spiral_racetrack(straight_length=20.0, spacings=(2, 2, 3, 3, 2, 2), straight='straight', bend='bend_euler', bend_s='bend_s', cross_section='strip', extra_90_deg_bend=False, allow_min_radius_violation=False)
c.plot()
(Source code
, png
, hires.png
, pdf
)

spiral_racetrack_heater#
- ubcpdk.cells.spiral_racetrack_heater(spacing=4.0, num=8, straight_length=100, cross_section='strip')[source]#
Returns spiral racetrack with a heater above.
based on https://doi.org/10.1364/OL.400230 .
- Parameters:
spacing (float) – center to center spacing between the waveguides.
num (int) – number of spiral loops.
straight_length (float) – length of the straight segments.
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – cross_section.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.spiral_racetrack_heater(spacing=4.0, num=8, straight_length=100, cross_section='strip')
c.plot()
(Source code
, png
, hires.png
, pdf
)

straight#
- ubcpdk.cells.straight(length=10, cross_section='strip', width=None, npoints=2)[source]#
Returns a Straight waveguide.
- Parameters:
length (float) – straight length (um).
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – specification (CrossSection, string or dict).
width (float | None) – width of the waveguide. If None, it will use the width of the cross_section.
npoints (int) – number of points.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.straight(length=10, cross_section='strip', npoints=2)
c.plot()
(Source code
, png
, hires.png
, pdf
)

straight_heater_meander#
- ubcpdk.cells.straight_heater_meander(length=320.0, heater_width=2.5, spacing=2, cross_section='strip', layer_heater='M1_HEATER', via_stack='via_stack_heater_mtop', n=3, port_orientation1=None, port_orientation2=None, radius=None)[source]#
Returns a meander based heater.
based on SungWon Chung, Makoto Nakai, and Hossein Hashemi, Low-power thermo-optic silicon modulator for large-scale photonic integrated systems Opt. Express 27, 13430-13459 (2019) https://www.osapublishing.org/oe/abstract.cfm?URI=oe-27-9-13430
- Parameters:
length (float) – phase shifter length.
heater_width (float) – width of the heater.
spacing (float) – waveguide spacing (center to center).
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – for waveguide.
layer_heater (tuple[int, int] | str | int | LayerEnum) – for top heater, if None, it does not add a heater.
via_stack (str | Callable[[...], Component] | dict[str, Any] | DKCell | None) – for the heater to via_stack metal.
n (int | None) – number of meanders.
port_orientation1 (float | None) – orientation of the first port. None for all orientations.
port_orientation2 (float | None) – orientation of the second port. None for all orientations.
radius (float | None) – radius of the meander.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.straight_heater_meander(length=320.0, heater_width=2.5, spacing=2, cross_section='strip', layer_heater='M1_HEATER', via_stack='via_stack_heater_mtop', n=3)
c.plot()
(Source code
, png
, hires.png
, pdf
)

straight_heater_metal#
- ubcpdk.cells.straight_heater_metal(length=320.0, length_undercut_spacing=6.0, length_undercut=30.0, length_straight=0.1, length_straight_input=15.0, with_undercut=False, port_orientation1=None, port_orientation2=None, cross_section='strip')[source]#
Returns a thermal phase shifter.
dimensions from https://doi.org/10.1364/OE.27.010456
- Parameters:
length (float) – phase shifter length.
length_undercut_spacing (float) – spacing between the waveguide and the undercut.
length_undercut (float) – undercut length.
length_straight (float) – straight length.
length_straight_input (float) – straight length input.
with_undercut (bool) – isolation trenches for higher efficiency.
port_orientation1 (int | None) – orientation of the first port. None for all orientations.
port_orientation2 (int | None) – orientation of the second port. None for all orientations.
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – for waveguide.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.straight_heater_metal(length=320.0, length_undercut_spacing=6.0, length_undercut=30.0, length_straight=0.1, length_straight_input=15.0, with_undercut=False, cross_section='strip')
c.plot()
(Source code
, png
, hires.png
, pdf
)

straight_metal#
- ubcpdk.cells.straight_metal(length=10, cross_section='metal_routing', width=None)[source]#
Returns a Straight waveguide.
- Parameters:
length (float) – straight length (um).
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – specification (CrossSection, string or dict).
width (float | None) – width of the waveguide. If None, it will use the width of the cross_section.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.straight_metal(length=10, cross_section='metal_routing')
c.plot()
(Source code
, png
, hires.png
, pdf
)

taper#
- ubcpdk.cells.taper(length=10.0, width1=0.5, width2=None, cross_section='strip')[source]#
Linear taper, which tapers only the main cross section section.
- Parameters:
length (float) – taper length.
width1 (float) – width of the west/left port.
width2 (float | None) – width of the east/right port. Defaults to width1.
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – specification (CrossSection, string, CrossSectionFactory dict).
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.taper(length=10.0, width1=0.5, cross_section='strip')
c.plot()
(Source code
, png
, hires.png
, pdf
)

taper_SiN_750_3000#
- ubcpdk.cells.taper_SiN_750_3000()[source]#
Returns taper_SiN_750_3000 fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.taper_SiN_750_3000()
c.plot()
(Source code
, png
, hires.png
, pdf
)

taper_metal#
- ubcpdk.cells.taper_metal(length=10.0, width1=1.5, width2=None, cross_section='metal_routing')[source]#
Linear taper, which tapers only the main cross section section.
- Parameters:
length (float) – taper length.
width1 (float) – width of the west/left port.
width2 (float | None) – width of the east/right port. Defaults to width1.
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – specification (CrossSection, string, CrossSectionFactory dict).
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.taper_metal(length=10.0, width1=1.5, cross_section='metal_routing')
c.plot()
(Source code
, png
, hires.png
, pdf
)

taper_si_simm_1310#
- ubcpdk.cells.taper_si_simm_1310()[source]#
Returns taper_si_simm_1310 fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.taper_si_simm_1310()
c.plot()
(Source code
, png
, hires.png
, pdf
)

taper_si_simm_1550#
- ubcpdk.cells.taper_si_simm_1550()[source]#
Returns taper_si_simm_1550 fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.taper_si_simm_1550()
c.plot()
(Source code
, png
, hires.png
, pdf
)

text_rectangular#
- ubcpdk.cells.text_rectangular(text='abc', size=3, justify='left', layer='M2_ROUTER')[source]#
Pixel based font, guaranteed to be manhattan, without acute angles.
- Parameters:
text (str) – string.
size (float) – pixel size.
justify (str) – left, right or center.
layer (tuple[int, int] | str | int | LayerEnum) – for text.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.text_rectangular(text='abc', size=3, justify='left', layer='M2_ROUTER')
c.plot()
(Source code
, png
, hires.png
, pdf
)

text_rectangular_multi_layer#
- ubcpdk.cells.text_rectangular_multi_layer(text='abc', layers=('WG', 'M2_ROUTER'), text_factory='text_rectangular', **kwargs)[source]#
Returns rectangular text in different layers.
- Parameters:
text (str) – string of text.
layers (Sequence[tuple[int, int] | str | int | LayerEnum]) – list of layers to replicate the text.
text_factory (str | Callable[[...], Component] | dict[str, Any] | DKCell) – function to create the text Components.
kwargs (Any) – keyword arguments for text_factory.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.text_rectangular_multi_layer(text='abc', layers=('WG', 'M2_ROUTER'), text_factory='text_rectangular')
c.plot()
(Source code
, png
, hires.png
, pdf
)

thermal_phase_shifter_multimode#
- ubcpdk.cells.thermal_phase_shifter_multimode_()[source]#
Returns thermal_phase_shifters fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.thermal_phase_shifter_multimode_()
c.plot()
(Source code
, png
, hires.png
, pdf
)

thermal_phase_shifter_te_1310#
- ubcpdk.cells.thermal_phase_shifter_te_1310_()[source]#
Returns thermal_phase_shifters fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.thermal_phase_shifter_te_1310_()
c.plot()
(Source code
, png
, hires.png
, pdf
)

thermal_phase_shifter_te_1310_50#
- ubcpdk.cells.thermal_phase_shifter_te_1310_50()[source]#
Returns thermal_phase_shifters fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.thermal_phase_shifter_te_1310_50()
c.plot()
(Source code
, png
, hires.png
, pdf
)

thermal_phase_shifter_te_1550_50#
- ubcpdk.cells.thermal_phase_shifter_te_1550_50()[source]#
Returns thermal_phase_shifters fixed cell.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.thermal_phase_shifter_te_1550_50()
c.plot()
(Source code
, png
, hires.png
, pdf
)

via_stack_heater_mtop#
- ubcpdk.cells.via_stack_heater_mtop(size=(20.0, 10.0))[source]#
Rectangular via array stack.
You can use it to connect different metal layers or metals to silicon. You can use the naming convention via_stack_layerSource_layerDestination contains 4 ports (e1, e2, e3, e4)
also know as Via array http://www.vlsi-expert.com/2017/12/vias.html
- Parameters:
size (tuple[float, float]) – of the layers.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.via_stack_heater_mtop(size=(20.0, 10.0))
c.plot()
(Source code
, png
, hires.png
, pdf
)

wire_corner#
- ubcpdk.cells.wire_corner(cross_section='metal_routing', width=None)[source]#
Returns 45 degrees electrical corner wire.
- Parameters:
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – spec.
width (float | None) – optional width. Defaults to cross_section width.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.wire_corner(cross_section='metal_routing')
c.plot()
(Source code
, png
, hires.png
, pdf
)

wire_corner45#
- ubcpdk.cells.wire_corner45(cross_section='metal_routing', radius=10, width=None, layer=None, with_corner90_ports=True)[source]#
Returns 90 degrees electrical corner wire.
- Parameters:
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – spec.
radius (float) – ignored.
width (float | None) – optional width. Defaults to cross_section width.
layer (tuple[int, int] | str | int | LayerEnum | None) – ignored.
with_corner90_ports (bool) – if True, adds ports at 90 degrees.
- Return type:
Component
from ubcpdk import PDK, cells
PDK.activate()
c = cells.wire_corner45(cross_section='metal_routing', radius=10, with_corner90_ports=True)
c.plot()
(Source code
, png
, hires.png
, pdf
)
