Titan Navigation Model

Overview

NavModelTitan is a registered placeholder for atmospheric-body navigation. Bodies with thick opaque atmospheres (Titan, Venus, Triton’s nitrogen frost layer at low phase) need a fundamentally different algorithm than ellipsoid- limb fitting: the visible “limb” is the haze top, the haze top varies with wavelength, and the surface inside is invisible to optical wavelengths. The model exists in NavModel._registry so the orchestrator’s build_models_for_obs() driver and the per-image curator know the placeholder is here, but it never emits features or annotations.

A Titan-bearing image proceeds through the orchestrator as though no Titan-aware model had registered: the placeholder’s instances_for_obs() inherits the base-class no-op, so the orchestrator constructs no instance and the technique pipeline sees no Titan-derived feature. The image still navigates against any other body, ring, or star in the FOV. A haze-aware extractor would override instances_for_obs() to opt in.

Theory

Atmospheric-body navigation is conceptually distinct from ellipsoid-limb fitting:

  • The optical limb is the haze top, not the solid surface. The haze top moves with wavelength (deep red sees a slightly lower altitude than blue), so a single ellipsoidal reference shape does not describe every filter.

  • Phase angle changes the apparent limb shape because forward-scattered haze brightens the near-edge differently from back-scattered haze on the far edge.

  • The haze altitude varies with latitude, season, and (on Titan) the year-by-year atmospheric circulation; a fixed reference radius is wrong by tens of kilometres depending on epoch.

The corresponding algorithm requires a per-filter haze profile, a phase-aware limb-fit cost function, and per-image refraction modelling. None of those components are wired into the technique pipeline; the placeholder reserves the registry slot for a haze-aware extractor.

Restrictions and assumptions

The placeholder makes no algorithmic assumptions because it runs no algorithm. Every Titan-class body in an extended FOV produces no feature; downstream techniques receive no TITAN_LIMB feature.

Sources of uncertainty

The placeholder reports no uncertainty.

Configuration

The placeholder consumes no YAML configuration of its own. The shared Config object is passed in for future use; the placeholder records stub: True on its metadata dict so the curator surfaces the slot in the per-image JSON sidecar.

Implementation

Source file: src/nav/nav_model/nav_model_titan.pyNavModelTitan.

Public class NavModelTitan, base NavModel. Self-registers via __init_subclass__ so build_models_for_obs() discovers it.

Public methods (autodocumented at nav.nav_model):

The class does not override instances_for_obs(); the registry registers the class but the default base-class implementation returns an empty list, so the orchestrator never constructs an instance. A haze-aware extractor would override instances_for_obs() to return one instance per visible Titan-class body.

Examples

The Titan placeholder produces no per-image effect. A Titan-class scene proceeds through the orchestrator as if no Titan-bearing model had registered: the to_features() return value is empty, to_annotations() return is empty, and the per-image JSON sidecar’s model_metadata contains "stub": true under the model’s name as a record that the slot is reserved.