# Picazzo Reference¶

This a alternative to the picazzo reference. Instead of offering the reference as seperate pages, this reference combines all information in 1 webpage. This results in a very big page, but the advantage is that it’s easily searchable/navigatable.

## Logical Blocks¶

### Coupler1x2¶

class picazzo3.logical.coupler.cell.Coupler1x2

A logical 1x2 reciprocal waveguide coupler.

Transmissions and reflections and backcoupling can be set using the properties to arbitrary values without any enforcement of passivity.

Properties dealing with transmission: straight_coupling1, straight_coupling2 Properties dealing with reflection: reflection_in1, reflection_out1, reflection_out2 Properties dealing with back coupling: back_coupling

The default behaviour of the coupler model assumes symmetry that allows the permutations (out_1 with out_2) in the first place. If your component uses this symmetry, properties only have to be specified for in and out_1, the ones relating to out_2 will be assuming this symmetry.

In the second place the coupler model assumes symmetry that allows the permutation of output ports with input ports.

Parameters
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
n_inputs: int and number > 0, locked

Number of input channels.

n_outputs: int and number > 0, locked

Number of output channels.

### Coupler2x1¶

class picazzo3.logical.coupler.cell.Coupler2x1

A logical 2x1 reciprocal waveguide coupler.

Transmissions and reflections and backcoupling can be set using the properties to arbitrary values without any enforcement of passivity.

Properties dealing with transmission: straight_coupling1, straight_coupling2 Properties dealing with reflection: reflection_out1, reflection_in1, reflection_in2 Properties dealing with back coupling: back_coupling

The default behaviour of the coupler model assumes symmetry that allows the permutations (in1 with in2) in the first place. If your component uses this symmetry, properties only have to be specified for in1 and out, the ones relating to in2 will be assuming this symmetry.

In the second place the coupler model assumes symmetry that allows the permutation of output ports with input ports.

Parameters
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
n_inputs: int and number > 0, locked

Number of input channels.

n_outputs: int and number > 0, locked

Number of output channels.

### Coupler2x2¶

class picazzo3.logical.coupler.cell.Coupler2x2

A logical 2x2 reciprocal waveguide coupler.

Transmissions and reflections and backcoupling can be set using the properties to arbitrary values without any enforcement of passivity.

Properties dealing with transmission: cross_coupling1, cross_coupling2, straight_coupling1, straight_coupling2 Properties dealing with reflection: reflection_in1, reflection_in2, reflection_out1, reflection_out2 Properties dealing with back coupling: back_coupling_in, back_coupling_out

The default behaviour of the coupler model assumes symmetry that allows the permutations (in_1 with in_2) and (out_1 with out_2) in the first place. If your component uses this symmetry, properties only have to be specified for in_1 and out_1, the ones relating to in_2 and out_2 will be assuming this symmetry.

In the second place the coupler model assumes symmetry that allows the permutation of output ports with input ports.

Parameters
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
n_inputs: int and number > 0, locked

Number of input channels.

n_outputs: int and number > 0, locked

Number of output channels.

### Reflector¶

class picazzo3.logical.reflector.cell.Reflector

Logical reflector: reflects a part of the light and passes on the rest

Parameters
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### WaveguideReflector¶

class picazzo3.logical.reflector.cell.WaveguideReflector

Zero-length waveguide reflector: calculates reflection based on the waveguide templates

Parameters
wg_template_in: PCell and _WaveguideTemplate

Waveguide template at the input

wg_template_out: PCell and _WaveguideTemplate

Waveguide template at the output

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### Termination¶

class picazzo3.logical.termination.cell.Termination

Logical component: a termination Has one input, no outputs. A reflectivity can be specified but defaults to 0.0 Use this to terminate terminals of PCells to avoid reflections and unconnected terms

Parameters
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### PerfectTermination¶

class picazzo3.logical.termination.cell.PerfectTermination

Logical component: a perfect termination Has one input, no outputs and does not reflect any signal. Use this to terminate terminals of PCells to avoid reflections and unconnected terms

Parameters
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

## Grating Couplers¶

### FiberCouplerCurvedGrating¶

class picazzo3.fibcoup.curved.cell.FiberCouplerCurvedGrating

Class for the definition of periodic curved fiber grating couplers with a focal point that fit in a box.

Parameters
grating: PCell

grating of this fiber coupler

inclination: float

out-of-plane angle of the grating coupler

start_trace_template: PCell and _WaveguideTemplate

start waveguide for the socket waveguide (narrow side)

wide_trace_template: PCell and _WaveguideTemplate

end waveguide for the socket waveguide (broad side)

socket: PCell and WgSocket

socket of the fiber coupler

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### FiberCouplerCurvedGratingGeneric¶

class picazzo3.fibcoup.curved.cell.FiberCouplerCurvedGratingGeneric

Class allowing the creating of generic fiber curved grating coupler. This class allows you to define each grating line individually as long as the grating lines themselves are ellipses.

Parameters
grating: PCell

grating of this fiber coupler

inclination: float

out-of-plane angle of the grating coupler

start_trace_template: PCell and _WaveguideTemplate

start waveguide for the socket waveguide (narrow side)

wide_trace_template: PCell and _WaveguideTemplate

end waveguide for the socket waveguide (broad side)

socket: PCell and WgSocket

socket of the fiber coupler

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### UniformLineGrating¶

class picazzo3.fibcoup.uniform.cell.UniformLineGrating

Uniform 1D fiber coupler grating consisting of identical grating lines, on a straight waveguide socket

Parameters
inclination: float

out-of-plane angle of the grating coupler

grating: PCell

grating of this fiber coupler

trace_template: PCell and _TraceTemplate

trace template for the socket waveguide

socket: PCell and WgSocket

socket of the fiber coupler

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### FiberCouplerGrating¶

class picazzo3.fibcoup.base.FiberCouplerGrating

Base class for fiber couplers which combine a grating on top of a socket.

The socket is the piece of waveguide, taper or slab on which the grating rests. The grating couples light between the plane (the socket) and the out-of-plane direction, to a fiber, lens or free space.

This cell should be used such that the inclination and angle of the port match the direction of peak transmission at the center wavelength specified in the circuitmodel, when light is incident from the vertical (through vertical_in) and couples to the out port

             *  "vertical_in"
*
*
inclination   / *
_/  _*  _   _
"in" _| |_| |_| |_| |_  ---> "out"

Parameters
grating: PCell

grating of this fiber coupler

inclination: float

out-of-plane angle of the grating coupler

socket: PCell and WgSocket

socket of the fiber coupler

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

## Ringresonators¶

### RingRect¶

class picazzo3.filters.ring.cell.RingRect

A Ring resonator consisting of a rounded rectangular trace.

You should specify the trace template for the ring and a shape

By default, this ring has no couplers. you can supply the couplers manually as a list of child cells through the property ‘couplers’, or you can subclass this PCell to define the couplers internally.

Parameters
ring_trace_template: PCell and _WaveguideTemplate

Trace template for the ring waveguide

couplers: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of coupler PCells

ring_segments: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of Ring PCells

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
ring_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

Trace templates for the ring segments. Locked, as there is only one segment in this Ring. Use ‘ring_trace_template’ instead.

### RingRect180DropFilter¶

class picazzo3.filters.ring.cell.RingRect180DropFilter

Rectangular ring filter with two straight access waveguide. This component is often called a channel drop filter. The access waveguides are placed north and south of the Ring

The ring shape is a rounded rectangle of which the bend radius can be specified, as well as the horizontal and vertical straight sections. it is also possible to specify the rounding algorithm of the bends.

The waveguide template of the ring and the couplers can be chosen independently.

Parameters
coupler_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of trace_templates for the ring couplers. By default the same template as the ring is taken

ring_trace_template: PCell and _WaveguideTemplate

Trace template for the ring waveguide

couplers: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of coupler PCells

ring_segments: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of Ring PCells

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
ring_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

Trace templates for the ring segments. Locked, as there is only one segment in this Ring. Use ‘ring_trace_template’ instead.

Examples

"""This example illustrates the basic ring resonator model without creating a layout.

It also illustrates the effect of resonance peak splitting due to back-reflection in the coupler.
"""
from technologies import silicon_photonics  # noqa: F401
import pylab as plt
import numpy as np

from picazzo3.filters.ring import RingRect180DropFilter

# To get an FSR of 10 nm at 1.55 um, we use the following formula
n_g = 2.86  # default value used in picazzo3, see TECH.PCELLS.WG.DEFAULT
L_fsr_10nm = 1.55**2 / (n_g * 0.01)

# 1. Define the ring
my_ring = RingRect180DropFilter(name="my_example_ring")

# coupler parameters
cp = {
"cross_coupling1": 1j * 0.0784**0.5,
"straight_coupling1": 0.9216**0.5,
"reflection_in1": 1j * 0.030,
}

my_ring_cm = my_ring.CircuitModel(
ring_length=L_fsr_10nm,  # we can manually specify the ring length
coupler_parameters=[cp, cp],  # 2 couplers
)

# 2. Simulate
wavelengths = np.linspace(1.54, 1.56, 2000)
R = my_ring_cm.get_smatrix(wavelengths=wavelengths)

# 3. Plot the results
plt.plot(wavelengths, np.abs(R["in1", "out1"]) ** 2, "b", label="pass")
plt.plot(wavelengths, np.abs(R["in1", "out2"]) ** 2, "g", label="drop")
plt.plot(wavelengths, np.abs(R["in1", "in2"]) ** 2, "r", label="add")
plt.legend()
plt.show()

"""This example illustrates a simulation of a single ring resonator model based on the
layout that is first generated."""
from technologies import silicon_photonics  # noqa: F401
import pylab as plt
import numpy as np

from picazzo3.filters.ring import RingRect180DropFilter

# 1. Define the ring
my_ring = RingRect180DropFilter(name="my_example_ring2")
my_ring.Layout(straights=(6.0, 0.0))

# set model in couplers and ring waveguides TODO: change the models
cp = {"delta_n_eff": 0.02}  # coupler parameters
for coupler in my_ring.couplers:
coupler.set_default_view(coupler.SimpleCircuitModel)  # based on delta_n_eff
for ring_wg in my_ring.ring_segments:
ring_wg.set_default_view(ring_wg.CircuitModel)  # based on the actual waveguide length

# ring model
my_ring_cm = my_ring.CircuitModel(coupler_parameters=[cp, cp])  # 2 couplers

# 2. Simulate
wavelengths = np.linspace(1.55, 1.58, 400)
R = my_ring_cm.get_smatrix(wavelengths=wavelengths)

# 3. Plot the results
plt.plot(wavelengths, np.abs(R["in1", "out1"]) ** 2, "b", label="pass")
plt.plot(wavelengths, np.abs(R["in1", "out2"]) ** 2, "g", label="drop")
plt.show()


### RingRoundedShape¶

class picazzo3.filters.ring.cell.RingRoundedShape

A ring resonator based on a rounded shape, without couplers.

The Layout takes a shape, and a trace template. The trace template is turned into a RoundedTraceTemplate with the user supplied bend_radius and rounding_algorithm.

By default, this ring has no couplers. you can supply the couplers manually as a list of child cells through the property ‘couplers’, or you can subclass this PCell to define the couplers internally.

Parameters
ring_trace_template: PCell and _WaveguideTemplate

Trace template for the ring waveguide

couplers: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of coupler PCells

ring_segments: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of Ring PCells

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
ring_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

Trace templates for the ring segments. Locked, as there is only one segment in this Ring. Use ‘ring_trace_template’ instead.

### RingRectNotchFilter¶

class picazzo3.filters.ring.cell.RingRectNotchFilter

Rectangular Ring resonator with one straight bus waveguide, which is placed on the South side of the ring. This type of filter is often called a ‘notch filter’ or ‘all-pass’ filter.

The ring shape is a rounded rectangle of which the bend radius can be specified, as well as the horizontal and vertical straight sections. it is also possible to specify the rounding algorithm of the bends.

The waveguide template of the ring and the couplers can be chosen independently.

Parameters
coupler_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of trace_templates for the ring couplers. By default the same template as the ring is taken

ring_trace_template: PCell and _WaveguideTemplate

Trace template for the ring waveguide

couplers: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of coupler PCells

ring_segments: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of Ring PCells

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
ring_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

Trace templates for the ring segments. Locked, as there is only one segment in this Ring. Use ‘ring_trace_template’ instead.

### RingRect180DropFilter¶

class picazzo3.filters.ring.cell.RingRect180DropFilter

Rectangular ring filter with two straight access waveguide. This component is often called a channel drop filter. The access waveguides are placed north and south of the Ring

The ring shape is a rounded rectangle of which the bend radius can be specified, as well as the horizontal and vertical straight sections. it is also possible to specify the rounding algorithm of the bends.

The waveguide template of the ring and the couplers can be chosen independently.

Parameters
coupler_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of trace_templates for the ring couplers. By default the same template as the ring is taken

ring_trace_template: PCell and _WaveguideTemplate

Trace template for the ring waveguide

couplers: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of coupler PCells

ring_segments: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of Ring PCells

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
ring_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

Trace templates for the ring segments. Locked, as there is only one segment in this Ring. Use ‘ring_trace_template’ instead.

Examples

"""This example illustrates the basic ring resonator model without creating a layout.

It also illustrates the effect of resonance peak splitting due to back-reflection in the coupler.
"""
from technologies import silicon_photonics  # noqa: F401
import pylab as plt
import numpy as np

from picazzo3.filters.ring import RingRect180DropFilter

# To get an FSR of 10 nm at 1.55 um, we use the following formula
n_g = 2.86  # default value used in picazzo3, see TECH.PCELLS.WG.DEFAULT
L_fsr_10nm = 1.55**2 / (n_g * 0.01)

# 1. Define the ring
my_ring = RingRect180DropFilter(name="my_example_ring")

# coupler parameters
cp = {
"cross_coupling1": 1j * 0.0784**0.5,
"straight_coupling1": 0.9216**0.5,
"reflection_in1": 1j * 0.030,
}

my_ring_cm = my_ring.CircuitModel(
ring_length=L_fsr_10nm,  # we can manually specify the ring length
coupler_parameters=[cp, cp],  # 2 couplers
)

# 2. Simulate
wavelengths = np.linspace(1.54, 1.56, 2000)
R = my_ring_cm.get_smatrix(wavelengths=wavelengths)

# 3. Plot the results
plt.plot(wavelengths, np.abs(R["in1", "out1"]) ** 2, "b", label="pass")
plt.plot(wavelengths, np.abs(R["in1", "out2"]) ** 2, "g", label="drop")
plt.plot(wavelengths, np.abs(R["in1", "in2"]) ** 2, "r", label="add")
plt.legend()
plt.show()

"""This example illustrates a simulation of a single ring resonator model based on the
layout that is first generated."""
from technologies import silicon_photonics  # noqa: F401
import pylab as plt
import numpy as np

from picazzo3.filters.ring import RingRect180DropFilter

# 1. Define the ring
my_ring = RingRect180DropFilter(name="my_example_ring2")
my_ring.Layout(straights=(6.0, 0.0))

# set model in couplers and ring waveguides TODO: change the models
cp = {"delta_n_eff": 0.02}  # coupler parameters
for coupler in my_ring.couplers:
coupler.set_default_view(coupler.SimpleCircuitModel)  # based on delta_n_eff
for ring_wg in my_ring.ring_segments:
ring_wg.set_default_view(ring_wg.CircuitModel)  # based on the actual waveguide length

