Skip to main content

Analytical electron-beam lithography write-time estimation from GDSII layouts

Project description

ebeamtime

ebeamtime estimates electron-beam lithography write time from the polygon area, exposure dose, and beam current in a GDSII file.

Install

python -m pip install ebeamtime

Example

An absolute GDS path is preferred. A relative path such as Path("layouts/device.gds") starts at the directory where you run Python. Add one exposure per layer/datatype pair:

from pathlib import Path

from ebeamtime import EbeamLayerExposure, EstimateConfig, LayerSpec
from ebeamtime import estimate_gds_write_time

# Preferred: an absolute path to the input GDS file.
gds_path = Path("/absolute/path/to/device.gds")

exposures = (
    EbeamLayerExposure(
        config_name="junction",   # Label shown in the report.
        layer=LayerSpec(1, 0),    # Junction GDS layer and datatype.
        dose_uC_cm2=700,          # Dose (µC/cm²).
        beam_current_nA=1,        # Beam current (nA).
    ),
    EbeamLayerExposure(
        config_name="undercut",   # Label shown in the report.
        layer=LayerSpec(2, 0),    # Undercut GDS layer and datatype.
        dose_uC_cm2=100,          # Dose (µC/cm²).
        beam_current_nA=1,        # Beam current (nA).
    ),
)

config = EstimateConfig(
    gds_path=gds_path,            # GDSII file to analyse.
    exposures=exposures,          # Every layer to include in the estimate.
)

report = estimate_gds_write_time(config).report
for layer in report.layers:
    hours = layer.beam_on_s / 3600
    print(f"{layer.config_name}: {layer.beam_on_s:.3f} s ({hours:.6f} h)")
total_hours = report.total_s / 3600
print(f"Total: {report.total_s:.3f} s ({total_hours:.6f} h)")

Names are report labels; LayerSpec(layer, datatype) selects the GDS polygons. Overlapping polygon instances count separately because each is written.

GPU acceleration (optional)

CPU needs no GPU or compiler. NVIDIA users need a compatible GPU and driver, the CUDA Toolkit with nvcc, and a host C++ compiler such as g++.

On WSL, install the NVIDIA display driver on Windows and install only the CUDA Toolkit inside WSL. Do not install a Linux NVIDIA display driver in WSL. See the NVIDIA CUDA on WSL guide.

First-time CUDA setup
ebeamtime-diagnostics
ebeamtime-prepare-cuda --json
ebeamtime-diagnostics

The preparation command detects the toolchain and GPU, compiles the packaged kernel, verifies a known geometry, and stores the result in the user cache. Run it once per Python, toolkit, GPU architecture, or package-source change.

Force CUDA from Python
config = EstimateConfig(
    gds_path=gds_path,            # GDSII file to analyse.
    exposures=exposures,          # Exposure layers to include.
    backend="cuda",               # Force the NVIDIA CUDA backend.
    require_gpu=True,             # Fail clearly instead of using CPU.
)
Force CUDA from the command line
ebeamtime /absolute/path/to/device.gds \
  --exposure 1:0:700:1 \
  --backend cuda \
  --require-gpu
Allow automatic CPU/GPU selection
config = EstimateConfig(
    gds_path=gds_path,            # GDSII file to analyse.
    exposures=exposures,          # Exposure layers to include.
    backend="auto",               # Use a prepared GPU when worthwhile.
)

auto does not perform first-time compilation. It uses a prepared GPU backend for at least 4,096 polygons by default and otherwise uses CPU. Prepared CUDA libraries are normally cached under ~/.cache/ebeamtime/native/.

Apple Metal is available experimentally on Apple Silicon with the Xcode command-line tools.

Licensed under GPL-3.0-only. Development instructions are in CONTRIBUTING.md.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ebeamtime-0.1.2.tar.gz (53.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ebeamtime-0.1.2-py3-none-any.whl (47.9 kB view details)

Uploaded Python 3

File details

Details for the file ebeamtime-0.1.2.tar.gz.

File metadata

  • Download URL: ebeamtime-0.1.2.tar.gz
  • Upload date:
  • Size: 53.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for ebeamtime-0.1.2.tar.gz
Algorithm Hash digest
SHA256 52015dc7d362318ffc10c70ea9832c144ee553fafcc9f68a4defa366a939d756
MD5 6fa46fd7536c8f12520a37bdd565cb62
BLAKE2b-256 592c8ced860e9ef5d1c5e94096a3ab189bf0485cc1b91c0da90757827b611dd8

See more details on using hashes here.

Provenance

The following attestation bundles were made for ebeamtime-0.1.2.tar.gz:

Publisher: release.yml on SandboChang/ebeamtime

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ebeamtime-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: ebeamtime-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 47.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for ebeamtime-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 37a1820e5de784118a070e540a2d649efb664466d8a330d3c9795c3750f8f247
MD5 2f075fe1a9baa31309e8ab749f3f7c15
BLAKE2b-256 f1fadc6a6a65b9381d999ddf44904b7d2e44556fcc71a2c5268db9cc8f6c0e4c

See more details on using hashes here.

Provenance

The following attestation bundles were made for ebeamtime-0.1.2-py3-none-any.whl:

Publisher: release.yml on SandboChang/ebeamtime

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page