Files
mxpic_forge/mxpic/technologies/layer_models.py
T

68 lines
1.8 KiB
Python

"""Dataclass models used by manifest-backed technologies."""
from dataclasses import dataclass
from typing import Any, Optional, Tuple
@dataclass(frozen=True)
class LayerSpec:
"""One canonical foundry GDS layer plus optional process metadata."""
name: str
layer: Tuple[int, int]
aliases: Tuple[str, ...] = ()
material: Optional[str] = None
z_start: Optional[float] = None
thickness: Optional[float] = None
sidewall_angle: Optional[float] = None
process: Optional[str] = None
description: str = ""
@dataclass(frozen=True)
class XSectionLayerSpec:
"""One layer contribution inside a Nazca xsection."""
layer: str
growx: Optional[float] = None
growy: Optional[float] = None
leftedge: Optional[Tuple[float, float]] = None
rightedge: Optional[Tuple[float, float]] = None
overwrite: bool = True
@dataclass(frozen=True)
class XSectionSpec:
"""Named cross-section made from one or more layer contributions."""
name: str
layers: Tuple[XSectionLayerSpec, ...]
@dataclass(frozen=True)
class MaterialSpec:
"""Material metadata and optional refractive-index data reference."""
name: str
display_name: Optional[str] = None
source_file: Optional[str] = None
source_revision: Optional[str] = None
data_file: Optional[str] = None
notes: str = ""
@dataclass(frozen=True)
class ProcessLayerSpec:
"""Detailed process-stack row reserved for full process exports."""
name: str
gds: Any = None
z_start_um: Optional[float] = None
thickness_um: Optional[float] = None
material: Optional[str] = None
pattern_material: Optional[str] = None
process: Optional[str] = None
sidewall_angle: Optional[float] = None
pattern_growth_delta_um: Optional[float] = None
enabled: Optional[bool] = None