SCEE - Directional Couplers Models

These methods are based on the model SCEE found in [CITE PAPER WHEN PUBLISHED]. Valid ranges for wavelength is 1450nm-1650nm, width 400nm-600nm, thickness 180nm-240nm, sidewall angle 80-90 degrees and gap distance greater than 100nm. Will issue warning when outside of these ranges since results will likely be inaccurate.

Helper Functions

Base Directional Coupler Class

class SiPANN.scee.DC(width, thickness, sw_angle=90)

Abstract Class that all directional couplers inherit from. Each DC will inherit from it.

Base Class for DC. All other DC classes should be based on this one, including same functions (so documentation should be the same/similar with exception of device specific attributes). Ports are numbered as:

|       2---\      /---4       |
|            ------            |
|            ------            |
|       1---/      \---3       |
Parameters:
  • width (float or ndarray) – Width of the waveguide in nm (Valid for 400nm-600nm)
  • thickness (float or ndarray) – Thickness of waveguide in nm (Valid for 180nm-240nm)
  • sw_angle (float or ndarray, optional) – Sidewall angle of waveguide from horizontal in degrees (Valid for 80-90 degrees). Defaults to 90.
update(**kwargs)

Takes in any parameter defined by __init__ and changes it.

Parameters:attribute (float or ndarray) – Included if any device needs to have an attribute changed.
sparams(wavelength)

Returns scattering parameters.

Runs SCEE to get scattering parameters at wavelength input.

Parameters:wavelength (float or ndarray) – wavelengths to get sparams at (Valid for 1450nm-1650nm)
Returns:
  • freq (ndarray) – frequency for s_matrix in Hz, size n (number of wavelength points)
  • s_matrix (ndarray) – size (n,4,4) complex matrix of scattering parameters, in order of passed in wavelengths
predict(ports, wavelength)

Predicts the output when light is put in the specified port (see diagram above)

Parameters:
  • ports (2-tuple) – Specifies the port coming in and coming out
  • wavelength (float or ndarray) – Wavelength(s) to predict at (Valid for 1450nm-1650nm)
  • extra_arc (float, optional) – Adds phase to compensate for waveguides getting to gap function. Defaults to 0.
  • part ({"both", "mag", "ph"}, optional) – To speed up calculation, can calculate only magnitude (mag), phase (ph), or both. Defaults to both.
Returns:

k/t – The value of the light coming through

Return type:

complex ndarray

gds(filename=None, extra=0, units='microns', view=False, sbend_h=0, sbend_v=0)

Writes the geometry to the gds file.

Parameters:
  • filename (str, optional) – Location to save file to. Defaults to None.
  • extra (int, optional) – Extra straight portion to add to ends of waveguides to make room in simulation (units same as units parameter). Defaults to 0.
  • units ({'microns' or 'nms'}, optional) – Units to save gds file in. Defaults to microns.
  • view (bool, optional) – Whether to visually show gds file. Defaults to False.
  • sbend_h (int, optional) – How high to horizontally make additional sbends to move ports farther away. Sbends insert after extra. Only available in couplers with all horizontal ports (units same as units parameters). Defaults to 0
  • sbend_v (int, optional) – Same as sbend_h, but vertical distance. Defaults to 0.

Waveguide

class SiPANN.scee.Waveguide(width, thickness, length, sw_angle=90)

Lossless model for a straight waveguide.

Simple model that makes sparameters for a straight waveguide. May not be the best option, but plays nice with other models in SCEE. Ports are numbered as:

|  1 ----------- 2   |
Parameters:
  • width (float or ndarray) – Width of the waveguide in nm (Valid for 400nm-600nm)
  • thickness (float or ndarray) – Thickness of waveguide in nm (Valid for 180nm-240nm)
  • length (float or ndarray) – Length of waveguide in nm.
  • sw_angle (float or ndarray, optional) – Sidewall angle of waveguide from horizontal in degrees (Valid for 80-90 degrees). Defaults to 90.
update(**kwargs)

Takes in any parameter defined by __init__ and changes it.

Parameters:attribute (float or ndarray) – Included if any device needs to have an attribute changed.
sparams(wavelength)

Returns scattering parameters.

Runs SCEE to get scattering parameters at wavelength input.

