# nrlmmd-geoips/geoips architecture

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

- Interactive diagram: https://gitdiagram.com/nrlmmd-geoips/geoips
- Repository: https://github.com/nrlmmd-geoips/geoips

## Overview

GeoIPS is a plugin-driven satellite and weather data processing package. Users invoke processing through the CLI; Order-Based Processing (OBP) coordinates configurable plugins to read data, apply processing, and produce outputs. The repository also provides configuration and plugin discovery, geographic sector/track utilities, and data-manipulation support. The README establishes the overall plugin/OBP model, while the sampled source index supports selected module relationships; many runtime details and optional integrations are not shown, so uncertain links are omitted.

Main entry points: [`geoips/plugins/modules/procflows/single_source.py`](https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/plugins/modules/procflows/single_source.py) (Single-source OBP), [`geoips/interfaces/base.py`](https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/interfaces/base.py) (Plugin interfaces), [`geoips/xarray_utils/data.py`](https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/xarray_utils/data.py) (Data manipulation), [`geoips/config/config.py`](https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/config/config.py) (GeoIPS configuration)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["User entry"]
  node_cli["GeoIPS CLI<br/>[cli.py]"]
  node_args["CLI arguments<br/>[args.py]"]
end

subgraph group_runtime["Processing runtime"]
  node_obp["Single-source OBP<br/>[single_source.py]"]
  node_interfaces["Plugin interfaces<br/>[base.py]"]
  node_plugin_base["Plugin lifecycle"]
end

subgraph group_plugins["Plugin capabilities"]
  node_readers["Data readers<br/>[readers.py]"]
  node_algorithms["Algorithms<br/>[algorithms.py]"]
  node_interpolators["Interpolation<br/>[interpolators.py]"]
  node_coverage["Coverage checks"]
  node_formatters["Output formatters"]
  node_checkers["Output checks<br/>[output_checkers.py]"]
  node_products["Product and workflow specs"]
end

subgraph group_geo["Geospatial domain"]
  node_sectors["Sector utilities<br/>[utils.py]"]
  node_tracks[("Cyclone track database")]
  node_rendering["Map rendering<br/>[maps.py]"]
end

subgraph group_platform["Configuration and data"]
  node_xarray["Data manipulation<br/>[data.py]"]
  node_config["GeoIPS configuration<br/>[config.py]"]
  node_plugin_config["Plugin configuration<br/>[plugins.py]"]
end

node_user(("User"))

node_user -->|"invokes"| node_cli
node_cli -->|"uses"| node_interfaces
node_obp -->|"uses"| node_args
node_obp -->|"dispatches plugins"| node_interfaces
node_obp -->|"uses data utilities"| node_xarray
node_obp -->|"loads product config"| node_products
node_obp -->|"checks outputs"| node_checkers
node_interfaces -->|"provides plugin base"| node_plugin_base
node_plugin_base -->|"registers interfaces"| node_interfaces
node_xarray -->|"uses reader interface"| node_readers
node_config -->|"supports discovery"| node_plugin_config
node_config -->|"provides paths"| node_tracks
node_sectors -->|"uses data utilities"| node_xarray
node_obp -->|"orchestrates plugins"| node_readers
node_obp -->|"orchestrates plugins"| node_algorithms
node_obp -->|"orchestrates plugins"| node_formatters
node_obp -.->|"may dispatch"| node_interpolators
node_obp -.->|"may dispatch"| node_coverage
node_formatters -.->|"may render maps"| node_rendering