# ring model
my_ring_cm = my_ring.CircuitModel(coupler_parameters=[cp, cp])  # 2 couplers

# 2. Simulate
wavelengths = np.linspace(1.55, 1.58, 400)
R = my_ring_cm.get_smatrix(wavelengths=wavelengths)

# 3. Plot the results
plt.plot(wavelengths, np.abs(R["in1", "out1"]) ** 2, "b", label="pass")
plt.plot(wavelengths, np.abs(R["in1", "out2"]) ** 2, "g", label="drop")
plt.show()


### RingRect90DropFilter¶

class picazzo3.filters.ring.cell.RingRect90DropFilter

Rectangular ring filter with two straight access waveguide. This component is often called a channel drop filter. The access waveguides are placed south and east of the Ring, at 90 degree angles.

The ring shape is a rounded rectangle of which the bend radius can be specified, as well as the horizontal and vertical straight sections. it is also possible to specify the rounding algorithm of the bends.

The waveguide template of the ring and the couplers can be chosen independently.

Parameters
coupler_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of trace_templates for the ring couplers. By default the same template as the ring is taken

ring_trace_template: PCell and _WaveguideTemplate

Trace template for the ring waveguide

couplers: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of coupler PCells

ring_segments: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of Ring PCells

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
ring_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

Trace templates for the ring segments. Locked, as there is only one segment in this Ring. Use ‘ring_trace_template’ instead.

### RingRectWrappedNotchFilter¶

class picazzo3.filters.ring.cell.RingRectWrappedNotchFilter

Rectangular Ring resonator with one bus waveguide, which is placed on the South side of the ring. This type of filter is often called a ‘notch filter’ or ‘all-pass’ filter. The shape of the bus waveguide follows conformally the outline of the ring.

The ring shape is a rounded rectangle of which the bend radius can be specified, as well as the horizontal and vertical straight sections. it is also possible to specify the rounding algorithm of the bends.

The waveguide template of the ring and the couplers can be chosen independently.

Parameters
coupler_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of trace_templates for the ring couplers. By default the same template as the ring is taken

ring_trace_template: PCell and _WaveguideTemplate

Trace template for the ring waveguide

couplers: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of coupler PCells

ring_segments: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of Ring PCells

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
ring_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

Trace templates for the ring segments. Locked, as there is only one segment in this Ring. Use ‘ring_trace_template’ instead.

### RingRectWrapped180DropFilter¶

class picazzo3.filters.ring.cell.RingRectWrapped180DropFilter

Rectangular ring filter with two access waveguides. This component is often called a channel drop filter. The access waveguides are placed north and south of the Ring. The shape of the bus waveguide follows conformally the outline of the ring.

The ring shape is a rounded rectangle of which the bend radius can be specified, as well as the horizontal and vertical straight sections. it is also possible to specify the rounding algorithm of the bends.

The waveguide template of the ring and the couplers can be chosen independently.

Parameters
coupler_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of trace_templates for the ring couplers. By default the same template as the ring is taken

ring_trace_template: PCell and _WaveguideTemplate

Trace template for the ring waveguide

couplers: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of coupler PCells

ring_segments: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of Ring PCells

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
ring_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

Trace templates for the ring segments. Locked, as there is only one segment in this Ring. Use ‘ring_trace_template’ instead.

### RingRectSymmNotchFilter¶

class picazzo3.filters.ring.cell.RingRectSymmNotchFilter

Rectangular Ring resonator with one bus waveguide, which is placed on the South side of the ring. This type of filter is often called a ‘notch filter’ or ‘all-pass’ filter. The shape of the bus waveguide mirrors the shape of the ring, which makes the coupling section symmetric.

The ring shape is a rounded rectangle of which the bend radius can be specified, as well as the horizontal and vertical straight sections. it is also possible to specify the rounding algorithm of the bends.

The waveguide template of the ring and the couplers can be chosen independently.

Parameters
coupler_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of trace_templates for the ring couplers. By default the same template as the ring is taken

ring_trace_template: PCell and _WaveguideTemplate

Trace template for the ring waveguide

couplers: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of coupler PCells

ring_segments: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of Ring PCells

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
ring_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

Trace templates for the ring segments. Locked, as there is only one segment in this Ring. Use ‘ring_trace_template’ instead.

### RingRectSymm180DropFilter¶

class picazzo3.filters.ring.cell.RingRectSymm180DropFilter

Rectangular ring filter with two access waveguide. This component is often called a channel drop filter. The access waveguides are placed north and south of the Ring. The shape of the bus waveguides mirrors the shape of the ring, which makes the coupling section symmetric.

The ring shape is a rounded rectangle of which the bend radius can be specified, as well as the horizontal and vertical straight sections. it is also possible to specify the rounding algorithm of the bends.

The waveguide template of the ring and the couplers can be chosen independently.

Parameters
coupler_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of trace_templates for the ring couplers. By default the same template as the ring is taken

ring_trace_template: PCell and _WaveguideTemplate

Trace template for the ring waveguide

couplers: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of coupler PCells

ring_segments: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of Ring PCells

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
ring_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

Trace templates for the ring segments. Locked, as there is only one segment in this Ring. Use ‘ring_trace_template’ instead.

### RingRectSymm90DropFilter¶

class picazzo3.filters.ring.cell.RingRectSymm90DropFilter

Rectangular ring filter with two access waveguide. This component is often called a channel drop filter. The access waveguides are placed south and east of the Ring, at 90 degree angles. The shape of the bus waveguides mirrors the shape of the ring, which makes the coupling section symmetric.

The ring shape is a rounded rectangle of which the bend radius can be specified, as well as the horizontal and vertical straight sections. it is also possible to specify the rounding algorithm of the bends.

The waveguide template of the ring and the couplers can be chosen independently.

Parameters
coupler_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of trace_templates for the ring couplers. By default the same template as the ring is taken

ring_trace_template: PCell and _WaveguideTemplate

Trace template for the ring waveguide

couplers: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of coupler PCells

ring_segments: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of Ring PCells

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
ring_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

Trace templates for the ring segments. Locked, as there is only one segment in this Ring. Use ‘ring_trace_template’ instead.

### RingRectSBendNotchFilter¶

class picazzo3.filters.ring.cell.RingRectSBendNotchFilter

Rectangular Ring resonator with one bus waveguide, which is placed on the South side of the ring. The shape of the bus waveguide bends away from the ring, and then again horizontally, with an S-bend.

The ring shape is a rounded rectangle of which the bend radius can be specified, as well as the horizontal and vertical straight sections. it is also possible to specify the rounding algorithm of the bends.

The waveguide template of the ring and the couplers can be chosen independently.

Parameters
coupler_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of trace_templates for the ring couplers. By default the same template as the ring is taken

ring_trace_template: PCell and _WaveguideTemplate

Trace template for the ring waveguide

couplers: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of coupler PCells

ring_segments: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of Ring PCells

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
ring_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

Trace templates for the ring segments. Locked, as there is only one segment in this Ring. Use ‘ring_trace_template’ instead.

### RingRectSBend180DropFilter¶

class picazzo3.filters.ring.cell.RingRectSBend180DropFilter

Rectangular ring filter with two access waveguides. This component is often called a channel drop filter. The access waveguides are placed north and south of the Ring. The shapes of the bus waveguides bends away from the ring, and then again horizontally, with an S-bend.

The ring shape is a rounded rectangle of which the bend radius can be specified, as well as the horizontal and vertical straight sections. it is also possible to specify the rounding algorithm of the bends.

The waveguide template of the ring and the couplers can be chosen independently.

Parameters
coupler_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of trace_templates for the ring couplers. By default the same template as the ring is taken

ring_trace_template: PCell and _WaveguideTemplate

Trace template for the ring waveguide

couplers: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of coupler PCells

ring_segments: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

list of Ring PCells

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
ring_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

Trace templates for the ring segments. Locked, as there is only one segment in this Ring. Use ‘ring_trace_template’ instead.

## Multi-mode Interferometers¶

### MMITapered¶

class picazzo3.filters.mmi.MMITapered

Rectangular multimode interferometer, generated from a waveguide template with tapers.

Parameters
input_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

List of the input trace templates.

mmi_trace_template: PCell and _WaveguideTemplate

Trace template used for the MMI section

output_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

List of the output trace templates.

transitions: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

List of transitions that is used on this MMI. By default Autotracetransition is used on all the transitions

trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

Template for all ports, defaults to TECH.PCELLS.WG.DEFAULT.When set to None, the waveguide templates of the ports will be used.

transition_database: AutoTransitionDatabase

AutoTransitionDatabase in which the correct transition between the two trace templates can be looked up.

port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to be processed. Set to None to process all ports.

external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
contents: PCell, locked

Contains the base MMI without the tapers

mmi_trace: PCell, locked

Trace of the MMI section

n_inputs: int and number > 0, locked

Number of input channels.

n_outputs: int and number > 0, locked

Number of output channels.

trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

list of templates to apply to all ports

### MMIIdenticalTapered¶

class picazzo3.filters.mmi.MMIIdenticalTapered

Rectangular multimode interferometer, generated from a trace template with identical input and output trace_templates and with tapers.

Parameters
input_trace_template: PCell

Input trace template.

n_inputs: int and number > 0

Number of input channels

n_outputs: int and number > 0

Number of output channels.

output_trace_template: PCell

Output trace template.

mmi_trace_template: PCell and _WaveguideTemplate

Trace template used for the MMI section

transitions: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

List of transitions that is used on this MMI. By default Autotracetransition is used on all the transitions

trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

Template for all ports, defaults to TECH.PCELLS.WG.DEFAULT.When set to None, the waveguide templates of the ports will be used.

transition_database: AutoTransitionDatabase

AutoTransitionDatabase in which the correct transition between the two trace templates can be looked up.

port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to be processed. Set to None to process all ports.

external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
input_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the input trace templates.

output_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the output trace templates.

contents: PCell, locked

Contains the base MMI without the tapers

mmi_trace: PCell, locked

Trace of the MMI section

trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

list of templates to apply to all ports

### MMISymmetricTapered¶

class picazzo3.filters.mmi.MMISymmetricTapered

MMI with symmetrically distributed access templates and with tapers. This is usually useful when the MMI is used a splitter or combiner.

Parameters
input_trace_template: PCell

Input trace template.

n_inputs: int and number > 0

Number of input channels

n_outputs: int and number > 0

Number of output channels.

output_trace_template: PCell

Output trace template.

mmi_trace_template: PCell and _WaveguideTemplate

Trace template used for the MMI section

transitions: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

List of transitions that is used on this MMI. By default Autotracetransition is used on all the transitions

trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

Template for all ports, defaults to TECH.PCELLS.WG.DEFAULT.When set to None, the waveguide templates of the ports will be used.

transition_database: AutoTransitionDatabase

AutoTransitionDatabase in which the correct transition between the two trace templates can be looked up.

port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to be processed. Set to None to process all ports.

external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
input_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the input trace templates.

output_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the output trace templates.

contents: PCell, locked

Contains the base MMI without the tapers

mmi_trace: PCell, locked

Trace of the MMI section

trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

list of templates to apply to all ports

### MMI1x2Tapered¶

class picazzo3.filters.mmi.MMI1x2Tapered

MMI with one access waveguide and two output waveguides and with tapers that symmetrically distributed. This is usually useful when the MMI is used as a splitter.

Parameters
input_trace_template: PCell

Input trace template.

output_trace_template: PCell

Output trace template.

mmi_trace_template: PCell and _WaveguideTemplate

Trace template used for the MMI section

transitions: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

List of transitions that is used on this MMI. By default Autotracetransition is used on all the transitions

trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

Template for all ports, defaults to TECH.PCELLS.WG.DEFAULT.When set to None, the waveguide templates of the ports will be used.

transition_database: AutoTransitionDatabase

AutoTransitionDatabase in which the correct transition between the two trace templates can be looked up.

port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to be processed. Set to None to process all ports.

external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
n_inputs: int and number > 0, locked

Number of input channels.

n_outputs: int and number > 0, locked

Number of output channels.

input_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the input trace templates.

output_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the output trace templates.

contents: PCell, locked

Contains the base MMI without the tapers

mmi_trace: PCell, locked

Trace of the MMI section

trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

list of templates to apply to all ports

### MMI2x1Tapered¶

class picazzo3.filters.mmi.MMI2x1Tapered

MMI with two access waveguides and one output waveguides and with tapers that symmetrically distributed. This is usually useful when the MMI is used as a combiner.

Parameters
input_trace_template: PCell

Input trace template.

output_trace_template: PCell

Output trace template.

mmi_trace_template: PCell and _WaveguideTemplate

Trace template used for the MMI section

transitions: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

List of transitions that is used on this MMI. By default Autotracetransition is used on all the transitions

trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

Template for all ports, defaults to TECH.PCELLS.WG.DEFAULT.When set to None, the waveguide templates of the ports will be used.

transition_database: AutoTransitionDatabase

AutoTransitionDatabase in which the correct transition between the two trace templates can be looked up.

port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to be processed. Set to None to process all ports.

external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
n_inputs: int and number > 0, locked

Number of input channels.

n_outputs: int and number > 0, locked

Number of output channels.

input_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the input trace templates.

output_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the output trace templates.

contents: PCell, locked

Contains the base MMI without the tapers

mmi_trace: PCell, locked

Trace of the MMI section

trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

list of templates to apply to all ports

### MMI2x2Tapered¶

class picazzo3.filters.mmi.MMI2x2Tapered

MMI with one access waveguide and two output waveguides and with tapers that symmetrically distributed. This is usually useful when the MMI is used as a 2x2 splitter or a crossing.

Parameters
input_trace_template: PCell

Input trace template.

output_trace_template: PCell

Output trace template.

mmi_trace_template: PCell and _WaveguideTemplate

Trace template used for the MMI section

transitions: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

List of transitions that is used on this MMI. By default Autotracetransition is used on all the transitions

trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

Template for all ports, defaults to TECH.PCELLS.WG.DEFAULT.When set to None, the waveguide templates of the ports will be used.

transition_database: AutoTransitionDatabase

AutoTransitionDatabase in which the correct transition between the two trace templates can be looked up.

port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to be processed. Set to None to process all ports.

external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
n_inputs: int and number > 0, locked

Number of input channels.

n_outputs: int and number > 0, locked

Number of output channels.

input_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the input trace templates.

output_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the output trace templates.

contents: PCell, locked

Contains the base MMI without the tapers

mmi_trace: PCell, locked

Trace of the MMI section

trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

list of templates to apply to all ports

### RibMMIIdenticalTapered¶

class picazzo3.filters.mmi_rib.RibMMIIdenticalTapered
Rectangular multimode interferometer, using a Ribwaveguide for the MMI with identical input and

output trace_templates and with tapers.

This MMI is basically built upon the regular tapered MMI using a RibWaveguide for the MMI section, but adds modifications intended to avoid sharp corners DRC errors with the tapers.

Parameters
input_trace_template: PCell

Input trace template.

n_inputs: int and number > 0

Number of input channels

n_outputs: int and number > 0

Number of output channels.

output_trace_template: PCell

Output trace template.

mmi_trace_template: PCell and _WaveguideTemplate

Trace template used for the MMI section

transitions: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