Parameters:wavelength (float or ndarray) – wavelengths to get sparams at (Valid for 1450nm-1650nm)
Returns:s_matrix – size (2,2,n) complex matrix of scattering parameters
Return type:ndarray
predict(wavelength)

Predicts the output when light is put in port 1 and out port 2.

Parameters:wavelength (float or ndarray) – Wavelength(s) to predict at (Valid for 1450nm-1650nm)
Returns:k/t – The value of the light coming through
Return type:complex ndarray
gds(filename=None, extra=0, units='microns', view=False)

Writes the geometry to the gds file.

Parameters:
  • filename (str) – location to save file to, or if you don’t want to defaults to None
  • extra (int) –
    extra straight portion to add to ends of waveguides to make room in simulation
    (input with units same as units input)
  • units (str) – either ‘microns’ or ‘nms’. Units to save gds file in

Effective Index Finder

SiPANN.scee.get_neff(wavelength, width, thickness, sw_angle=90)

Return neff for a given waveguide profile.

Leverages Multivariate Linear Regression that maps wavelength, width, thickness and sidewall angle to effective index with silicon core and silicon dioxide cladding

Parameters:
  • wavelength (float or ndarray) – wavelength (Valid for 1450nm-1650nm)
  • width (float or ndarray) – width (Valid for 400nm-600nm)
  • thickness (float or ndarray) – thickness (Valid for 180nm-240nm)
  • sw_angle (float or ndarray) – sw_angle (Valid for 80-90 degrees)
Returns:

neff – effective index of waveguide

Return type:

float or ndarray

Integrations Coefficient Finder

SiPANN.scee.get_coeffs(wavelength, width, thickness, sw_angle)

Return coefficients and neff for a given waveguide profile as used in SCEE.

Leverages Multivariate Linear Regression that maps wavelength, width, thickness and sidewall angle to effective index and coefficients used in estimate of even and odd effective indices with silicon core and silicon dioxide cladding.

Parameters:
  • wavelength (float or ndarray) – wavelength (Valid for 1450nm-1650nm)
  • width (float or ndarray) – width (Valid for 400nm-600nm)
  • thickness (float or ndarray) – thickness (Valid for 180nm-240nm)
  • sw_angle (float or ndarray) – sw_angle (Valid for 80-90 degrees)
Returns:

  • ae (float or ndarray) – used in even mode estimation in neff + ae exp(ge * g)
  • ao (float or ndarray) – used in odd mode estimation in neff + ao exp(go * g)
  • ge (float or ndarray) – used in even mode estimation in neff + ae exp(ge * g)
  • go (float or ndarray) – used in odd mode estimation in neff + ao exp(go * g)
  • neff (float or ndarray) – effective index of waveguide

Input Cleaner

SiPANN.scee.clean_inputs(inputs)

Makes all inputs as the same shape to allow passing arrays through.

Used to make sure all inputs have the same length - ie that it’s trying to run a specific number of simulations, not a varying amount

Parameters:inputs (tuple) – can be an arbitrary mixture of floats/ndarray
Returns:inputs – returns all inputs as same size ndarrays
Return type:tuple

Coupling Devices

Symmetric Coupler

class SiPANN.scee.GapFuncSymmetric(width, thickness, gap, dgap, zmin, zmax, sw_angle=90)

This class will create arbitrarily shaped SYMMETRIC (ie both waveguides are same shape) directional couplers.

It takes in a gap function that describes the gap as one progreses through the device. Note that the shape fo the waveguide will simply be half of gap function. Also requires the derivative of the gap function for this purpose. Ports are numbered as:

|       2---\      /---4       |
|            ------            |
|            ------            |
|       1---/      \---3       |
Parameters:
  • width (float or ndarray) – Width of the waveguide in nm (Valid for 400nm-600nm)
  • thickness (float or ndarray) – Thickness of waveguide in nm (Valid for 180nm-240nm)
  • gap (function) – Gap function as one progresses along the waveguide (Must always be > 100nm)
  • dgap (function) – Derivative of the gap function
  • zmin (float) – Where to begin integration in the gap function
  • zmax (float) – Where to end integration in the gap function
  • sw_angle (float or ndarray, optional) – Sidewall angle of waveguide from horizontal in degrees (Valid for 80-90 degrees). Defaults to 90.
update(**kwargs)

