# massimoaddesse/caimg architecture

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

- Interactive diagram: https://gitdiagram.com/massimoaddesse/caimg
- Repository: https://github.com/massimoaddesse/caimg

## Overview

CaImg analyzes neuronal-culture calcium-imaging TIFF recordings, from ROI segmentation and fluorescence traces through event detection and cellular/population metrics. In the newer PySide6 workflow, the analysis page starts a worker, which configures and runs the pipeline; results are passed to the export page, though README notes that newer-GUI export integration is still under development. The Tkinter entry point also exposes Excel export. Spike inference is experimental and separate from the documented main workflow. Arrows reflect shown excerpts, SOURCE INDEX references, or README statements; unsampled implementation details are not inferred.

Main entry points: [`src/pipeline.py`](https://github.com/massimoaddesse/caimg/blob/main/src/pipeline.py) (Analysis pipeline), [`src/analysis/analysis_runner.py`](https://github.com/massimoaddesse/caimg/blob/main/src/analysis/analysis_runner.py) (Cell and network analysis), [`gui/main_window.py`](https://github.com/massimoaddesse/caimg/blob/main/gui/main_window.py) (Main window), [`gui/analysis_worker.py`](https://github.com/massimoaddesse/caimg/blob/main/gui/analysis_worker.py) (Analysis worker)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["User interfaces"]
  node_qt_app["Qt application<br/>[main_gui.py]"]
  node_main_window["Main window<br/>[main_window.py]"]
  node_analysis_page["Analysis page<br/>[analysis_page.py]"]
  node_analysis_worker["Analysis worker<br/>[analysis_worker.py]"]
  node_tk_app["Tkinter interface<br/>[main.py]"]
end

subgraph group_processing["Recording processing"]
  node_config["Analysis settings<br/>[analysis_config.py]"]
  node_pipeline["Analysis pipeline<br/>[pipeline.py]"]
  node_tiff["TIFF loading<br/>[tiff_loader.py]"]
  node_segmentation["Cell segmentation<br/>[cellpose.py]"]
  node_fluorescence["Fluorescence extraction<br/>[extraction.py]"]
  node_normalization["ΔF/F normalization<br/>[normalization.py]"]
end

subgraph group_events["Event analysis"]
  node_detector_runner["Detection dispatch<br/>[runner.py]"]
  node_detector_methods["Detection methods"]
  node_event_metrics["Event metrics<br/>[event_analysis.py]"]
  node_metric_runner["Event metric dispatch<br/>[runner.py]"]
  node_analysis_runner["Cell and network analysis<br/>[analysis_runner.py]"]
  node_cell_metrics["Cell activity metrics<br/>[cell_metrics.py]"]
  node_correlation["Cell correlations<br/>[correlation.py]"]
  node_coactivity["Population coactivity<br/>[coactivity.py]"]
  node_synchrony["Event synchrony<br/>[synchrony.py]"]
end

subgraph group_inference["Experimental inference"]
  node_inference["Spike inference"]
end

subgraph group_outputs["Results and export"]
  node_export_page["Export page<br/>[export_page.py]"]
  node_exporter["Excel exporter<br/>[exporter.py]"]
end

node_user(("Analyst"))

node_user -->|"launches"| node_qt_app
node_qt_app -->|"opens"| node_main_window
node_main_window -->|"shows"| node_analysis_page
node_analysis_page -->|"starts"| node_analysis_worker
node_analysis_worker -->|"configures"| node_config
node_analysis_worker -->|"runs"| node_pipeline
node_pipeline -->|"loads"| node_tiff
node_pipeline -->|"segments"| node_segmentation
node_pipeline -->|"extracts"| node_fluorescence
node_pipeline -->|"normalizes"| node_normalization
node_pipeline -->|"dispatches detection"| node_detector_runner
node_pipeline -->|"dispatches metrics"| node_metric_runner
node_pipeline -->|"runs analysis"| node_analysis_runner
node_analysis_worker -->|"selects method"| node_detector_methods
node_detector_runner -.->|"invokes detector"| node_detector_methods
node_metric_runner -->|"uses profiler"| node_event_metrics
node_analysis_runner -->|"calculates"| node_cell_metrics
node_analysis_runner -->|"calculates"| node_correlation
node_analysis_runner -->|"calculates"| node_coactivity
node_analysis_runner -->|"calculates"| node_synchrony
node_main_window -->|"shows"| node_export_page
node_main_window -->|"passes results"| node_export_page
node_user -->|"launches"| node_tk_app
node_tk_app -->|"runs"| node_pipeline
node_tk_app -->|"exports results"| node_exporter
node_pipeline -.->|"experimental, not integrated"| node_inference

click node_qt_app "https://github.com/massimoaddesse/caimg/blob/main/main_gui.py"
click node_main_window "https://github.com/massimoaddesse/caimg/blob/main/gui/main_window.py"
click node_analysis_page "https://github.com/massimoaddesse/caimg/blob/main/gui/pages/analysis_page.py"
click node_analysis_worker "https://github.com/massimoaddesse/caimg/blob/main/gui/analysis_worker.py"
click node_tk_app "https://github.com/massimoaddesse/caimg/blob/main/main.py"
click node_config "https://github.com/massimoaddesse/caimg/blob/main/config/analysis_config.py"
click node_pipeline "https://github.com/massimoaddesse/caimg/blob/main/src/pipeline.py"
click node_tiff "https://github.com/massimoaddesse/caimg/blob/main/src/dataio/tiff_loader.py"
click node_segmentation "https://github.com/massimoaddesse/caimg/blob/main/src/segmentation/cellpose.py"
click node_fluorescence "https://github.com/massimoaddesse/caimg/blob/main/src/fluorescence/extraction.py"
click node_normalization "https://github.com/massimoaddesse/caimg/blob/main/src/fluorescence/normalization.py"
click node_detector_runner "https://github.com/massimoaddesse/caimg/blob/main/src/detection/runner.py"
click node_detector_methods "https://github.com/massimoaddesse/caimg/tree/main/src/detection"
click node_event_metrics "https://github.com/massimoaddesse/caimg/blob/main/src/metrics/event_analysis.py"
click node_metric_runner "https://github.com/massimoaddesse/caimg/blob/main/src/metrics/runner.py"
click node_analysis_runner "https://github.com/massimoaddesse/caimg/blob/main/src/analysis/analysis_runner.py"
click node_cell_metrics "https://github.com/massimoaddesse/caimg/blob/main/src/analysis/cell_metrics.py"
click node_correlation "https://github.com/massimoaddesse/caimg/blob/main/src/analysis/correlation.py"
click node_coactivity "https://github.com/massimoaddesse/caimg/blob/main/src/analysis/coactivity.py"
click node_synchrony "https://github.com/massimoaddesse/caimg/blob/main/src/analysis/synchrony.py"
click node_inference "https://github.com/massimoaddesse/caimg/tree/main/src/inference"
click node_export_page "https://github.com/massimoaddesse/caimg/blob/main/gui/pages/export_page.py"
click node_exporter "https://github.com/massimoaddesse/caimg/blob/main/src/dataio/exporter.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_qt_app,node_main_window,node_analysis_page,node_analysis_worker,node_tk_app toneBlue
class node_config,node_pipeline,node_tiff,node_segmentation,node_fluorescence,node_normalization toneAmber
class node_detector_runner,node_detector_methods,node_event_metrics,node_metric_runner,node_analysis_runner,node_cell_metrics,node_correlation,node_coactivity,node_synchrony toneMint
class node_inference toneRose
class node_export_page,node_exporter,node_user toneIndigo
```

## Components

### User interfaces

- [Qt application](https://github.com/massimoaddesse/caimg/blob/main/main_gui.py): `main_gui.py`
- [Main window](https://github.com/massimoaddesse/caimg/blob/main/gui/main_window.py): `gui/main_window.py`
- [Analysis page](https://github.com/massimoaddesse/caimg/blob/main/gui/pages/analysis_page.py): `gui/pages/analysis_page.py`
- [Analysis worker](https://github.com/massimoaddesse/caimg/blob/main/gui/analysis_worker.py): `gui/analysis_worker.py`
- [Tkinter interface](https://github.com/massimoaddesse/caimg/blob/main/main.py): `main.py`

### Recording processing

- [Analysis settings](https://github.com/massimoaddesse/caimg/blob/main/config/analysis_config.py): `config/analysis_config.py`
- [Analysis pipeline](https://github.com/massimoaddesse/caimg/blob/main/src/pipeline.py): `src/pipeline.py`
- [TIFF loading](https://github.com/massimoaddesse/caimg/blob/main/src/dataio/tiff_loader.py): `src/dataio/tiff_loader.py`
- [Cell segmentation](https://github.com/massimoaddesse/caimg/blob/main/src/segmentation/cellpose.py): `src/segmentation/cellpose.py`
- [Fluorescence extraction](https://github.com/massimoaddesse/caimg/blob/main/src/fluorescence/extraction.py): `src/fluorescence/extraction.py`
- [ΔF/F normalization](https://github.com/massimoaddesse/caimg/blob/main/src/fluorescence/normalization.py): `src/fluorescence/normalization.py`

### Event analysis

- [Detection dispatch](https://github.com/massimoaddesse/caimg/blob/main/src/detection/runner.py): `src/detection/runner.py`
- [Detection methods](https://github.com/massimoaddesse/caimg/tree/main/src/detection): `src/detection`
- [Event metrics](https://github.com/massimoaddesse/caimg/blob/main/src/metrics/event_analysis.py): `src/metrics/event_analysis.py`
- [Event metric dispatch](https://github.com/massimoaddesse/caimg/blob/main/src/metrics/runner.py): `src/metrics/runner.py`
- [Cell and network analysis](https://github.com/massimoaddesse/caimg/blob/main/src/analysis/analysis_runner.py): `src/analysis/analysis_runner.py`
- [Cell activity metrics](https://github.com/massimoaddesse/caimg/blob/main/src/analysis/cell_metrics.py): `src/analysis/cell_metrics.py`
- [Cell correlations](https://github.com/massimoaddesse/caimg/blob/main/src/analysis/correlation.py): `src/analysis/correlation.py`
- [Population coactivity](https://github.com/massimoaddesse/caimg/blob/main/src/analysis/coactivity.py): `src/analysis/coactivity.py`
- [Event synchrony](https://github.com/massimoaddesse/caimg/blob/main/src/analysis/synchrony.py): `src/analysis/synchrony.py`

### Experimental inference

- [Spike inference](https://github.com/massimoaddesse/caimg/tree/main/src/inference): `src/inference`

### Results and export

- [Export page](https://github.com/massimoaddesse/caimg/blob/main/gui/pages/export_page.py): `gui/pages/export_page.py`
- [Excel exporter](https://github.com/massimoaddesse/caimg/blob/main/src/dataio/exporter.py): `src/dataio/exporter.py`

### Other components

- **Analyst**

## Connections

- Analyst → Qt application: launches (evidence: `README.md`)
- Qt application → Main window: opens (evidence: `main_gui.py`)
- Main window → Analysis page: shows (evidence: `gui/main_window.py`)
- Analysis page → Analysis worker: starts (evidence: `gui/pages/analysis_page.py`)
- Analysis worker → Analysis settings: configures (evidence: `gui/analysis_worker.py`)
- Analysis worker → Analysis pipeline: runs (evidence: `gui/analysis_worker.py`)
- Analysis pipeline → TIFF loading: loads (evidence: `src/pipeline.py`)
- Analysis pipeline → Cell segmentation: segments (evidence: `src/pipeline.py`)
- Analysis pipeline → Fluorescence extraction: extracts (evidence: `src/pipeline.py`)
- Analysis pipeline → ΔF/F normalization: normalizes (evidence: `src/pipeline.py`)
- Analysis pipeline → Detection dispatch: dispatches detection (evidence: `src/pipeline.py`)
- Analysis pipeline → Event metric dispatch: dispatches metrics (evidence: `src/pipeline.py`)
- Analysis pipeline → Cell and network analysis: runs analysis (evidence: `src/pipeline.py`)
- Analysis worker → Detection methods: selects method (evidence: `gui/analysis_worker.py`)
- Detection dispatch → Detection methods: invokes detector (evidence: `src/detection/runner.py`)
- Event metric dispatch → Event metrics: uses profiler (evidence: `src/metrics/runner.py`)
- Cell and network analysis → Cell activity metrics: calculates (evidence: `src/analysis/analysis_runner.py`)
- Cell and network analysis → Cell correlations: calculates (evidence: `src/analysis/analysis_runner.py`)
- Cell and network analysis → Population coactivity: calculates (evidence: `src/analysis/analysis_runner.py`)
- Cell and network analysis → Event synchrony: calculates (evidence: `src/analysis/analysis_runner.py`)
- Main window → Export page: shows (evidence: `gui/main_window.py`)
- Main window → Export page: passes results (evidence: `gui/main_window.py`)
- Analyst → Tkinter interface: launches (evidence: `README.md`)
- Tkinter interface → Analysis pipeline: runs (evidence: `main.py`)
- Tkinter interface → Excel exporter: exports results (evidence: `main.py`)
- Analysis pipeline → Spike inference: experimental, not integrated (evidence: `README.md`)