List of transitions that is used on this MMI. By default Autotracetransition is used on all the transitions

trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

Template for all ports, defaults to TECH.PCELLS.WG.DEFAULT.When set to None, the waveguide templates of the ports will be used.

transition_database: AutoTransitionDatabase

AutoTransitionDatabase in which the correct transition between the two trace templates can be looked up.

port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to be processed. Set to None to process all ports.

external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
input_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the input trace templates.

output_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the output trace templates.

contents: PCell, locked

Contains the base MMI without the tapers

mmi_trace: PCell, locked

Trace of the MMI section

trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

list of templates to apply to all ports

### RibMMISymmetricTapered¶

class picazzo3.filters.mmi_rib.RibMMISymmetricTapered

Rib MMI with symmetrically distributed access templates and with tapers.

Parameters
input_trace_template: PCell

Input trace template.

n_inputs: int and number > 0

Number of input channels

n_outputs: int and number > 0

Number of output channels.

output_trace_template: PCell

Output trace template.

mmi_trace_template: PCell and _WaveguideTemplate

Trace template used for the MMI section

transitions: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

List of transitions that is used on this MMI. By default Autotracetransition is used on all the transitions

trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

Template for all ports, defaults to TECH.PCELLS.WG.DEFAULT.When set to None, the waveguide templates of the ports will be used.

transition_database: AutoTransitionDatabase

AutoTransitionDatabase in which the correct transition between the two trace templates can be looked up.

port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to be processed. Set to None to process all ports.

external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
input_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the input trace templates.

output_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the output trace templates.

contents: PCell, locked

Contains the base MMI without the tapers

mmi_trace: PCell, locked

Trace of the MMI section

trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

list of templates to apply to all ports

### RibMMI1x2Tapered¶

class picazzo3.filters.mmi_rib.RibMMI1x2Tapered

Rib 1x2 MMI with symmetrically distributed access templates and with tapers.

Parameters
input_trace_template: PCell

Input trace template.

output_trace_template: PCell

Output trace template.

mmi_trace_template: PCell and _WaveguideTemplate

Trace template used for the MMI section

transitions: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

List of transitions that is used on this MMI. By default Autotracetransition is used on all the transitions

trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

Template for all ports, defaults to TECH.PCELLS.WG.DEFAULT.When set to None, the waveguide templates of the ports will be used.

transition_database: AutoTransitionDatabase

AutoTransitionDatabase in which the correct transition between the two trace templates can be looked up.

port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to be processed. Set to None to process all ports.

external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
n_inputs: int and number > 0, locked

Number of input channels.

n_outputs: int and number > 0, locked

Number of output channels.

input_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the input trace templates.

output_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the output trace templates.

contents: PCell, locked

Contains the base MMI without the tapers

mmi_trace: PCell, locked

Trace of the MMI section

trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

list of templates to apply to all ports

### RibMMI2x1Tapered¶

class picazzo3.filters.mmi_rib.RibMMI2x1Tapered

Rib 2x1 MMI with symmetrically distributed access templates and with tapers.

Parameters
input_trace_template: PCell

Input trace template.

output_trace_template: PCell

Output trace template.

mmi_trace_template: PCell and _WaveguideTemplate

Trace template used for the MMI section

transitions: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

List of transitions that is used on this MMI. By default Autotracetransition is used on all the transitions

trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

Template for all ports, defaults to TECH.PCELLS.WG.DEFAULT.When set to None, the waveguide templates of the ports will be used.

transition_database: AutoTransitionDatabase

AutoTransitionDatabase in which the correct transition between the two trace templates can be looked up.

port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to be processed. Set to None to process all ports.

external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
n_inputs: int and number > 0, locked

Number of input channels.

n_outputs: int and number > 0, locked

Number of output channels.

input_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the input trace templates.

output_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the output trace templates.

contents: PCell, locked

Contains the base MMI without the tapers

mmi_trace: PCell, locked

Trace of the MMI section

trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

list of templates to apply to all ports

### RibMMI2x2Tapered¶

class picazzo3.filters.mmi_rib.RibMMI2x2Tapered

Rib 2x2 MMI with symmetrically distributed access templates and with tapers.

Parameters
input_trace_template: PCell

Input trace template.

output_trace_template: PCell

Output trace template.

mmi_trace_template: PCell and _WaveguideTemplate

Trace template used for the MMI section

transitions: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

List of transitions that is used on this MMI. By default Autotracetransition is used on all the transitions

trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

Template for all ports, defaults to TECH.PCELLS.WG.DEFAULT.When set to None, the waveguide templates of the ports will be used.

transition_database: AutoTransitionDatabase

AutoTransitionDatabase in which the correct transition between the two trace templates can be looked up.

port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to be processed. Set to None to process all ports.

external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
n_inputs: int and number > 0, locked

Number of input channels.

n_outputs: int and number > 0, locked

Number of output channels.

input_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the input trace templates.

output_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the output trace templates.

contents: PCell, locked

Contains the base MMI without the tapers

mmi_trace: PCell, locked

Trace of the MMI section

trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

list of templates to apply to all ports

### MMI¶

class picazzo3.filters.mmi.MMI

Rectangular multimode interferometer, generated from a waveguide template

Parameters
input_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

List of the input trace templates.

mmi_trace_template: PCell and _WaveguideTemplate

Trace template used for the MMI section

output_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

List of the output trace templates.

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
mmi_trace: PCell, locked

Trace of the MMI section

n_inputs: int and number > 0, locked

Number of input channels.

n_outputs: int and number > 0, locked

Number of output channels.

### MMIIdentical¶

class picazzo3.filters.mmi.MMIIdentical

Rectangular multimode interferometer, generated from a trace template with identical input and output trace_templates.

Parameters
input_trace_template: PCell

Input trace template.

n_inputs: int and number > 0

Number of input channels

n_outputs: int and number > 0

Number of output channels.

output_trace_template: PCell

Output trace template.

mmi_trace_template: PCell and _WaveguideTemplate

Trace template used for the MMI section

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
input_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the input trace templates.

output_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the output trace templates.

mmi_trace: PCell, locked

Trace of the MMI section

### MMISymmetric¶

class picazzo3.filters.mmi.MMISymmetric

MMI with symmetrically distributed access templates. This is usually useful when the MMI is used a splitter or combiner.

Parameters
input_trace_template: PCell

Input trace template.

n_inputs: int and number > 0

Number of input channels

n_outputs: int and number > 0

Number of output channels.

output_trace_template: PCell

Output trace template.

mmi_trace_template: PCell and _WaveguideTemplate

Trace template used for the MMI section

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
input_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the input trace templates.

output_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the output trace templates.

mmi_trace: PCell, locked

Trace of the MMI section

### MMI1x2¶

class picazzo3.filters.mmi.MMI1x2

MMI with one access waveguide and two output waveguides that symmetrically distributed. This is usually useful when the MMI is used as a splitter.

Parameters
input_trace_template: PCell

Input trace template.

output_trace_template: PCell

Output trace template.

mmi_trace_template: PCell and _WaveguideTemplate

Trace template used for the MMI section

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
n_inputs: int and number > 0, locked

Number of input channels.

n_outputs: int and number > 0, locked

Number of output channels.

input_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the input trace templates.

output_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the output trace templates.

mmi_trace: PCell, locked

Trace of the MMI section

### MMI2x1¶

class picazzo3.filters.mmi.MMI2x1

MMI with two access waveguides and one output waveguides that symmetrically distributed. This is usually useful when the MMI is used as a combiner.

Parameters
input_trace_template: PCell

Input trace template.

output_trace_template: PCell

Output trace template.

mmi_trace_template: PCell and _WaveguideTemplate

Trace template used for the MMI section

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
n_inputs: int and number > 0, locked

Number of input channels.

n_outputs: int and number > 0, locked

Number of output channels.

input_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the input trace templates.

output_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the output trace templates.

mmi_trace: PCell, locked

Trace of the MMI section

### MMI2x2¶

class picazzo3.filters.mmi.MMI2x2

MMI with one access waveguide and two output waveguides that symmetrically distributed. This is usually useful when the MMI is used as a 2x2 splitter or a crossing.

Parameters
input_trace_template: PCell

Input trace template.

output_trace_template: PCell

Output trace template.

mmi_trace_template: PCell and _WaveguideTemplate

Trace template used for the MMI section

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
n_inputs: int and number > 0, locked

Number of input channels.

n_outputs: int and number > 0, locked

Number of output channels.

input_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the input trace templates.

output_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

List of the output trace templates.

mmi_trace: PCell, locked

Trace of the MMI section

## Mach-Zehnder Interferometers (MZI)¶

### MZI¶

class picazzo3.filters.mzi.cell.MZI

Generic MZI, taking a splitter, combiner and two _MziArm objects. You have to specify the transformations yourself.

Parameters
arm1: PCell and MZIArm

The South arm of the MZI

arm1_port_names: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and length == 2 port names for the south arm ports connected to splitter and combiner. Default = (‘in’, ‘out’) arm2: PCell and MZIArm The North arm of the MZI arm2_port_names: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and length == 2

port names for the north arm ports connected to splitter and combiner. Default = (‘in’, ‘out’)

combiner: PCell

The combiner of the MZI

combiner_port_names: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and length == 2 port names for the combiner ports to the arms. Default = (‘in1’, ‘in2’) splitter: PCell The splitter of the MZI splitter_port_names: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and length == 2

port names for the splitter ports to the arms. Default = (‘out1’, ‘out2’)

external_port_names: str

Map of the free instance terms/ports to the names of external terms/ports.Format is a dict {‘inst:term’ : ‘new_term_name’}.If a term/port is not listed, the format instname_portname will be used

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
child_cells: locked

### MZIWaveguides¶

class picazzo3.filters.mzi.cell.MZIWaveguides

A MZI with two simple waveguide arms. The splitter and combiner are safely spaced, but this can be manually optimized. The difference in length between the delay lines can be set in the layout.

Parameters
auto_transition: ( bool, bool_, bool or int )

if True, splitter and combiner are transitioned to the correct waveguide template

trace_template: PCell and _WaveguideTemplate
arm1_port_names: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and length == 2 port names for the south arm ports connected to splitter and combiner. Default = (‘in’, ‘out’) arm2_port_names: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and length == 2

port names for the north arm ports connected to splitter and combiner. Default = (‘in’, ‘out’)

combiner: PCell

The combiner of the MZI

combiner_port_names: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and length == 2 port names for the combiner ports to the arms. Default = (‘in1’, ‘in2’) splitter: PCell The splitter of the MZI splitter_port_names: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and length == 2

port names for the splitter ports to the arms. Default = (‘out1’, ‘out2’)

external_port_names: str

Map of the free instance terms/ports to the names of external terms/ports.Format is a dict {‘inst:term’ : ‘new_term_name’}.If a term/port is not listed, the format instname_portname will be used

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
arm1: PCell, locked
arm2: PCell, locked
child_cells: locked

### MZIWithCells¶

class picazzo3.filters.mzi.cell.MZIWithCells

An MZI which contains another cell in one or both arms.

Parameters
arm1_contents: ( PCell ), *None allowed*

Cell to place in the SOUTH arm. Use None when only a waveguide is required.

arm1_contents_port_names: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and length == 2 port names for the contents ports in arm1. Default = (‘in’, ‘out’) arm2_contents: ( PCell ), *None allowed* Cell to place in the NORTH arm. Use None when only a waveguide is required. arm2_contents_port_names: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and length == 2

port names for the contents ports in arm2. Default = (‘in’, ‘out’)

auto_transition: ( bool, bool_, bool or int )

if True, splitter and combiner are transitioned to the correct waveguide template

trace_template: PCell and _WaveguideTemplate
arm1: PCell and MZIArm

The South arm of the MZI

arm1_port_names: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and length == 2 port names for the south arm ports connected to splitter and combiner. Default = (‘in’, ‘out’) arm2: PCell and MZIArm The North arm of the MZI arm2_port_names: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and length == 2

port names for the north arm ports connected to splitter and combiner. Default = (‘in’, ‘out’)

combiner: PCell

The combiner of the MZI

combiner_port_names: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and length == 2 port names for the combiner ports to the arms. Default = (‘in1’, ‘in2’) splitter: PCell The splitter of the MZI splitter_port_names: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3. and length == 2

port names for the splitter ports to the arms. Default = (‘out1’, ‘out2’)

external_port_names: str

Map of the free instance terms/ports to the names of external terms/ports.Format is a dict {‘inst:term’ : ‘new_term_name’}.If a term/port is not listed, the format instname_portname will be used

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
child_cells: locked

Examples

from technologies import silicon_photonics  # noqa: F401
from picazzo3.filters.mzi import MZIWithCells
from picazzo3.wg.dircoup import BendDirectionalCoupler
from picazzo3.filters.ring import RingRectNotchFilter

split = BendDirectionalCoupler(name="my_splitter_7")
split.Layout(bend_angle=30.0)

ring = RingRectNotchFilter(name="my_ring_8")

mzi = MZIWithCells(
name="my_mzi_cells_1",
splitter=split,
combiner=split,
arm1_contents=ring,
arm1_contents_port_names=["in", "out"],
)
layout = mzi.Layout(extra_length=-50.0)

layout.visualize(annotate=True)


### MZIWaveguideArm¶

class picazzo3.filters.mzi.cell.MZIWaveguideArm

A Mach-Zehnder arm with a given length: routing upward at right-angle

Parameters
trace_template: PCell and _WaveguideTemplate
external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
contents: PCell and _Trace, locked

### MZIContainerArm¶

class picazzo3.filters.mzi.cell.MZIContainerArm

A Mach-Zehnder arm which contains another cell and connects it to the splitter and combiner port

Parameters
auto_transition: ( bool, bool_, bool or int )

if True, Automatic transitions will be added to the contents if the trace templates are not matched

port_labels: List with type restriction, allowed types: <class ‘str’> and length == 2

Names of the two ports to be processed

trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

Template for all ports, defaults to TECH.PCELLS.WG.DEFAULT.When set to None, the waveguide templates of the ports will be used.

contents: PCell

the contents of the container: the child cell

external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

list of templates to apply to all ports

waveguides: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

## Generic Photonic Crystals¶

### DodecPhCLayout¶

class picazzo3.phc.generic.cell.DodecPhCLayout

Generic Layouting Cell for photonic crystals with 12-sided holes on a Triangular lattice. The Layout of the cell is made up of a map, which is a multiline string representing the unit cells on a regular triangular lattice. The letters in the ‘map’ correspond to the diameters of the holes in the dictionary ‘hole_sizes’. The pitches can be defined as cartesian pitches using the property ‘pitches’, or using the property ‘lattice_pitches’ which specifies the lattice vector along the horizontal and the oblique axis, or using the property ‘pitch’, which just sets a uniform pitch along all lattice vectors.

Parameters
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### HexPhCLayout¶

class picazzo3.phc.generic.cell.HexPhCLayout

Generic Layouting Cell for photonic crystals with hexagon holes on a Triangular lattice. The Layout of the cell is made up of a map, which is a multiline string representing the unit cells on a regular triangular lattice. The letters in the ‘map’ correspond to the diameters of the holes in the dictionary ‘hole_sizes’. The pitches can be defined as cartesian pitches using the property ‘pitches’, or using the property ‘lattice_pitches’ which specifies the lattice vector along the horizontal and the oblique axis, or using the property ‘pitch’, which just sets a uniform pitch along all lattice vectors.