Takes in any parameter defined by __init__ and changes it.

Parameters:attribute (float or ndarray) – Included if any device needs to have an attribute changed.
predict(ports, wavelength, extra_arc=0, part='both')

Predicts the output when light is put in the specified port (see diagram above)

Parameters:
  • ports (2-tuple) – Specifies the port coming in and coming out
  • wavelength (float or ndarray) – Wavelength(s) to predict at (Valid for 1450nm-1650nm)
  • extra_arc (float, optional) – Adds phase to compensate for waveguides getting to gap function. Defaults to 0.
  • part ({"both", "mag", "ph"}, optional) – To speed up calculation, can calculate only magnitude (mag), phase (ph), or both. Defaults to both.
Returns:

k/t – The value of the light coming through

Return type:

complex ndarray

gds(filename=None, extra=0, units='microns', view=False, sbend_h=0, sbend_v=0)

Writes the geometry to the gds file.

Parameters:
  • filename (str, optional) – Location to save file to. Defaults to None.
  • extra (int, optional) – Extra straight portion to add to ends of waveguides to make room in simulation (units same as units parameter). Defaults to 0.
  • units ({'microns' or 'nms'}, optional) – Units to save gds file in. Defaults to microns.
  • view (bool, optional) – Whether to visually show gds file. Defaults to False.
  • sbend_h (int, optional) – How high to horizontally make additional sbends to move ports farther away. Sbends insert after extra. Only available in couplers with all horizontal ports (units same as units parameters). Defaults to 0
  • sbend_v (int, optional) – Same as sbend_h, but vertical distance. Defaults to 0.
sparams(wavelength)

Returns scattering parameters.

Runs SCEE to get scattering parameters at wavelength input.

Parameters:wavelength (float or ndarray) – wavelengths to get sparams at (Valid for 1450nm-1650nm)
Returns:
  • freq (ndarray) – frequency for s_matrix in Hz, size n (number of wavelength points)
  • s_matrix (ndarray) – size (n,4,4) complex matrix of scattering parameters, in order of passed in wavelengths

Non-Symmetric Coupler

class SiPANN.scee.GapFuncAntiSymmetric(width, thickness, gap, zmin, zmax, arc1, arc2, arc3, arc4, sw_angle=90)

This class will create arbitrarily shaped ANTISYMMETRIC (ie waveguides are different shapes) directional couplers.

It takes in a gap function that describes the gap as one progreses through the device. Also takes in arc length of each port up till coupling point. Ports are numbered as: | 2— /—4 | | —— | | —— | | 1—/ —3 |

Parameters:
  • width (float or ndarray) – Width of the waveguide in nm (Valid for 400nm-600nm)
  • thickness (float or ndarray) – Thickness of waveguide in nm (Valid for 180nm-240nm)
  • gap (function) – Gap function as one progresses along the waveguide (Must always be > 100nm)
  • zmin (float) – Where to begin integration in the gap function
  • zmax (float) – Where to end integration in the gap function
  • arc2, arc3, arc4 (arc1,) – Arclength from entrance of each port till minimum coupling point
  • sw_angle (float or ndarray, optional) – Sidewall angle of waveguide from horizontal in degrees (Valid for 80-90 degrees). Defaults to 90.
update(**kwargs)

Takes in any parameter defined by __init__ and changes it.

Parameters:attribute (float or ndarray) – Included if any device needs to have an attribute changed.
predict(ports, wavelength, extra_arc=0, part='both')

Predicts the output when light is put in the specified port (see diagram above)

Parameters:
  • ports (2-tuple) – Specifies the port coming in and coming out
  • wavelength (float or ndarray) – Wavelength(s) to predict at (Valid for 1450nm-1650nm)
  • extra_arc (float, optional) – Adds phase to compensate for waveguides getting to gap function. Defaults to 0.
  • part ({"both", "mag", "ph"}, optional) – To speed up calculation, can calculate only magnitude (mag), phase (ph), or both. Defaults to both.
Returns:

k/t – The value of the light coming through

Return type:

complex ndarray

gds(filename=None, extra=0, units='microns', view=False, sbend_h=0, sbend_v=0)

Still needs to be implemented for this class.

sparams(wavelength)

Returns scattering parameters.

Runs SCEE to get scattering parameters at wavelength input.

