- 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.
- 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.
- class Layout¶
- straights: Coord2 and number >= 0
Parameters for the couplers. This is a list of dicts, and the length of the list should be the same as the number of couplers
- view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.
The name of the view
- shape_position: Coord2
Translation of the shape.
- area_layer_on: ( bool, bool_, bool or int )
When True, the Ring area will be covered by i3.Rectangles on all cover layers of the ring waveguide template.
list of coupler transformations
- manhattan: ( bool, bool_, bool or int )
Adds rectangular blocks in the bends to avoid as much as possible non-manhattan angles.
- angle_step: float and number > 0
Angle step for rounding.
- bend_radius: float and number > 0
Bend radius for the auto-generated bends.
Rounding algorithm used to generate the bends. Can be circular, spline, ….
- Other Parameters
- shape: locked
- shapes: locked
Shapes of the ring segments. Locked, as there is only 1 ring segment. Use ‘shape’ instead
"""This example demonstrates a simple rounded rectangular ring consisting of a user-defined waveguide template. The straights parameter defines the straight section along the X and Y axis. """ from technologies import silicon_photonics # noqa: F401 from ipkiss3 import all as i3 from picazzo3.filters.ring import RingRect from picazzo3.traces.wire_wg.trace import WireWaveguideTemplate wg_t = WireWaveguideTemplate(name="wg_template_3") wg_t.Layout(core_width=0.7, core_process=i3.TECH.PROCESS.FC) ring = RingRect(name="my_rectring", ring_trace_template=wg_t) layout = ring.Layout(straights=(i3.TECH.WG.SHORT_STRAIGHT, i3.TECH.WG.SHORT_STRAIGHT + 3.0)) layout.visualize(annotate=True)
""" We create a custom ring with a custom trace template and a custom coupler. You can use any trace template for the ring and any PCell for the coupler. """ from technologies import silicon_photonics # noqa: F401 from ipkiss3 import all as i3 from picazzo3.traces.slot_wg.trace import SlotWaveguideTemplate from picazzo3.filters.ring import RingRect from picazzo3.traces.wire_wg import WireWaveguideTemplate length_ring = 50.0 bend_radius = 10.0 height_ring = 10.0 # We make the coupler wire_wg_t = WireWaveguideTemplate() coupler = i3.Waveguide(trace_template=wire_wg_t) coupler.Layout(shape=[(-(length_ring + 3 * bend_radius) / 2, 0), ((3 * bend_radius + length_ring) / 2, 0)]) # Create the waveguide template for the ring wg_t = SlotWaveguideTemplate() wg_t.Layout(core_width=0.5, slot_width=0.12, cladding_width=2 * 3.0 + 0.5) # We make the ring ring = RingRect(ring_trace_template=wg_t, couplers=[coupler]) layout = ring.Layout( straights=(length_ring, height_ring), bend_radius=bend_radius, coupler_transformations=[i3.Translation((0, -height_ring - bend_radius + 4.3))], ) # Control spacing here. layout.visualize(annotate=True)