click node_cli "https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/cli.py"
click node_args "https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/commandline/args.py"
click node_obp "https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/plugins/modules/procflows/single_source.py"
click node_interfaces "https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/interfaces/base.py"
click node_plugin_base "https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/interfaces/class_based_plugin.py"
click node_readers "https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/interfaces/class_based/readers.py"
click node_algorithms "https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/interfaces/class_based/algorithms.py"
click node_interpolators "https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/interfaces/class_based/interpolators.py"
click node_coverage "https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/interfaces/class_based/coverage_checkers.py"
click node_formatters "https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/interfaces/class_based/output_formatters.py"
click node_checkers "https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/interfaces/class_based/output_checkers.py"
click node_products "https://github.com/nrlmmd-geoips/geoips/tree/main/geoips/interfaces/yaml_based"
click node_xarray "https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/xarray_utils/data.py"
click node_config "https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/config/config.py"
click node_plugin_config "https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/config/plugins.py"
click node_sectors "https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/sector_utils/utils.py"
click node_tracks "https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/sector_utils/tc_tracks_database.py"
click node_rendering "https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/image_utils/maps.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_cli,node_args,node_user toneBlue
class node_obp,node_interfaces,node_plugin_base toneAmber
class node_readers,node_algorithms,node_interpolators,node_coverage,node_formatters,node_checkers,node_products toneMint
class node_sectors,node_tracks,node_rendering toneRose
class node_xarray,node_config,node_plugin_config toneIndigo
```

## Components

### User entry

- [GeoIPS CLI](https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/cli.py): `geoips/cli.py`
- [CLI arguments](https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/commandline/args.py): `geoips/commandline/args.py`

### Processing runtime

- [Single-source OBP](https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/plugins/modules/procflows/single_source.py): `geoips/plugins/modules/procflows/single_source.py`
- [Plugin interfaces](https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/interfaces/base.py): `geoips/interfaces/base.py`
- [Plugin lifecycle](https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/interfaces/class_based_plugin.py): `geoips/interfaces/class_based_plugin.py`

### Plugin capabilities

- [Data readers](https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/interfaces/class_based/readers.py): `geoips/interfaces/class_based/readers.py`
- [Algorithms](https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/interfaces/class_based/algorithms.py): `geoips/interfaces/class_based/algorithms.py`
- [Interpolation](https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/interfaces/class_based/interpolators.py): `geoips/interfaces/class_based/interpolators.py`
- [Coverage checks](https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/interfaces/class_based/coverage_checkers.py): `geoips/interfaces/class_based/coverage_checkers.py`
- [Output formatters](https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/interfaces/class_based/output_formatters.py): `geoips/interfaces/class_based/output_formatters.py`
- [Output checks](https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/interfaces/class_based/output_checkers.py): `geoips/interfaces/class_based/output_checkers.py`
- [Product and workflow specs](https://github.com/nrlmmd-geoips/geoips/tree/main/geoips/interfaces/yaml_based): `geoips/interfaces/yaml_based`

### Geospatial domain

- [Sector utilities](https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/sector_utils/utils.py): `geoips/sector_utils/utils.py`
- [Cyclone track database](https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/sector_utils/tc_tracks_database.py): `geoips/sector_utils/tc_tracks_database.py`
- [Map rendering](https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/image_utils/maps.py): `geoips/image_utils/maps.py`

### Configuration and data

- [Data manipulation](https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/xarray_utils/data.py): `geoips/xarray_utils/data.py`
- [GeoIPS configuration](https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/config/config.py): `geoips/config/config.py`
- [Plugin configuration](https://github.com/nrlmmd-geoips/geoips/blob/main/geoips/config/plugins.py): `geoips/config/plugins.py`

### Other components

- **User**

## Connections

- User → GeoIPS CLI: invokes
- GeoIPS CLI → Plugin interfaces: uses (evidence: `geoips/cli.py`)
- Single-source OBP → CLI arguments: uses (evidence: `geoips/plugins/modules/procflows/single_source.py`)
- Single-source OBP → Plugin interfaces: dispatches plugins (evidence: `geoips/plugins/modules/procflows/single_source.py`)
- Single-source OBP → Data manipulation: uses data utilities (evidence: `geoips/plugins/modules/procflows/single_source.py`)
- Single-source OBP → Product and workflow specs: loads product config (evidence: `geoips/plugins/modules/procflows/single_source.py`)
- Single-source OBP → Output checks: checks outputs (evidence: `geoips/plugins/modules/procflows/single_source.py`)
- Plugin interfaces → Plugin lifecycle: provides plugin base (evidence: `geoips/interfaces/base.py`)
- Plugin lifecycle → Plugin interfaces: registers interfaces (evidence: `geoips/interfaces/class_based_plugin.py`)
- Data manipulation → Data readers: uses reader interface (evidence: `geoips/xarray_utils/data.py`)
- GeoIPS configuration → Plugin configuration: supports discovery (evidence: `geoips/config/plugins.py`)
- GeoIPS configuration → Cyclone track database: provides paths (evidence: `geoips/sector_utils/tc_tracks_database.py`)
- Sector utilities → Data manipulation: uses data utilities (evidence: `geoips/sector_utils/utils.py`)
- Single-source OBP → Data readers: orchestrates plugins
- Single-source OBP → Algorithms: orchestrates plugins
- Single-source OBP → Output formatters: orchestrates plugins
- Single-source OBP → Interpolation: may dispatch
- Single-source OBP → Coverage checks: may dispatch
- Output formatters → Map rendering: may render maps