Parameters:wavelength (float or ndarray) – wavelengths to get sparams at (Valid for 1450nm-1650nm)
Returns:
  • freq (ndarray) – frequency for s_matrix in Hz, size n (number of wavelength points)
  • s_matrix (ndarray) – size (n,4,4) complex matrix of scattering parameters, in order of passed in wavelengths

Coupling Straight Waveguides

class SiPANN.scee.StraightCoupler(width, thickness, gap, length, sw_angle=90)

This class will create half of a ring resonator.

It takes in a radius and gap along with usual waveguide parameters. Ports are numbered as:

|      2---------------4       |
|      1---------------3       |
Parameters:
  • width (float or ndarray) – Width of the waveguide in nm (Valid for 400nm-600nm)
  • thickness (float or ndarray) – Thickness of waveguide in nm (Valid for 180nm-240nm)
  • gap (float or ndarray) – Distance between the two waveguides edge in nm. (Must be > 100nm)
  • length (float or ndarray) – Length of both waveguides in nm.
  • sw_angle (float or ndarray, optional) – Sidewall angle of waveguide from horizontal in degrees (Valid for 80-90 degrees). Defaults to 90.
update(**kwargs)

Takes in any parameter defined by __init__ and changes it.

Parameters:attribute (float or ndarray) – Included if any device needs to have an attribute changed.
predict(ports, wavelength)

Predicts the output when light is put in the specified port (see diagram above)

Parameters:
  • ports (2-tuple) – Specifies the port coming in and coming out
  • wavelength (float or ndarray) – Wavelength(s) to predict at (Valid for 1450nm-1650nm)
  • extra_arc (float, optional) – Adds phase to compensate for waveguides getting to gap function. Defaults to 0.
  • part ({"both", "mag", "ph"}, optional) – To speed up calculation, can calculate only magnitude (mag), phase (ph), or both. Defaults to both.
Returns:

k/t – The value of the light coming through

Return type:

complex ndarray

gds(filename=None, view=False, extra=0, units='nms', sbend_h=0, sbend_v=0)

Writes the geometry to the gds file.

Parameters:
  • filename (str, optional) – Location to save file to. Defaults to None.
  • extra (int, optional) – Extra straight portion to add to ends of waveguides to make room in simulation (units same as units parameter). Defaults to 0.
  • units ({'microns' or 'nms'}, optional) – Units to save gds file in. Defaults to microns.
  • view (bool, optional) – Whether to visually show gds file. Defaults to False.
  • sbend_h (int, optional) – How high to horizontally make additional sbends to move ports farther away. Sbends insert after extra. Only available in couplers with all horizontal ports (units same as units parameters). Defaults to 0
  • sbend_v (int, optional) – Same as sbend_h, but vertical distance. Defaults to 0.
sparams(wavelength)

Returns scattering parameters.

Runs SCEE to get scattering parameters at wavelength input.

Parameters:wavelength (float or ndarray) – wavelengths to get sparams at (Valid for 1450nm-1650nm)
Returns:
  • freq (ndarray) – frequency for s_matrix in Hz, size n (number of wavelength points)
  • s_matrix (ndarray) – size (n,4,4) complex matrix of scattering parameters, in order of passed in wavelengths

Standard Directional Coupler

class SiPANN.scee.Standard(width, thickness, gap, length, H, V, sw_angle=90)

Normal/Standard Shaped Directional Coupler.

This is what most people think of when they think directional coupler. Ports are numbered as:

|       2---\      /---4       |
|            ------            |
|            ------            |
|       1---/      \---3       |
Parameters:
  • width (float or ndarray) – Width of the waveguide in nm (Valid for 400nm-600nm)
  • thickness (float or ndarray) – Thickness of waveguide in nm (Valid for 180nm-240nm)
  • gap (float or ndarray) – Minimum distance between the two waveguides edge in nm. (Must be > 100nm)
  • length (float or ndarray) – Length of the straight portion of both waveguides in nm.
  • H (float or ndarray) – Horizontal distance between end of coupler until straight portion in nm.
  • H – Vertical distance between end of coupler until straight portion in nm.
  • sw_angle (float or ndarray, optional) – Sidewall angle of waveguide from horizontal in degrees (Valid for 80-90 degrees). Defaults to 90.
