# noonchen/stdf-viewer architecture

> Architecture diagram of the GitHub repository noonchen/stdf-viewer, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/noonchen/stdf-viewer
- Repository: https://github.com/noonchen/stdf-viewer

## Overview

STDF Viewer is a desktop GUI for opening, comparing, merging, and analyzing semiconductor test-data files. Its principal workflow is to select STDF inputs, build a queryable session database, and inspect test, DUT, bin, and wafer results; users can also export reports and save sessions. The README documents these capabilities, and the sampled Rust sources show database generation, SQLite writes, fetching, and session validation/saving. Several UI-to-backend connections are not visible in the excerpts, so those links are omitted rather than inferred.

Main entry points: [`deps/rust_stdf_helper/src/py_api/generate_database.rs`](https://github.com/noonchen/stdf-viewer/blob/main/deps/rust_stdf_helper/src/py_api/generate_database.rs) (Database generation API), [`deps/rust_stdf_helper/src/database/fetcher.rs`](https://github.com/noonchen/stdf-viewer/blob/main/deps/rust_stdf_helper/src/database/fetcher.rs) (Database queries), [`STDF-Viewer.py`](https://github.com/noonchen/stdf-viewer/blob/main/STDF-Viewer.py) (Viewer entry), [`deps/rust_stdf_helper/src/stdf/record_processor.rs`](https://github.com/noonchen/stdf-viewer/blob/main/deps/rust_stdf_helper/src/stdf/record_processor.rs) (Record processing)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_gui["Desktop interface"]
  node_app["Viewer entry<br/>[STDF-Viewer.py]"]
  node_main_ui["Main window"]
  node_merge_ui["Merge panel"]
  node_dut_ui["DUT details"]
  node_export_ui["Export panel"]
  node_settings_ui["Settings panel"]
end

subgraph group_ingest["STDF ingestion"]
  node_stdf_files["STDF files"]
  node_db_api["Database generation API"]
  node_record_processor["Record processing"]
  node_record_tracker["Record tracking<br/>[record_tracker.rs]"]
  node_db_context["SQLite writes<br/>[context.rs]"]
end

subgraph group_analysis["Data analysis"]
  node_fetch_api["Fetcher API<br/>[fetcher.rs]"]
  node_fetcher["Database queries<br/>[fetcher.rs]"]
  node_py_fetcher["Python fetch wrapper"]
  node_statistics["Test statistics<br/>[statistics.rs]"]
  node_charts["Charts and plots<br/>[ChartWidgets.py]"]
end

subgraph group_session["Sessions and output"]
  node_session_db[("Session database")]
  node_session_api["Session API<br/>[session.rs]"]
  node_session_ops["Session validation<br/>[session.rs]"]
  node_xlsx_api["Excel export API<br/>[stdf_to_xlsx.rs]"]
  node_xlsx["Excel report"]
end

node_user(("User"))

node_user -->|"launches"| node_app
node_app -->|"opens"| node_main_ui
node_stdf_files -->|"provides inputs"| node_db_api
node_db_api -->|"processes records"| node_record_processor
node_record_processor -->|"tracks records"| node_record_tracker
node_db_api -->|"writes batches"| node_db_context
node_db_context -->|"stores data"| node_session_db
node_fetch_api -->|"dispatches queries"| node_fetcher
node_fetcher -->|"reads"| node_session_db
node_py_fetcher -->|"calls"| node_fetch_api
node_statistics -->|"queries data"| node_fetcher
node_session_api -->|"dispatches"| node_session_ops
node_session_ops -->|"validates or copies"| node_session_db
node_xlsx_api -->|"generates"| node_xlsx
node_user -->|"selects"| node_stdf_files
node_user -->|"requests merge"| node_merge_ui
node_user -->|"inspects DUTs"| node_dut_ui
node_user -->|"analyzes tests"| node_charts
node_user -->|"requests export"| node_export_ui
node_user -->|"configures"| node_settings_ui

click node_app "https://github.com/noonchen/stdf-viewer/blob/main/STDF-Viewer.py"
click node_main_ui "https://github.com/noonchen/stdf-viewer/blob/main/deps/ui/stdfViewer_MainWindows.py"
click node_merge_ui "https://github.com/noonchen/stdf-viewer/blob/main/deps/ui/stdfViewer_mergeUI.py"
click node_dut_ui "https://github.com/noonchen/stdf-viewer/blob/main/deps/ui/stdfViewer_dutDataUI.py"
click node_export_ui "https://github.com/noonchen/stdf-viewer/blob/main/deps/ui/stdfViewer_exportUI.py"
click node_settings_ui "https://github.com/noonchen/stdf-viewer/blob/main/deps/ui/stdfViewer_settingsUI.py"
click node_db_api "https://github.com/noonchen/stdf-viewer/blob/main/deps/rust_stdf_helper/src/py_api/generate_database.rs"
click node_record_processor "https://github.com/noonchen/stdf-viewer/blob/main/deps/rust_stdf_helper/src/stdf/record_processor.rs"
click node_record_tracker "https://github.com/noonchen/stdf-viewer/blob/main/deps/rust_stdf_helper/src/stdf/record_tracker.rs"
click node_db_context "https://github.com/noonchen/stdf-viewer/blob/main/deps/rust_stdf_helper/src/database/context.rs"
click node_fetch_api "https://github.com/noonchen/stdf-viewer/blob/main/deps/rust_stdf_helper/src/py_api/fetcher.rs"
click node_fetcher "https://github.com/noonchen/stdf-viewer/blob/main/deps/rust_stdf_helper/src/database/fetcher.rs"
click node_py_fetcher "https://github.com/noonchen/stdf-viewer/blob/main/deps/DatabaseFetcherRust.py"
click node_statistics "https://github.com/noonchen/stdf-viewer/blob/main/deps/rust_stdf_helper/src/py_api/statistics.rs"
click node_charts "https://github.com/noonchen/stdf-viewer/blob/main/deps/ChartWidgets.py"
click node_session_api "https://github.com/noonchen/stdf-viewer/blob/main/deps/rust_stdf_helper/src/py_api/session.rs"
click node_session_ops "https://github.com/noonchen/stdf-viewer/blob/main/deps/rust_stdf_helper/src/database/session.rs"
click node_xlsx_api "https://github.com/noonchen/stdf-viewer/blob/main/deps/rust_stdf_helper/src/py_api/stdf_to_xlsx.rs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_main_ui,node_merge_ui,node_dut_ui,node_export_ui,node_settings_ui,node_user toneBlue
class node_stdf_files,node_db_api,node_record_processor,node_record_tracker,node_db_context toneAmber
class node_fetch_api,node_fetcher,node_py_fetcher,node_statistics,node_charts toneMint
class node_session_db,node_session_api,node_session_ops,node_xlsx_api,node_xlsx toneRose
```

## Components

### Desktop interface

- [Viewer entry](https://github.com/noonchen/stdf-viewer/blob/main/STDF-Viewer.py): `STDF-Viewer.py`
- [Main window](https://github.com/noonchen/stdf-viewer/blob/main/deps/ui/stdfViewer_MainWindows.py): `deps/ui/stdfViewer_MainWindows.py`
- [Merge panel](https://github.com/noonchen/stdf-viewer/blob/main/deps/ui/stdfViewer_mergeUI.py): `deps/ui/stdfViewer_mergeUI.py`
- [DUT details](https://github.com/noonchen/stdf-viewer/blob/main/deps/ui/stdfViewer_dutDataUI.py): `deps/ui/stdfViewer_dutDataUI.py`
- [Export panel](https://github.com/noonchen/stdf-viewer/blob/main/deps/ui/stdfViewer_exportUI.py): `deps/ui/stdfViewer_exportUI.py`
- [Settings panel](https://github.com/noonchen/stdf-viewer/blob/main/deps/ui/stdfViewer_settingsUI.py): `deps/ui/stdfViewer_settingsUI.py`

### STDF ingestion

- **STDF files**
- [Database generation API](https://github.com/noonchen/stdf-viewer/blob/main/deps/rust_stdf_helper/src/py_api/generate_database.rs): `deps/rust_stdf_helper/src/py_api/generate_database.rs`
- [Record processing](https://github.com/noonchen/stdf-viewer/blob/main/deps/rust_stdf_helper/src/stdf/record_processor.rs): `deps/rust_stdf_helper/src/stdf/record_processor.rs`
- [Record tracking](https://github.com/noonchen/stdf-viewer/blob/main/deps/rust_stdf_helper/src/stdf/record_tracker.rs): `deps/rust_stdf_helper/src/stdf/record_tracker.rs`
- [SQLite writes](https://github.com/noonchen/stdf-viewer/blob/main/deps/rust_stdf_helper/src/database/context.rs): `deps/rust_stdf_helper/src/database/context.rs`

### Data analysis

- [Fetcher API](https://github.com/noonchen/stdf-viewer/blob/main/deps/rust_stdf_helper/src/py_api/fetcher.rs): `deps/rust_stdf_helper/src/py_api/fetcher.rs`
- [Database queries](https://github.com/noonchen/stdf-viewer/blob/main/deps/rust_stdf_helper/src/database/fetcher.rs): `deps/rust_stdf_helper/src/database/fetcher.rs`
- [Python fetch wrapper](https://github.com/noonchen/stdf-viewer/blob/main/deps/DatabaseFetcherRust.py): `deps/DatabaseFetcherRust.py`
- [Test statistics](https://github.com/noonchen/stdf-viewer/blob/main/deps/rust_stdf_helper/src/py_api/statistics.rs): `deps/rust_stdf_helper/src/py_api/statistics.rs`
- [Charts and plots](https://github.com/noonchen/stdf-viewer/blob/main/deps/ChartWidgets.py): `deps/ChartWidgets.py`

### Sessions and output

- **Session database**
- [Session API](https://github.com/noonchen/stdf-viewer/blob/main/deps/rust_stdf_helper/src/py_api/session.rs): `deps/rust_stdf_helper/src/py_api/session.rs`
- [Session validation](https://github.com/noonchen/stdf-viewer/blob/main/deps/rust_stdf_helper/src/database/session.rs): `deps/rust_stdf_helper/src/database/session.rs`
- [Excel export API](https://github.com/noonchen/stdf-viewer/blob/main/deps/rust_stdf_helper/src/py_api/stdf_to_xlsx.rs): `deps/rust_stdf_helper/src/py_api/stdf_to_xlsx.rs`
- **Excel report**

### Other components

- **User**

## Connections

- User → Viewer entry: launches
- Viewer entry → Main window: opens
- STDF files → Database generation API: provides inputs
- Database generation API → Record processing: processes records
- Record processing → Record tracking: tracks records
- Database generation API → SQLite writes: writes batches
- SQLite writes → Session database: stores data
- Fetcher API → Database queries: dispatches queries
- Database queries → Session database: reads
- Python fetch wrapper → Fetcher API: calls
- Test statistics → Database queries: queries data
- Session API → Session validation: dispatches
- Session validation → Session database: validates or copies
- Excel export API → Excel report: generates
- User → STDF files: selects
- User → Merge panel: requests merge
- User → DUT details: inspects DUTs
- User → Charts and plots: analyzes tests
- User → Export panel: requests export
- User → Settings panel: configures
