# ebbrg/genome-wide-workbench architecture

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

- Interactive diagram: https://gitdiagram.com/ebbrg/genome-wide-workbench
- Repository: https://github.com/ebbrg/genome-wide-workbench

## Overview

GWW is an offline-first graphical bioinformatics workbench. Researchers provide sequence or genome inputs through the desktop application, run individual analyses or combine stages from sequence discovery and alignment through phylogenetic and evolutionary interpretation, and inspect visualizations or classification results. The README documents the broader integrated workflows; sampled modules confirm several UI-to-worker/tool patterns, but do not establish all module wiring or a single central orchestrator, so uncertain call relationships are omitted.

Main entry points: [`src/main_app.py`](https://github.com/ebbrg/genome-wide-workbench/blob/main/src/main_app.py) (Workbench interface), [`src/primer_designing_adv.py`](https://github.com/ebbrg/genome-wide-workbench/blob/main/src/primer_designing_adv.py) (Primer design), [`src/app_vigna.py`](https://github.com/ebbrg/genome-wide-workbench/blob/main/src/app_vigna.py) (Protein classification), [`src/fasta_formatter.py`](https://github.com/ebbrg/genome-wide-workbench/blob/main/src/fasta_formatter.py) (FASTA filtering)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Desktop interface"]
  node_desktop["Workbench interface<br/>[main_app.py]"]
end

subgraph group_sequence["Sequence analysis"]
  node_fasta["FASTA filtering<br/>[fasta_formatter.py]"]
  node_blast["BLAST search<br/>[blast.py]"]
  node_hmm["HMM search<br/>[hmm_search.py]"]
  node_diamond["Homology search<br/>[homologus_pair.py]"]
  node_alignment["Sequence alignment<br/>[align.py]"]
  node_trim["Alignment trimming<br/>[align_triming.py]"]
  node_primer["Primer design"]
  node_basicprimer["Basic primer design"]
end

subgraph group_evolution["Evolution and comparison"]
  node_phylogeny["Phylogenetic analysis"]
  node_kaks["Ka/Ks analysis<br/>[kaks.py]"]
  node_intersection["Comparative genomics<br/>[intersect.R]"]
end

subgraph group_visual["Visualization and classification"]
  node_loci["Gene-density mapping<br/>[loci_map.py]"]
  node_heatmap["Expression heatmaps<br/>[heatmap.py]"]
  node_ideogram["Genomic ideograms"]
  node_classifier["Protein classification<br/>[app_vigna.py]"]
end

node_researcher(("Researcher"))
node_primer3{{"Primer3"}}
node_esm{{"ESM-2 model"}}

node_researcher -->|"uses"| node_desktop
node_desktop -->|"opens tool"| node_fasta
node_desktop -->|"opens tool"| node_blast
node_desktop -->|"opens tool"| node_hmm
node_desktop -->|"opens tool"| node_diamond
node_desktop -->|"opens tool"| node_alignment
node_desktop -->|"opens tool"| node_trim
node_desktop -->|"opens tool"| node_phylogeny
node_desktop -->|"opens tool"| node_kaks
node_desktop -->|"opens tool"| node_primer
node_desktop -->|"opens tool"| node_basicprimer
node_desktop -->|"opens tool"| node_loci
node_desktop -->|"opens tool"| node_heatmap
node_desktop -->|"opens tool"| node_ideogram
node_desktop -->|"opens tool"| node_intersection
node_desktop -->|"opens tool"| node_classifier
node_blast -->|"shows results"| node_researcher
node_hmm -->|"shows results"| node_researcher
node_diamond -->|"shows results"| node_researcher
node_alignment -->|"shows output"| node_researcher
node_phylogeny -->|"shows tree"| node_researcher
node_kaks -->|"shows results"| node_researcher
node_primer -.->|"calls"| node_primer3
node_primer -->|"shows candidates"| node_researcher
node_basicprimer -.->|"uses"| node_primer3
node_loci -->|"shows map"| node_researcher
node_heatmap -->|"shows heatmap"| node_researcher
node_ideogram -->|"shows output"| node_researcher
node_intersection -->|"shows comparison"| node_researcher
node_classifier -.->|"embeds sequences"| node_esm
node_classifier -->|"returns labels"| node_researcher
node_fasta -->|"writes filtered FASTA"| node_researcher
node_trim -->|"writes trimmed alignment"| node_researcher

click node_desktop "https://github.com/ebbrg/genome-wide-workbench/blob/main/src/main_app.py"
click node_fasta "https://github.com/ebbrg/genome-wide-workbench/blob/main/src/fasta_formatter.py"
click node_blast "https://github.com/ebbrg/genome-wide-workbench/blob/main/src/blast.py"
click node_hmm "https://github.com/ebbrg/genome-wide-workbench/blob/main/src/hmm_search.py"
click node_diamond "https://github.com/ebbrg/genome-wide-workbench/blob/main/src/homologus_pair.py"
click node_alignment "https://github.com/ebbrg/genome-wide-workbench/blob/main/src/align.py"
click node_trim "https://github.com/ebbrg/genome-wide-workbench/blob/main/src/align_triming.py"
click node_phylogeny "https://github.com/ebbrg/genome-wide-workbench/blob/main/src/phylogenetic_analysis.py"
click node_kaks "https://github.com/ebbrg/genome-wide-workbench/blob/main/src/kaks.py"
click node_primer "https://github.com/ebbrg/genome-wide-workbench/blob/main/src/primer_designing_adv.py"
click node_basicprimer "https://github.com/ebbrg/genome-wide-workbench/blob/main/src/primer_designing_basic.py"
click node_loci "https://github.com/ebbrg/genome-wide-workbench/blob/main/src/loci_map.py"
click node_heatmap "https://github.com/ebbrg/genome-wide-workbench/blob/main/src/heatmap.py"
click node_ideogram "https://github.com/ebbrg/genome-wide-workbench/blob/main/src/generate_ideogram.R"
click node_intersection "https://github.com/ebbrg/genome-wide-workbench/blob/main/src/intersect.R"
click node_classifier "https://github.com/ebbrg/genome-wide-workbench/blob/main/src/app_vigna.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_desktop toneBlue
class node_fasta,node_blast,node_hmm,node_diamond,node_alignment,node_trim,node_primer,node_basicprimer toneAmber
class node_phylogeny,node_kaks,node_intersection toneMint
class node_loci,node_heatmap,node_ideogram,node_classifier toneRose
class node_researcher,node_primer3,node_esm toneIndigo
```

## Components

### Desktop interface

- [Workbench interface](https://github.com/ebbrg/genome-wide-workbench/blob/main/src/main_app.py): `src/main_app.py`

### Sequence analysis

- [FASTA filtering](https://github.com/ebbrg/genome-wide-workbench/blob/main/src/fasta_formatter.py): `src/fasta_formatter.py`
- [BLAST search](https://github.com/ebbrg/genome-wide-workbench/blob/main/src/blast.py): `src/blast.py`
- [HMM search](https://github.com/ebbrg/genome-wide-workbench/blob/main/src/hmm_search.py): `src/hmm_search.py`
- [Homology search](https://github.com/ebbrg/genome-wide-workbench/blob/main/src/homologus_pair.py): `src/homologus_pair.py`
- [Sequence alignment](https://github.com/ebbrg/genome-wide-workbench/blob/main/src/align.py): `src/align.py`
- [Alignment trimming](https://github.com/ebbrg/genome-wide-workbench/blob/main/src/align_triming.py): `src/align_triming.py`
- [Primer design](https://github.com/ebbrg/genome-wide-workbench/blob/main/src/primer_designing_adv.py): `src/primer_designing_adv.py`
- [Basic primer design](https://github.com/ebbrg/genome-wide-workbench/blob/main/src/primer_designing_basic.py): `src/primer_designing_basic.py`

### Evolution and comparison

- [Phylogenetic analysis](https://github.com/ebbrg/genome-wide-workbench/blob/main/src/phylogenetic_analysis.py): `src/phylogenetic_analysis.py`
- [Ka/Ks analysis](https://github.com/ebbrg/genome-wide-workbench/blob/main/src/kaks.py): `src/kaks.py`
- [Comparative genomics](https://github.com/ebbrg/genome-wide-workbench/blob/main/src/intersect.R): `src/intersect.R`

### Visualization and classification

- [Gene-density mapping](https://github.com/ebbrg/genome-wide-workbench/blob/main/src/loci_map.py): `src/loci_map.py`
- [Expression heatmaps](https://github.com/ebbrg/genome-wide-workbench/blob/main/src/heatmap.py): `src/heatmap.py`
- [Genomic ideograms](https://github.com/ebbrg/genome-wide-workbench/blob/main/src/generate_ideogram.R): `src/generate_ideogram.R`
- [Protein classification](https://github.com/ebbrg/genome-wide-workbench/blob/main/src/app_vigna.py): `src/app_vigna.py`

### Other components

- **Researcher**
- **Primer3**
- **ESM-2 model**

## Connections

- Researcher → Workbench interface: uses
- Workbench interface → FASTA filtering: opens tool
- Workbench interface → BLAST search: opens tool
- Workbench interface → HMM search: opens tool
- Workbench interface → Homology search: opens tool
- Workbench interface → Sequence alignment: opens tool
- Workbench interface → Alignment trimming: opens tool
- Workbench interface → Phylogenetic analysis: opens tool
- Workbench interface → Ka/Ks analysis: opens tool
- Workbench interface → Primer design: opens tool
- Workbench interface → Basic primer design: opens tool
- Workbench interface → Gene-density mapping: opens tool
- Workbench interface → Expression heatmaps: opens tool
- Workbench interface → Genomic ideograms: opens tool
- Workbench interface → Comparative genomics: opens tool
- Workbench interface → Protein classification: opens tool
- BLAST search → Researcher: shows results
- HMM search → Researcher: shows results
- Homology search → Researcher: shows results
- Sequence alignment → Researcher: shows output
- Phylogenetic analysis → Researcher: shows tree
- Ka/Ks analysis → Researcher: shows results
- Primer design → Primer3: calls
- Primer design → Researcher: shows candidates
- Basic primer design → Primer3: uses
- Gene-density mapping → Researcher: shows map
- Expression heatmaps → Researcher: shows heatmap
- Genomic ideograms → Researcher: shows output
- Comparative genomics → Researcher: shows comparison
- Protein classification → ESM-2 model: embeds sequences
- Protein classification → Researcher: returns labels
- FASTA filtering → Researcher: writes filtered FASTA
- Alignment trimming → Researcher: writes trimmed alignment