update(**kwargs)

Takes in any parameter defined by __init__ and changes it.

Parameters:attribute (float or ndarray) – Included if any device needs to have an attribute changed.
predict(ports, wavelength)

Predicts the output when light is put in the specified port (see diagram above)

Parameters:
  • ports (2-tuple) – Specifies the port coming in and coming out
  • wavelength (float or ndarray) – Wavelength(s) to predict at (Valid for 1450nm-1650nm)
  • extra_arc (float, optional) – Adds phase to compensate for waveguides getting to gap function. Defaults to 0.
  • part ({"both", "mag", "ph"}, optional) – To speed up calculation, can calculate only magnitude (mag), phase (ph), or both. Defaults to both.
Returns:

k/t – The value of the light coming through

Return type:

complex ndarray

gds(filename=None, view=False, extra=0, units='nms', sbend_h=0, sbend_v=0)

Writes the geometry to the gds file.

Parameters:
  • filename (str, optional) – Location to save file to. Defaults to None.
  • extra (int, optional) – Extra straight portion to add to ends of waveguides to make room in simulation (units same as units parameter). Defaults to 0.
  • units ({'microns' or 'nms'}, optional) – Units to save gds file in. Defaults to microns.
  • view (bool, optional) – Whether to visually show gds file. Defaults to False.
  • sbend_h (int, optional) – How high to horizontally make additional sbends to move ports farther away. Sbends insert after extra. Only available in couplers with all horizontal ports (units same as units parameters). Defaults to 0
  • sbend_v (int, optional) – Same as sbend_h, but vertical distance. Defaults to 0.
sparams(wavelength)

Returns scattering parameters.

Runs SCEE to get scattering parameters at wavelength input.

Parameters:wavelength (float or ndarray) – wavelengths to get sparams at (Valid for 1450nm-1650nm)
Returns:
  • freq (ndarray) – frequency for s_matrix in Hz, size n (number of wavelength points)
  • s_matrix (ndarray) – size (n,4,4) complex matrix of scattering parameters, in order of passed in wavelengths

Half Ring

class SiPANN.scee.HalfRing(width, thickness, radius, gap, sw_angle=90)

This class will create half of a ring resonator.

It takes in a radius and gap along with usual waveguide parameters. Ports are numbered as:

|         2 \     / 4          |
|            \   /             |
|             ---              |
|         1---------3          |
Parameters:
  • width (float or ndarray) – Width of the waveguide in nm (Valid for 400nm-600nm)
  • thickness (float or ndarray) – Thickness of waveguide in nm (Valid for 180nm-240nm)
  • radius (float or ndarray) – Distance from center of ring to middle of waveguide in nm.
  • gap (float or ndarray) – Minimum distance from ring waveguide edge to straight waveguide edge in nm. (Must be > 100nm)
  • sw_angle (float or ndarray, optional) – Sidewall angle of waveguide from horizontal in degrees (Valid for 80-90 degrees). Defaults to 90.
update(**kwargs)

Takes in any parameter defined by __init__ and changes it.

Parameters:attribute (float or ndarray) – Included if any device needs to have an attribute changed.
predict(ports, wavelength)

Predicts the output when light is put in the specified port (see diagram above)

Parameters:
  • ports (2-tuple) – Specifies the port coming in and coming out
  • wavelength (float or ndarray) – Wavelength(s) to predict at (Valid for 1450nm-1650nm)
  • extra_arc (float, optional) – Adds phase to compensate for waveguides getting to gap function. Defaults to 0.
  • part ({"both", "mag", "ph"}, optional) – To speed up calculation, can calculate only magnitude (mag), phase (ph), or both. Defaults to both.
Returns:

k/t – The value of the light coming through

Return type:

complex ndarray

gds(filename=None, view=False, extra=0, units='nms')

Writes the geometry to the gds file.

Parameters:
  • filename (str, optional) – Location to save file to. Defaults to None.
  • extra (int, optional) – Extra straight portion to add to ends of waveguides to make room in simulation (units same as units parameter). Defaults to 0.
  • units ({'microns' or 'nms'}, optional) – Units to save gds file in. Defaults to microns.
  • view (bool, optional) – Whether to visually show gds file. Defaults to False.
sparams(wavelength)

Returns scattering parameters.

