class picazzo3.fibcoup.curved.cell.FiberCouplerCurvedGratingGeneric(*args, **kwargs)

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.


inclination: float, optional

out-of-plane angle of the grating coupler

socket: PCell and WgSocket, optional

socket of the fiber coupler

grating: PCell, optional

grating of this fiber coupler

start_trace_template: PCell and _WaveguideTemplate, optional

start waveguide for the socket waveguide (narrow side)

wide_trace_template: PCell and _WaveguideTemplate, optional

end waveguide for the socket waveguide (broad side)

cell_instances: _PCellInstanceDict, optional

name: optional

The unique name of the pcell



When using this class you have to specify centers, ellipse_radii_x, ellipse_radii_y, start_angles, end_angles, line_widths as a list of of numbers. A fiber grating coupler composed of ellispes using those parameters will be constructed on a LinearTransitionSocket.

It is advised (but not strictly required) to place the intended location of the fiber in the origin of your component. To make sure that this the case you can use socket_transformation and grating_transformation to independently transform both the socket and the grating.

You can also add extensions to your socket by using the property socket_straight_extension.


grating_transformation: GenericNoDistortTransform, optional

purpose: optional

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

extension of the wide side of the socket, asymmetric with respect to the specified center

socket_straight_extension: Coord2, optional

tuple: straight extension at start and end of socket

spread_angle: float, optional

Angle in degrees of the far field radiation field of the socket. By default this is set to be equal to the angle of the taper that is set by its length and the width of the core of input and output waveguides.

view_name: str, optional

The name of the view

centers: list and List with type restriction, allowed types: <class ‘ipkiss.geometry.coord.Coord2’>, optional

List of centers for the ellipses. By default [i3.Coord2(0, 0)] * TECH.IO.FIBCOUP.CURVED.GRATING.N_O_LINES

ellipse_radii_x: list, optional

List of x radii of the ellipses. By default a list of radii matching the number of center and a period of TECH.IO.FIBCOUP.CURVED.GRATING.PERIOD

ellipse_radii_y: list, optional

List of y radii of the ellipses. By default identical to ellipse_radii_y

end_angles: list, optional

List of the end angle for each ellipse. By default 360 - start_angles

line_widths: list, optional

List of the linewidth of the trench of each ellipse. By default TECH.IO.FIBCOUP.CURVED.GRATING.PERIOD / 2.0 for all lines

process: ProcessLayer, optional

default process used for the grating

start_angles: list, optional

List of the start angle in degrees for each ellipse. By default 180 - TECH.FIBCOUP.DEFAULT_ANGLE_SPAN / 2.0 for all lines

socket_length: float and number > 0, optional

length of the straight waveguide socket

socket_transformation: GenericNoDistortTransform, optional

grids_per_unit: locked

Number of grid cells per design unit

n_o_lines: int and number > 0, locked

Number of trenches.

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


from technologies import silicon_photonics
from ipkiss3 import all as i3

from picazzo3.fibcoup.curved import FiberCouplerCurvedGratingGeneric
from picazzo3.traces.wire_wg import WireWaveguideTemplate

# Creating the wire templates for the socket.
start_wg_tmpl = WireWaveguideTemplate()
start_wg_tmpl.Layout(core_width=0.5, cladding_width=2 * i3.TECH.WG.TRENCH_WIDTH + 0.5)
end_wg_tmpl = WireWaveguideTemplate()
end_wg_tmpl.Layout(core_width=17.0, cladding_width=2 * i3.TECH.WG.TRENCH_WIDTH + 17.0)

fc_cell = FiberCouplerCurvedGratingGeneric(start_trace_template=start_wg_tmpl,

fc_layout = fc_cell.Layout(centers=[i3.Coord2(0, 0) for i in range(30)],
                           ellipse_radii_x=[i + 1 for i in range(30)],
                           ellipse_radii_y=[i + 0.9 for i in range(30)],
                           start_angles=[180.0 - 15 for i in range(30)],
                           end_angles=[180.0 + 15 for i in range(30)],
                           line_widths=[0.2 for i in range(30)],
                           socket_length = 30,
                           socket_transformation = i3.Translation(translation=(-10.0,0.0)),
                           grating_transformation = i3.Translation(translation=(20,0)),