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

out-of-plane angle of the grating coupler

socket: PCell and WgSocket

socket of the fiber coupler

grating: PCell

grating of this fiber 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)


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

process: ProcessLayer

default process used for the grating

socket_straight_extension: Coord2

tuple: straight extension at start and end of socket

spread_angle: float

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 and ( Alphanumeric string or Contains _$ )

The name of the view

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

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

ellipse_radii_x: list

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

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

end_angles: list

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

line_widths: list

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


start_angles: list

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

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

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

socket_length: float and number > 0

length of the straight waveguide socket

socket_transformation: GenericNoDistortTransform

Other Parameters:

n_o_lines: int and number > 0, locked

Number of trenches.


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)),