# dingpei1995/arpes-data-browser architecture

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

- Interactive diagram: https://gitdiagram.com/dingpei1995/arpes-data-browser
- Repository: https://github.com/dingpei1995/arpes-data-browser

## Overview

ARPES_viewer is a desktop browser and analysis workspace for nano-ARPES NeXus and beamline data. Users select and load scans, open them in layout-specific viewers, inspect spatial, energy and momentum views, apply analysis or generate cuts, then compose and export plots or save derived datasets. The tree separates Qt interaction from numerical tools and beamline readers. Sampled source confirms the launcher/viewer flow, registry-based loading, and session retention; links among unsampled analysis tools and particular reader implementations are intentionally not inferred.

Main entry points: [`ARPES_viewer/ui/windows.py`](https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/ui/windows.py) (Scan viewers), [`ARPES_viewer/ARPES_viewer.py`](https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/ARPES_viewer.py) (Dataset browser), [`ARPES_viewer/loader/registry.py`](https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/loader/registry.py) (Reader registry), [`ARPES_viewer/ui/widgets.py`](https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/ui/widgets.py) (Scan data model)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Desktop workspace"]
  node_launcher["Dataset browser<br/>[ARPES_viewer.py]"]
  node_windows["Scan viewers<br/>[windows.py]"]
  node_loader_dialog["Loader options<br/>[loader_dialog.py]"]
  node_session[("Session storage<br/>[session.py]")]
end

subgraph group_loading["Data loading"]
  node_widgets["Scan data model<br/>[widgets.py]"]
  node_registry["Reader registry<br/>[registry.py]"]
  node_nxs["NeXus reader<br/>[nxs_file.py]"]
  node_cassiopee["CASSIOPEE reader<br/>[cassiopee.py]"]
  node_soleil["SOLEIL reader<br/>[soleil.py]"]
  node_native["Native reader<br/>[native.py]"]
end

subgraph group_analysis["Analysis tools"]
  node_processing["2D processing<br/>[process.py]"]
  node_analysis_tools["Spectral analysis<br/>[analysis.py]"]
  node_cut_tools["Cut operations<br/>[cutops.py]"]
  node_kspace["Momentum tools<br/>[kspace.py]"]
  node_bz["Brillouin zones<br/>[bz2d.py]"]
  node_lattice["Lattice symmetry<br/>[lattice.py]"]
end

subgraph group_presentation["Views and output"]
  node_view_widgets["Plot widgets<br/>[widgets.py]"]
  node_figure["Figure composer<br/>[figure.py]"]
  node_export["Figure export<br/>[export.py]"]
  node_volume["Volume views<br/>[volume.py]"]
end

node_user(("Researcher"))

node_user -->|"browses data"| node_launcher
node_launcher -->|"sets load options"| node_loader_dialog
node_launcher -->|"opens scan"| node_widgets
node_launcher -->|"opens viewer"| node_windows
node_launcher -->|"retains datasets"| node_session
node_widgets -->|"loads through"| node_registry
node_registry -->|"dispatches read"| node_nxs
node_registry -->|"dispatches read"| node_cassiopee
node_registry -->|"dispatches read"| node_soleil
node_registry -->|"dispatches read"| node_native
node_windows -->|"displays scans"| node_view_widgets
node_windows -->|"shows volumes"| node_volume
node_windows -->|"applies processing"| node_processing
node_windows -->|"creates cuts"| node_cut_tools
node_windows -->|"analyzes spectra"| node_analysis_tools
node_windows -->|"maps momentum"| node_kspace
node_windows -->|"shows zone"| node_bz
node_bz -->|"uses symmetry"| node_lattice
node_figure -->|"exports figures"| node_export
node_user -->|"composes plots"| node_figure