Parameters
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### OctPhCLayout¶

class picazzo3.phc.generic.cell.OctPhCLayout

Generic Layouting cell for Photonic Crystals with octagon holes on a Rectangular lattice. The Layout of the cell is made up of a map, which is a multiline string representing the unit cells on a regular rectangular lattice. The letters in the ‘map’ correspond to the diameters of the holes in the dictionary ‘hole_sizes’.

Parameters
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### SquarePhCLayout¶

class picazzo3.phc.generic.cell.SquarePhCLayout

Generic Layouting cell for Photonic Crystals with square holes on a Rectangular lattice. The Layout of the cell is made up of a map, which is a multiline string representing the unit cells on a regular rectangular lattice. The letters in the ‘map’ correspond to the diameters of the holes in the dictionary ‘hole_sizes’.

Parameters
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### TriangularPhCLayout¶

class picazzo3.phc.generic.cell.TriangularPhCLayout

Generic Photonic Crystal Layouting Cell on a Triangular lattice. The Layout of the cell is made up of a map, which is a multiline string representing the unit cells on a regular triangular lattice. The letters in the ‘map’ correspond to unit cells in the dictionary ‘cells’. The pitches can be defined as cartesian pitches using the property ‘pitches’, or using the property ‘lattice_pitches’ which specifies the lattice vector along the horizontal and the oblique axis, or using the property ‘pitch’, which just sets a uniform pitch along all lattice vectors.

Parameters
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### RectangularPhCLayout¶

class picazzo3.phc.generic.cell.RectangularPhCLayout

Generic Photonic Crystal Layouting Cell on a Rectangular lattice. The Layout of the cell is made up of a map, which is a multiline string representing the unit cells on a regular rectangular lattice. The letters in the ‘map’ correspond to unit cells in the dictionary ‘cells’.

Parameters
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

## Photonic Crystal HeteroWaveguide Layouts¶

### W1HeteroCavity¶

class picazzo3.phc.hetero.cell.W1HeteroCavity

Photonic Crystal Waveguide HeteroCavity consisting of a W1 waveguide with adjusted pitch in the cavity. The unit cells for the waveguide and the cavity can be chosen seperately, as well as the different lattice pitches.

Parameters
cavity: PCell

The cavity child cell (autogenerated)

cavity_defect_unit_cell: PCell

The Photonic Crystal unit cell of the cavity lattice. By default it is empty.

cavity_unit_cell: PCell

The Photonic Crystal unit cell of the cavity lattice

mirror: PCell

The mirror child cell (autogenerated)

mirror_defect_unit_cell: PCell

The Photonic Crystal unit cell of the mirror waveguide. By default it is empty.

mirror_unit_cell: PCell

The Photonic Crystal unit cell of the mirror lattice

n_o_cladding_layers: int and number > 0
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### W1HeteroCavity1Mirror¶

class picazzo3.phc.hetero.cell.W1HeteroCavity1Mirror

this partial component class forms a Cavity with a single mirror. It requires a second mirror to form a complete cavity

Parameters
cavity: PCell

The cavity child cell (autogenerated)

cavity_defect_unit_cell: PCell

The Photonic Crystal unit cell of the cavity lattice. By default it is empty.

cavity_unit_cell: PCell

The Photonic Crystal unit cell of the cavity lattice

mirror: PCell

The mirror child cell (autogenerated)

mirror_defect_unit_cell: PCell

The Photonic Crystal unit cell of the mirror waveguide. By default it is empty.

mirror_unit_cell: PCell

The Photonic Crystal unit cell of the mirror lattice

n_o_cladding_layers: int and number > 0
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### W1HeteroCavityMulti¶

class picazzo3.phc.hetero.cell.W1HeteroCavityMulti

Photonic Crystal W1 Waveguide with multiple HeteroCavities with adjusted pitch in the cavity. The unit cells for the waveguide and the cavity can be chosen separately, as well as the different lattice pitches.

Parameters
cavity: PCell

The cavity child cell (autogenerated)

cavity_defect_unit_cell: PCell

The Photonic Crystal unit cell of the cavity lattice. By default it is empty.

cavity_unit_cell: PCell

The Photonic Crystal unit cell of the cavity lattice

mirror: PCell

The mirror child cell (autogenerated)

mirror_defect_unit_cell: PCell

The Photonic Crystal unit cell of the mirror waveguide. By default it is empty.

mirror_unit_cell: PCell

The Photonic Crystal unit cell of the mirror lattice

n_o_cladding_layers: int and number > 0
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

## Photonic Crystal W1 Waveguides and Cavities¶

### GenericW1Waveguide¶

class picazzo3.phc.w1.cell.GenericW1Waveguide

A generic W1 Photonic Crystal waveguide. The unit cells can be specified as PCells, going outward as from the center line.

Parameters
unit_cells: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

List of unit cells: center row to outside rows (symmetric)

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### W1Waveguide¶

class picazzo3.phc.w1.cell.W1Waveguide

A Uniform Photonic Crystal W1 waveguide consisting of 12-sided holes. You can specify the diameter of the lattice and the diameter of the defect holes in the core of the waveguide.

It is also possible to override the parameters of DodecPhCLayout, which allows you to customize the PCell in more detail.

Parameters
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### W1WaveguideWithInlineCavity¶

class picazzo3.phc.w1.cell.W1WaveguideWithInlineCavity

A Uniform Photonic Crystal W1 waveguide with an inline cavity, consisting of 12-sided holes. You can specify the diameter of the lattice and the diameter of the defect holes in the core of the waveguide. The property ‘cavity_hole_diameters’ specifies the holes of the cavity from east to west.

It is also possible to override the parameters of DodecPhCLayout, which allows you to customize the PCell in more detail.

Parameters
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### W1WaveguideWithAllpass¶

class picazzo3.phc.w1.cell.W1WaveguideWithAllpass

A Uniform Photonic Crystal W1 waveguide with a lateral cavity (e.g. L3), consisting of 12-sided holes. You can specify the diameter of the lattice and the diameter of the defect holes in the core of the waveguide. The property ‘cavity_hole_diameters’ specifies the holes of the cavity from east to west.

Parameters
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

## Rib Waveguides¶

### RibWaveguideTemplate¶

class picazzo3.traces.rib_wg.RibWaveguideTemplate

This waveguide is a (shallow etched) rib waveguide, with no specific bound in the slab.

                 core_width
<----------->
<------------------------------------------>
___________
_______________|           |________________

____________________________________________

Parameters
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### RibWireWaveguideTemplate¶

class picazzo3.traces.rib_wg.RibWireWaveguideTemplate

This waveguide is a (shallow etched) rib waveguide, loaded on top of a (finite) strip wire.

                 core_width
<----------->
strip_width
<--------------------->
<------------------------------------------>
___________
____|           |____
|                     |
__________|_____________________|___________

Parameters
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

## Slot Waveguides¶

### SlotWaveguideTemplate¶

class picazzo3.traces.slot_wg.SlotWaveguideTemplate

This waveguide is a strip-like waveguide with a slot in the middle.

                ____   ____
|    | |    |
|    | |    |
_______________|____|_|____|_________________


The core width is defined as the total width covering both slots. (i.e., slot_width should be >= core_width).

Parameters
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### DoubleSlotWaveguideTemplate¶

class picazzo3.traces.slot_wg.DoubleSlotWaveguideTemplate

This waveguide is a strip-like waveguide with two slots in the middle

                ___   __   ___
|   | |  | |   |
|   | |  | |   |
_______________|___|_|  |_|___|_________________

Parameters
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

## Socket Waveguides¶

### SocketWaveguideTemplate¶

class picazzo3.traces.socket_wg.SocketWaveguideTemplate

Socket-style waveguide template: deep etched rib waveguide

                ___________
|           |
_______________|           |________________
____________________________________________

Parameters
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### SlottedSocketWaveguideTemplate¶

class picazzo3.traces.socket_wg.SlottedSocketWaveguideTemplate

Socket waveguide with a deep etched slot

                ____   ____
|    | |    |
_______________|    | |    |________________
____________________|_|_____________________

Parameters
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

## Thinned Waveguides¶

### ThinnedWaveguideTemplate¶

class picazzo3.traces.thin_wg.ThinnedWaveguideTemplate

Thinned waveguide.

Takes an existing waveguide template (given by trace_template) and overlay with a thinning layer.

Parameters
trace_template: PCell and _TraceTemplate

Refers to the other trace template from which information is taken to build this trace template.

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### ThinnedWaveguideTemplate¶

class picazzo3.traces.thin_wg.ThinnedWaveguideTemplate

Thinned waveguide.

Takes an existing waveguide template (given by trace_template) and overlay with a thinning layer.

Parameters
trace_template: PCell and _TraceTemplate

Refers to the other trace template from which information is taken to build this trace template.

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

## Wire Waveguides¶

### WireWaveguideTemplate¶

class picazzo3.traces.wire_wg.WireWaveguideTemplate

Wire-like waveguide definition, with a core and a cladding. The waveguide is defined as a ‘cladding area’ (i.e. a cladding zone where the trench will be etched or other material will be), and a ‘core area’, which draws the shape of the waveguide core inside the ‘cladding area’.

The waveguide can be drawn on different processes, by default it is the WG process.

          core_width
<-------->
<------------------------------>
________
|        |
__________|        |____________

Parameters
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

## Rib Transitions¶

### WireRibWaveguideTransitionLinear¶

class picazzo3.traces.rib_wg.WireRibWaveguideTransitionLinear

Transition from/to wire (deep etched) to/from rib (shallow etched) waveguides.

You can provide either a wire for the start, and rib for the end, or vica versa. The wire_only_length is the part of the transition in which the rib part is gradually built up. After this length, we abruptly change to the rib waveguide. If the rib part is sufficiently wide in the first part, there should be no reflections at the interface.

Parameters
end_trace_template: PCell and _TraceTemplate and WireWaveguideTemplate, RibWaveguideTemplate
modified_start_wg_template: PCell and _TraceTemplate

Modified start waveguide template (using the end_trace_template, but with the dimensions of the start_trace_template)

start_trace_template: PCell and _TraceTemplate and WireWaveguideTemplate, RibWaveguideTemplate
wire_only_wg_template: PCell and _TraceTemplate
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
reverse_templates: ( bool, bool_, bool or int ), locked

When True, treat start_trace_template as end_trace_template and vice versa. To use the correct templates, use the _{start/stop}_trace_template properties. This should not be set manually, but calculated by the transition itself.

### WireRibWaveguideTransitionFromPortLinear¶

class picazzo3.traces.rib_wg.WireRibWaveguideTransitionFromPortLinear

Transition from/to wire (deep etched) to/from rib (shallow etched) waveguides.

You can provide a start_port and end_trace_template.

Parameters
wire_only_wg_template: PCell and _TraceTemplate
end_trace_template: PCell and _TraceTemplate and WireWaveguideTemplate, RibWaveguideTemplate
modified_start_wg_template: PCell and _TraceTemplate

Modified start waveguide template (using the end_trace_template, but with the dimensions of the start_trace_template)

start_trace_template: PCell and _TraceTemplate and WireWaveguideTemplate, RibWaveguideTemplate
start_port: _PortInterface

the port on which to extract trace template, position and angle

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
reverse_templates: ( bool, bool_, bool or int ), locked

When True, treat start_trace_template as end_trace_template and vice versa. To use the correct templates, use the _{start/stop}_trace_template properties. This should not be set manually, but calculated by the transition itself.

## Slot Transitions¶

### SlottedWireWaveguideTransitionLinear¶

class picazzo3.traces.slot_wg.SlottedWireWaveguideTransitionLinear

Transition from/to a slotted waveguide to/from a wire waveguide.

You can provide either a slotted waveguide for the start, and a wire waveguide for the end, or vica versa.

Parameters
end_trace_template: PCell and _TraceTemplate and WireWaveguideTemplate, SlotWaveguideTemplate
start_trace_template: PCell and _TraceTemplate and WireWaveguideTemplate, SlotWaveguideTemplate
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
reverse_templates: ( bool, bool_, bool or int ), locked

When True, treat start_trace_template as end_trace_template and vice versa. To use the correct templates, use the _{start/stop}_trace_template properties. This should not be set manually, but calculated by the transition itself.

### SlottedWireWaveguideTransitionFromPortLinear¶

class picazzo3.traces.slot_wg.SlottedWireWaveguideTransitionFromPortLinear

Linear transition from/to a slotted waveguide to/from a wire waveguide.

You can provide either a slotted waveguide for the start, and a wire waveguide for the end, or vica versa.

Parameters
end_trace_template: PCell and _TraceTemplate and WireWaveguideTemplate, SlotWaveguideTemplate
start_trace_template: PCell and _TraceTemplate and WireWaveguideTemplate, SlotWaveguideTemplate
start_port: _PortInterface

the port on which to extract trace template, position and angle

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
reverse_templates: ( bool, bool_, bool or int ), locked

When True, treat start_trace_template as end_trace_template and vice versa. To use the correct templates, use the _{start/stop}_trace_template properties. This should not be set manually, but calculated by the transition itself.

## Socket Transitions¶

### WireSocketWaveguideTransitionLinear¶

class picazzo3.traces.socket_wg.WireSocketWaveguideTransitionLinear

Transition from/to wire (deep etched) to/from socket (deep etched rib) waveguides.

You can provide either a wire for the start, and socket for the end, or vica versa.

The wire_only_length is the part of the transition in which the socket part is gradually built up. After this length, we abruptly change to the socket waveguide. If the socket part is sufficiently wide in the first part, there should be no reflections at the interface.

Parameters
end_trace_template: PCell and _TraceTemplate and WireWaveguideTemplate, SocketWaveguideTemplate
start_trace_template: PCell and _TraceTemplate and WireWaveguideTemplate, SocketWaveguideTemplate
modified_start_wg_template: PCell and _TraceTemplate

Modified start waveguide template (using the end_trace_template, but with the dimensions of the start_trace_template)

wire_only_wg_template: PCell and _TraceTemplate
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
reverse_templates: ( bool, bool_, bool or int ), locked

When True, treat start_trace_template as end_trace_template and vice versa. To use the correct templates, use the _{start/stop}_trace_template properties. This should not be set manually, but calculated by the transition itself.

### WireSocketWaveguideTransitionFromPortLinear¶

class picazzo3.traces.socket_wg.WireSocketWaveguideTransitionFromPortLinear

Linear Transition between Wire and Socket Waveguides.

Parameters
end_trace_template: PCell and _TraceTemplate and WireWaveguideTemplate, SocketWaveguideTemplate
start_trace_template: PCell and _TraceTemplate and WireWaveguideTemplate, SocketWaveguideTemplate
wire_only_wg_template: PCell and _TraceTemplate
modified_start_wg_template: PCell and _TraceTemplate

Modified start waveguide template (using the end_trace_template, but with the dimensions of the start_trace_template)

start_port: _PortInterface

the port on which to extract trace template, position and angle

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
reverse_templates: ( bool, bool_, bool or int ), locked

When True, treat start_trace_template as end_trace_template and vice versa. To use the correct templates, use the _{start/stop}_trace_template properties. This should not be set manually, but calculated by the transition itself.

## Thinned Transitions¶

### ThinnedWireWireWaveguideTransitionLinear¶

class picazzo3.traces.thin_wg.ThinnedWireWireWaveguideTransitionLinear

