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.
See also
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.
See also
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.
See also
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.
See also
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.
See also
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.
See also
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.
See also
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.
See also
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.
See also
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.
See also
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.
See also
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
- links: 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
- links: 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
- links: 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
See also
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
See also
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
See also
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
See also
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
See also
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
See also
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 <-----------> cladding_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 <---------------------> cladding_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 <--------> cladding_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
Transitions¶
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 tototal_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 tototal_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 forminstname: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}, links=[ ("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 forminstname: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, theIoFibcoupGeneric
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.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 inTECH.PCELLS.WG.DEFAULT
. However, if an element of the list isNone
, it will use the trace template of the actual port. The same holds foreast_transition_lengths
. This can be manually specified by the user, but if a value in the list is set toNone
, the default length of that transition will be used.Then, the ports are fanned out to the fixed
y_spacing
of the fiber couplers. The length of that Fanout can be specified througheast_fanout_length
. Bend radius and rounding algorithm is shared between all ports in the parameterbend_radius
androunding_algorithm
. Ifwest_bundle_traces
isTrue
, the cover layers will be drawn over the Fanout. This can help reduce DRC errors.Then, the waveguides are transitioned to another waveguide template, specified in
east_connect_trace_templates
. By default, this is the same template aseast_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 theeast_connect_transition_lengths
.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
.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() wg_t1.Layout(core_width=7.0, cladding_width=8.0) 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 = IoColumn(name="iocol", adapter=IoFibcoupGeneric, max_n_o_lines=100) my_column.Layout(south_east=(1500.0, 0.0)) my_column.add(my_mmi) my_column.add(my_mmi, relative_offset=(0.0, 50.0), transformation=i3.Rotation(rotation=180.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.
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 inTECH.PCELLS.WG.DEFAULT
. However, if set toNone
, the trace will use the trace template of the actual port. The same holds foreast_transition_length
. This can be manually specified by the user, but if a value in the list is set toNone
, the default length of that type of transition will be used.Then, the ports are fanned out to the fixed
y_spacing
of the fiber couplers. The length of that Fanout can be specified througheast_fanout_length
. Similarly, bend radius and rounding algorithm can be set through the parameterbend_radius
androunding_algorithm
. Ifwest_bundle_traces
isTrue
, the cover layers will be drawn over the Fanout. This can help reduce DRC errors.Then, the waveguides are transitioned to another waveguide template, specified in
east_connect_trace_template
. By default, this is the same template aseast_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 theeast_connect_transition_length
.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
.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() wg_t1.Layout(core_width=7.0, cladding_width=8.0) 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 = IoColumn(name="iocol", adapter=IoFibcoupEastWest, max_n_o_lines=100) my_column.Layout(south_east=(1200.0, 0.0)) my_column.add(my_mmi) my_column.add(my_mmi, relative_offset=(0.0, 50.0), transformation=i3.Rotation(rotation=180.0)) layout = my_column.Layout() layout.visualize(annotate=True)
IoFibcoup¶
- class picazzo3.container.iofibcoup.IoFibcoup
Adapter for grating fiber couplers.
The component East and West ports are routed towards the East and West, respectively. For this routing, they go through several steps.
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 inTECH.PCELLS.WG.DEFAULT
. However, if set toNone
, the trace will use the trace template of the actual port. The same holds fortransition_length
. This can be manually specified by the user, but if a value in the list is set toNone
, the default length of that type of transition will be used.Then, the ports are fanned out to the fixed
y_spacing
of the fiber couplers. The length of that Fanout can be specified throughfanout_length
. Similarly, bend radius and rounding algorithm can be set through the parameterbend_radius
androunding_algorithm
. Ifbundle_traces
isTrue
, the cover layers will be drawn over the Fanout. This can help reduce DRC errors.Then, the waveguides are transitioned to another waveguide template, specified in
east_connect_trace_template
. By default, this is the same template astrace_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 theconnect_transition_length
.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
.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() wg_t1.Layout(core_width=7.0, cladding_width=8.0) 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 my_column = IoColumn(name="iocol", adapter=IoFibcoup, max_n_o_lines=100) layout = my_column.Layout(south_east=(1400.0, 0.0)) my_column.add(my_mmi) my_column.add(my_mmi, relative_offset=(0.0, 50.0), transformation=i3.Rotation(rotation=180.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’>
waveguides added to the contents
- 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]) shape.add_polar(10.0, p.angle_deg) 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’>
waveguides added to the contents
- 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]) shape.add_polar(15.0, p.angle_deg) shape.add_polar(15.0, p.angle_deg + 90.0) shapes.append(shape) my_container = ContainerWithRoundedWaveguides( name="my_waveguide_container3", contents=my_ring, port_labels=port_labels ) layout = my_container.Layout(routes=shapes, bend_radius=10.0) 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]) shape.add_polar(15.0, p.angle_deg) shape.add_polar(15.0, p.angle_deg + 30.0) shapes.append(shape) my_container = ContainerWithRoundedWaveguideBundle( name="my_waveguide_container_4", contents=my_ring, port_labels=port_labels ) layout = my_container.Layout(routes=shapes, bend_radius=10.0, area_layer_on=True) 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’>
waveguides added to the contents
- 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() wire_t.Layout(core_width=2.0, cladding_width=6.0) 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
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