click node_launcher "https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/ARPES_viewer.py"
click node_windows "https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/ui/windows.py"
click node_loader_dialog "https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/ui/loader_dialog.py"
click node_session "https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/loader/session.py"
click node_widgets "https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/ui/widgets.py"
click node_registry "https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/loader/registry.py"
click node_nxs "https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/loader/nxs_file.py"
click node_cassiopee "https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/loader/cassiopee.py"
click node_soleil "https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/loader/soleil.py"
click node_native "https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/loader/native.py"
click node_processing "https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/tools/process.py"
click node_analysis_tools "https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/tools/analysis.py"
click node_cut_tools "https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/tools/cutops.py"
click node_kspace "https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/tools/kspace.py"
click node_bz "https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/tools/bz2d.py"
click node_lattice "https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/tools/lattice.py"
click node_view_widgets "https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/ui/widgets.py"
click node_figure "https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/ui/figure.py"
click node_export "https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/tools/export.py"
click node_volume "https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/tools/volume.py"

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_launcher,node_windows,node_loader_dialog,node_session toneBlue
class node_widgets,node_registry,node_nxs,node_cassiopee,node_soleil,node_native toneAmber
class node_processing,node_analysis_tools,node_cut_tools,node_kspace,node_bz,node_lattice toneMint
class node_view_widgets,node_figure,node_export,node_volume toneRose
class node_user toneIndigo
```

## Components

### Desktop workspace

- [Dataset browser](https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/ARPES_viewer.py): `ARPES_viewer/ARPES_viewer.py`
- [Scan viewers](https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/ui/windows.py): `ARPES_viewer/ui/windows.py`
- [Loader options](https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/ui/loader_dialog.py): `ARPES_viewer/ui/loader_dialog.py`
- [Session storage](https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/loader/session.py): `ARPES_viewer/loader/session.py`

### Data loading

- [Scan data model](https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/ui/widgets.py): `ARPES_viewer/ui/widgets.py`
- [Reader registry](https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/loader/registry.py): `ARPES_viewer/loader/registry.py`
- [NeXus reader](https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/loader/nxs_file.py): `ARPES_viewer/loader/nxs_file.py`
- [CASSIOPEE reader](https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/loader/cassiopee.py): `ARPES_viewer/loader/cassiopee.py`
- [SOLEIL reader](https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/loader/soleil.py): `ARPES_viewer/loader/soleil.py`
- [Native reader](https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/loader/native.py): `ARPES_viewer/loader/native.py`

### Analysis tools

- [2D processing](https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/tools/process.py): `ARPES_viewer/tools/process.py`
- [Spectral analysis](https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/tools/analysis.py): `ARPES_viewer/tools/analysis.py`
- [Cut operations](https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/tools/cutops.py): `ARPES_viewer/tools/cutops.py`
- [Momentum tools](https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/tools/kspace.py): `ARPES_viewer/tools/kspace.py`
- [Brillouin zones](https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/tools/bz2d.py): `ARPES_viewer/tools/bz2d.py`
- [Lattice symmetry](https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/tools/lattice.py): `ARPES_viewer/tools/lattice.py`

### Views and output

- [Plot widgets](https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/ui/widgets.py): `ARPES_viewer/ui/widgets.py`
- [Figure composer](https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/ui/figure.py): `ARPES_viewer/ui/figure.py`
- [Figure export](https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/tools/export.py): `ARPES_viewer/tools/export.py`
- [Volume views](https://github.com/dingpei1995/arpes-data-browser/blob/main/ARPES_viewer/tools/volume.py): `ARPES_viewer/tools/volume.py`

### Other components

- **Researcher**

## Connections

- Researcher → Dataset browser: browses data
- Dataset browser → Loader options: sets load options
- Dataset browser → Scan data model: opens scan
- Dataset browser → Scan viewers: opens viewer
- Dataset browser → Session storage: retains datasets
- Scan data model → Reader registry: loads through
- Reader registry → NeXus reader: dispatches read
- Reader registry → CASSIOPEE reader: dispatches read
- Reader registry → SOLEIL reader: dispatches read
- Reader registry → Native reader: dispatches read
- Scan viewers → Plot widgets: displays scans
- Scan viewers → Volume views: shows volumes
- Scan viewers → 2D processing: applies processing
- Scan viewers → Cut operations: creates cuts
- Scan viewers → Spectral analysis: analyzes spectra
- Scan viewers → Momentum tools: maps momentum
- Scan viewers → Brillouin zones: shows zone
- Brillouin zones → Lattice symmetry: uses symmetry
- Figure composer → Figure export: exports figures
- Researcher → Figure composer: composes plots