Transition from/to thinned wire to/from wire waveguides.

You can provide either a thinned wire for the start, and wire for the end, or vica versa.

Parameters
end_trace_template: PCell and _TraceTemplate and WireWaveguideTemplate, ThinnedWaveguideTemplate
start_trace_template: PCell and _TraceTemplate and WireWaveguideTemplate, ThinnedWaveguideTemplate
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
reverse_templates: ( bool, bool_, bool or int ), locked

When True, treat start_trace_template as end_trace_template and vice versa. To use the correct templates, use the _{start/stop}_trace_template properties. This should not be set manually, but calculated by the transition itself.

### ThinnedWireWireWaveguideTransitionFromPortLinear¶

class picazzo3.traces.thin_wg.ThinnedWireWireWaveguideTransitionFromPortLinear

Linear Transition from/to thinned wire to/from wire waveguides.

You can provide either a thinned wire for the start, and wire for the end, or vica versa.

Parameters
end_trace_template: PCell and _TraceTemplate and WireWaveguideTemplate, ThinnedWaveguideTemplate
start_trace_template: PCell and _TraceTemplate and WireWaveguideTemplate, ThinnedWaveguideTemplate
start_port: _PortInterface

the port on which to extract trace template, position and angle

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
reverse_templates: ( bool, bool_, bool or int ), locked

When True, treat start_trace_template as end_trace_template and vice versa. To use the correct templates, use the _{start/stop}_trace_template properties. This should not be set manually, but calculated by the transition itself.

## Wire Transitions¶

### WireWaveguideTransitionLinear¶

class picazzo3.traces.wire_wg.WireWaveguideTransitionLinear

A transition between two WireWaveguideTemplates.

Parameters
end_trace_template: PCell and _TraceTemplate and WireWaveguideTemplate
start_trace_template: PCell and _TraceTemplate and WireWaveguideTemplate
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
reverse_templates: ( bool, bool_, bool or int ), locked

When True, treat start_trace_template as end_trace_template and vice versa. To use the correct templates, use the _{start/stop}_trace_template properties. This should not be set manually, but calculated by the transition itself.

### WireWaveguideTransitionFromPortLinear¶

class picazzo3.traces.wire_wg.WireWaveguideTransitionFromPortLinear

A linear transition between two WireWaveguideTemplates.

Parameters
end_trace_template: PCell and _TraceTemplate and WireWaveguideTemplate
start_trace_template: PCell and _TraceTemplate and WireWaveguideTemplate
start_port: _PortInterface

the port on which to extract trace template, position and angle

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
reverse_templates: ( bool, bool_, bool or int ), locked

When True, treat start_trace_template as end_trace_template and vice versa. To use the correct templates, use the _{start/stop}_trace_template properties. This should not be set manually, but calculated by the transition itself.

## Bends¶

### WgBend¶

class picazzo3.wg.bend.cell.WgBend

Fixed Waveguide bend of an arbitrary angle. This is a rounded waveguide, so it takes a rounding algorithm and a bend radius as a parameter, as well as a trace_template.

Parameters
trace_template: PCell and _WaveguideTemplate
external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
contents: PCell and _Trace, locked

### WgBend90¶

class picazzo3.wg.bend.cell.WgBend90

Fixed Waveguide bend of 90 degrees. This is a rounded waveguide, so it takes a rounding algorithm and a bend radius as a parameter, as well as a trace_template.

Parameters
trace_template: PCell and _WaveguideTemplate
external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
contents: PCell and _Trace, locked

## Crossings¶

### WgDirectCrossing¶

class picazzo3.wg.crossing.cell.WgDirectCrossing

A Direct waveguide crossing, consisting of two identical waveguides at right angles. This design is not particularly efficient for high-contrast waveguides, but is OK for low-contrast waveguides (e.g. silica.)

Parameters
trace_template: PCell and _WaveguideTemplate

Trace template used to define the crossing

waveguides: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

the waveguides through the crossing

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### WgParabolicCrossing¶

class picazzo3.wg.crossing.cell.WgParabolicCrossing

Highly efficient crossing for high-contrast silicon photonics. The crossing consists of double-etched parabolic transitions at right angles, collimating the optical field over a short distance to a parallel beam at the center of the crossing. This allows for a minimum of crosstalk. The details of this crossing are described in detail in [W. Bogaerts et al., Optics Letters, 32(19), p.2801-2803 (2007)]

Parameters
trace_template: PCell and _WaveguideTemplate

Trace template used to define the crossing

waveguides: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

the waveguides through the crossing

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

## Gratings¶

### WaveguideUniformGrating¶

class picazzo3.wg.grating.cell.WaveguideUniformGrating

Waveguide with inline, uniform grating. The grating consists of a Child cell with the period, which is repeated to create the grating.

Parameters
n_o_periods: int and number > 0

The number of periods

period_cell: PCell and _WaveguideGratingPeriod

The unit cell of the grating

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### WaveguideNonUniformGrating¶

class picazzo3.wg.grating.cell.WaveguideNonUniformGrating

Waveguide with inline, non-uniform grating. The grating periods are described as individual cells, and they are concatenated into a grating.

Parameters
period_cells: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’> and List with type restriction, allowed types: <class ‘picazzo3.wg.grating.cell._WaveguideGratingPeriod’>
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### ModifiedWaveguideGratingPeriod¶

class picazzo3.wg.grating.cell.ModifiedWaveguideGratingPeriod

Period for a waveguide with modified parameters. The base definition is taken from the wg_template which is used for the ports. The modify_waveguide_parameters property then creates the blocks with modified widths, by adapting the properties of the individual waveguide template.

Parameters
modified_waveguide_parameters: list

Dict of the parameters of the waveguide template that should be modified for the different sections of the Grating Period.

n_o_sections: int and number > 0

Number of sections in the grating period

wg_template: PCell and _WaveguideTemplate

Waveguide template of start and end of the period (and ports)

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
wg_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

### WaveguideSideGratingPeriod¶

class picazzo3.wg.grating.cell.WaveguideSideGratingPeriod

Period for a waveguide with side gratings. The base definition is taken from the wg_template which is used for the ports. The widths property then creates the blocks with modified widths, based on the original. (another parameter can be adapted by changing the property width_parameter_name)

Parameters
n_o_sections: int and number > 0

Number of sections in the grating period

wg_template: PCell and _WaveguideTemplate

Waveguide template of start and end of the period (and ports)

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
modified_waveguide_parameters: locked
wg_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

## Directional Couplers¶

### StraightDirectionalCoupler¶

class picazzo3.wg.dircoup.cell.StraightDirectionalCoupler

A directional coupler consisting of 2 parallel (horizontal) straight waveguides.

Parameters
trace_template1: PCell and _WaveguideTemplate

waveguide template used by the south arm of the directional coupler

trace_template2: PCell and _WaveguideTemplate

waveguide template used by the north arm of the directional coupler. If not set, it defaults to the template of the south arm

wg1a: PCell

South-west waveguide

wg1b: PCell

South-east waveguide

wg2a: PCell

North-west waveguide

wg2b: PCell

North-east waveguide

coupler_length: float and Real, number and number >= 0

length of the directional coupler

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
n_inputs: int and number > 0, locked

Number of input channels.

n_outputs: int and number > 0, locked

Number of output channels.

### BendDirectionalCoupler¶

class picazzo3.wg.dircoup.cell.BendDirectionalCoupler

A directional coupler consisting of 2 parallel (horizontal) waveguides with bends at the start and end.

Parameters
trace_template1: PCell and _WaveguideTemplate

waveguide template used by the south arm of the directional coupler

trace_template2: PCell and _WaveguideTemplate

waveguide template used by the north arm of the directional coupler. If not set, it defaults to the template of the south arm

wg1a: PCell

South-west waveguide

wg1b: PCell

South-east waveguide

wg2a: PCell

North-west waveguide

wg2b: PCell

North-east waveguide

coupler_length: float and Real, number and number >= 0

length of the directional coupler

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
n_inputs: int and number > 0, locked

Number of input channels.

n_outputs: int and number > 0, locked

Number of output channels.

### SBendDirectionalCoupler¶

class picazzo3.wg.dircoup.cell.SBendDirectionalCoupler

A directional coupler consisting of 2 parallel (horizontal) waveguides with S-shaped bends at the start and end.

Parameters
trace_template1: PCell and _WaveguideTemplate

waveguide template used by the south arm of the directional coupler

trace_template2: PCell and _WaveguideTemplate

waveguide template used by the north arm of the directional coupler. If not set, it defaults to the template of the south arm

wg1a: PCell

South-west waveguide

wg1b: PCell

South-east waveguide

wg2a: PCell

North-west waveguide

wg2b: PCell

North-east waveguide

coupler_length: float and Real, number and number >= 0

length of the directional coupler

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
n_inputs: int and number > 0, locked

Number of input channels.

n_outputs: int and number > 0, locked

Number of output channels.

## Splitters¶

### WgYSplitter¶

class picazzo3.wg.splitters.cell.WgYSplitter

Y-splitter PCell with branches that fan out specifiable angle.

Parameters
trace_template: PCell and _WaveguideTemplate

Waveguide template of the Y splitter

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### WgYCombiner¶

class picazzo3.wg.splitters.cell.WgYCombiner

Y-Combiner PCell with branches that fan out specifiable angle.

Parameters
trace_template: PCell and _WaveguideTemplate

Waveguide template of the Y splitter

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### WgY90Splitter¶

class picazzo3.wg.splitters.cell.WgY90Splitter

Y-splitter PCell with branches that fan out at right angles to the input waveguide.

Parameters
trace_template: PCell and _WaveguideTemplate

Waveguide template of the Y splitter

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### WgY90Combiner¶

class picazzo3.wg.splitters.cell.WgY90Combiner

Y-shaped combiner with branches that come in at right angles to the output waveguide.

Parameters
trace_template: PCell and _WaveguideTemplate

Waveguide template of the Y splitter

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### WgY180Splitter¶

class picazzo3.wg.splitters.cell.WgY180Splitter

Y-splitter PCell with branches that fan out at right angles to the input waveguide and then come back to the horizontal direction.

Parameters
trace_template: PCell and _WaveguideTemplate

Waveguide template of the Y splitter

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### WgY180Combiner¶

class picazzo3.wg.splitters.cell.WgY180Combiner

Y-shaped combiner with branches that come in horizontally and combine with the output waveguide at right angles.

Parameters
trace_template: PCell and _WaveguideTemplate

Waveguide template of the Y splitter

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

## Waveguide Bundles¶

### WaveguideBundle¶

class picazzo3.wg.bundle.cell.WaveguideBundle

Bundle of waveguides, routed together

Parameters
traces: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

the traces in this bundle

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

#pcell: picazzo3.wg.bundle.cell.TemplatedWaveguideBundle#

## Spirals¶

### SingleSpiral¶

class picazzo3.wg.spirals.cell.SingleSpiral

Single spiral class going from the inside to the outside. The trace template provided in the property trace_template is used to build a chain of waveguides.

Parameters
n_o_loops: int and number > 0

Number of loops in the spiral

trace_template: PCell and _TraceTemplate

Trace template used in the chain.

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
n_o_traces: int and number > 0, locked

Total number of traces used in the spiral.

traces: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

### SingleSpiralRounded¶

class picazzo3.wg.spirals.cell.SingleSpiralRounded

Rounded single spiral class going from the inside to the outside. The trace template provided in the property trace_template is used to build a chain of waveguides. All the rounding properties can be set at the layout level.

Parameters
n_o_loops: int and number > 0

Number of loops in the spiral

trace_template: PCell and _TraceTemplate

Trace template used in the chain.

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
n_o_traces: int and number > 0, locked

Total number of traces used in the spiral.

traces: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

### DoubleSpiral¶

class picazzo3.wg.spirals.cell.DoubleSpiral

Double spiral class with both access waveguides on the outside of the spiral. The trace template provided in the property trace_template is used to build a chain of waveguides.

Parameters
n_o_loops: int and number > 0

Number of loops in the spiral

trace_template: PCell and _TraceTemplate

Trace template used in the chain.

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
n_o_traces: int and number > 0, locked

Total number of traces used in the spiral.

traces: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

### DoubleSpiralRounded¶

class picazzo3.wg.spirals.cell.DoubleSpiralRounded

Rounded double spiral class with both access waveguides on the outside of the spiral. The trace template provided in the property trace_template is used to build a chain of waveguides. All the rounding properties can be set at the layout level.

Parameters
n_o_loops: int and number > 0

Number of loops in the spiral

trace_template: PCell and _TraceTemplate

Trace template used in the chain.

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
n_o_traces: int and number > 0, locked

Total number of traces used in the spiral.

traces: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

### DoubleSpiralWithInCoupling¶

class picazzo3.wg.spirals.cell.DoubleSpiralWithInCoupling

Double spiral class with both access waveguides on the outside of the spiral. In coupling waveguides are added to the spiral, one at the east side and one at the west side. The trace template provided in the property trace_template is used to build a chain of waveguides.

Parameters
n_o_loops: int and number > 0

Number of loops in the spiral

trace_template: PCell and _TraceTemplate

Trace template used in the chain.

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
n_o_traces: int and number > 0, locked

Total number of traces used in the spiral.

traces: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

### DoubleSpiralWithInCouplingRounded¶

class picazzo3.wg.spirals.cell.DoubleSpiralWithInCouplingRounded

Rounded double spiral class with both access waveguides on the outside of the spiral. In coupling waveguides are added to the spiral, one at the east side and one at the west side. The trace template provided in the property trace_template is used to build a chain of waveguides. All the rounding properties can be set at the layout level.

Parameters
n_o_loops: int and number > 0

Number of loops in the spiral

trace_template: PCell and _TraceTemplate

Trace template used in the chain.

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
n_o_traces: int and number > 0, locked

Total number of traces used in the spiral.

traces: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

### FixedLengthSpiral¶

class picazzo3.wg.spirals.cell.FixedLengthSpiral

Spiral with incoupling sections that calculates its length. The total length is set by the property total_length and the inner size of the spiral will be adapted so that the total length of the spiral (including the incoupling sections) would be equal to total_length. The way this inner size is calculated can set using properties in the Layout view.

Parameters
total_length: float and number > 0

Total design length of the spiral.

n_o_loops: int and number > 0

Number of loops in the spiral

trace_template: PCell and _TraceTemplate

Trace template used in the chain.

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
n_o_traces: int and number > 0, locked

Total number of traces used in the spiral.

traces: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

### FixedLengthSpiralRounded¶

class picazzo3.wg.spirals.cell.FixedLengthSpiralRounded

Rounded spiral with incoupling sections that calculates its length. The total length is set by the property total_length and the inner size of the spiral will be adapted so that the total length of the spiral (including the incoupling sections) would be equal to total_length. The way this inner size is calculated can set using properties in the Layout view.

Parameters
total_length: float and number > 0

Total design length of the spiral.

n_o_loops: int and number > 0

Number of loops in the spiral

trace_template: PCell and _TraceTemplate

Trace template used in the chain.

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
n_o_traces: int and number > 0, locked

Total number of traces used in the spiral.

traces: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

### ConnectComponents¶

class picazzo3.routing.place_route.cell.ConnectComponents

Parametric Cell for logically connecting multiple components.

