from typing import Any import nazca as nd import numpy as np from .Foundry import Foundry from .layer_models import LayerSpec class IMECAS_SiP(Foundry) : lib_path = 'GDS_lib\\' W_ISL = 10 SP_ISL = 10 SP_METAL = 1.5 LAYERS = { 'FECOR' : LayerSpec('FECOR', (10,2), aliases=('STRIP_COR',)), 'FECLD' : LayerSpec('FECLD', (10,3), aliases=('STRIP_CLD',)), 'FETCH' : LayerSpec('FETCH', (10,4), aliases=('STRIP_TRE',)), 'SECOR' : LayerSpec('SECOR', (11,2), aliases=('SRIB_COR',)), 'SECLD' : LayerSpec('SECLD', (11,3), aliases=('SRIB_CLD',)), 'SETCH' : LayerSpec('SETCH', (11,4), aliases=('SRIB_TRE',)), 'MECOR' : LayerSpec('MECOR', (12,2), aliases=('RIB_COR',)), 'MECLD' : LayerSpec('MECLD', (12,3), aliases=('RIB_CLD',)), 'METCH' : LayerSpec('METCH', (12,4), aliases=('RIB_TRE',)), 'M1' : LayerSpec('M1', (31,0), aliases=('METAL',)), 'TIN' : LayerSpec('TIN', (34,0), aliases=('HEATER',)), 'PAD' : (36,0), 'DETCH' : (80,0), } ROLES = {} def __init__(self, layermap: Any=None, roles: Any=None) -> None: super().__init__(layermap=layermap or self.LAYERS, roles=roles or self.ROLES) self._add_xsection_(xsection='strip',layers=['STRIP_COR','STRIP_CLD'],growth=[0,self.SLAB_GROWTH]) self._add_xsection_(xsection='rib_s',layers=['RIB_COR','RIB_CLD'],growth=[0,self.SLAB_GROWTH]) self._add_xsection_(xsection='rib',layers=['RIB_COR','RIB_CLD','STRIP_COR','STRIP_CLD'],growth=[0,self.SLAB_GROWTH*2,self.SLAB_GROWTH,self.SLAB_GROWTH*2]) self._add_xsection_(xsection='drib',layers=['RIB_COR','RIB_CLD','STRIP_COR','STRIP_CLD'],growth=[0,self.SLAB_GROWTH*2,self.SLAB_GROWTH,self.SLAB_GROWTH*2]) self._add_xsection_(xsection='pad',layers=['METAL','PAD'],growth=[5,0]) self._add_xsection_(xsection='isl',layers=['DETCH'],growth=[0])