IoColumn
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.
After instantiating an i3.IoColumn, use the methods add,
add_align, add_blocktitle
and so on, to add components to the column. Those methods are documented below.
- 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. - Parameters:
- 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. 
- adapter: IoBlockAdapter
- The Adapter PCell class that will be used to generate the blocks when a component is added to the column. 
- blocks: List with type restriction, allowed types: <class ‘ipkiss3.pcell.cell.pcell.PCell’> and Block
- The sub-blocks 
- name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters
- The unique name of the pcell 
 
 - Views - class Layout
- Parameters:
- outline_layer: __Layer__
- Layer on which to draw the block outline. Defaults to PPLayer(TECH.PROCESS.NONE, TECH.PURPOSE.BBOX). 
- draw_block_outline:
- Draw the outline of the block when set to True 
- south_east: Coord2
- Position of the south east corner of the block. Defaults to (TECH.BLOCKS.DEFAULT_WIDTH, 0.0) 
- 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
- Calculated positions of the subblocks 
- count_offset: locked
- count_west: locked
- count_east: locked
- south_offset: int, locked
- The y-offset between south_west & south_east, measured in units of y_spacing 
- width: float and int, float, integer, floating and number >= 0, locked
- The width of the block, calculated using south_west & south_east 
 
 - Examples - """Simple IoColumn example, demonstrating a small testsite of MultiMode Interferometers (MMI).""" import si_fab.all as pdk # 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- IoColumn.- Parameters:
- 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. 
- **adapter_kwargs:
- 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=<ipkiss3.technology.TechValue object>, purpose=<ipkiss3.technology.TechValue object>, name=None)
- Periodically places text using the available space (uses PolygonText). 
 - add_align(west_east_offset=0.0, trace_template=<ipkiss3.technology.TechValue object>, adapter=None)
- Adds an alignment waveguide. 
 - add_emptyline_east(N_lines=1)
- Adds spacers at the east side. 
 - add_emptyline_west(N_lines=1)
- Adds spacers at the west side. 
 - add_emptyline(N_lines=(1, 1))
- Adds spacers to the west (N_lines[0]) and to the east (N_lines[1]). 
 - straighten()
- Add spacers to ensure that the block is straight.