The user supplies a dictionary of the instances of child cells that need to be placed through the property child_cells. This dictionary maps the instance names to the PCell objects. The same PCell object can be used for multiple instances.

child_cells={ "ring1"  : my_ring1,
"ring2"  : my_ring2,
"spl"    : my_splitter,
"com"    : my_splitter # the same cell is used both for splitting and combining
}


The connectivity between the instances of the child cells is set by a list of tuples containing pairs of instance terms/port names. This list links is of the form instname:portname

links=[ ("spl:arm1",   "arm1:in1"),
("arm1:out1", "com:arm1"),
("spl:arm2",   "arm2:in1"),
("arm2:out1", "com:arm2")
]


All the terms of the instances are connected to outside terms. You can override the default external term names using the external_port_names property. There you can specify the individual names of the external terms. If no name is specified, the default pattern of ‘instname_termname’ will be used.

external_port_names={ "spl:in1"  : "input",
"com:out1" : "output"
}

Parameters
links: list and List with type restriction, allowed types: [<class ‘collections.abc.Sequence’>]

list of tuples connecting the instances. Format is [(‘inst1:term1’,’inst2:term2’), …]

child_cells:

dict to create the instances of the child cells.Format is {‘inst_name1’: PCell}

external_port_names: str

Map of the free instance terms/ports to the names of external terms/ports.Format is a dict {‘inst:term’ : ‘new_term_name’}.If a term/port is not listed, the format instname_portname will be used

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Examples

"""Here we connect 2 splitters and two rings into a RLMZI
We use the splitter twice but use two different rings.
"""
from technologies import silicon_photonics  # noqa: F401
from ipkiss3 import all as i3  # noqa: F401
import numpy as np
import pylab as plt

from picazzo3.filters.ring import RingRectNotchFilter
from picazzo3.wg.splitters import WgY90Splitter

from picazzo3.routing.place_route import ConnectComponents

ring1 = RingRectNotchFilter()
cp = {"cross_coupling1": 0.4j, "straight_coupling1": (1 - 0.4**2) ** 0.5}
ring1.CircuitModel(coupler_parameters=[cp], ring_length=50.0)

ring2 = RingRectNotchFilter()
ring2.CircuitModel(coupler_parameters=[cp], ring_length=55.0)

splitter = WgY90Splitter()

pc = ConnectComponents(
child_cells={"spl": splitter, "com": splitter, "arm1": ring1, "arm2": ring2},
("spl:arm1", "arm1:in"),
("arm1:out", "com:arm1"),
("spl:arm2", "arm2:in"),
("arm2:out", "com:arm2"),
],
)

cm = pc.CircuitModel()

# Caphe simulation
wavelengths = np.linspace(1.50, 1.6, 2001)
R = cm.get_smatrix(wavelengths=wavelengths)

plt.plot(wavelengths, np.abs(R["spl_center", "com_center"]) ** 2, "b", label="power")
plt.title("Waveguide transmission (Power)")
plt.xlabel(r"Wavelength ($\mu m$)")
plt.ylabel("Power transmission")
plt.legend()
plt.show()


### PlaceAndConnect¶

class picazzo3.routing.place_route.cell.PlaceAndConnect

Parametric Cell for manual placement and Logical connection of components.

The user supplies a dictionary of the instances of child cells that need to be placed through the property child_cells. This dictionary maps the instance names to the PCell objects. The same PCell object can be used for multiple instances.

child_cells={ "ring1"  : my_ring1,
"ring2"  : my_ring2,
"spl"    : my_splitter,
"com"    : my_splitter # the same cell is used both for splitting and combining
}


The connectivity between the instances of the child cells is set by a list of tuples containing pairs of instance terms/port names. This list links is of the form instname:portname

links=[ ("spl:arm1",   "arm1:in1"),
("arm1:out1", "com:arm1"),
("spl:arm2",   "arm2:in1"),
("arm2:out1", "com:arm2")
]


All the unused terms of the instances are connected to outside terms. You can override the default external term names using the external_port_names property. There you can specify the individual names of the external terms. If no name is specified, the default pattern of ‘instname_termname’ will be used.

external_port_names={ "spl:in1"  : "input",
"com:out1" : "output"
}


The PCell will place the waveguides and connect them logically in the netlist, but it is up to the user to verify whether the physical location of the connected ports matches.

In the layout, the placement is specified manually using the child_transformations property, which defines a transformation for each instance. If no transformation is supplied for an instance, no transformation will be applied. It is also possible to supply a coordinate (Coord2) or tuple, which will be interpreted as a position for placement.

child_transformations={"arm1": (50, -50),
"arm2": (50,50),
"com": i3.HMirror(0.0)+i3.Translation((100,0))}


Child cells that are logically connected but where the ports are not physically connected (e.g. by wrong placement), will be connected with visual flylines.

You can subclass this PCell in order to implement your own additional functionality, or define subcircuits that define their own child cells and child transformations. Warning: do not refer to self.child_cells from within an overridden _default_child_transformations - rather refer to the child cell directly (like self.my_child_cell).

Parameters
child_cells:

dict to create the instances of the child cells. Format is {‘inst_name1’: PCell}

links: list and List with type restriction, allowed types: [<class ‘collections.abc.Sequence’>]

list of tuples connecting the instances. Format is [(‘inst1:term1’,’inst2:term2’), …]

external_port_names: str

Map of the free instance terms/ports to the names of external terms/ports.Format is a dict {‘inst:term’ : ‘new_term_name’}.If a term/port is not listed, the format instname_portname will be used

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### OpenAperture¶

class picazzo3.apertures.basic.cell.OpenAperture

Abstract base class for apertures into a slab area

Parameters
aperture_trace_template: PCell and _TraceTemplate

template of the aperture cross-section

trace_template: PCell and _TraceTemplate

template of the start waveguide

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### WireWgAperture¶

class picazzo3.apertures.basic.cell.WireWgAperture

Wire waveguide aperture into a slab area

Parameters
aperture_trace_template: PCell and _TraceTemplate

template of the aperture cross-section

trace_template: PCell and _TraceTemplate

template of the start waveguide

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

## AutoTransitionPorts¶

### AutoTransitionPorts¶

class picazzo3.container.transition_ports.AutoTransitionPorts

Pcell containing another PCell with transitions on all (labeled) ports, using AutoTraceTransitionFromPort. The target trace template is defined in trace_template.

Parameters
trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

Template for all ports, defaults to TECH.PCELLS.WG.DEFAULT.When set to None, the waveguide templates of the ports will be used.

transition_database: AutoTransitionDatabase

AutoTransitionDatabase in which the correct transition between the two trace templates can be looked up.

transitions: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

Transitions (of type WaveguideTransitionFromPort) attached the the ports given in port_labels. Should be in the same order as port_labels.

port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to be processed. Set to None to process all ports.

contents: PCell

the contents of the container: the child cell

external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

list of templates to apply to all ports

Examples

Tapering ports to a wider width:

from technologies import silicon_photonics  # noqa: F401
from picazzo3.filters.ring import RingRect180DropFilter
from picazzo3.traces.wire_wg import WireWaveguideTemplate

my_ring = RingRect180DropFilter()
my_ring.Layout()
from picazzo3.container.transition_ports import AutoTransitionPorts

wire_t = WireWaveguideTemplate()
wire_t.Layout(core_width=0.7, cladding_width=0.7 + 2 * 2.0)
my_ring_tapered_auto = AutoTransitionPorts(
contents=my_ring, port_labels=["W0", "W1", "E0"], trace_template=wire_t
)
my_ring_tapered_auto_layout = my_ring_tapered_auto.Layout()
my_ring_tapered_auto_layout.visualize(annotate=True)


## FanoutPorts¶

### FanoutPorts¶

class picazzo3.container.fanout_ports.FanoutPorts

Fanout Container. Routes all ports listed in port_labels into a given direction, with a given spacing. This is typically used to redirect a set of ports on a component to a regularly spaced array of ports. The user can use this to convert from one input/output waveguide pitch to another, or from irregular input/output waveguide positioning to a regular pitch.

If port_labels is not specified, all ports will be routed.

By default, the default waveguide template specified in the technology, TECH.PCELLS.WG.DEFAULT, will be used. This can be overridden by setting trace_template=None, in which case the trace templates of the ports of the contents will be used.

Parameters
trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

Template for all ports, defaults to TECH.PCELLS.WG.DEFAULT.When set to None, the waveguide templates of the ports will be used.

auto_transition: ( bool, bool_, bool or int )

If True, automatically transition all ports of contents to the given trace template. If False, no transitions are applied, which might lead to a discontinuity in the waveguide. Also, if trace_template is None, no transitions are applied.

port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to be processed. Set to None to process all ports.

contents: PCell

the contents of the container: the child cell

external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

list of templates to apply to all ports

waveguides: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked
bundle: ( PCell ), locked, *None allowed*

bundle of waveguides added to the contents, generated based on the supplied waveguides list

## IoFibcoup¶

### IoFibcoupGeneric¶

class picazzo3.container.iofibcoup.IoFibcoupGeneric

generic adapter for grating fiber couplers.

The component East and West ports are treated separately, and routed towards the East and West, respectively. For this routing, they go through several steps.

Here, we discuss the use for the East ports, but a similar set of parameters is available for the West ports. A lot of the properties are “plural”. This means that they can accept a list of parameters (e.g. east_trace_templates). This allows you to specify the template (or other parameter) for each individual port. The lists do not need to have the exact same length as the number of ports. If the number of elements is different from the number of ports in your component, the IoFibcoupGeneric will just cycle through the list. That way, if all the ports use the same value, you only need to supply a list of one element.

1. First of all, the ports of the component are transitioned to a common trace template east_trace_templates. By default, it uses the standard waveguide definition defined in TECH.PCELLS.WG.DEFAULT. However, if an element of the list is None , it will use the trace template of the actual port. The same holds for east_transition_lengths. This can be manually specified by the user, but if a value in the list is set to None, the default length of that transition will be used.

2. Then, the ports are fanned out to the fixed y_spacing of the fiber couplers. The length of that Fanout can be specified through east_fanout_length. Bend radius and rounding algorithm is shared between all ports in the parameter bend_radius and rounding_algorithm. If west_bundle_traces is True, the cover layers will be drawn over the Fanout. This can help reduce DRC errors.

3. Then, the waveguides are transitioned to another waveguide template, specified in east_connect_trace_templates. By default, this is the same template as east_trace_templates, but it is possible to override it to use a lower loss multi-mode waveguide. The connection for which this waveguide is used is a simple straight connection, but depending on the chip layout it can have a long length. The transition lengths can be manually specified using the east_connect_transition_lengths.

4. At the output, the waveguides are transitioned to the waveguide template of the individual input and output fiber couplers. The transition lengths from the connection waveguide to the grating coupler can be specified using east_fiber_coupler_transition_lengths.

5. Finally, the circuit is terminated with the individual fiber couplers, specified in east_fiber_couplers

The same procedure and parameters are used for the west ports

Parameters
east_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’> and ( _WaveguideTemplate or None ) and [1,None]

The trace templates that will be used for the Fanout of the East ports. and the traces of the Fanout. If an entry of the list is ‘None’, the trace template of the individual port will be used. Defaults to [TECH.PCELLS.WG.DEFAULT]. The number of entries in the list should not be identical to the number of East port. If the component has fewer East ports, only the first entries in the list will be used. If the component has more East ports, the list is just recycled. Therefore, it is allowed to use a list of just one element for multiple ports.

west_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’> and ( _WaveguideTemplate or None ) and [1,None]

The trace templates that will be used for the Fanout of the West ports. and the traces of the Fanout. If an entry of the list is ‘None’, the trace template of the individual port will be used. Defaults to [TECH.PCELLS.WG.DEFAULT]. The number of entries in the list should not be identical to the number of West port. If the component has fewer West ports, only the first entries in the list will be used. If the component has more West ports, the list is just recycled. Therefore, it is allowed to use a list of just one element for multiple ports.

east_connect_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’> and ( _WaveguideTemplate or None ) and [1,None]

The trace templates that will be used for connecting the Fanout of the East ports. to the Grating couplers. If an entry of the list is ‘None’, the trace template of the individual port will be used. Defaults to the same as east_trace_templates. The number of entries in the list should not be identical to the number of East port. If the component has fewer East ports, only the first entries in the list will be used. If the component has more East ports, the list is just recycled. Therefore, it is allowed to use a list of just one element for multiple ports.

west_connect_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’> and ( _WaveguideTemplate or None ) and [1,None]

The trace templates that will be used for connecting the Fanout of the West ports. to the Grating couplers. If an entry of the list is ‘None’, the trace template of the individual port will be used. Defaults to the same as west_trace_templates. The number of entries in the list should not be identical to the number of West port. If the component has fewer West ports, only the first entries in the list will be used. If the component has more West ports, the list is just recycled. Therefore, it is allowed to use a list of just one element for multiple ports.

east_fiber_coupler_external_port_name_maps: str

list of dicts to map the names of the East fiber coupler ports that will be exposed as external ports. The format is [dict1, dict2, …] with for each termination a dict of the form {‘port_name_on_termination’: ‘unique_external_port_name’, …}. the ‘unique_external_port_name’ string can contain the identifier {port}, which will be replaced by the corresponding port name on the component.The number of entries in the list should not be identical to the number of East port. If the component has fewer East ports, only the first entries in the list will be used. If the component has more East ports, the list is just recycled. Therefore, it is allowed to use a list of just one element for multiple ports. For example, the default is [{‘vertical_in’ : ‘{port}’}], which will map the port ‘vertical_in’ of the fiber coupler to the name of port on the component.

east_fiber_coupler_port_labels: List with type restriction, allowed types: <class ‘str’>

Port labels of the East fiber couplers connected to the ports of the contents. For fiber couplers with more than one port, the port labels should be concatenated with a ‘,’. For example, when using 2D grating couplers, the ports could be [‘in1,in2’, ‘in’]. This will use ports ‘in1’ and ‘in2’ of the first grating coupler, and ‘in’ of the second.By default, all the West ports of all the fiber couplers are used. If an entry in the list is ‘None’, also the west ports of that fiber coupler are used. The number of entries in the list should not be identical to the number of East port. If the component has fewer East ports, only the first entries in the list will be used. If the component has more East ports, the list is just recycled. Therefore, it is allowed to use a list of just one element for multiple ports.

east_fiber_couplers: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’> and [1,None]

List of the fiber couplers to be attached on the East ports. Defaults to [TECH.IO.FIBCOUP.DEFAULT.PCELLS.DEFAULT_GRATING] The number of entries in the list should not be identical to the number of East port. If the component has fewer East ports, only the first entries in the list will be used. If the component has more East ports, the list is just recycled. Therefore, it is allowed to use a list of just one element for multiple ports.

west_fiber_coupler_external_port_name_maps: str

list of dicts to map the names of the West fiber coupler ports that will be exposed as external ports. The format is [dict1, dict2, …] with for each termination a dict of the form {‘port_name_on_termination’: ‘unique_external_port_name’, …}. the ‘unique_external_port_name’ string can contain the identifier {port}, which will be replaced by the corresponding port name on the component.The number of entries in the list should not be identical to the number of West port. If the component has fewer West ports, only the first entries in the list will be used. If the component has more West ports, the list is just recycled. Therefore, it is allowed to use a list of just one element for multiple ports. For example, the default is [{‘vertical_in’ : ‘{port}’}], which will map the port ‘vertical_in’ of the fiber coupler to the name of port on the component.

