HexPhCLayout

class picazzo3.phc.generic.cell.HexPhCLayout(*args, **kwargs)

Generic Layouting Cell for photonic crystals with hexagon holes on a Triangular lattice. The Layout of the cell is made up of a map, which is a multiline string representing the unit cells on a regular triangular lattice. The letters in the ‘map’ correspond to the diameters of the holes in the dictionary ‘hole_sizes’. The pitches can be defined as cartesian pitches using the property ‘pitches’, or using the property ‘lattice_pitches’ which specifies the lattice vector along the horizontal and the oblique axis, or using the property ‘pitch’, which just sets a uniform pitch along all lattice vectors.

Parameters:

cell_instances: _PCellInstanceDict, optional

name: optional

The unique name of the pcell

Views

Layout
Parameters:

grids_per_unit: optional

Number of grid cells per design unit

lattice_pitches: Coord2, optional

Lattice constants along the horizontal and the oblique direction. Choose identical values for a regular grid. If ‘pitches’ is manually set, this property will be ignored. If this property is set, the property ‘pitch’ will be ignored.

purpose: PatternPurpose, optional

Purpose of the layer on which the holes should be drawn.

units_per_grid: optional

Ratio of grid cell and design unit

view_name: str, optional

The name of the view

cells: optional

dictionary of Unit Cells for a Photonic Crystal. The value should be of the form {‘x’: cell1, ‘y’: cell2}. The keys of the dictionary should be characters and each character can be used to identify the unit cell in the map. The default value of this property is automatically calculated from the dictiornary ‘hole_sizes’. Only assign to this property if you want to override this value. If you do this, the property ‘hole_sizes’ will be ignored.

hole_sizes: dict, optional

dictionary of the hole sizes of the Photonic Crystal. The value should be of the form {‘x’: 0.25, ‘y’: 0.26}. The keys of the dictionary should be characters and each character can be used to identify the unit cell in the map. If the property ‘cells’ is set manually, hole_sizes’ will be ignored.

process_wg: ProcessLayer, optional

Process of the layer on which the holes should be drawn.

pitch: float and Real, number and number >= 0, optional

Lattice constant for a uniform triangular lattice. This property will be ignored if ‘lattice_pitches’ or ‘pitches’ are set manually

pitches: optional

Cartesian (X, Y) pitches of the lattice. If this is specified, the properties ‘lattice_pitches’ and ‘pitch’ will be ignored

map: str, optional

Map of the photonic crystal. This property accepts a multi-line string. Every character in the string represents a unit cell of the photonic crystal, which can be found in the property cells

ports_coordinates: optional

list of tuple with (coordinate (in pitches), angle, waveguide_template, [name])

process_hfw: ProcessLayer, optional

process for underetching

purpose_hfw: PatternPurpose, optional

drawing purpose for underetching

zero_line_y: float, optional

line in the map which corresponds to the coordinate y=0. This can be a fractional number, and the unit is relative to pitches.y .

grid: float and number > 0, optional

design grid. Extracted by default from TECH.METRICS.GRID

unit: float and number > 0, optional

design unit. Extracted by default from TECH.METRICS.UNIT

Examples

import technologies.silicon_photonics
from ipkiss3 import all as i3
TECH = i3.TECH
from picazzo3.phc.generic import HexPhCLayout
my_phc_map = ["A A A A A A A A A A A",
              " B   A A A A A A   B",
              "A B   A A   A A   B A",
              " A B   A     A   B A",
              "A A B     B     B A A",
              " A A B   B B   B A A",
              "A A A B B A B B A A A",
              " A A A B A A B A A A",
              "A A A A A A A A A A A",
              ] # a W-shaped cavity
cell = HexPhCLayout(name="my_hex_phc_layout1")
layout = cell.Layout(pitch = 0.45,
                     hole_sizes = {"A" : 0.290,
                                   "B" : 0.190}, # two sizes
                     map = "\n".join(my_phc_map),
                     zero_line_y = 5, #count lines from the top
                     ports_coordinates = [((-0.5, 0), 180, TECH.PCELLS.WG.DEFAULT),
                                          ((10.5, 0), 0, TECH.PCELLS.WG.DEFAULT)
                                          ] # coordinates expressed in lattice pitches
                     )

layout.visualize()
../../../../_images/picazzo3-phc-generic-cell-HexPhCLayout-1.png