# lcx366/orbdtools architecture

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

## Overview

ORBDTOOLS is a scientific Python package for processing space-object observations, matching arcs to known objects, estimating and refining orbits, and transforming orbital representations and reference frames. A typical workflow takes optical or radar observations through preprocessing, then uses arc matching or initial orbit determination (IOD); cataloging or precise orbit determination (OD) are documented as broader capabilities, though their implementation is not shown in the sampled source. TLE parsing and SGP4 support matching and orbit representation. The graph reflects documented capabilities and sampled call/import evidence; some subsystem wiring is necessarily omitted.

Main entry points: [`orbdtools/classes/class_iod.py`](https://github.com/lcx366/orbdtools/blob/main/orbdtools/classes/class_iod.py) (IOD Workflow), [`orbdtools/arcmatch/radar.py`](https://github.com/lcx366/orbdtools/blob/main/orbdtools/arcmatch/radar.py) (Radar Matching), [`orbdtools/classes/class_arcobs.py`](https://github.com/lcx366/orbdtools/blob/main/orbdtools/classes/class_arcobs.py) (Arc Observations), [`orbdtools/cod`](https://github.com/lcx366/orbdtools/tree/main/orbdtools/cod) (Cataloging OD)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_observations["Observation Processing"]
  node_preprocess["Arc Preprocessing<br/>[preprocessing.py]"]
  node_arcobs["Arc Observations<br/>[class_arcobs.py]"]
end

subgraph group_matching["Arc Matching and TLE"]
  node_arc_assoc["Arc Association"]
  node_optical_match["Optical Matching<br/>[optical.py]"]
  node_radar_match["Radar Matching<br/>[radar.py]"]
  node_tle_parse["TLE Parsing<br/>[parse_tle.py]"]
  node_tle_ops["TLE Operations<br/>[class_tle.py]"]
  node_sgp4["SGP4 Propagation"]
end

subgraph group_orbit["Orbit Determination"]
  node_iod["IOD Workflow<br/>[class_iod.py]"]
  node_iod_optical["Optical IOD"]
  node_iod_radar["Radar IOD"]
  node_lambert["Lambert Solvers"]
  node_cod["Cataloging OD"]
  node_pod["Precise OD"]
end

subgraph group_foundations["Orbital Foundations"]
  node_transforms["Orbital Transforms"]
  node_iod_common["IOD Shared Methods<br/>[common.py]"]
  node_body["Central Body Data<br/>[class_bodies.py]"]
end

node_user(("Analyst"))
node_observation["Observation Arc"]

node_user -->|"submits"| node_arcobs
node_observation -->|"provides data"| node_arcobs
node_arcobs -->|"smooths measurements"| node_preprocess
node_user -->|"requests match"| node_optical_match
node_user -->|"requests match"| node_radar_match
node_optical_match -->|"loads TLE"| node_tle_parse
node_radar_match -->|"loads TLE"| node_tle_parse
node_radar_match -->|"propagates candidates"| node_sgp4
node_radar_match -->|"transforms frames"| node_transforms
node_arcobs -->|"starts IOD"| node_iod
node_iod -->|"dispatches methods"| node_iod_optical
node_iod -->|"dispatches methods"| node_iod_radar
node_iod -->|"dispatches solver"| node_lambert
node_iod_optical -->|"uses shared methods"| node_iod_common
node_iod_radar -->|"uses shared methods"| node_iod_common
node_iod -->|"uses body data"| node_body
node_iod -->|"converts elements"| node_transforms
node_tle_ops -->|"uses propagation"| node_sgp4
node_cod -->|"uses propagation"| node_sgp4
node_iod -.->|"supports cataloging"| node_cod
node_cod -.->|"extends to precise OD"| node_pod
node_user -.->|"requests association"| node_arc_assoc

click node_preprocess "https://github.com/lcx366/orbdtools/blob/main/orbdtools/utils/preprocessing.py"
click node_arcobs "https://github.com/lcx366/orbdtools/blob/main/orbdtools/classes/class_arcobs.py"
click node_arc_assoc "https://github.com/lcx366/orbdtools/tree/main/orbdtools/arcassocia"
click node_optical_match "https://github.com/lcx366/orbdtools/blob/main/orbdtools/arcmatch/optical.py"
click node_radar_match "https://github.com/lcx366/orbdtools/blob/main/orbdtools/arcmatch/radar.py"
click node_tle_parse "https://github.com/lcx366/orbdtools/blob/main/orbdtools/arcmatch/parse_tle.py"
click node_tle_ops "https://github.com/lcx366/orbdtools/blob/main/orbdtools/classes/class_tle.py"
click node_sgp4 "https://github.com/lcx366/orbdtools/tree/main/orbdtools/cod/sgp4"
click node_iod "https://github.com/lcx366/orbdtools/blob/main/orbdtools/classes/class_iod.py"
click node_iod_optical "https://github.com/lcx366/orbdtools/tree/main/orbdtools/iod/angular"
click node_iod_radar "https://github.com/lcx366/orbdtools/tree/main/orbdtools/iod/radar"
click node_lambert "https://github.com/lcx366/orbdtools/tree/main/orbdtools/iod/lambert"
click node_cod "https://github.com/lcx366/orbdtools/tree/main/orbdtools/cod"
click node_pod "https://github.com/lcx366/orbdtools/tree/main/orbdtools/pod"
click node_transforms "https://github.com/lcx366/orbdtools/tree/main/orbdtools/transform"
click node_iod_common "https://github.com/lcx366/orbdtools/blob/main/orbdtools/iod/common.py"
click node_body "https://github.com/lcx366/orbdtools/blob/main/orbdtools/classes/class_bodies.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_preprocess,node_arcobs toneBlue
class node_arc_assoc,node_optical_match,node_radar_match,node_tle_parse,node_tle_ops,node_sgp4 toneAmber
class node_iod,node_iod_optical,node_iod_radar,node_lambert,node_cod,node_pod toneMint
class node_transforms,node_iod_common,node_body toneRose
class node_user,node_observation toneIndigo
```

## Components

### Observation Processing

- [Arc Preprocessing](https://github.com/lcx366/orbdtools/blob/main/orbdtools/utils/preprocessing.py): `orbdtools/utils/preprocessing.py`
- [Arc Observations](https://github.com/lcx366/orbdtools/blob/main/orbdtools/classes/class_arcobs.py): `orbdtools/classes/class_arcobs.py`

### Arc Matching and TLE

- [Arc Association](https://github.com/lcx366/orbdtools/tree/main/orbdtools/arcassocia): `orbdtools/arcassocia`
- [Optical Matching](https://github.com/lcx366/orbdtools/blob/main/orbdtools/arcmatch/optical.py): `orbdtools/arcmatch/optical.py`
- [Radar Matching](https://github.com/lcx366/orbdtools/blob/main/orbdtools/arcmatch/radar.py): `orbdtools/arcmatch/radar.py`
- [TLE Parsing](https://github.com/lcx366/orbdtools/blob/main/orbdtools/arcmatch/parse_tle.py): `orbdtools/arcmatch/parse_tle.py`
- [TLE Operations](https://github.com/lcx366/orbdtools/blob/main/orbdtools/classes/class_tle.py): `orbdtools/classes/class_tle.py`
- [SGP4 Propagation](https://github.com/lcx366/orbdtools/tree/main/orbdtools/cod/sgp4): `orbdtools/cod/sgp4`

### Orbit Determination

- [IOD Workflow](https://github.com/lcx366/orbdtools/blob/main/orbdtools/classes/class_iod.py): `orbdtools/classes/class_iod.py`
- [Optical IOD](https://github.com/lcx366/orbdtools/tree/main/orbdtools/iod/angular): `orbdtools/iod/angular`
- [Radar IOD](https://github.com/lcx366/orbdtools/tree/main/orbdtools/iod/radar): `orbdtools/iod/radar`
- [Lambert Solvers](https://github.com/lcx366/orbdtools/tree/main/orbdtools/iod/lambert): `orbdtools/iod/lambert`
- [Cataloging OD](https://github.com/lcx366/orbdtools/tree/main/orbdtools/cod): `orbdtools/cod`
- [Precise OD](https://github.com/lcx366/orbdtools/tree/main/orbdtools/pod): `orbdtools/pod`

### Orbital Foundations

- [Orbital Transforms](https://github.com/lcx366/orbdtools/tree/main/orbdtools/transform): `orbdtools/transform`
- [IOD Shared Methods](https://github.com/lcx366/orbdtools/blob/main/orbdtools/iod/common.py): `orbdtools/iod/common.py`
- [Central Body Data](https://github.com/lcx366/orbdtools/blob/main/orbdtools/classes/class_bodies.py): `orbdtools/classes/class_bodies.py`

### Other components

- **Analyst**
- **Observation Arc**

## Connections

- Analyst → Arc Observations: submits
- Observation Arc → Arc Observations: provides data
- Arc Observations → Arc Preprocessing: smooths measurements
- Analyst → Optical Matching: requests match
- Analyst → Radar Matching: requests match
- Optical Matching → TLE Parsing: loads TLE
- Radar Matching → TLE Parsing: loads TLE
- Radar Matching → SGP4 Propagation: propagates candidates
- Radar Matching → Orbital Transforms: transforms frames
- Arc Observations → IOD Workflow: starts IOD
- IOD Workflow → Optical IOD: dispatches methods
- IOD Workflow → Radar IOD: dispatches methods
- IOD Workflow → Lambert Solvers: dispatches solver
- Optical IOD → IOD Shared Methods: uses shared methods
- Radar IOD → IOD Shared Methods: uses shared methods
- IOD Workflow → Central Body Data: uses body data
- IOD Workflow → Orbital Transforms: converts elements
- TLE Operations → SGP4 Propagation: uses propagation
- Cataloging OD → SGP4 Propagation: uses propagation
- IOD Workflow → Cataloging OD: supports cataloging
- Cataloging OD → Precise OD: extends to precise OD
- Analyst → Arc Association: requests association