west_fiber_coupler_port_labels: List with type restriction, allowed types: <class ‘str’>

Port labels of the West fiber couplers connected to the ports of the contents. For fiber couplers with more than one port, the port labels should be concatenated with a ‘,’. For example, when using 2D grating couplers, the ports could be [‘in1,in2’, ‘in’]. This will use ports ‘in1’ and ‘in2’ of the first grating coupler, and ‘in’ of the second.By default, all the East ports of the fiber coupler are used. If an entry in the list is ‘None’, also the East ports of that fiber coupler are used. The number of entries in the list should not be identical to the number of West port. If the component has fewer West ports, only the first entries in the list will be used. If the component has more West ports, the list is just recycled. Therefore, it is allowed to use a list of just one element for multiple ports.

west_fiber_couplers: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’> and [1,None]

List of the fiber couplers to be attached on the West ports. Defaults to [TECH.IO.FIBCOUP.DEFAULT.PCELLS.DEFAULT_GRATING] The number of entries in the list should not be identical to the number of West port. If the component has fewer West ports, only the first entries in the list will be used. If the component has more West ports, the list is just recycled. Therefore, it is allowed to use a list of just one element for multiple ports.

east_port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to directed to the East. Set to None to process all East ports.

west_port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to directed to the West. Set to None to process all West ports.

contents: PCell

the contents of the container: the child cell

external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
port_labels: locked

Examples

"""This example illustrates how the IoFibcoupGeneric properties can customize the routing in an IoColumn."""
from technologies import silicon_photonics  # noqa: F401
from ipkiss3 import all as i3
from picazzo3.filters.mmi import MMIIdentical
from picazzo3.traces.wire_wg import WireWaveguideTemplate

wg_t1 = WireWaveguideTemplate()
my_mmi = MMIIdentical(mmi_trace_template=wg_t1, n_inputs=1, n_outputs=5)
my_mmi.Layout(length=10.0, input_y_positions=[-1.0], output_y_positions=[-2.0, -1.0, 0.0, 1.0, 2.0])

from picazzo3.container.iofibcoup import IoFibcoupGeneric

from ipkiss3.pcell.blocks.iocolumn import IoColumn

my_column.Layout(south_east=(1500.0, 0.0))

my_column.Layout()


### IoFibcoupEastWest¶

class picazzo3.container.iofibcoup.IoFibcoupEastWest

Adapter for grating fiber couplers East and West.

The component East and West ports are treated separately, and routed towards the East and West, respectively. For this routing, they go through several steps. The settings for the East and West grating couplers can be tuned.

Here, we discuss the use for the East ports, but a similar set of parameters is available for the West ports.

1. First of all, the ports of the component are transitioned to a common trace template east_trace_template. By default, it uses the standard waveguide definition defined in TECH.PCELLS.WG.DEFAULT. However, if set to None , the trace will use the trace template of the actual port. The same holds for east_transition_length. This can be manually specified by the user, but if a value in the list is set to None, the default length of that type of transition will be used.

2. Then, the ports are fanned out to the fixed y_spacing of the fiber couplers. The length of that Fanout can be specified through east_fanout_length. Similarly, bend radius and rounding algorithm can be set through the parameter bend_radius and rounding_algorithm. If west_bundle_traces is True, the cover layers will be drawn over the Fanout. This can help reduce DRC errors.

3. Then, the waveguides are transitioned to another waveguide template, specified in east_connect_trace_template. By default, this is the same template as east_trace_template, but it is possible to override it to use a lower loss multi-mode waveguide. The connection for which this waveguide is used is a simple straight connection, but depending on the chip layout it can have a long length. The transition length can be manually specified using the east_connect_transition_length.

4. At the output, the waveguides are transitioned to the waveguide template of the individual input and output fiber couplers. The transition length from the connection waveguide to the grating coupler can be specified using east_fiber_coupler_transition_length.

5. Finally, the circuit is terminated with fiber couplers, using the PCell specified in east_fiber_coupler

The same procedure and parameters are used for the west ports

Parameters
east_trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

The trace template that will be used for the Fanout of the East ports. If ‘None’, the trace template of the individual port will be used. Defaults to TECH.PCELLS.WG.DEFAULT.

west_trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

The trace template that will be used for the Fanout of the West ports. If ‘None’, the trace template of the individual port will be used. Defaults to TECH.PCELLS.WG.DEFAULT.

east_fiber_coupler: PCell

Fiber coupler to be attached to the East ports. Defaults to TECH.IO.FIBCOUP.DEFAULT.PCELLS.DEFAULT_GRATING

east_fiber_coupler_external_port_name_map: str

Dicts to map the names of the East fiber coupler ports that will be exposed as external ports. The dict is of the form {‘port_name_on_termination’: ‘unique_external_port_name’, …}. the ‘unique_external_port_name’ string can contain the identifier {port}, which will be replaced by the corresponding port name on the component. For example, the default is {‘vertical_in’ : ‘{port}’}, which will map the port ‘vertical_in’ of the fiber coupler to the name of port on the component.

west_fiber_coupler: PCell

Fiber coupler to be attached to the West ports. Defaults to TECH.IO.FIBCOUP.DEFAULT.PCELLS.DEFAULT_GRATING

east_connect_trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

The trace template that will be used for connecting the Fanout of the East ports. to the Grating couplers. If ‘None’, the trace template of the individual port will be used. Defaults to the same as east_trace_template.

west_connect_trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

The trace template that will be used for connecting the Fanout of the West ports. to the Grating couplers. If ‘None’, the trace template of the individual port will be used. Defaults to the same as west_trace_template.

west_fiber_coupler_external_port_name_map: str

Dicts to map the names of the West fiber coupler ports that will be exposed as external ports. The dict is of the form {‘port_name_on_termination’: ‘unique_external_port_name’, …}. the ‘unique_external_port_name’ string can contain the identifier {port}, which will be replaced by the corresponding port name on the component. For example, the default is {‘vertical_in’ : ‘{port}’}, which will map the port ‘vertical_in’ of the fiber coupler to the name of port on the component.

east_fiber_coupler_port_labels: List with type restriction, allowed types: <class ‘str’>

Port labels of the East fiber couplers connected to the ports of the contents. For fiber couplers with more than one port, the port labels should be concatenated with a ‘,’. For example, when using 2D grating couplers, the ports could be [‘in1,in2’, ‘in’]. This will use ports ‘in1’ and ‘in2’ of the first grating coupler, and ‘in’ of the second.By default, all the West ports of all the fiber couplers are used. If an entry in the list is ‘None’, also the west ports of that fiber coupler are used. The number of entries in the list should not be identical to the number of East port. If the component has fewer East ports, only the first entries in the list will be used. If the component has more East ports, the list is just recycled. Therefore, it is allowed to use a list of just one element for multiple ports.

west_fiber_coupler_port_labels: List with type restriction, allowed types: <class ‘str’>

Port labels of the West fiber couplers connected to the ports of the contents. For fiber couplers with more than one port, the port labels should be concatenated with a ‘,’. For example, when using 2D grating couplers, the ports could be [‘in1,in2’, ‘in’]. This will use ports ‘in1’ and ‘in2’ of the first grating coupler, and ‘in’ of the second.By default, all the East ports of the fiber coupler are used. If an entry in the list is ‘None’, also the East ports of that fiber coupler are used. The number of entries in the list should not be identical to the number of West port. If the component has fewer West ports, only the first entries in the list will be used. If the component has more West ports, the list is just recycled. Therefore, it is allowed to use a list of just one element for multiple ports.

east_port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to directed to the East. Set to None to process all East ports.

west_port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to directed to the West. Set to None to process all West ports.

contents: PCell

the contents of the container: the child cell

external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
east_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked
west_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked
east_connect_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked
west_connect_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked
east_fiber_coupler_external_port_name_maps: locked
east_fiber_couplers: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked
west_fiber_coupler_external_port_name_maps: locked
west_fiber_couplers: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked
port_labels: locked

Examples

"""This example illustrates how the IoFibcoupEastWest properties can customize
the routing in an IoColumn."""
from technologies import silicon_photonics  # noqa: F401
from ipkiss3 import all as i3
from picazzo3.filters.mmi import MMIIdentical
from picazzo3.traces.wire_wg import WireWaveguideTemplate

wg_t1 = WireWaveguideTemplate()
my_mmi = MMIIdentical(mmi_trace_template=wg_t1, n_inputs=1, n_outputs=5)
my_mmi.Layout(length=10.0, input_y_positions=[-1.0], output_y_positions=[-2.0, -1.0, 0.0, 1.0, 2.0])

from picazzo3.container.iofibcoup import IoFibcoupEastWest

from ipkiss3.pcell.blocks.iocolumn import IoColumn

my_column.Layout(south_east=(1200.0, 0.0))

layout = my_column.Layout()
layout.visualize(annotate=True)


### IoFibcoup¶

class picazzo3.container.iofibcoup.IoFibcoup

The component East and West ports are routed towards the East and West, respectively. For this routing, they go through several steps.

1. First of all, the ports of the component are transitioned to a common trace template trace_template. By default, it uses the standard waveguide definition defined in TECH.PCELLS.WG.DEFAULT. However, if set to None , the trace will use the trace template of the actual port. The same holds for transition_length. This can be manually specified by the user, but if a value in the list is set to None, the default length of that type of transition will be used.

2. Then, the ports are fanned out to the fixed y_spacing of the fiber couplers. The length of that Fanout can be specified through fanout_length. Similarly, bend radius and rounding algorithm can be set through the parameter bend_radius and rounding_algorithm. If bundle_traces is True, the cover layers will be drawn over the Fanout. This can help reduce DRC errors.

3. Then, the waveguides are transitioned to another waveguide template, specified in east_connect_trace_template. By default, this is the same template as trace_template, but it is possible to override it to use a lower loss multi-mode waveguide. The connection for which this waveguide is used is a simple straight connection, but depending on the chip layout it can have a long length. The transition length can be manually specified using the connect_transition_length.

4. At the output, the waveguides are transitioned to the waveguide template of the individual input and output fiber couplers. The transition length from the connection waveguide to the grating coupler can be specified using fiber_coupler_transition_length.

5. Finally, the circuit is terminated with fiber couplers, using the PCell specified in fiber_coupler

Parameters
trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

The trace template that will be used for the Fanout of the East and West ports. If ‘None’, the trace template of the individual port will be used. Defaults to TECH.PCELLS.WG.DEFAULT.

fiber_coupler_external_port_name_map: str

Dicts to map the names of the fiber coupler ports that will be exposed as external ports. The dict is of the form {‘port_name_on_termination’: ‘unique_external_port_name’, …}. the ‘unique_external_port_name’ string can contain the identifier {port}, which will be replaced by the corresponding port name on the component. For example, the default is {‘vertical_in’ : ‘{port}’}, which will map the port ‘vertical_in’ of the fiber coupler to the name of port on the component.

connect_trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

The trace template that will be used for connecting the Fanout of the East and West ports. to the Grating couplers. If ‘None’, the trace template of the individual port will be used. Defaults to the same as trace_template.

fiber_coupler: PCell

Fiber coupler to be attached to the East and West ports. Defaults to TECH.IO.FIBCOUP.DEFAULT.PCELLS.DEFAULT_GRATING

east_fiber_coupler_port_labels: List with type restriction, allowed types: <class ‘str’>

Port labels of the East fiber couplers connected to the ports of the contents. For fiber couplers with more than one port, the port labels should be concatenated with a ‘,’. For example, when using 2D grating couplers, the ports could be [‘in1,in2’, ‘in’]. This will use ports ‘in1’ and ‘in2’ of the first grating coupler, and ‘in’ of the second.By default, all the West ports of all the fiber couplers are used. If an entry in the list is ‘None’, also the west ports of that fiber coupler are used. The number of entries in the list should not be identical to the number of East port. If the component has fewer East ports, only the first entries in the list will be used. If the component has more East ports, the list is just recycled. Therefore, it is allowed to use a list of just one element for multiple ports.

west_fiber_coupler_port_labels: List with type restriction, allowed types: <class ‘str’>

Port labels of the West fiber couplers connected to the ports of the contents. For fiber couplers with more than one port, the port labels should be concatenated with a ‘,’. For example, when using 2D grating couplers, the ports could be [‘in1,in2’, ‘in’]. This will use ports ‘in1’ and ‘in2’ of the first grating coupler, and ‘in’ of the second.By default, all the East ports of the fiber coupler are used. If an entry in the list is ‘None’, also the East ports of that fiber coupler are used. The number of entries in the list should not be identical to the number of West port. If the component has fewer West ports, only the first entries in the list will be used. If the component has more West ports, the list is just recycled. Therefore, it is allowed to use a list of just one element for multiple ports.

east_port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to directed to the East. Set to None to process all East ports.

west_port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to directed to the West. Set to None to process all West ports.

contents: PCell

the contents of the container: the child cell

external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
east_trace_template: PCell and _WaveguideTemplate, locked
east_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked
west_trace_template: PCell and _WaveguideTemplate, locked
west_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked
east_fiber_coupler: PCell, locked
west_fiber_coupler: PCell, locked
east_connect_trace_template: PCell and _WaveguideTemplate, locked
east_fiber_coupler_external_port_name_map: locked
west_connect_trace_template: PCell and _WaveguideTemplate, locked
west_fiber_coupler_external_port_name_map: locked
east_connect_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked
west_connect_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked
east_fiber_coupler_external_port_name_maps: locked
east_fiber_couplers: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked
west_fiber_coupler_external_port_name_maps: locked
west_fiber_couplers: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked
port_labels: locked

Examples

"""This example illustrates how the IoFibcoup properties can customize
the routing in an IoColumn."""
from technologies import silicon_photonics  # noqa: F401
from ipkiss3 import all as i3
from picazzo3.filters.mmi import MMIIdentical
from picazzo3.traces.wire_wg import WireWaveguideTemplate

wg_t1 = WireWaveguideTemplate()
my_mmi = MMIIdentical(mmi_trace_template=wg_t1, n_inputs=1, n_outputs=5)
my_mmi.Layout(length=10.0, input_y_positions=[-1.0], output_y_positions=[-2.0, -1.0, 0.0, 1.0, 2.0])

from picazzo3.container.iofibcoup import IoFibcoup

from ipkiss3.pcell.blocks.iocolumn import IoColumn

layout = my_column.Layout(south_east=(1400.0, 0.0))

layout.visualize(annotate=True)


## ContainerWithWaveguides¶

### ContainerWithWaveguides¶

class picazzo3.container.container_waveguides.ContainerWithWaveguides

Abstract base class for containers which add waveguides to the contents, such as fanout or for routing ports in certain directions

Waveguides are provided as a list of child cells. They will be bundled if bundled=True.

Parameters
trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

Template for all ports, defaults to TECH.PCELLS.WG.DEFAULT.When set to None, the waveguide templates of the ports will be used.

waveguides: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

auto_transition: ( bool, bool_, bool or int )

If True, automatically transition all ports of contents to the given trace template. If False, no transitions are applied, which might lead to a discontinuity in the waveguide. Also, if trace_template is None, no transitions are applied.

port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to be processed. Set to None to process all ports.

contents: PCell

the contents of the container: the child cell

external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

list of templates to apply to all ports

Examples

