i3.IoColumn is used to place components on top of each other and connect them to some input/output (I/O) on the side
(typically grating couplers or edge couplers). The adapter decides how devices are routed and which I/O to use.
The most frequently used adapter is the IoFibcoup adapter.
- class ipkiss3.all.IoColumn¶
PCell used to place devices or circuits on top of each other and connect them to grating couplers on the side.
- adapter: IoBlockAdapter
The Adapter PCell class that will be used to generate the blocks when a component is added to the column.
- max_n_o_lines: ( tuple2 and number > 0 ), *None allowed*
Maximum number of lines that this IoColumn may contain. To check whether ‘quota’ has been exceeded, use is_full(). If set to ‘None’, no maximum is set.
- blocks: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’> and Block
- name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters
The unique name of the pcell
- class Layout¶
- draw_block_outline: ( bool, bool_, bool or int )
Draw the outline of the block when set to True
- outline_layer: __Layer__
Layer on which to draw the block outline
- south_east: Coord2
Position of the south east corner of the block
- south_west: Coord2
Position of the south west corner of the block
- y_spacing: float and number > 0
The spacing between blocks
- 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
- blocks_pos: locked
- count_east: locked
- count_offset: locked
- count_west: locked
- south_offset: int, locked
The y-offset between south_west & south_east, measured in units of y_spacing
- width: float and Real, number and number >= 0, locked
The width of the block, calculated using south_west & south_east
"""Simple IoColumn example, demonstrating a small testsite of MultiMode Interferometers (MMI).""" from technologies import silicon_photonics # noqa: F401 from ipkiss3 import all as i3 from picazzo3.container.iofibcoup import IoFibcoup from picazzo3.filters import MMI1x2Tapered my_column = i3.IoColumn(adapter=IoFibcoup) my_layout = my_column.Layout(south_east=(1200.0, 0.0), y_spacing=25.0) my_column.add_align() my_column.add_blocktitle("Reference") for idx, mmi_length in enumerate([10, 11, 12, 13, 14, 15]): mmi = MMI1x2Tapered() mmi.Layout(length=mmi_length) # add the component to the column. Mirror the odd components. my_column.add( mmi, transformation=i3.IdentityTransform() if idx % 2 == 0 else i3.HMirror(), fanout_length=100.0, bend_radius=30.0, ) my_layout.visualize(annotate=True)
- add(contents, absolute_offset=None, relative_offset=None, adapter=None, transformation=None, **adapter_kwargs)¶
addwill take a PCell object
contents, and wrap it in the
adapterclass to create an
IoBlockthat will then be added to the
- contents: PCell object or PCell View object
The PCell object that will be wrapped by the adapter class to create a block
- absolute_offset: Coord2, (x,y) tuple or ‘None’
The absolute offset of the contents relative to the x-center of the column, and the y-position on the West side. If None is specified (default), the contents is aligned such that the ports are centered and the first West port is y-aligned with the current West y-position of the column.
- relative_offset: Coord2, (x,y) tuple or ‘None’
The relative offset to the position where the contents were placed with absolute_offset.
- adapter: PCell class of the type IoBlockAdapter
This class will be used when creating new blocks and takes care of the routing + I/O. The contents will be passed as a parameter to the adapter. If
Noneis specified, the default adapter class of the IoColumn will be used (which is defined in the technology).
- transformation: Transformation object
Transformation that will be applied to the contents when it is added to the adapter. By default, it will not be transformed.
All other keyword arguments will be passed on to the adapter when it is created. This includes PCell parameters such as
trace_template, but also Layout parameters such as
offset. the actual set of parameters depends on the type of adapter.
- add_blocktitle(text, center_clearout=(0.0, 0.0), edge_clearout=(0.0, 0.0), process=<Process WG>, purpose=<Purpose DFTXT>, name=None)¶
Periodically places text using the available space (uses PolygonText).
- add_align(west_east_offset=0.0, trace_template=<WireWaveguideTemplate PCellTemplate 'WIRE_WG_TEMPLATE'>, adapter=None)¶
Adds an alignment waveguide.
Adds spacers at the east side.
Adds spacers at the west side.
- add_emptyline(N_lines=(1, 1))¶
Adds spacers to the west (N_lines) and to the east (N_lines).
Add spacers to ensure that the block is straight.