class picazzo3.wg.grating.cell.WaveguideSectionsGratingPeriod(*args, **kwargs)

waveguide grating period consisting of concatenated waveguide sections. At the logical level, the waveguides are connected using WaveguideReflectors, which result in a model based on simple Fresnel reflection.


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

List of waveguide templates that make up a grating period

wg_template: PCell and _WaveguideTemplate, optional

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

cell_instances: _PCellInstanceDict, optional

name: optional

The unique name of the pcell



section_lengths: list<number >= 0>, optional

List of lengths for the waveguide templates

view_name: str, optional

The name of the view

length: float and Real, number and number >= 0, optional

Length of the grating period.

grids_per_unit: locked

Number of grid cells per design unit

units_per_grid: locked

Ratio of grid cell and design unit

grid: float and number > 0, locked

design grid. Extracted by default from TECH.METRICS.GRID

unit: float and number > 0, locked

design unit. Extracted by default from TECH.METRICS.UNIT


""" How to create a fully customized non-uniform grating by
constructing period unit cells of different waveguide sections.

from technologies import silicon_photonics
from ipkiss3 import all as i3
from picazzo3.wg.grating import WaveguideNonUniformGrating, WaveguideSectionsGratingPeriod
from picazzo3.traces.wire_wg import WireWaveguideTemplate
from picazzo3.traces.slot_wg import SlotWaveguideTemplate

# 2 templates to make a single period unit cell
t1 = WireWaveguideTemplate(name="wire_t")
t1.Layout(core_width=0.6, cladding_width=3.0)

t2 = SlotWaveguideTemplate(name="slot_t")
t2.Layout(core_width=0.6, slot_width=0.15, cladding_width=3.0)

# 3 different grating period unit cells
period1 = WaveguideSectionsGratingPeriod(name="period1",
                                         wg_templates=[t1, t2, t1])
period1.Layout(section_lengths=[0.2, 0.3, 0.2])

period2 = WaveguideSectionsGratingPeriod(name="period2",
                                         wg_templates=[t1, t2, t1])
period2.Layout(section_lengths=[0.13, 0.4, 0.13])

period3 = WaveguideSectionsGratingPeriod(name="period3",
                                         wg_templates=[t1, t2, t1])
period3.Layout(section_lengths=[0.11, 0.5, 0.11])

# a nonuniform grating with different starting and ending cells (apodized)
grating = WaveguideNonUniformGrating(name="my_nonuniform_grating_sections",
                                     period_cells=[period1, period2,
                                                   period3, period3, period3, period3,
                                                   period3, period3, period3, period3,
                                                   period3, period3, period3, period3,
                                                   period2, period1
layout = grating.Layout()