Wafer Position Monitor (demo)

PySide6 desktop demo: load NanoBerry edge CSVs from MASTER_SD/, fit a wafer circle, show X / Y / theta offset and sigma vs a calibration baseline. No live camera integrated yet.

Stack: Python 3.11+, PySide6, NumPy.

Quick start

python3 -m venv .venv && source .venv/bin/activate
pip install -e .
wafer-user          # or: python src/wafer_edge/App.py

Click Read Wafer to load the demo CSVs. Tests: python -m pytest tests/ (UI smoke needs a display).

Data

Real data[MASTER_SD/](MASTER_SD/): CSV files from actual NanoBerry camera captures. Names: {S|R}{1|2}{seq}P0.CSV — local/remote board, SPI camera, 4-digit sequence (e.g. S10540P0.CSV).

Fabricated data[DATA/0610/](DATA/): Generated test data used by CsvSource.DEMO_CAMERA_PATHS (the default demo source). Change that dict or use parse_csv_filename() for other captures.

Calibration

First run creates baseline.json (gitignored). Key fields: center_mm, radius_mm (75), center_px, radius_px (pixel scale).

Layout

Path Role
src/wafer_edge/App.py Main window
VisionEngine.py Circle fit + offsets (no Qt)
CsvSource.py CSV loader
ui/widgets.py Plot + metric cards
ui/Theme.qml Styles (loaded via ui/theme.py)

Pipeline: DEMO_CAMERA_PATHSload_camera_records_from_csv()snapshot_from_records() → UI.

Alignment states

The monitor derives one of three states from the fitted circle on every read:

State Condition Dot
Ready offset ≤ 0.10 mm and σ ≤ 0.05 mm 🟢 green
Aligning offset ≤ 0.50 mm and σ ≤ 0.20 mm 🟡 amber
Fault offset > 0.50 mm or σ > 0.20 mm 🔴 red

Ready — wafer within tolerance

Ready state

Aligning — wafer correcting, noisy cameras

Aligning state

Fault — wafer out of range

Fault state

S
Description
No description provided
Readme 1.3 MiB
Languages
Python 90.7%
QML 9.3%