MaskSpec

class photonforge.MaskSpec(operand1=None, operand2=None, operation='+', dilation=0)

Mask specification.

This class is mainly used when creating an ExtrusionSpec for a Technology.

Parameters:
  • operand1 – Layer tuple, mask specification, or iterable of those. If an iterable is used, the effective operand is the union of all the items.

  • operand2 – Layer tuple, mask specification, or iterable of those. If an iterable is used, the effective operand is the union of all the items.

  • operation – One of "+" (union), "*" (intersection), "-" (difference), or "^" (symmetric difference).

  • dilation – Dilation (erosion, if negative) applied to the mask.

Examples

Masks specifications can be combined using arithmetic operations:

>>> layer_1_0 = MaskSpec((1, 0))
>>> layer_2_0 = MaskSpec((2, 0), dilation=0.1)
>>> difference = layer_1_0 - layer_2_0
>>> eroded_diff = difference ** -0.1
>>> eroded_diff
MaskSpec(operand0=[MaskSpec((1, 0))], operand1=[MaskSpec((2, 0), dilation=0.1)], operation='-', dilation=-0.1)

Note

An empty list of operands indicates the full component bounds. The inversion of a layer is indicated by subtracting it from the component bounds.

Methods

copy([deep])

Create a copy of this mask specification.

format([layer_names, technology])

Create a string expression for this mask using names instead of layers.

from_json(json_str)

Create a mask specification object from a json string.

parse(expression[, technology])

Parse a string expression into a mask specification.

Attributes

dilation

Mask dilation.

json

Json representation of this Mask specification.

layer

Mask layer (read only).

operand1

First operand for this mask.

operand2

Second operand for this mask.

operation

Mask generation operation.

copy(deep=False)

Create a copy of this mask specification.

Returns:

New copy.

dilation

Mask dilation.

format(layer_names=None, technology=None)

Create a string expression for this mask using names instead of layers.

Parameters:
  • layer_names – Dictionary mapping layer tuples to names, that will replace the layer tuples in the resulting expression. If not set, the technology layer names are used instead.

  • technologyTechnology whose layers will be used to extract the layer names. Not used if layer_names is defined. If not specified, the current default technology is used.

Returns:

Mask specification string.

Example

>>> mask = MaskSpec.parse("(0, 0) * (1, 0)")
>>> mask.format({(0, 0): "A", (1, 0): "B"})
"('A' * 'B')"
static from_json(json_str)

Create a mask specification object from a json string.

Parameters:

json_str – Strig containing the json data.

Returns:

MaskSpec instance.

json

Json representation of this Mask specification.

layer

Mask layer (read only).

operand1

First operand for this mask.

operand2

Second operand for this mask.

operation

Mask generation operation.

static parse(expression, technology=None)

Parse a string expression into a mask specification.

Parameters:
  • expression – String expression to parse.

  • technology – Technology to be used for layer names in the expression.

Returns:

MaskSpec object.

Example

Invert layer (0, 0) and intersect the result with layer (10, 0):

>>> MaskSpec.parse("-(0, 0) * (10, 0)")
MaskSpec(operand0=[MaskSpec(operand0=[MaskSpec(operand0=[], operand1=[], operation='+')], operand1=[MaskSpec((0, 0))], operation='-')], operand1=[MaskSpec((10, 0))], operation='*')

Difference between layers ‘SLAB’ and ‘WG_CORE’ intersected with (9, 10):

>>> MaskSpec.parse("('SLAB' - 'WG_CORE') * (9, 10)")
MaskSpec(operand0=[MaskSpec(operand0=[MaskSpec((3, 0))], operand1=[MaskSpec((2, 0))], operation='-')], operand1=[MaskSpec((9, 10))], operation='*')

Union of ‘WG_CORE’ and ‘WG_CLAD’ eroded by 100 nm:

>>> MaskSpec.parse("('WG_CORE' + 'WG_CLAD') ** -0.1")
MaskSpec(operand0=[MaskSpec((2, 0)), MaskSpec((1, 0))], operand1=[], operation='+', dilation=-0.1)