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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
52015dc7d362318ffc10c70ea9832c144ee553fafcc9f68a4defa366a939d756
|
|
| MD5 |
6fa46fd7536c8f12520a37bdd565cb62
|
|
| BLAKE2b-256 |
592c8ced860e9ef5d1c5e94096a3ab189bf0485cc1b91c0da90757827b611dd8
|
Provenance
The following attestation bundles were made for ebeamtime-0.1.2.tar.gz:
Publisher:
release.yml on SandboChang/ebeamtime
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ebeamtime-0.1.2.tar.gz -
Subject digest:
52015dc7d362318ffc10c70ea9832c144ee553fafcc9f68a4defa366a939d756 - Sigstore transparency entry: 2191649641
- Sigstore integration time:
-
Permalink:
SandboChang/ebeamtime@f1f0d13f0347788a25449ea0226a5a8371c9b3d4 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/SandboChang
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f1f0d13f0347788a25449ea0226a5a8371c9b3d4 -
Trigger Event:
push
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
37a1820e5de784118a070e540a2d649efb664466d8a330d3c9795c3750f8f247
|
|
| MD5 |
2f075fe1a9baa31309e8ab749f3f7c15
|
|
| BLAKE2b-256 |
f1fadc6a6a65b9381d999ddf44904b7d2e44556fcc71a2c5268db9cc8f6c0e4c
|
Provenance
The following attestation bundles were made for ebeamtime-0.1.2-py3-none-any.whl:
Publisher:
release.yml on SandboChang/ebeamtime
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ebeamtime-0.1.2-py3-none-any.whl -
Subject digest:
37a1820e5de784118a070e540a2d649efb664466d8a330d3c9795c3750f8f247 - Sigstore transparency entry: 2191649649
- Sigstore integration time:
-
Permalink:
SandboChang/ebeamtime@f1f0d13f0347788a25449ea0226a5a8371c9b3d4 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/SandboChang
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f1f0d13f0347788a25449ea0226a5a8371c9b3d4 -
Trigger Event:
push
-
Statement type: