Source code for gdsfactory.components.litho_calipers

from __future__ import annotations

import gdsfactory as gf
from gdsfactory.cell import cell
from gdsfactory.component import Component
from gdsfactory.components.rectangle import rectangle
from gdsfactory.typings import LayerSpec


[docs] @cell def litho_calipers( notch_size: tuple[float, float] = (2.0, 5.0), notch_spacing: float = 2.0, num_notches: int = 11, offset_per_notch: float = 0.1, row_spacing: float = 0.0, layer1: LayerSpec = "WG", layer2: LayerSpec = "SLAB150", ) -> Component: """Vernier caliper structure to test lithography alignment. Only the middle finger is aligned and the rest are offset. based on phidl Args: notch_size: [xwidth, yheight]. notch_spacing: in um. num_notches: number of notches. offset_per_notch: in um. row_spacing: 0 layer1: layer. layer2: layer. """ D = gf.Component() num_notches_total = num_notches * 2 + 1 centre_notch = num_notches R1 = rectangle(size=notch_size, layer=layer1) R2 = rectangle(size=notch_size, layer=layer2) for i in range(num_notches_total): if i == centre_notch: D.add_ref(R1).movex(i * (notch_size[0] + notch_spacing)).movey( notch_size[1] ) D.add_ref(R2).movex( i * (notch_size[0] + notch_spacing) + offset_per_notch * (centre_notch - i) ).movey(-2 * notch_size[1] - row_spacing) D.add_ref(R1).movex(i * (notch_size[0] + notch_spacing)) D.add_ref(R2).movex( i * (notch_size[0] + notch_spacing) + offset_per_notch * (centre_notch - i) ).movey(-notch_size[1] - row_spacing) return D
if __name__ == "__main__": c = litho_calipers() c.show(show_ports=True)