Mode converters

Linear tapers

Below is a standard taper class that can be used to linearly taper the waveguide width (such as for inverse tapers commonly used for fiber-to-chip coupling).

class picwriter.components.Taper(wgt, length, end_width, start_width=None, end_clad_width=None, extra_clad_length=0, port=(0, 0), direction=u'EAST')

Taper Cell class.

Args:
  • wgt (WaveguideTemplate): WaveguideTemplate object
  • length (float): Length of the taper
  • end_width (float): Final width of the taper (initial width received from WaveguieTemplate)
Keyword Args:
  • start_width (float): Beginning width of the taper. Defaults to the waveguide width provided by the WaveguideTemplate object.
  • end_clad_width (float): Clad width at the end of the taper. Defaults to the regular clad width.
  • extra_clad_length (float): Extra cladding beyond the end of the taper. Defaults to 0.
  • port (tuple): Cartesian coordinate of the input port. Defaults to (0,0).
  • direction (string): Direction that the component will point towards, can be of type ‘NORTH’, ‘WEST’, ‘SOUTH’, ‘EAST’, OR an angle (float, in radians).
Members:
  • portlist (dict): Dictionary with the relevant port information
Portlist format:
  • portlist[‘input’] = {‘port’: (x1,y1), ‘direction’: ‘dir1’}
  • portlist[‘output’] = {‘port’: (x2, y2), ‘direction’: ‘dir2’}

Where in the above (x1,y1) is the same as the ‘port’ input, (x2, y2) is the end of the taper, and ‘dir1’, ‘dir2’ are of type ‘NORTH’, ‘WEST’, ‘SOUTH’, ‘EAST’, or an angle in radians. ‘Direction’ points towards the waveguide that will connect to it.

../_images/taper.png

Strip-to-slot mode converters

class picwriter.components.StripSlotConverter(wgt_input, wgt_output, length1, length2, start_rail_width, end_strip_width, d, input_strip=None, port=(0, 0), direction=u'EAST')

Strip-to-Slot Side Converter Cell class. Adiabatically transforms a strip to a slot waveguide mode, with two sections. Section 1 introduces a narrow waveguide alongside the input strip waveguide and gradually lowers the gap between the strip waveguide and narrow side waveguide. Section 2 gradually converts the widths of the two waveguides until they are equal to the slot rail widths.

Args:
  • wgt_input (WaveguideTemplate): WaveguideTemplate object for the input waveguide (should be either of type strip or slot).
  • wgt_output (WaveguideTemplate): WaveguideTemplate object for the output waveguide (should be either of type strip or slot, opposite of the input type).
  • length1 (float): Length of section 1 that gradually changes the distance between the two waveguides.
  • length2 (float): Length of section 2 that gradually changes the widths of the two waveguides until equal to the slot waveguide rail widths.
  • start_rail_width (float): Width of the narrow waveguide appearing next to the strip waveguide.
  • end_strip_width (float): Width of the strip waveguide at the end of length1 and before length2
  • d (float): Distance between the outer edge of the strip waveguide and the start of the slot waveguide rail.
Keyword Args:
  • input_strip (Boolean): If True, sets the input port to be the strip waveguide side. If False, slot waveguide is on the input. Defaults to None, in which case the input port waveguide template is used to choose.
  • port (tuple): Cartesian coordinate of the input port. Defaults to (0,0).
  • direction (string): Direction that the component will point towards, can be of type ‘NORTH’, ‘WEST’, ‘SOUTH’, ‘EAST’, OR an angle (float, in radians)
Members:
  • portlist (dict): Dictionary with the relevant port information
Portlist format:
  • portlist[‘input’] = {‘port’: (x1,y1), ‘direction’: ‘dir1’}
  • portlist[‘output’] = {‘port’: (x2, y2), ‘direction’: ‘dir2’}

Where in the above (x1,y1) is the same as the ‘port’ input, (x2, y2) is the end of the taper, and ‘dir1’, ‘dir2’ are of type ‘NORTH’, ‘WEST’, ‘SOUTH’, ‘EAST’, or an angle in radians. ‘Direction’ points towards the waveguide that will connect to it.

Note: The waveguide and cladding layer/datatype are taken from the wgt_slot by default.

