MZIWaveguideArm
- class picazzo3.filters.mzi.cell.MZIWaveguideArm
A Mach-Zehnder arm with a given length: routing upward at right-angle
- Parameters:
- trace_template: PCell and _WaveguideTemplate
- 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:
- contents: PCell and _Trace, locked
Views
- class Layout
- Parameters:
- extra_length: float and Real, number and number >= 0
Extra length that will be added in the arm
- min_straight: float and Real, number and number >= 0
Minimum straight length between bends
- routing_direction: List with value restriction, allowed values: [C2(0.000000, 1.000000), C2(0.000000, -1.000000)]
direction of routing (DIRECTION.NORTH or DIRECTION.SOUTH)
- combiner_port: OpticalPort
Port interface of the combiner to which the output of this arm is connected
- splitter_port: OpticalPort
Port interface of the splitter to which the input of this arm is connected
- output_port: TracePort
- trace_template_for_ports: _TraceTemplate.Layout
Trace template to be used for the ports.
- cover_layers: List with type restriction, allowed types: <class ‘ipkiss.primitives.layer.Layer’>
layers that can be used to generate additional coverage of the trace (e.g. manhattan corners)
- reverse_individual_bends: list<( bool, bool_ or int )>
When set to True, it will generate the individual bends backwards. This has only effect when the bend algorithm is not symmetric. Should have length equal to the shape for closed shapes, but equal to shape-2 for open shapes.
- rounding_algorithms:
Rounding algorithm for every individual bend. Can be circular, spline, … Should have length equal to the shape for closed shapes, but equal to shape-2 for open shapes.
- bend_radii: list<number > 0>
Bend radius for every individual bend.
- reverse_bends: ( bool, bool_ or int )
When set to True, it will generate the bends backwards. This has only effect when the bend algorithm is not symmetric.
- remove_straight_angles: ( bool, bool_ or int )
Removes the waypoints with straight angles. Set to False if the algorithm uses waypoint-specific information.
- core_layer: __Layer__
layer used to define the core of the waveguide
- input_port: TracePort
- control_shape_layer: __Layer__
layer on which the control shape is drawn
- draw_control_shape: ( bool, bool_ or int )
draws the control shape on top of the waveguide
- 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
- manhattan: ( bool, bool_ or int )
Adds rectangular blocks in the bends to avoid as much as possible non-manhattan angles.
- angle_step: float and number > 0
Angle step for rounding.
- rounding_algorithm:
Rounding algorithm used to generate the bends. Can be circular, spline, ….
- bend_radius: float and number > 0
Bend radius for the auto-generated bends.
- Other Parameters:
- shape: locked
- center_line_shape: locked
Automatically calculated shape of the center line of the trace
Examples
import si_fab.all as pdk # noqa: F401 from ipkiss3 import all as i3 from picazzo3.filters.mzi import MZIWaveguideArm from picazzo3.traces.wire_wg.trace import WireWaveguideTemplate wg1_t = WireWaveguideTemplate(name="my_template1") wg1_t.Layout(core_width=0.5) mziarm = MZIWaveguideArm(name="my_mziarm_1") layout = mziarm.Layout( extra_length=30.0, splitter_port=i3.OpticalPort(position=(0.0, 0.0), angle_deg=30.0, trace_template=wg1_t), combiner_port=i3.OpticalPort(position=(40.0, 5.0), angle_deg=120.0, trace_template=wg1_t), ) layout.visualize(annotate=True)