from technologies import silicon_photonics  # noqa: F401
from picazzo3.filters.ring import RingRect180DropFilter
from picazzo3.container.container_waveguides import ContainerWithWaveguides
from ipkiss3 import all as i3

my_ring = RingRect180DropFilter(name="my_ring1")
my_ring_layout = my_ring.Layout()

port_labels = ["E1", "W0"]

wgs = []
for pl in port_labels:
p = my_ring_layout.ports[pl]
shape = i3.Shape(points=[p.position])
wg = i3.Waveguide()
wg.Layout(shape=shape)
wgs.append(wg)

my_container = ContainerWithWaveguides(
name="my_waveguide_container1", contents=my_ring, waveguides=wgs, port_labels=port_labels
)
layout = my_container.Layout()
layout.visualize(annotate=True)


### ContainerWithWaveguideBundle¶

class picazzo3.container.container_waveguides.ContainerWithWaveguideBundle

Abstract base class for containers which add waveguides to the contents, such as fanout or for routing ports in certain directions

Waveguides are provided as a list of child cells. They will be bundled if bundled = True.

Parameters
trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

Template for all ports, defaults to TECH.PCELLS.WG.DEFAULT.When set to None, the waveguide templates of the ports will be used.

waveguides: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

auto_transition: ( bool, bool_, bool or int )

If True, automatically transition all ports of contents to the given trace template. If False, no transitions are applied, which might lead to a discontinuity in the waveguide. Also, if trace_template is None, no transitions are applied.

port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to be processed. Set to None to process all ports.

contents: PCell

the contents of the container: the child cell

external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

list of templates to apply to all ports

bundle: ( PCell ), locked, *None allowed*

bundle of waveguides added to the contents, generated based on the supplied waveguides list

### ContainerWithRoundedWaveguides¶

class picazzo3.container.container_waveguides.ContainerWithRoundedWaveguides

Container with waveguides (picazzo3.container.container_waveguides.ContainerWithWaveguides) which generates its waveguides from a given waveguide_template and routes. You can specify a bend radius and rounding algorithm for the waveguides in the Layout view.

Parameters
trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

Template for all ports, defaults to TECH.PCELLS.WG.DEFAULT.When set to None, the waveguide templates of the ports will be used.

auto_transition: ( bool, bool_, bool or int )

If True, automatically transition all ports of contents to the given trace template. If False, no transitions are applied, which might lead to a discontinuity in the waveguide. Also, if trace_template is None, no transitions are applied.

port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to be processed. Set to None to process all ports.

contents: PCell

the contents of the container: the child cell

external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

list of templates to apply to all ports

waveguides: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

Examples

from technologies import silicon_photonics  # noqa: F401
from picazzo3.filters.ring import RingRect180DropFilter
from picazzo3.container.container_waveguides import ContainerWithRoundedWaveguides
from ipkiss3 import all as i3

my_ring = RingRect180DropFilter(name="my_ring3")
my_ring_layout = my_ring.Layout()

port_labels = ["E1", "W0"]

shapes = []
for pl in port_labels:
p = my_ring_layout.ports[pl]
shape = i3.Shape(points=[p.position])
shapes.append(shape)

my_container = ContainerWithRoundedWaveguides(
name="my_waveguide_container3", contents=my_ring, port_labels=port_labels
)

layout.visualize(annotate=True)


### ContainerWithRoundedWaveguideBundle¶

class picazzo3.container.container_waveguides.ContainerWithRoundedWaveguideBundle

Container with waveguide bundle (picazzo3.container.container_waveguides.ContainerWithWaveguideBundle) which generates its waveguides from a given waveguide_template and routes and rounds the bends. You can specify a bend radius and rounding algorithm for the waveguides in the Layout view.

Parameters
trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

Template for all ports, defaults to TECH.PCELLS.WG.DEFAULT.When set to None, the waveguide templates of the ports will be used.

auto_transition: ( bool, bool_, bool or int )

If True, automatically transition all ports of contents to the given trace template. If False, no transitions are applied, which might lead to a discontinuity in the waveguide. Also, if trace_template is None, no transitions are applied.

port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to be processed. Set to None to process all ports.

contents: PCell

the contents of the container: the child cell

external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

list of templates to apply to all ports

waveguides: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked
bundle: ( PCell ), locked, *None allowed*

bundle of waveguides added to the contents, generated based on the supplied waveguides list

Examples

from technologies import silicon_photonics  # noqa: F401
from picazzo3.filters.ring import RingRect180DropFilter
from picazzo3.container.container_waveguides import ContainerWithRoundedWaveguideBundle
from ipkiss3 import all as i3

my_ring = RingRect180DropFilter(name="my_ring_4")
my_ring_layout = my_ring.Layout()

port_labels = ["E0", "E1"]

shapes = []
for pl in port_labels:
p = my_ring_layout.ports[pl]
shape = i3.Shape(points=[p.position])
shapes.append(shape)

my_container = ContainerWithRoundedWaveguideBundle(
name="my_waveguide_container_4", contents=my_ring, port_labels=port_labels
)
layout.visualize(annotate=True)


## ExtendPorts¶

### ExtendPorts¶

class picazzo3.container.extend_ports.ExtendPorts

Extends all the ports listed in port_labels with a waveguide of a given length.

This length is specified in extension_length of the Layout View.

A common trace template for all ports is specified through trace_template. When this is set to None (the default), the trace templates of the ports of the contents will be used.

Parameters
trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

Template for all ports. If None, the trace templates of the ports will be used

waveguides: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

auto_transition: ( bool, bool_, bool or int )

If True, automatically transition all ports of contents to the given trace template. If False, no transitions are applied, which might lead to a discontinuity in the waveguide. Also, if trace_template is None, no transitions are applied.

port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to be processed. Set to None to process all ports.

contents: PCell

the contents of the container: the child cell

external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

list of templates to apply to all ports

bundle: ( PCell ), locked, *None allowed*

bundle of waveguides added to the contents, generated based on the supplied waveguides list

## Route Ports¶

### RoutePortsEastWest¶

class picazzo3.container.route_ports.RoutePortsEastWest

Routes ports to the east or west side of a component

Parameters
east_port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to directed to the East. Set to None to process all East ports.

trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

Template for all ports, defaults to TECH.PCELLS.WG.DEFAULT.When set to None, the waveguide templates of the ports will be used.

west_port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to directed to the West. Set to None to process all West ports.

auto_transition: ( bool, bool_, bool or int )

If True, automatically transition all ports of contents to the given trace template. If False, no transitions are applied, which might lead to a discontinuity in the waveguide. Also, if trace_template is None, no transitions are applied.

contents: PCell

the contents of the container: the child cell

external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
port_labels: locked
trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

list of templates to apply to all ports

waveguides: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked
bundle: ( PCell ), locked, *None allowed*

bundle of waveguides added to the contents, generated based on the supplied waveguides list

### RoutePortsAroundCorner¶

class picazzo3.container.route_ports.RoutePortsAroundCorner

Routes ports around a corner of the component in a given direction.

Parameters
trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

Template for all ports, defaults to TECH.PCELLS.WG.DEFAULT.When set to None, the waveguide templates of the ports will be used.

auto_transition: ( bool, bool_, bool or int )

If True, automatically transition all ports of contents to the given trace template. If False, no transitions are applied, which might lead to a discontinuity in the waveguide. Also, if trace_template is None, no transitions are applied.

port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to be processed. Set to None to process all ports.

contents: PCell

the contents of the container: the child cell

external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

list of templates to apply to all ports

waveguides: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked
bundle: ( PCell ), locked, *None allowed*

bundle of waveguides added to the contents, generated based on the supplied waveguides list

## TerminatePorts¶

### TerminatePorts¶

class picazzo3.container.terminate_ports.TerminatePorts

Wraps a PCell in a container and terminates the ports specified by the user. If None is given for the port_labels, all ports will be suppressed.

You can also provide another PCell to the property ‘termination’ which will be attached to each terminated port (a stub, to remove reflections). If None is provided, a logical termination is added to the Netlist, but no termination is added in the layout.

Parameters
termination: PCell

cell which will be used to terminate the ports

termination_external_port_name_map: str

dict to map the names of the termination ports that are exposed as external ports. The format is { ‘port_name_on_termination’ : ‘new_name_{port}’ }. The ‘{port}’ in the map will be replaced by the corresponding port name on the component.For instance, when you use grating couplers or detectors as terminations, this map allows you to map the name of the vertical port or the electrical ports to the name of the terminated port on the contents. Similarly, you can use {inst} to insert the name of the instance of the termination. By default, the behavior is ‘{inst}_{port}’.

termination_port_label: str and String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

label of the port on the termination that will be used to connect to the part of the contents. Default is ‘in’

trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

Template for all ports, defaults to TECH.PCELLS.WG.DEFAULT.When set to None, the waveguide templates of the ports will be used.

termination_instance_prefix: String that contains only alphanumeric characters from the ASCII set or contains _\$. ASCII set is extended on PY3.

Prefix for the instance names of the terminations. Default is taken from TECH.CONTAINER.TERMINATE_PORTS

auto_transition: ( bool, bool_, bool or int )

If True, automatically transition all ports of contents to the given trace template. If False, no transitions are applied, which might lead to a discontinuity in the waveguide. Also, if trace_template is None, no transitions are applied.

port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to be processed. Set to None to process all ports.

contents: PCell

the contents of the container: the child cell

external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
termination_external_port_name_maps: locked
termination_port_labels: locked
terminations: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked
trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

list of templates to apply to all ports

Examples

"""Layout example of terminated ring resonator"""
from technologies import silicon_photonics  # noqa: F401
from picazzo3.filters.ring import RingRect180DropFilter

my_ring = RingRect180DropFilter()
my_ring.Layout()
from picazzo3.container.terminate_ports import TerminatePorts

# Optionally we can add a structure where the ports are suppressed
from picazzo3.apertures.basic import WireWgAperture
from picazzo3.traces.wire_wg import WireWaveguideTemplate

wire_t = WireWaveguideTemplate()
my_termination = WireWgAperture(name="my_termination", aperture_trace_template=wire_t)
my_termination.Layout(transition_length=4.0)
my_ring_terminated = TerminatePorts(contents=my_ring, port_labels=["E1"], termination=my_termination)
my_ring_terminated_layout = my_ring_terminated.Layout()
my_ring_terminated_layout.visualize(annotate=True)

"""Simulation example of terminated ring resonator"""
from technologies import silicon_photonics  # noqa: F401
import numpy as np
from picazzo3.filters.ring import RingRect180DropFilter
from picazzo3.container.terminate_ports import TerminatePorts
from picazzo3.logical.termination import Termination
import pylab as plt

my_ring = RingRect180DropFilter()

cp = {
"cross_coupling1": 1j * 0.05**0.5,  # The coupling from bus to ring and back
"straight_coupling1": 0.95**0.5,  # Straight coupling
}

my_ring.CircuitModel(ring_length=2 * np.pi * 10.0, coupler_parameters=[cp, cp])

my_termination = Termination()
my_termination.CircuitModel(reflection=0.5**0.5)
my_ring_terminated = TerminatePorts(contents=my_ring, port_labels=["W1"], termination=my_termination)
my_ring_terminated.Netlist()
my_ring_terminated_cm = my_ring_terminated.CircuitModel()

wavelengths = np.linspace(1.535, 1.55, 800)
R = my_ring_terminated_cm.get_smatrix(wavelengths=wavelengths)

plt.figure()
plt.plot(wavelengths, 10 * np.log10(abs(R["in1", "in1"] ** 2)), "r-", label="reflection in1")
plt.plot(wavelengths, 10 * np.log10(abs(R["in1", "out1", :] ** 2)), "b-", label="in port to pass port (out1)")
plt.plot(wavelengths, 10 * np.log10(abs(R["in1", "in2", :] ** 2)), "g-", label="in port to add port (in2)")
plt.xlim([wavelengths[0], wavelengths[-1]])
plt.legend()
plt.show()


### ContactHole¶

class picazzo3.electrical.contact.cell.ContactHole

Regular via to connect M1 (top_layer) to the silicide layer (bottom_layer) using a contact layer (via_layer)

Parameters
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### Via12¶

class picazzo3.electrical.contact.cell.Via12

Regular via to connect M2 (top_layer) to M1 (bottom_layer) using a contact layer (via_layer)

Parameters
name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

## Phase Modulators¶

### PhaseShifterWaveguideTemplate¶

class picazzo3.modulators.phase.trace.PhaseShifterWaveguideTemplate

Generic phase shifter waveguide trace template. When extruded into a (straight) waveguide, this template draws the necessary implant, contact and metallization layers on top of the underlying waveguide template. This waveguide template should be specified in the “trace_template” property.

This PCell can be used for several types of phase shifters, for example: * P(I)N junction injection or depletion phase shifters, with P and N implants, contacts and metal on two sides * Thermal phase shifters using a metal heater on top * Thermal phase shifters using an implanted waveguide

At the Layout level, windows can be specified separately for the implants (the silicon level), contacts (pre-metal/contact level) and the metallization (e.g. metal1 level). Just fill or leave open each of the three sets of windows, and use them to implement the desired type of phase shifter.

Subclass this PCell to create specialized phase shifters, and add electrical ports.

Parameters
trace_template: PCell and _TraceTemplate

Refers to the other trace template from which information is taken to build this trace template.

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### LateralPNPhaseShifterTemplate¶

class picazzo3.modulators.phase.trace.LateralPNPhaseShifterTemplate

PN or PIN junction phase shifter with a lateral junction. This is the most ‘classical’ type of phase shifter.

Parameters
n_contact: PCell
p_contact: PCell
trace_template: PCell and _TraceTemplate

Refers to the other trace template from which information is taken to build this trace template.

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### LongitudinalPNPhaseShifterTemplate¶

class picazzo3.modulators.phase.trace.LongitudinalPNPhaseShifterTemplate

PN or PIN junction phase shifter with a longitudinal (interdigited) junction.

Parameters
n_contact: PCell
p_contact: PCell
trace_template: PCell and _TraceTemplate

Refers to the other trace template from which information is taken to build this trace template.

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

### PhaseModulator¶

class picazzo3.modulators.phase.cell.PhaseModulator

Straight Phase Modulator PCell. Takes a trace template for the modulator, generates a phase modulator waveguide and adds transitions. Exposes the optical and electrical ports and terms of the (tapered) phase modulator waveguide.

Make sure to explicitly specify the ports to be tapered (the optical ports) in port_labels. Specify the length of the modulator in the Layout View.

Parameters
contents: PCell

the contents of the container: the child cell

trace_template: ( PCell and _WaveguideTemplate ), *None allowed*

Template for all ports, defaults to TECH.PCELLS.WG.DEFAULT.When set to None, the waveguide templates of the ports will be used.

transition_database: AutoTransitionDatabase

AutoTransitionDatabase in which the correct transition between the two trace templates can be looked up.

transitions: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>

Transitions (of type WaveguideTransitionFromPort) attached the the ports given in port_labels. Should be in the same order as port_labels.

port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*

Labels of the ports to be processed. Set to None to process all ports.

external_port_names: str

Dictionary for remapping of the port names of the contents to the external ports

modulator_trace_template: PCell and _TraceTemplate and PhaseShifterWaveguideTemplate

trace template to use for the phase modulator waveguide

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters
trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked

list of templates to apply to all ports