# harrisonkramer/optiland architecture

> Architecture diagram of the GitHub repository harrisonkramer/optiland, 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/harrisonkramer/optiland
- Repository: https://github.com/harrisonkramer/optiland

## Overview

Optiland is a Python optical-design platform with a GUI. The principal workflow is to construct an optical system, trace rays through it, and analyze its optical performance; engineers can then optimize and tolerance the design. The repository also supports non-sequential tracing, image simulation, file interoperability, and interactive visualization. The graph reflects README capabilities and sampled source; several core call paths and unsampled subsystem wiring are therefore left unspecified.

Main entry points: [`optiland/optic/optic.py`](https://github.com/harrisonkramer/optiland/blob/master/optiland/optic/optic.py) (Optic system), [`optiland/nonsequential/tracer.py`](https://github.com/harrisonkramer/optiland/blob/master/optiland/nonsequential/tracer.py) (Non-sequential tracing), [`optiland_gui/main_window.py`](https://github.com/harrisonkramer/optiland/blob/master/optiland_gui/main_window.py) (Optiland GUI), [`optiland/raytrace/real_ray_tracer.py`](https://github.com/harrisonkramer/optiland/blob/master/optiland/raytrace/real_ray_tracer.py) (Sequential ray tracing)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_design["Optical Design"]
  node_optic["Optic system<br/>[optic.py]"]
  node_surfaces["Surfaces and geometry"]
  node_fields["Fields and wavelengths<br/>[field_group.py]"]
  node_materials["Optical materials<br/>[material.py]"]
  node_sequences["Trace sequences<br/>[sequenced_optic.py]"]
end

subgraph group_trace["Tracing Engines"]
  node_raytrace["Sequential ray tracing<br/>[real_ray_tracer.py]"]
  node_nonseq["Non-sequential tracing<br/>[tracer.py]"]
  node_ns_scene["Non-sequential scene<br/>[scene.py]"]
  node_backend["NumPy / PyTorch backend<br/>[__init__.py]"]
end

subgraph group_analysis["Analysis"]
  node_analysis["Optical analyses<br/>[__init__.py]"]
  node_wavefront["Wavefront analysis<br/>[wavefront.py]"]
  node_psf_mtf["PSF and MTF<br/>[base.py]"]
  node_image_sim["Image simulation<br/>[engine.py]"]
end

subgraph group_engineering["Engineering Tools"]
  node_optimization["Optimization<br/>[problem.py]"]
  node_tolerancing["Tolerancing<br/>[core.py]"]
  node_prescription["Prescription reports<br/>[prescription.py]"]
end

subgraph group_interfaces["Interfaces"]
  node_fileio["Optical file exchange<br/>[parser.py]"]
  node_jsonio["JSON serialization"]
  node_visualization["Visualization<br/>[optic_viewer.py]"]
  node_gui["Optiland GUI<br/>[main_window.py]"]
  node_gui_panels["GUI panels<br/>[panel_manager.py]"]
  node_gui_surface["Surface editor service<br/>[surface_service.py]"]
  node_connector["GUI connector"]
end

node_user(("Optical engineer"))

node_user -->|"defines system"| node_optic
node_optic -->|"configures surfaces"| node_surfaces
node_optic -->|"configures fields"| node_fields
node_optic -->|"uses materials"| node_materials
node_optic -->|"defines sequences"| node_sequences
node_user -->|"requests trace"| node_raytrace
node_raytrace -->|"computes with"| node_backend
node_user -->|"requests trace"| node_nonseq
node_nonseq -->|"traces scene"| node_ns_scene
node_nonseq -->|"computes with"| node_backend
node_user -->|"requests analysis"| node_analysis
node_user -->|"requests analysis"| node_wavefront
node_user -->|"requests analysis"| node_psf_mtf
node_user -->|"simulates image"| node_image_sim
node_image_sim -->|"generates PSF basis"| node_psf_mtf
node_user -->|"optimizes design"| node_optimization
node_user -->|"evaluates tolerance"| node_tolerancing
node_user -->|"generates report"| node_prescription
node_user -->|"imports or exports"| node_fileio
node_user -->|"saves or loads"| node_jsonio
node_user -->|"views system"| node_visualization
node_user -->|"uses"| node_gui
node_gui -->|"creates panels"| node_gui_panels
node_gui_panels -->|"provides connector"| node_connector
node_gui -->|"edits surfaces"| node_gui_surface
node_gui_surface -->|"updates system"| node_optic

click node_optic "https://github.com/harrisonkramer/optiland/blob/master/optiland/optic/optic.py"
click node_surfaces "https://github.com/harrisonkramer/optiland/blob/master/optiland/surfaces/standard_surface.py"
click node_fields "https://github.com/harrisonkramer/optiland/blob/master/optiland/fields/field_group.py"
click node_materials "https://github.com/harrisonkramer/optiland/blob/master/optiland/materials/material.py"
click node_sequences "https://github.com/harrisonkramer/optiland/blob/master/optiland/sequences/sequenced_optic.py"
click node_raytrace "https://github.com/harrisonkramer/optiland/blob/master/optiland/raytrace/real_ray_tracer.py"
click node_nonseq "https://github.com/harrisonkramer/optiland/blob/master/optiland/nonsequential/tracer.py"
click node_ns_scene "https://github.com/harrisonkramer/optiland/blob/master/optiland/nonsequential/scene.py"
click node_backend "https://github.com/harrisonkramer/optiland/blob/master/optiland/backend/__init__.py"
click node_analysis "https://github.com/harrisonkramer/optiland/blob/master/optiland/analysis/__init__.py"
click node_wavefront "https://github.com/harrisonkramer/optiland/blob/master/optiland/wavefront/wavefront.py"
click node_psf_mtf "https://github.com/harrisonkramer/optiland/blob/master/optiland/psf/base.py"
click node_image_sim "https://github.com/harrisonkramer/optiland/blob/master/optiland/analysis/image_simulation/engine.py"
click node_optimization "https://github.com/harrisonkramer/optiland/blob/master/optiland/optimization/problem.py"
click node_tolerancing "https://github.com/harrisonkramer/optiland/blob/master/optiland/tolerancing/core.py"
click node_prescription "https://github.com/harrisonkramer/optiland/blob/master/optiland/prescription/prescription.py"
click node_fileio "https://github.com/harrisonkramer/optiland/blob/master/optiland/fileio/zemax/reader/parser.py"
click node_jsonio "https://github.com/harrisonkramer/optiland/blob/master/optiland/fileio/optiland_handler.py"
click node_visualization "https://github.com/harrisonkramer/optiland/blob/master/optiland/visualization/system/optic_viewer.py"
click node_gui "https://github.com/harrisonkramer/optiland/blob/master/optiland_gui/main_window.py"
click node_gui_panels "https://github.com/harrisonkramer/optiland/blob/master/optiland_gui/panel_manager.py"
click node_gui_surface "https://github.com/harrisonkramer/optiland/blob/master/optiland_gui/services/surface_service.py"
click node_connector "https://github.com/harrisonkramer/optiland/blob/master/optiland_gui/optiland_connector.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_optic,node_surfaces,node_fields,node_materials,node_sequences toneBlue
class node_raytrace,node_nonseq,node_ns_scene,node_backend toneAmber
class node_analysis,node_wavefront,node_psf_mtf,node_image_sim toneMint
class node_optimization,node_tolerancing,node_prescription toneRose
class node_fileio,node_jsonio,node_visualization,node_gui,node_gui_panels,node_gui_surface,node_connector,node_user toneIndigo
```

## Components

### Optical Design

- [Optic system](https://github.com/harrisonkramer/optiland/blob/master/optiland/optic/optic.py): `optiland/optic/optic.py`
- [Surfaces and geometry](https://github.com/harrisonkramer/optiland/blob/master/optiland/surfaces/standard_surface.py): `optiland/surfaces/standard_surface.py`
- [Fields and wavelengths](https://github.com/harrisonkramer/optiland/blob/master/optiland/fields/field_group.py): `optiland/fields/field_group.py`
- [Optical materials](https://github.com/harrisonkramer/optiland/blob/master/optiland/materials/material.py): `optiland/materials/material.py`
- [Trace sequences](https://github.com/harrisonkramer/optiland/blob/master/optiland/sequences/sequenced_optic.py): `optiland/sequences/sequenced_optic.py`

### Tracing Engines

- [Sequential ray tracing](https://github.com/harrisonkramer/optiland/blob/master/optiland/raytrace/real_ray_tracer.py): `optiland/raytrace/real_ray_tracer.py`
- [Non-sequential tracing](https://github.com/harrisonkramer/optiland/blob/master/optiland/nonsequential/tracer.py): `optiland/nonsequential/tracer.py`
- [Non-sequential scene](https://github.com/harrisonkramer/optiland/blob/master/optiland/nonsequential/scene.py): `optiland/nonsequential/scene.py`
- [NumPy / PyTorch backend](https://github.com/harrisonkramer/optiland/blob/master/optiland/backend/__init__.py): `optiland/backend/__init__.py`

### Analysis

- [Optical analyses](https://github.com/harrisonkramer/optiland/blob/master/optiland/analysis/__init__.py): `optiland/analysis/__init__.py`
- [Wavefront analysis](https://github.com/harrisonkramer/optiland/blob/master/optiland/wavefront/wavefront.py): `optiland/wavefront/wavefront.py`
- [PSF and MTF](https://github.com/harrisonkramer/optiland/blob/master/optiland/psf/base.py): `optiland/psf/base.py`
- [Image simulation](https://github.com/harrisonkramer/optiland/blob/master/optiland/analysis/image_simulation/engine.py): `optiland/analysis/image_simulation/engine.py`

### Engineering Tools

- [Optimization](https://github.com/harrisonkramer/optiland/blob/master/optiland/optimization/problem.py): `optiland/optimization/problem.py`
- [Tolerancing](https://github.com/harrisonkramer/optiland/blob/master/optiland/tolerancing/core.py): `optiland/tolerancing/core.py`
- [Prescription reports](https://github.com/harrisonkramer/optiland/blob/master/optiland/prescription/prescription.py): `optiland/prescription/prescription.py`

### Interfaces

- [Optical file exchange](https://github.com/harrisonkramer/optiland/blob/master/optiland/fileio/zemax/reader/parser.py): `optiland/fileio/zemax/reader/parser.py`
- [JSON serialization](https://github.com/harrisonkramer/optiland/blob/master/optiland/fileio/optiland_handler.py): `optiland/fileio/optiland_handler.py`
- [Visualization](https://github.com/harrisonkramer/optiland/blob/master/optiland/visualization/system/optic_viewer.py): `optiland/visualization/system/optic_viewer.py`
- [Optiland GUI](https://github.com/harrisonkramer/optiland/blob/master/optiland_gui/main_window.py): `optiland_gui/main_window.py`
- [GUI panels](https://github.com/harrisonkramer/optiland/blob/master/optiland_gui/panel_manager.py): `optiland_gui/panel_manager.py`
- [Surface editor service](https://github.com/harrisonkramer/optiland/blob/master/optiland_gui/services/surface_service.py): `optiland_gui/services/surface_service.py`
- [GUI connector](https://github.com/harrisonkramer/optiland/blob/master/optiland_gui/optiland_connector.py): `optiland_gui/optiland_connector.py`

### Other components

- **Optical engineer**

## Connections

- Optical engineer → Optic system: defines system
- Optic system → Surfaces and geometry: configures surfaces
- Optic system → Fields and wavelengths: configures fields
- Optic system → Optical materials: uses materials
- Optic system → Trace sequences: defines sequences
- Optical engineer → Sequential ray tracing: requests trace
- Sequential ray tracing → NumPy / PyTorch backend: computes with
- Optical engineer → Non-sequential tracing: requests trace
- Non-sequential tracing → Non-sequential scene: traces scene
- Non-sequential tracing → NumPy / PyTorch backend: computes with
- Optical engineer → Optical analyses: requests analysis
- Optical engineer → Wavefront analysis: requests analysis
- Optical engineer → PSF and MTF: requests analysis
- Optical engineer → Image simulation: simulates image
- Image simulation → PSF and MTF: generates PSF basis
- Optical engineer → Optimization: optimizes design
- Optical engineer → Tolerancing: evaluates tolerance
- Optical engineer → Prescription reports: generates report
- Optical engineer → Optical file exchange: imports or exports
- Optical engineer → JSON serialization: saves or loads
- Optical engineer → Visualization: views system
- Optical engineer → Optiland GUI: uses
- Optiland GUI → GUI panels: creates panels
- GUI panels → GUI connector: provides connector
- Optiland GUI → Surface editor service: edits surfaces
- Surface editor service → Optic system: updates system
