Welcome to SiPANN’s documentation!

class SiPANN.dc.AngledRR(width, thickness, radius, gap, theta, sw_angle=90)
clean_args(wavelength)

Makes sure all attributes are the same size

gds(self, extra=0, units='nm')

Writes the geometry to the gds file

Parameters:
  • (str) (units) –
  • (int) (sbend_v) – (input with units same as units input)
  • (str)
  • (bool) (view) –
  • (int) – Sbends insert after extra. Only available in couplers with all horizontal ports (input with units same as units input)
  • (int)
predict(ports, wavelength)

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

Parameters:
  • (2-tuple) (ports) –
  • wavelength (float or np.ndarray) – wavelength(s) to predict at
Returns:

k/t (complex np.ndarray)

Return type:

returns the value of the light coming through

update(**kwargs)

Takes in any parameter defined by __init__ and changes it.

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

Abstract Class that all directional couplers inherit from. Each DC will inherit from it and have initial arguments (in this order):

width, thickness, sw_angle=90

Also, each will have additional arguments as follows (in this order):

GapFuncSymmetric: gap (func), dgap (func), zmin, zmax RR: radius, gap Racetrack Resonator: radius, gap, length Straight: gap, length Standard: gap, length, H, V DoubleRR: radius, gap CurvedRR: radius, gap, theta

Base Class for DC. All other DC classes should be based on this one, including same functions (so
documentation should be the same). Ports are numbered as:
2— /—4

1—/ —3

clean_args(wavelength)

Makes sure all attributes are the same size

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

Writes the geometry to the gds file

Parameters:
  • (str) (units) –
  • (int) (sbend_v) – (input with units same as units input)
  • (str)
  • (bool) (view) –
  • (int) – Sbends insert after extra. Only available in couplers with all horizontal ports (input with units same as units input)
  • (int)
predict(ports, wavelength)

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

Parameters:
  • (2-tuple) (ports) –
  • wavelength (float or np.ndarray) – wavelength(s) to predict at
Returns:

k/t (complex np.ndarray)

Return type:

returns the value of the light coming through

sparams(wavelength)

Returns sparams :param wavelength: wavelengths to get sparams at :type wavelength: float or np.ndarray

Returns:
  • freq (np.ndarray) (frequency for s_matrix in Hz, size n (number of wavelength points))
  • s_matrix (np.ndarray) (size (4,4,n) complex matrix of scattering parameters)
update(**kwargs)

Takes in any parameter defined by __init__ and changes it.

class SiPANN.dc.DoubleRR(width, thickness, radius, gap, sw_angle=90)
clean_args(wavelength)

Makes sure all attributes are the same size

gds(self, extra=0, units='nm')

Writes the geometry to the gds file

Parameters:
  • (str) (units) –
  • (int) (sbend_v) – (input with units same as units input)
  • (str)
  • (bool) (view) –
  • (int) – Sbends insert after extra. Only available in couplers with all horizontal ports (input with units same as units input)
  • (int)
predict(ports, wavelength)

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

Parameters:
  • (2-tuple) (ports) –
  • wavelength (float or np.ndarray) – wavelength(s) to predict at
Returns:

k/t (complex np.ndarray)

Return type:

returns the value of the light coming through

update(**kwargs)

Takes in any parameter defined by __init__ and changes it.

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

Makes sure all attributes are the same size

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

Writes the geometry to the gds file

Parameters:
  • (str) (units) –
  • (int) (sbend_v) – (input with units same as units input)
  • (str)
  • (bool) (view) –
  • (int) – Sbends insert after extra. Only available in couplers with all horizontal ports (input with units same as units input)
  • (int)
predict(ports, wavelength, extra_arc=0, part='both')

Has aditional ‘part’ parameter in case you only want magnitude (mag) or phase (ph)

update(**kwargs)

Takes in any parameter defined by __init__ and changes it.

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

Makes sure all attributes are the same size

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

Writes the geometry to the gds file

Parameters:
  • (str) (units) –
  • (int) (sbend_v) – (input with units same as units input)
  • (str)
  • (bool) (view) –
  • (int) – Sbends insert after extra. Only available in couplers with all horizontal ports (input with units same as units input)
  • (int)
predict(ports, wavelength, extra_arc=0, part='both')

Has aditional ‘part’ parameter in case you only want magnitude (mag) or phase (ph)

update(**kwargs)

Takes in any parameter defined by __init__ and changes it.

class SiPANN.dc.RR(width, thickness, radius, gap, sw_angle=90)
clean_args(wavelength)

Makes sure all attributes are the same size

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

Writes the geometry to the gds file

Parameters:
  • (str) (units) –
  • (int) (sbend_v) – (input with units same as units input)
  • (str)
  • (bool) (view) –
  • (int) – Sbends insert after extra. Only available in couplers with all horizontal ports (input with units same as units input)
  • (int)
predict(ports, wavelength)

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

Parameters:
  • (2-tuple) (ports) –
  • wavelength (float or np.ndarray) – wavelength(s) to predict at
Returns:

k/t (complex np.ndarray)

Return type:

returns the value of the light coming through

update(**kwargs)

Takes in any parameter defined by __init__ and changes it.

class SiPANN.dc.Racetrack(width, thickness, radius, gap, length, sw_angle=90)
clean_args(wavelength)