Runs SCEE to get scattering parameters at wavelength input.

Parameters:wavelength (float or ndarray) – wavelengths to get sparams at (Valid for 1450nm-1650nm)
Returns:
  • freq (ndarray) – frequency for s_matrix in Hz, size n (number of wavelength points)
  • s_matrix (ndarray) – size (n,4,4) complex matrix of scattering parameters, in order of passed in wavelengths

Half Racetrack Resonator

class SiPANN.scee.HalfRacetrack(width, thickness, radius, gap, length, sw_angle=90)

This class will create half of a ring resonator.

It takes in a radius and gap along with usual waveguide parameters. Ports are numbered as:

|      2 \           / 4       |
|         \         /          |
|          ---------           |
|      1---------------3       |
Parameters:
  • width (float or ndarray) – Width of the waveguide in nm (Valid for 400nm-600nm)
  • thickness (float or ndarray) – Thickness of waveguide in nm (Valid for 180nm-240nm)
  • radius (float or ndarray) – Distance from center of ring to middle of waveguide in nm.
  • gap (float or ndarray) – Minimum distance from ring waveguide edge to straight waveguide edge in nm. (Must be > 100nm)
  • length (float or ndarray) – Length of straight portion of ring waveguide in nm.
  • sw_angle (float or ndarray, optional) – Sidewall angle of waveguide from horizontal in degrees (Valid for 80-90 degrees). Defaults to 90.
update(**kwargs)

Takes in any parameter defined by __init__ and changes it.

Parameters:attribute (float or ndarray) – Included if any device needs to have an attribute changed.
predict(ports, wavelength)

Predicts the output when light is put in the specified port (see diagram above)

Parameters:
  • ports (2-tuple) – Specifies the port coming in and coming out
  • wavelength (float or ndarray) – Wavelength(s) to predict at (Valid for 1450nm-1650nm)
  • extra_arc (float, optional) – Adds phase to compensate for waveguides getting to gap function. Defaults to 0.
  • part ({"both", "mag", "ph"}, optional) – To speed up calculation, can calculate only magnitude (mag), phase (ph), or both. Defaults to both.
Returns:

k/t – The value of the light coming through

Return type:

complex ndarray

gds(filename=None, view=False, extra=0, units='nms')

Writes the geometry to the gds file.

Parameters:
  • filename (str, optional) – Location to save file to. Defaults to None.
  • extra (int, optional) – Extra straight portion to add to ends of waveguides to make room in simulation (units same as units parameter). Defaults to 0.
  • units ({'microns' or 'nms'}, optional) – Units to save gds file in. Defaults to microns.
  • view (bool, optional) – Whether to visually show gds file. Defaults to False.
sparams(wavelength)

Returns scattering parameters.

Runs SCEE to get scattering parameters at wavelength input.

Parameters:wavelength (float or ndarray) – wavelengths to get sparams at (Valid for 1450nm-1650nm)
Returns:
  • freq (ndarray) – frequency for s_matrix in Hz, size n (number of wavelength points)
  • s_matrix (ndarray) – size (n,4,4) complex matrix of scattering parameters, in order of passed in wavelengths

Double Half Ring

class SiPANN.scee.DoubleHalfRing(width, thickness, radius, gap, sw_angle=90)

This class will create two equally sized halfrings coupling.

It takes in a radius and gap along with usual waveguide parameters. Ports are numbered as:

|         2 \     / 4          |
|            \   /             |
|             ---              |
|             ---              |
|            /   \             |
|         1 /     \ 3          |
Parameters:
  • width (float or ndarray) – Width of the waveguide in nm (Valid for 400nm-600nm)
  • thickness (float or ndarray) – Thickness of waveguide in nm (Valid for 180nm-240nm)
  • radius (float or ndarray) – Distance from center of ring to middle of waveguide in nm.
  • gap (float or ndarray) – Minimum distance from ring waveguide edge to other ring waveguide edge in nm. (Must be > 100nm)
  • sw_angle (float or ndarray, optional) – Sidewall angle of waveguide from horizontal in degrees (Valid for 80-90 degrees). Defaults to 90.
update(**kwargs)

Takes in any parameter defined by __init__ and changes it.

Parameters:attribute (float or ndarray) – Included if any device needs to have an attribute changed.
predict(ports, wavelength)

