MMITapered
- class picazzo3.filters.mmi.cell.MMITapered
Rectangular multimode interferometer, generated from a waveguide template with tapers.
- Parameters:
- output_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>
List of the output trace templates.
- input_trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>
List of the input trace templates.
- mmi_trace_template: PCell and _WaveguideTemplate
Trace template used for the MMI section
- trace_template: ( PCell and _WaveguideTemplate ), *None allowed*
Template for all ports, defaults to TECH.PCELLS.WG.DEFAULT.When set to None, the waveguide templates of the ports will be used.
- transition_database: AutoTransitionDatabase
AutoTransitionDatabase in which the correct transition between the two trace templates can be looked up.
- transitions: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>
List of transitions that is used on this MMI. By default Autotracetransition is used on all the transitions
- port_labels: ( List with type restriction, allowed types: <class ‘str’> ), *None allowed*
Labels of the ports to be processed. Set to None to process all ports.
- external_port_names: str
Dictionary for remapping of the port names of the contents to the external ports
- name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters
The unique name of the pcell
- Other Parameters:
- mmi_trace: PCell, locked
Trace of the MMI section
- n_outputs: int and number > 0, locked
Number of output channels.
- n_inputs: int and number > 0, locked
Number of input channels.
- trace_templates: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’>, locked
list of templates to apply to all ports
- contents: PCell, locked
Contains the base MMI without the tapers
Views
- class Layout
- Parameters:
- output_y_positions: list<Real, number>
Positions in the y direction at the output where ports are be added
- input_y_positions: list<Real, number>
Positions in the y direction at the input where ports are be added
- transition_length: ( float and Real, number and number >= 0 ), *None allowed*
Length of the transition. Set to None to take the standard transition length.
- zero_length_if_identical: ( bool, bool_ or int )
uses a zero-length transition if the trace templates are identical
- flatten_transitions: ( bool, bool_ or int )
if true, flattens the transitions one level
- straight_extension: ( Coord2 and number >= 0 ), *None allowed*
Tuple: straight extensions of the transitions. Set to None to take the standard straight extensions
- length: float and number > 0
Length of the MMI
- contents_transformation: GenericNoDistortTransform
transformation to apply to the contents
- flatten_contents: ( bool, bool_ or int )
if True, it will insert the contents as elements in the layout, rather than as an Instance
- view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.
The name of the view
- Other Parameters:
- transition_lengths: locked
Examples
import si_fab.all as pdk # noqa: F401 from picazzo3.filters.mmi.cell import MMITapered from picazzo3.traces.wire_wg.trace import WireWaveguideTemplate import ipkiss3.all as i3 mmi_trace_template = WireWaveguideTemplate() mmi_trace_template.Layout(core_width=6.0, cladding_width=10.0) mmi_access_template = WireWaveguideTemplate() mmi_access_template.Layout(core_width=1.0, cladding_width=5.0) MMI = MMITapered( mmi_trace_template=mmi_trace_template, input_trace_templates=[mmi_access_template], output_trace_templates=[mmi_access_template], trace_template=i3.TECH.PCELLS.WG.DEFAULT, ) layout = MMI.Layout(transition_length=5.0, length=10.0, input_y_positions=[0.0], output_y_positions=[0.0]) layout.visualize(annotate=True)
Tapered MMI with matched claddings:
import si_fab.all as pdk # noqa: F401 from picazzo3.filters.mmi.cell import MMITapered from picazzo3.traces.wire_wg.trace import WireWaveguideTemplate import ipkiss3.all as i3 import numpy as np # This example illustrates a tapered MMI where the access waveguides are calculated in # such a way that the cladding of the mmi matches naturally transitions to the cladding # of the access waveguides. mmi_cladding_width = 15.0 # Cladding width of the MMI section. mmi_access_core_width = 1.0 # Core width of the access waveguides. input_y_positions = [0.0] # Input position of the access waveguides output_y_positions = [-1.5, 0, 1.5] # Output positions of the access waveguides # We create the trace template for the MMI section mmi_trace_template = WireWaveguideTemplate() mmi_trace_template.Layout(core_width=10.0, cladding_width=mmi_cladding_width) # We create the template for the access waveguide at the input side. mmi_access_template = WireWaveguideTemplate() mmi_access_template.Layout(core_width=mmi_access_core_width, cladding_width=mmi_cladding_width) output_trace_templates = [] # We create the templates for the access waveguides at the output side. We calculate the # cladding width of the access waveguides so that the tapers would transition to the # cladding of the MMI. for cnt, pos in enumerate(output_y_positions): template = WireWaveguideTemplate() height_cladding = mmi_cladding_width width_to_top = height_cladding / 2 - pos width_to_bottom = pos + height_cladding / 2 # Just as wide as to reach the nearest cladding of the mmi. access_cladding_width = np.min([width_to_top, width_to_bottom]) * 2 template.Layout(core_width=mmi_access_core_width, cladding_width=access_cladding_width) output_trace_templates.append(template) # We create the tapered MMI MMI_with_matched_claddings = MMITapered( mmi_trace_template=mmi_trace_template, input_trace_templates=[mmi_access_template], output_trace_templates=output_trace_templates, trace_template=i3.TECH.PCELLS.WG.DEFAULT, ) layout = MMI_with_matched_claddings.Layout( transition_length=5.0, length=10.0, input_y_positions=input_y_positions, output_y_positions=output_y_positions, ) layout.visualize(annotate=True)