Makes sure all attributes are the same size

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

Writes the geometry to the gds file

Parameters:
  • (str) (units) –
  • (int) (sbend_v) – (input with units same as units input)
  • (str)
  • (bool) (view) –
  • (int) – Sbends insert after extra. Only available in couplers with all horizontal ports (input with units same as units input)
  • (int)
predict(ports, wavelength)

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

Parameters:
  • (2-tuple) (ports) –
  • wavelength (float or np.ndarray) – wavelength(s) to predict at
Returns:

k/t (complex np.ndarray)

Return type:

returns the value of the light coming through

update(**kwargs)

Takes in any parameter defined by __init__ and changes it.

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

Makes sure all attributes are the same size

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

Writes the geometry to the gds file

Parameters:
  • (str) (units) –
  • (int) (sbend_v) – (input with units same as units input)
  • (str)
  • (bool) (view) –
  • (int) – Sbends insert after extra. Only available in couplers with all horizontal ports (input with units same as units input)
  • (int)
predict(ports, wavelength)

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

Parameters:
  • (2-tuple) (ports) –
  • wavelength (float or np.ndarray) – wavelength(s) to predict at
Returns:

k/t (complex np.ndarray)

Return type:

returns the value of the light coming through

update(**kwargs)

Takes in any parameter defined by __init__ and changes it.

class SiPANN.dc.Straight(width, thickness, gap, length, sw_angle=90)
clean_args(wavelength)

Makes sure all attributes are the same size

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

Writes the geometry to the gds file

Parameters:
  • (str) (units) –
  • (int) (sbend_v) – (input with units same as units input)
  • (str)
  • (bool) (view) –
  • (int) – Sbends insert after extra. Only available in couplers with all horizontal ports (input with units same as units input)
  • (int)
predict(ports, wavelength)

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

Parameters:
  • (2-tuple) (ports) –
  • wavelength (float or np.ndarray) – wavelength(s) to predict at
Returns:

k/t (complex np.ndarray)

Return type:

returns the value of the light coming through

update(**kwargs)

Takes in any parameter defined by __init__ and changes it.

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

Lossless model for a straight waveguide. Ports are numbered as:

1 ============== 2

clean_args(wavelength)

Makes sure all attributes are the same size

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

Writes the geometry to the gds file

Parameters:
  • (str) (units) –
  • (int) (extra) – (input with units same as units input)
  • (str)
predict(wavelength, ports=(1, 2))

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

Parameters:
  • wavelength (float or np.ndarray) – wavelength(s) to predict at
  • (2-tuple) (ports) –
Returns:

k/t (complex np.ndarray)

Return type:

returns the value of the light coming through

sparams(wavelength)

Returns sparams :param wavelength: wavelengths to get sparams at :type wavelength: float or np.ndarray

Returns:
  • freq (np.ndarray) (frequency for s_matrix in Hz, size n (number of wavelength points))
  • s_matrix (np.ndarray) (size (4,4,n) complex matrix of scattering parameters)
update(**kwargs)

Takes in any parameter defined by __init__ and changes it.

SiPANN.dc.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:(tuple) (inputs) –
Returns:inputs (tuple)
Return type:returns all inputs as same size np.ndarrays
SiPANN.dc.get_closed_ans(ae, ao, ge, go, neff, wavelength, gap, B, xe, xo, offset, trig, z_dist)

Return coupling as found in Columbia paper

Uses general form of closed form solutions as found in M. Bahadori et al., “Design Space Exploration of Microring Resonators in Silicon Photonic Interconnects: Impact of the Ring Curvature,” in Journal of Lightwave Technology, vol. 36, no. 13, pp. 2767-2782, 1 July1, 2018..

Parameters:
  • ae (float or np.ndarray) – used in even mode estimation in neff + ae exp(ge * g)
  • ao (float or np.ndarray) – used in odd mode estimation in neff + ao exp(go * g)
  • ge (float or np.ndarray) – used in even mode estimation in neff + ae exp(ge * g)
  • go (float or np.ndarray) – used in odd mode estimation in neff + ao exp(go * g)
  • neff (float or np.ndarray) – effective index of waveguide
  • wavelength (float or np.ndarray) – wavelength
  • gap (float or np.ndarray) – gap distance
  • (function) (B) –
  • xe (float or np.ndarray) – as found in paper
  • xo (float or np.ndarray) – as found in paper
  • offset (float or np.ndarray) – 0 or pi/2 depending on through/cross coupling
  • trig (float or np.ndarray) – sin or cos depending on through/cross coupling
  • z_dist (float or np.ndarray) – distance light will travel
Returns:

k/t (complex np.ndarray)

Return type:

coupling coefficient found

SiPANN.dc.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 np.ndarray) – wavelength
  • width (float or np.ndarray) – width
  • thickness (float or np.ndarray) – thickness
  • sw_angle (float or np.ndarray) – sw_angle
Returns:

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

SiPANN.dc.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 np.ndarray) – wavelength
  • width (float or np.ndarray) – width
  • thickness (float or np.ndarray) – thickness
  • sw_angle (float or np.ndarray) – sw_angle
Returns:

neff – effective index of waveguide

Return type:

float or np.ndarray

Indices and tables