Predicts the output when light is put in the specified port (see diagram above)

Parameters:
  • ports (2-tuple) – Specifies the port coming in and coming out
  • wavelength (float or ndarray) – Wavelength(s) to predict at (Valid for 1450nm-1650nm)
  • extra_arc (float, optional) – Adds phase to compensate for waveguides getting to gap function. Defaults to 0.
  • part ({"both", "mag", "ph"}, optional) – To speed up calculation, can calculate only magnitude (mag), phase (ph), or both. Defaults to both.
Returns:

k/t – The value of the light coming through

Return type:

complex ndarray

gds(filename, extra=0, units='nm', view=False)

Writes the geometry to the gds file.

Parameters:
  • filename (str, optional) – Location to save file to. Defaults to None.
  • extra (int, optional) – Extra straight portion to add to ends of waveguides to make room in simulation (units same as units parameter). Defaults to 0.
  • units ({'microns' or 'nms'}, optional) – Units to save gds file in. Defaults to microns.
  • view (bool, optional) – Whether to visually show gds file. Defaults to False.
sparams(wavelength)

Returns scattering parameters.

Runs SCEE to get scattering parameters at wavelength input.

Parameters:wavelength (float or ndarray) – wavelengths to get sparams at (Valid for 1450nm-1650nm)
Returns:
  • freq (ndarray) – frequency for s_matrix in Hz, size n (number of wavelength points)
  • s_matrix (ndarray) – size (n,4,4) complex matrix of scattering parameters, in order of passed in wavelengths

Pushed Half Ring

class SiPANN.scee.AngledHalfRing(width, thickness, radius, gap, theta, sw_angle=90)

This class will create a halfring resonator with a pushed side.

It takes in a radius and gap along with usual waveguide parameters. Ports are numbered as:

|      2  \        / 4       |
|          \      /          |
|      1--- \    / ---3      |
|          \ \  / /          |
|           \ -- /           |
|            ----            |
Parameters:
  • width (float or ndarray) – Width of the waveguide in nm (Valid for 400nm-600nm)
  • thickness (float or ndarray) – Thickness of waveguide in nm (Valid for 180nm-240nm)
  • radius (float or ndarray) – Distance from center of ring to middle of waveguide in nm.
  • gap (float or ndarray) – Minimum distance from ring waveguide edge to straight waveguide edge in nm. (Must be > 100nm)
  • theta (float or ndarray) – Angle that the straight waveguide is curved in radians (???).
  • sw_angle (float or ndarray, optional (Valid for 80-90 degrees)) –
update(**kwargs)

Takes in any parameter defined by __init__ and changes it.

Parameters:attribute (float or ndarray) – Included if any device needs to have an attribute changed.
predict(ports, wavelength)

Predicts the output when light is put in the specified port (see diagram above)

Parameters:
  • ports (2-tuple) – Specifies the port coming in and coming out
  • wavelength (float or ndarray) – Wavelength(s) to predict at (Valid for 1450nm-1650nm)
  • extra_arc (float, optional) – Adds phase to compensate for waveguides getting to gap function. Defaults to 0.
  • part ({"both", "mag", "ph"}, optional) – To speed up calculation, can calculate only magnitude (mag), phase (ph), or both. Defaults to both.
Returns:

k/t – The value of the light coming through

Return type:

complex ndarray

gds(filename, extra=0, units='nm', view=False)

Writes the geometry to the gds file.

Parameters:
  • filename (str, optional) – Location to save file to. Defaults to None.
  • extra (int, optional) – Extra straight portion to add to ends of waveguides to make room in simulation (units same as units parameter). Defaults to 0.
  • units ({'microns' or 'nms'}, optional) – Units to save gds file in. Defaults to microns.
  • view (bool, optional) – Whether to visually show gds file. Defaults to False.
sparams(wavelength)

Returns scattering parameters.

Runs SCEE to get scattering parameters at wavelength input.

Parameters:wavelength (float or ndarray) – wavelengths to get sparams at (Valid for 1450nm-1650nm)
Returns:
  • freq (ndarray) – frequency for s_matrix in Hz, size n (number of wavelength points)
  • s_matrix (ndarray) – size (n,4,4) complex matrix of scattering parameters, in order of passed in wavelengths