../_images/stripslotconverter.png
class picwriter.components.StripSlotMMIConverter(wgt_input, wgt_output, w_mmi, l_mmi, length, input_strip=None, port=(0, 0), direction=u'EAST')

Strip-to-Slot MMI Converter Cell class. For more information on this specific type of strip to slot mode converter, please see the original papers at https://doi.org/10.1364/OL.39.005665 and https://doi.org/10.1364/OE.24.007347.

Args:
  • wgt_input (WaveguideTemplate): WaveguideTemplate object for the input waveguide (should be either of type strip or slot).
  • wgt_output (WaveguideTemplate): WaveguideTemplate object for the output waveguide (should be either of type strip or slot, opposite of the input type).
  • w_mmi (float): Width of the MMI region.
  • l_mmi (float): Length of the MMI region.
  • length (float): Length of the entire mode converter (MMI region + tapered region on slot waveguide side).
Keyword Args:
  • input_strip (Boolean): If True, sets the input port to be the strip waveguide side. If False, slot waveguide is on the input. Defaults to None, in which case the input port waveguide template is used to choose.
  • port (tuple): Cartesian coordinate of the input port. Defaults to (0,0).
  • direction (string): Direction that the component will point towards, can be of type ‘NORTH’, ‘WEST’, ‘SOUTH’, ‘EAST’, OR an angle (float, in radians)
Members:
  • portlist (dict): Dictionary with the relevant port information
Portlist format:
  • portlist[‘input’] = {‘port’: (x1,y1), ‘direction’: ‘dir1’}
  • portlist[‘output’] = {‘port’: (x2, y2), ‘direction’: ‘dir2’}

Where in the above (x1,y1) is the same as the ‘port’ input, (x2, y2) is the end of the taper, and ‘dir1’, ‘dir2’ are of type ‘NORTH’, ‘WEST’, ‘SOUTH’, ‘EAST’, or an angle in radians. ‘Direction’ points towards the waveguide that will connect to it.

Note: The waveguide and cladding layer/datatype are taken from the wgt_slot by default.

../_images/stripslotmmiconverter.png
class picwriter.components.StripSlotYConverter(wgt_input, wgt_output, length, d, end_strip_width=0, end_slot_width=0, input_strip=None, port=(0, 0), direction=u'EAST')

Strip-to-Slot Y Converter Cell class. For more information on this specific type of strip to slot mode converter, please see the original paper at https://doi.org/10.1364/OL.34.001498.

Args:
  • wgt_input (WaveguideTemplate): WaveguideTemplate object for the input waveguide (should be either of type strip or slot).
  • wgt_output (WaveguideTemplate): WaveguideTemplate object for the output waveguide (should be either of type strip or slot, opposite of the input type).
  • length (float): Length of the tapered region.
  • d (float): Distance between the outer edge of the strip waveguide and the start of the slot waveguide rail.
Keyword Args:
  • end_strip_width (float): End width of the strip waveguide (at the narrow tip). Defaults to 0.
  • end_slot_width (float): End width of the slot waveguide (at the narrow tip). Defaults to 0.
  • input_strip (Boolean): If True, sets the input port to be the strip waveguide side. If False, slot waveguide is on the input. Defaults to None, in which case the input port waveguide template is used to choose.
  • port (tuple): Cartesian coordinate of the input port. Defaults to (0,0).
  • direction (string): Direction that the component will point towards, can be of type ‘NORTH’, ‘WEST’, ‘SOUTH’, ‘EAST’, OR an angle (float, in radians)
Members:
  • portlist (dict): Dictionary with the relevant port information
Portlist format:
  • portlist[‘input’] = {‘port’: (x1,y1), ‘direction’: ‘dir1’}
  • portlist[‘output’] = {‘port’: (x2, y2), ‘direction’: ‘dir2’}

Where in the above (x1,y1) is the same as the ‘port’ input, (x2, y2) is the end of the taper, and ‘dir1’, ‘dir2’ are of type ‘NORTH’, ‘WEST’, ‘SOUTH’, ‘EAST’, or an angle in radians. ‘Direction’ points towards the waveguide that will connect to it.

Note: The waveguide and cladding layer/datatype are taken from the wgt_slot by default.

../_images/stripslotyconverter.png