SpinDoctor

Contents:

  • Introduction
    • Overview
      • Navigation Pipeline
      • Installation
        • Using pip
        • Using pipx
      • Command-Line Programs
        • Navigation Phase
        • Reprojection and Mosaic Phase
        • Backplanes Phase
        • PDS4 Bundle Phase
      • Cloud Tasks Support
    • Configuration
      • Configuration Loading Order
      • Configuration File Structure
        • Logging Configuration
      • Creating a User Configuration File
      • Using Command-Line Configuration Overrides
      • Command-Line Option Overrides
        • Environment Options
        • Navigation Options
        • Logging Options
      • Example: Combining Configuration Methods
  • User Guide
    • Image Navigation
      • Introduction
        • Purpose of the System
        • Supported Missions
      • Installation and Setup
        • Environment Setup
      • Configuration System
      • Command-Line Interface
        • Basic Usage
        • Command-Line Arguments
          • Environment options
          • Navigation options
          • Output options
          • Dataset selection (PDS3 datasets)
          • Miscellaneous
          • Logging options
        • Example Commands
        • Cloud-tasks entry point
          • Cloud-tasks JSON schema
      • Selecting models and techniques
        • Pattern syntax
          • Inclusion patterns
          • Exclusion patterns
          • Multiple patterns
        • Model names
        • Technique names
        • Examples
      • Inputs and Outputs
        • Input Files
        • Output Files
          • Metadata Files (*_metadata.json)
          • Summary PNG Files (*_summary.png)
        • Interpreting Results
      • Simulated Images
      • Navigation Techniques
        • Implemented techniques
          • BodyLimbNav
          • BodyTerminatorNav
          • RingEdgeNav
          • RingAnnulusNav
          • NavTechniqueManual
        • Filtering examples
        • Output
      • Navigation Models
        • Star Navigation Model
        • Body Navigation Model
        • Ring Navigation Model
          • Planet shadow removal
          • Body shadow removal (future)
      • Troubleshooting
        • Common Issues
        • Getting Help
    • Reprojection Mosaicing
      • Overview
      • Body reprojection and mosaicing
        • Coordinate systems
        • Choosing dtypes
        • Photometric correction
        • Pixel conflict resolution
        • Geometry limits when adding
        • Longitude wraparound
        • Retrieval methods
      • Ring reprojection and mosaicing
        • Choosing dtypes (rings)
        • Orbit model
        • Mosaic compatibility
        • Merge strategy
        • Retrieval methods
      • Saving and loading
        • Image labels (reprojection and mosaic)
        • Sub-solar and sub-observer geometry (body reprojection and mosaics)
      • Cartographic navigation model
      • Command-line mosaic generation
        • Offset application
        • Output format
        • Cloud-tasks entry point
        • Common options reference
          • Ring-specific options
          • Orbit model, longitude, and radius conventions
          • Body-specific options
      • Command-line mosaic display
        • Display options
        • Interactive controls
        • Projection selector (body mosaics)
        • Mouse bindings summary
    • Backplane Generation
      • Overview
      • Command-Line Interfaces
        • Examples
          • Cloud-tasks JSON schema
        • Configuration
        • Outputs
      • Backplane Viewer GUI
        • Run
        • Features
        • Notes
    • Navigation Statistics
      • Ingestion
      • Database schema
      • Querying the database directly
      • Reporting
    • Simulated Images
    • PDS4 Bundle Generation
      • Overview
        • Purpose
      • Bundle Structure
      • Command-Line Interfaces
        • Labels Pass
          • Basic Usage
          • Command-Line Arguments
          • Examples
          • Cloud Tasks Variant
        • Summary Pass
          • Basic Usage
          • Command-Line Arguments
          • Examples
      • Inputs and Outputs
        • Input Files
        • Output Files
          • Labels Pass Outputs
          • Summary Pass Outputs
      • Configuration
        • Configuration Options
        • Bundle Results Root
      • Templates
      • Dataset-Specific Behavior
      • Workflow
      • Troubleshooting
        • Common Issues
        • Getting Help
    • Appendix: Cassini ISS
    • Appendix: Galileo SSI
    • Appendix: New Horizons LORRI
    • Appendix: Voyager ISS
  • Developer Guide
    • Introduction
      • Package overview
      • Repository layout
      • Install
        • Environment variables
      • Running the CLI tools
      • Running the test suite
        • Test markers and layout
      • Lint, types, formatter
      • Building the documentation
      • CI / CD pipeline
      • Release / deployment
      • Contribution workflow
      • Pointers to the rest of this manual
    • Code Familiarization Plan
      • Stage 1 — Orientation
      • Stage 2 — Cross-cutting foundations
      • Stage 3 — Inputs: datasets, observations, features
      • Stage 4 — First end-to-end pipeline: NavModelBody + BodyLimbNav
        • Model
        • Technique
        • Orchestrator (minimum slice)
        • Output: annotations, metadata, summary PNG, top-level driver
      • Stage 5 — Orchestrator round-trip: feasibility, confidence, diagnostics, ensemble
      • Stage 6 — Remaining models and their techniques
        • Stars (model + star techniques)
        • Body (additional techniques and Titan)
        • Rings (model + ring techniques)
        • Manual
      • Stage 7 — Simulated images
      • Stage 8 — Calibration and regression
      • Stage 9 — Downstream products
      • Stage 10 — Extending and conventions
    • Navigation
      • Navigation Overview
        • System architecture
        • Data flow
      • Class Hierarchy
        • Top-level driver
        • NavBase
        • FeatureReliabilityGate
        • Dataset, Obs, and ObsSnapshot
        • NavModel
        • NavTechnique
        • NavFeature and NavFeatureGeometry
        • NavResult, ensemble, curator
        • Annotation
      • Observations
        • Overview
        • ObsSnapshot
          • Backplane caching and thread safety
        • ObsInst
        • Per-instrument subclasses
          • Simulated-image instrument config: inherit / override / self-specify
        • Adding a new instrument
        • API reference
      • Navigation Models
        • Stars
          • Star Navigation Model
            • Overview
            • Theory
              • Catalog reduction
              • Conflict marking
              • Magnitude detectability gate
              • Magnitude-margin effective SNR
              • Per-feature uncertainty
              • Restrictions and assumptions
              • Sources of uncertainty
            • Configuration
              • Module-level emission constants
              • Per-instrument overrides
            • Implementation
              • Annotation helpers
              • Per-image metadata
              • Call path
            • Examples
          • Simulated Star Navigation Model
            • Overview
            • Theory
              • Restrictions and assumptions
              • Sources of uncertainty
            • Configuration
            • Implementation
            • Examples
        • Bodies
          • Body Navigation Model
            • Overview
            • Theory
              • Bounding-box construction
              • Anti-aliased silhouette extraction
              • Polyline sampling
              • Per-vertex position covariance
              • Visible-lit and overflow fractions
              • Lit-weighted predicted centroid
              • Sub-solar direction
              • Phase-and-irregularity coupling
              • Feature emission gates
              • Restrictions and assumptions
              • Sources of uncertainty
            • Configuration
              • bodies block
              • Body-shape catalogue
              • Module-level emission constants
              • Per-instrument overrides
            • Implementation
              • BodyShape dataclass
              • Annotation helpers
              • Per-image metadata
              • Call path
            • Examples
          • Simulated Body Navigation Model
            • Overview
            • Theory
              • Restrictions and assumptions
              • Sources of uncertainty
            • Configuration
              • Render geometry vs navigation geometry
            • Implementation
              • Call path
            • Examples
          • Titan Navigation Model
            • Overview
            • Theory
              • Restrictions and assumptions
              • Sources of uncertainty
            • Configuration
            • Implementation
            • Examples
          • Simulated Titan Navigation Model
            • Overview
            • Theory
              • Restrictions and assumptions
              • Sources of uncertainty
            • Configuration
            • Implementation
            • Examples
        • Rings
          • Ring Navigation Model
            • Overview
            • Theory
              • Edge rendering
              • Per-edge feature filtering
              • Curvature classification
              • Per-vertex covariance
              • Annulus template
              • Restrictions and assumptions
              • Sources of uncertainty
            • Configuration
              • rings block
              • Per-planet ring catalogue
              • Module-level emission constants
              • Per-instrument overrides
            • Implementation
              • Annotation helpers
              • Per-image metadata
              • Call path
            • Examples
          • Simulated Ring Navigation Model
            • Overview
            • Theory
              • Restrictions and assumptions
              • Sources of uncertainty
            • Configuration
            • Implementation
              • Call path
            • Examples
      • Navigation Techniques
        • Shared infrastructure
          • DT Fitting (Shared Polyline-vs-Image Fitter)
            • Overview
            • Theory
              • Stage 1 — coarse integer cross-correlation
              • Stage 2 — sub-pixel Levenberg-Marquardt refinement
              • Stage 3 — optional continuous gradient-ridge refinement
              • Polarity filtering
              • Robustness via Tukey biweight
              • From cost surface to information matrix
              • Pseudoinverse to covariance
              • Combining with a prior in the ensemble
              • Restrictions and assumptions
              • Sources of uncertainty
            • Configuration
            • Implementation
            • Shared fit-quality gates
            • Examples
          • Image Derivatives (Shared Gradient and Edge DT)
            • Overview
            • Theory
              • Gaussian smoothing then Sobel
              • Edge thresholding and Canny-style non-maximum suppression
              • Truncated distance transform
              • Restrictions and assumptions
              • Sources of uncertainty
            • Configuration
            • Implementation
              • Call path
            • Examples
          • Confidence Calibration (Shared Sigmoid-of-Linear Combination)
            • Overview
            • Theory
              • Per-term normalisation
              • Sigmoid combination
              • Hard-zero gates
              • Post-sigmoid hard cap
              • Per-term breakdown
              • Restrictions and assumptions
              • Sources of uncertainty
            • Configuration
            • Implementation
            • Examples
          • Feasibility Reporting (Shared NavFeasibilityReport)
            • Overview
            • Theory
              • Stable reasons
              • Consumed-feature count
              • Restrictions and assumptions
              • Sources of uncertainty
            • Configuration
            • Implementation
            • Examples
          • Per-Technique Diagnostics (Shared Dataclass Family)
            • Overview
            • Theory
              • The confidence formula
              • The curator
              • Restrictions and assumptions
              • Sources of uncertainty
            • Configuration
            • Implementation
            • Examples
        • Star techniques
          • Star Unique Match (StarUniqueMatchNav)
            • Overview
            • Theory
              • Brightness-margin gate
              • Local centroid
              • 1-star path
              • 2-star path
              • Per-mode confidence cap
              • Restrictions and assumptions
              • Sources of uncertainty
            • Configuration
              • Per-instrument overrides
              • Confidence formula
            • Implementation
              • Diagnostics
              • Call path
            • Examples
          • Star Field Pattern Match (StarFieldFromCatalogNav)
            • Overview
            • Theory
              • Triplet hashing
              • Source detection
              • Hash-space match
              • RANSAC inlier validation
              • PSF-fit inlier refinement
              • Inlier refit
              • Per-axis covariance
              • Restrictions and assumptions
              • Sources of uncertainty
            • Configuration
              • Per-instrument overrides
              • Confidence formula
            • Implementation
              • Diagnostics
              • Call path
            • Examples
          • Star Refinement (StarRefineNav)
            • Overview
            • Theory
              • Per-star centroid model
              • Translation-only fit
              • Rotation-aware fit
              • Restrictions and assumptions
              • Sources of uncertainty
            • Configuration
              • Per-instrument overrides
              • Confidence formula
            • Implementation
              • Diagnostics
            • Examples
        • Body techniques
          • Body Limb Fit (BodyLimbNav)
            • Overview
            • Theory
              • Cost function
              • Search strategy
              • Robustness
              • Restrictions and assumptions
              • Sources of uncertainty
            • Configuration
              • Per-instrument overrides
              • Confidence formula
            • Implementation
              • Diagnostics
            • Examples
          • Body Terminator Fit (BodyTerminatorNav)
            • Overview
            • Theory
              • Cost function
              • Per-body uniform weighting
              • Search strategy
              • Robustness
              • Restrictions and assumptions
              • Sources of uncertainty
            • Configuration
              • Per-instrument overrides
              • Confidence formula
            • Implementation
              • Diagnostics
            • Examples
          • Body Disc Correlate (BodyDiscCorrelateNav)
            • Overview
            • Theory
              • Composite template construction
              • Cost function
              • Sub-pixel refinement band-limit (refine_lowpass_sigma_px)
              • Mode selection (auto / raw / gradient)
              • Search strategy
              • Rotation-aware schedule
              • Restrictions and assumptions
              • Sources of uncertainty
            • Configuration
              • Per-instrument overrides
              • Confidence formula
            • Implementation
              • Diagnostics
              • Call path
            • Examples
          • Body Blob Centroid (BodyBlobNav)
            • Overview
            • Theory
              • Coarse acquisition (lit-shape matched filter)
              • Per-blob centroid
              • Per-blob weight
              • Joint translation fit
              • Joint covariance
              • Restrictions and assumptions
              • Sources of uncertainty
            • Configuration
              • Per-instrument overrides
              • Confidence formula
            • Implementation
              • Diagnostics
              • Call path
            • Examples
          • Titan (unsupported)
            • Planned support
        • Ring techniques
          • Ring Edge Fit (RingEdgeNav)
            • Overview
            • Theory
              • Rank-deficient covariance
              • Radial orbit-uncertainty channel
              • Fit-quality gates
              • Restrictions and assumptions
              • Sources of uncertainty
            • Configuration
              • Per-instrument overrides
              • Confidence formula
            • Implementation
              • Diagnostics
              • Call path
            • Examples
          • Ring Annulus Correlate (RingAnnulusNav)
            • Overview
            • Theory
              • Composite template construction
              • Cost function
              • Mode selection (auto / raw / gradient)
              • Search strategy
              • Restrictions and assumptions
              • Sources of uncertainty
            • Configuration
              • Feature-emission tunables (per-planet)
              • Per-instrument overrides
              • Confidence formula
            • Implementation
              • Diagnostics
              • Call path
            • Examples
        • Manual
          • Manual Navigation (NavTechniqueManual)
            • Overview
            • Theory
              • Composite overlay
              • Auto-pick option
              • Restrictions and assumptions
              • Sources of uncertainty
            • Configuration
            • Implementation
              • Call path
            • Examples
      • Orchestrator Subsystem
        • Orchestrator (NavOrchestrator)
          • Overview
          • Theory
            • Pipeline stages
            • Exception-sandbox discipline
            • Glob-pattern model and technique filters
            • Restrictions and assumptions
            • Sources of uncertainty
          • Configuration
          • Implementation
            • Call path
          • Examples
        • Per-Image State (NavContext)
          • Overview
          • Theory
            • Restrictions and assumptions
            • Sources of uncertainty
          • Configuration
          • Implementation
          • Examples
        • Final Output (NavResult)
          • Overview
          • Theory
            • Restrictions and assumptions
            • Sources of uncertainty
          • Configuration
          • Implementation
          • Examples
        • Per-Feature Post-Mortem (NavFeatureSummary)
          • Overview
          • Theory
            • Restrictions and assumptions
            • Sources of uncertainty
          • Configuration
          • Implementation
          • Examples
        • Reproducibility Envelope (Provenance)
          • Overview
          • Theory
            • Restrictions and assumptions
            • Sources of uncertainty
          • Configuration
          • Implementation
          • Examples
        • Image Classifier (NavImageClassifier)
          • Overview
          • Theory
            • Restrictions and assumptions
            • Sources of uncertainty
          • Configuration
          • Implementation
          • Examples
        • Per-Instrument Settings (InstrumentSettings)
          • Overview
          • Theory
            • Restrictions and assumptions
            • Sources of uncertainty
          • Configuration
          • Implementation
          • Examples
        • Ensemble Combine (ensemble + EnsembleConfig)
          • Overview
          • Theory
            • Step 1 — drop spurious
            • Step 2 — drop at-edge
            • Step 3 — pairwise agreement
            • Step 4 — consensus-subset selection and outlier rejection
            • Step 5 — precision-weighted merge
            • Step 6 — disagreement and conflict penalties
            • Step 7 — confidence-rank assignment
            • Confident-wrong results: what the tiers price and what they cannot
            • Restrictions and assumptions
            • Sources of uncertainty
          • Configuration
          • Implementation
          • Examples
        • JSON Curation (build_metadata_dict)
          • Overview
          • Theory
            • Float rounding policy
            • Allow-list discipline
            • Restrictions and assumptions
            • Sources of uncertainty
          • Configuration
          • Implementation
          • Examples
      • Annotations
        • Overview
        • Class hierarchy
        • Pipeline
        • Configuration
        • Per-model annotation contributions
        • API reference
      • Camera-rotation correction
        • Why per-instrument
        • The flag
        • Parameter vector
        • Per-technique strategy
        • Rank-deficient rotation
        • Ensemble combine in 3-D
        • JSON output
        • at_edge for rotation
      • Image Library
        • Layout
        • Sidecar schema (schema_version 1)
        • The calibration process
          • Why the library is the right substrate
          • The calibration loop
          • Coverage taxonomy
          • Confidence-tier semantics
          • Per-instrument calibration anchors
        • Adding a new entry
        • Tolerance regimes
        • Regression baselines
          • What checks the baselines
          • How a baseline is created or updated
    • Reprojection Internals
      • Module layout
      • Thread safety
      • Body mosaic storage
      • Ring sparse storage
      • Ring radius and longitude semantics
      • dtype propagation
      • Serialization
        • Supported formats
        • Format inference
        • kind / version scheme
        • Load-time dtype verification
        • RingOrbitModel serialization
      • Photometric models
      • Context managers
      • Adding a new photometric model
      • Cartographic model projection
      • Command-line layer
        • Two-pass workflow
      • Display layer
        • Adding a new display feature
        • Gamma stretch convention
    • Backplanes
      • Overview
      • Pipeline overview
      • Entry points
      • Restrictions and assumptions
      • Per-source backplane generation
        • Bodies
        • Rings
      • Distance-aware merge
      • FITS writer
      • Configuration
      • Snapshot helpers
      • Adding a backplane
      • Testing
      • API reference
    • PDS4 Bundle Generation
      • Pipeline overview
      • Driver: sd_create_bundle
      • Per-dataset extension points
        • The pds4 config block
      • Templated label workflow
        • Template tree
      • Output layout
      • Adding PDS4 support to a new dataset
      • API reference
    • The Image Simulator
      • Overview
      • The two-sided architecture
        • The information boundary
        • Sharing code is fine; sharing information is not
      • What the simulator can and cannot establish
        • The four axes
        • What this buys in practice
        • What it cannot do
      • The stage pipeline
      • The optics stage
      • The detector stage
      • The instrument-defaults switch and the artifacts catalog
      • The artifact-mode framework
        • Incidence semantics
        • Telemetry-stage modes
        • Detector-stage modes
        • Precedence
        • Adversarial placement
        • Truth bookkeeping and incidence measurement
        • The artifact-sweep scene class
        • Star confounders and the breakdown curve
        • The expected-outcome block
      • The self-consistency floor
      • Model-mismatch sweeps
      • The body renderer
        • The topographic path
        • Split-resolution performance
        • Photometric laws
        • Surface texture and transits
        • Mesh shading, detail, relief, and pose scatter
        • Mutual events
        • Atmospheres (haze limb)
      • The ring renderer
        • Feature kinds and the radial tau profile
        • The catalog orbit: m-modes and edge waves
        • Planted orbit error and the navigable subset
        • Azimuthal clutter, spokes, and moonlets
      • The render performance budget
      • Scene ingredients
      • Scene format (schema version 2)
      • Scene parameter reference
        • Top-level fields
        • Body parameters
        • The ring system
        • Star parameters
        • Detector-noise block
        • Optics block
        • Spacecraft-ephemeris error block
        • Detector block
        • Artifacts block
        • Instrument-config overrides
      • Catalog, baselines, and the render-diff sheet
      • The simulated-image GUI
      • Running navigation on a simulated image
      • Exporting viewable PNGs
      • The realism match against real cohorts
        • Matched frames
        • The divergence statistic
        • Cohort support labels
        • The FOM 7 firewall
        • Running and reading
      • See also
    • Agreement Estimator (Per-Technique Covariance)
      • Overview
      • Design: full matrix form, never scalar sigmas
      • Where per-technique covariance is recoverable
      • Bias independence and the shared preprocessing layer
      • Scope of the verdict
    • Support Modules
      • Config and Static Data
        • The Config object
          • Sections
        • File layout
          • Per-file contents
          • Loader rules
          • Path resolution
        • Static data: catalogues and citation discipline
          • Static-data files
          • Citation requirement
          • Schema
          • Body-shape table: sources
          • Anti-hallucination procedure
          • Human review
          • Validation tests
          • Strip-rule guarantee
        • Adding a new tunable
      • Developer Guide: Logging
        • Why pdslogger
        • Log structure
        • Tests
        • Log levels
        • Conventions
    • Testing
      • Overview
      • Running the suite
      • Test kinds
      • Characterization runners and updaters
    • Extending the System
      • Adding a new dataset
      • Implementing PDS4 bundle generation methods
      • Adding a new instrument
      • Adding a new NavModel
      • Adding a new NavTechnique
      • Adding to the image library via the manual-nav dialog
    • Best Practices
      • Code style
      • Linting and typing
      • Testing
      • Documentation
    • API Reference
      • spindoctor.feature
        • NavFeature
          • NavFeature.__post_init__()
          • NavFeature.body_name
          • NavFeature.feature_id
          • NavFeature.feature_type
          • NavFeature.flags
          • NavFeature.geometry
          • NavFeature.intensity_sigma_rel
          • NavFeature.position_cov_px
          • NavFeature.preferred_filter
          • NavFeature.reliability
          • NavFeature.reliability_reasons
          • NavFeature.source_model
          • NavFeature.subject_range_km
          • NavFeature.template_img
          • NavFeature.template_mask
          • NavFeature.usable_types
        • NavReliabilityBreakdown
          • NavReliabilityBreakdown.albedo_penalty
          • NavReliabilityBreakdown.blob_extent_px
          • NavReliabilityBreakdown.blob_snr
          • NavReliabilityBreakdown.in_body_silhouette
          • NavReliabilityBreakdown.in_saturation_or_cosmic
          • NavReliabilityBreakdown.incidence_factor
          • NavReliabilityBreakdown.overflow_fraction
          • NavReliabilityBreakdown.predicted_snr
          • NavReliabilityBreakdown.shadow_occluded_fraction
          • NavReliabilityBreakdown.smear_length_ok
          • NavReliabilityBreakdown.visible_arc_fraction
          • NavReliabilityBreakdown.visible_lit_fraction
        • body_names_from_features()
        • NavFeatureType
          • NavFeatureType.BODY_BLOB
          • NavFeatureType.BODY_DISC
          • NavFeatureType.CARTOGRAPHIC_MODEL
          • NavFeatureType.LIMB_ARC
          • NavFeatureType.RING_ANNULUS
          • NavFeatureType.RING_EDGE
          • NavFeatureType.STAR
          • NavFeatureType.TERMINATOR_ARC
          • NavFeatureType.TITAN_LIMB
        • BodyBlobGeometry
          • BodyBlobGeometry.bbox_extfov_vu
          • BodyBlobGeometry.predicted_center_vu
          • BodyBlobGeometry.predicted_diameter_px
        • BodyDiscGeometry
          • BodyDiscGeometry.bbox_extfov_vu
          • BodyDiscGeometry.overflow_fraction
          • BodyDiscGeometry.predicted_center_vu
        • CartographicModelGeometry
          • CartographicModelGeometry.bbox_extfov_vu
          • CartographicModelGeometry.overflow_fraction
          • CartographicModelGeometry.predicted_center_vu
        • LimbPolyline
          • LimbPolyline.bbox_extfov_vu
          • LimbPolyline.normals_vu
          • LimbPolyline.sigma_normal_per_vertex_px
          • LimbPolyline.sigma_tangent_per_vertex_px
          • LimbPolyline.vertices_vu
        • NavFeatureGeometry
        • RingAnnulusGeometry
          • RingAnnulusGeometry.bbox_extfov_vu
          • RingAnnulusGeometry.predicted_center_vu
        • RingEdgePolyline
          • RingEdgePolyline.bbox_extfov_vu
          • RingEdgePolyline.is_straight_line
          • RingEdgePolyline.normals_vu
          • RingEdgePolyline.sigma_along_edge_per_vertex_px
          • RingEdgePolyline.sigma_orbit_radial_px
          • RingEdgePolyline.sigma_radial_per_vertex_px
          • RingEdgePolyline.vertices_vu
        • StarGeometry
          • StarGeometry.bbox_extfov_vu
          • StarGeometry.catalog_vu
          • StarGeometry.predicted_vu
        • TerminatorPolyline
          • TerminatorPolyline.bbox_extfov_vu
          • TerminatorPolyline.normals_vu
          • TerminatorPolyline.sigma_normal_per_vertex_px
          • TerminatorPolyline.sigma_tangent_per_vertex_px
          • TerminatorPolyline.vertices_vu
        • BodyBlobFlags
          • BodyBlobFlags.__post_init__()
          • BodyBlobFlags.body_name
          • BodyBlobFlags.phase_angle_deg
          • BodyBlobFlags.phase_irregularity_factor
          • BodyBlobFlags.predicted_diameter_px
          • BodyBlobFlags.sub_solar_dir_vu
        • BodyDiscFlags
          • BodyDiscFlags.__post_init__()
          • BodyDiscFlags.body_name
          • BodyDiscFlags.overflow_fov_fraction
        • CartographicModelFlags
          • CartographicModelFlags.body_name
          • CartographicModelFlags.mosaic_source
        • LimbArcFlags
          • LimbArcFlags.__post_init__()
          • LimbArcFlags.body_name
          • LimbArcFlags.visible_arc_fraction
        • NavFeatureFlags
        • RingAnnulusFlags
          • RingAnnulusFlags.__post_init__()
          • RingAnnulusFlags.constituent_edge_count
          • RingAnnulusFlags.planet_name
        • RingEdgeFlags
          • RingEdgeFlags.edge_name
          • RingEdgeFlags.is_straight_line
          • RingEdgeFlags.planet_name
          • RingEdgeFlags.polarity_predictable
        • StarFlags
          • StarFlags.__post_init__()
          • StarFlags.in_body_silhouette
          • StarFlags.in_saturation_or_cosmic_mask
          • StarFlags.predicted_snr
          • StarFlags.saturated
          • StarFlags.smear_length_px
          • StarFlags.vmag
        • TerminatorArcFlags
          • TerminatorArcFlags.__post_init__()
          • TerminatorArcFlags.body_name
          • TerminatorArcFlags.phase_angle_factor
          • TerminatorArcFlags.visible_arc_fraction
        • compose_dialog_overlay()
        • compose_template_features()
        • DEFAULT_RELIABILITY_THRESHOLDS
        • FeatureReliabilityGate
          • FeatureReliabilityGate.__post_init__()
          • FeatureReliabilityGate.apply()
          • FeatureReliabilityGate.from_mapping()
          • FeatureReliabilityGate.thresholds
        • GatedFeatureRecord
          • GatedFeatureRecord.feature
          • GatedFeatureRecord.reason
        • AGREEMENT_FACTOR_CAP
        • COMBINED_CONFIDENCE_CAP
        • INCIDENCE_FACTOR_ANGLE_CAP_DEG
        • INCIDENCE_FACTOR_CLIP_DEG
        • JSON_INF_SENTINEL
        • MAX_INCIDENCE_FACTOR_CAP
        • MIN_ANISOTROPIC_SMEAR_PX
      • spindoctor.nav_orchestrator
        • NavOrchestrator
          • NavOrchestrator.navigate()
          • NavOrchestrator.prepare()
        • OrchestratorPrep
          • OrchestratorPrep.annotations
          • OrchestratorPrep.context
          • OrchestratorPrep.feature_inventory
          • OrchestratorPrep.features
          • OrchestratorPrep.image_classifier
          • OrchestratorPrep.model_metadata
          • OrchestratorPrep.provenance
        • NavContext
          • NavContext.cosmic_ray_mask_ext
          • NavContext.fit_camera_rotation
          • NavContext.image_classifier
          • NavContext.image_edge_dt_ext
          • NavContext.image_ext
          • NavContext.image_gradient_ext
          • NavContext.image_gradient_vu_ext
          • NavContext.image_noise_sigma
          • NavContext.max_rotation_deg
          • NavContext.obs
          • NavContext.pre_filter_applied
          • NavContext.prior_covariance_px2
          • NavContext.prior_offset_px
          • NavContext.provenance
          • NavContext.saturation_mask_ext
          • NavContext.sensor_mask_ext
          • NavContext.with_prior()
        • NavResult
          • NavResult.__post_init__()
          • NavResult.annotations
          • NavResult.confidence
          • NavResult.confidence_rank
          • NavResult.conflicted()
          • NavResult.consensus_techniques
          • NavResult.covariance_px2
          • NavResult.excluded_from_consensus
          • NavResult.failed()
          • NavResult.feature_inventory
          • NavResult.image_classifier
          • NavResult.model_metadata
          • NavResult.offset_px
          • NavResult.per_technique
          • NavResult.provenance
          • NavResult.rotation_rad
          • NavResult.sigma_along_unobservable_px
          • NavResult.sigma_px
          • NavResult.sigma_rotation_rad
          • NavResult.status
          • NavResult.status_reason
          • NavResult.success()
        • NavFeatureSummary
          • NavFeatureSummary.__post_init__()
          • NavFeatureSummary.bbox_extfov_vu
          • NavFeatureSummary.feature_id
          • NavFeatureSummary.feature_type
          • NavFeatureSummary.gate_reason
          • NavFeatureSummary.gated
          • NavFeatureSummary.reliability
          • NavFeatureSummary.source_model
        • ImageQualityThresholds
          • ImageQualityThresholds.blank_max_dn
          • ImageQualityThresholds.max_missing_frac_clean
          • ImageQualityThresholds.max_saturation_frac_clean
          • ImageQualityThresholds.missing_data_marker_dn
          • ImageQualityThresholds.noisy_threshold
          • ImageQualityThresholds.partial_dropout_min_frac
          • ImageQualityThresholds.saturation_threshold_dn
        • NavImageClassifier
          • NavImageClassifier.classify()
          • NavImageClassifier.thresholds
        • NavImageClassifierResult
          • NavImageClassifierResult.flags
          • NavImageClassifierResult.image_class
          • NavImageClassifierResult.max_dn
          • NavImageClassifierResult.missing_frac
          • NavImageClassifierResult.noise_sigma
          • NavImageClassifierResult.saturation_frac
        • DEFAULT_DT_HALF_WIDTH_PX
        • DEFAULT_EDGE_THRESHOLD_K_SIGMA
        • DEFAULT_IMAGE_GRADIENT_SIGMA_PX
        • ImageDerivativesConfig
          • ImageDerivativesConfig.__post_init__()
          • ImageDerivativesConfig.dt_half_width_px
          • ImageDerivativesConfig.edge_threshold_k_sigma
          • ImageDerivativesConfig.image_gradient_sigma_px
        • build_image_edge_dt()
        • compute_all_image_derivatives()
        • compute_image_gradient_vu()
        • Provenance
          • Provenance.__post_init__()
          • Provenance.config_hash
          • Provenance.config_overrides
          • Provenance.extractor_names
          • Provenance.image_et
          • Provenance.pipeline_run_iso8601
          • Provenance.spice_kernel_count
          • Provenance.spice_kernels
          • Provenance.spindoctor_git_sha
          • Provenance.spindoctor_version
          • Provenance.star_catalogs
          • Provenance.static_data_hashes
          • Provenance.technique_names
        • ProvenanceMetadata
          • ProvenanceMetadata.config_hash
          • ProvenanceMetadata.config_overrides
          • ProvenanceMetadata.git_sha
          • ProvenanceMetadata.spice_kernels
          • ProvenanceMetadata.star_catalogs
          • ProvenanceMetadata.static_data_hashes
        • collect_provenance_metadata()
        • EnsembleConfig
          • EnsembleConfig.agreement_gap
          • EnsembleConfig.agreement_pixel_floor
          • EnsembleConfig.agreement_sigma
          • EnsembleConfig.conflicted_confidence_multiplier
          • EnsembleConfig.disagreement_penalty
          • EnsembleConfig.from_mapping()
          • EnsembleConfig.max_allowed_rotation_deg
          • EnsembleConfig.min_confidence
          • EnsembleConfig.pinvh_rcond
          • EnsembleConfig.tier_thresholds
        • derive_confidence_rank()
        • ensemble()
        • ConsensusSelection
          • ConsensusSelection.best
          • ConsensusSelection.excluded
          • ConsensusSelection.runner_up_confidence
          • ConsensusSelection.runner_up_has_quorum
        • consensus_selection()
        • corroborating_confidence()
        • corroborating_members()
        • result_param_vector()
        • mahalanobis_distance()
        • mixed_scale_pinvh()
        • observable_basis()
        • observable_intersection_basis()
        • assert_diagnostic_fields_present()
        • build_metadata_dict()
        • InstrumentSettings
          • InstrumentSettings.data_units
          • InstrumentSettings.fit_camera_rotation
          • InstrumentSettings.marker_value
          • InstrumentSettings.max_rotation_deg
          • InstrumentSettings.saturation_dn
          • InstrumentSettings.thresholds
        • instrument_settings_from_obs()
      • spindoctor.nav_model
        • NavModel
          • NavModel.__init_subclass__()
          • NavModel.create_model()
          • NavModel.instances_for_obs()
          • NavModel.metadata
          • NavModel.name
          • NavModel.obs
          • NavModel.to_annotations()
          • NavModel.to_features()
        • build_models_for_obs()
        • BODY_SHAPE_TABLE
        • BodyShape
          • BodyShape.albedo_variation
          • BodyShape.crater_scale_km
          • BodyShape.ellipsoid_rms_residual_km
          • BodyShape.min_blob_diameter_px
          • BodyShape.shape_class_hint
          • BodyShape.spice_orbital_residual_km
        • DEFAULT_BODY_SHAPE
        • load_body_shape()
        • BODY_DISC_MAX_OVERFLOW_FRACTION
        • BODY_DISC_MIN_VISIBLE_LIT_FRACTION
        • BODY_POSITION_SLOP_FRAC
        • LIMB_ARC_MAX_UNCERTAINTY_PX
        • NavModelBody
          • NavModelBody.create_model()
          • NavModelBody.instances_for_obs()
          • NavModelBody.to_annotations()
          • NavModelBody.to_features()
        • TERMINATOR_MIN_PHASE_FACTOR
        • TERMINATOR_MIN_VERTICES
        • TITAN_BODY_NAME
        • bodies_in_extfov()
        • limb_reliability()
        • shape_features_suppressed()
        • terminator_reliability()
        • BODY_BLOB_MIN_DIAMETER_PX
        • NavModelBodyBase
        • NavModelBodySimulated
          • NavModelBodySimulated.apply_limb_emission_gates
          • NavModelBodySimulated.create_model()
          • NavModelBodySimulated.instances_for_obs()
          • NavModelBodySimulated.to_annotations()
          • NavModelBodySimulated.to_features()
        • NavModelRings
          • NavModelRings.create_model()
          • NavModelRings.instances_for_obs()
          • NavModelRings.to_annotations()
          • NavModelRings.to_features()
        • NavModelRingsBase
        • NavModelRingsSimulated
          • NavModelRingsSimulated.create_model()
          • NavModelRingsSimulated.instances_for_obs()
          • NavModelRingsSimulated.to_annotations()
          • NavModelRingsSimulated.to_features()
        • create_simulated_body()
        • PredictedRingEdge
          • PredictedRingEdge.edge_type
          • PredictedRingEdge.mask
          • PredictedRingEdge.normals_vu
          • PredictedRingEdge.vertices_vu
        • PredictedRingFeature
          • PredictedRingFeature.edges
          • PredictedRingFeature.mask
          • PredictedRingFeature.template
        • predict_ring_feature()
        • NavModelTitan
          • NavModelTitan.create_model()
          • NavModelTitan.instances_for_obs()
          • NavModelTitan.titan_in_fov
          • NavModelTitan.to_annotations()
          • NavModelTitan.to_features()
        • spindoctor.nav_model.rings
          • RingBaseOrbitMode
            • RingBaseOrbitMode.__post_init__()
            • RingBaseOrbitMode.a
            • RingBaseOrbitMode.ae
            • RingBaseOrbitMode.long_peri
            • RingBaseOrbitMode.rate_peri
            • RingBaseOrbitMode.rms
          • RingEdgeData
            • RingEdgeData.__post_init__()
            • RingEdgeData.base_orbit
            • RingEdgeData.base_radius
            • RingEdgeData.parsed_modes_for_backplane()
            • RingEdgeData.perturbations
            • RingEdgeData.radial_perturbations()
            • RingEdgeData.rms
          • RingFeatureType
            • RingFeatureType.GAP
            • RingFeatureType.RINGLET
          • RingPerturbationMode
            • RingPerturbationMode.__post_init__()
            • RingPerturbationMode.amplitude
            • RingPerturbationMode.is_inclination_mode
            • RingPerturbationMode.mode_num
            • RingPerturbationMode.pattern_speed
            • RingPerturbationMode.phase
          • RingFeature
            • RingFeature.__post_init__()
            • RingFeature.all_base_radii()
            • RingFeature.edge_labels
            • RingFeature.edge_uncertainty()
            • RingFeature.end_date
            • RingFeature.feature_type
            • RingFeature.from_config()
            • RingFeature.inner_edge
            • RingFeature.is_in_radius_range()
            • RingFeature.is_visible_at()
            • RingFeature.key
            • RingFeature.max_extent_radius
            • RingFeature.name
            • RingFeature.outer_edge
            • RingFeature.render()
            • RingFeature.start_date
            • RingFeature.uncertainty
            • RingFeature.uses_fade_for_edge()
          • validate_no_date_overlaps()
          • RingFeatureFilter
            • RingFeatureFilter.filter()
          • Design notes
          • compute_antialiasing()
          • compute_edge_fade()
          • compute_fade_integral()
          • RingsRenderContext
            • RingsRenderContext.__post_init__()
            • RingsRenderContext.all_edge_radii
            • RingsRenderContext.epoch
            • RingsRenderContext.fade_width_pix
            • RingsRenderContext.logger
            • RingsRenderContext.obs
            • RingsRenderContext.resolutions
            • RingsRenderContext.ring_target
          • RingRenderResult
            • RingRenderResult.__post_init__()
            • RingRenderResult.edge_info_list
            • RingRenderResult.model_img
            • RingRenderResult.model_mask
            • RingRenderResult.uncertainty
        • spindoctor.nav_model.stars
          • NavModelStars
            • NavModelStars.create_model()
            • NavModelStars.instances_for_obs()
            • NavModelStars.stars
            • NavModelStars.to_annotations()
            • NavModelStars.to_features()
          • NavModelStarsSimulated
            • NavModelStarsSimulated.create_model()
            • NavModelStarsSimulated.instances_for_obs()
          • CATALOG_MAGNITUDE_BINS
          • aberrate_star()
          • get_tycho2_catalog()
          • get_ucac4_catalog()
          • get_ybsc_catalog()
          • reduce_catalogs()
          • select_radec_list()
          • stars_in_extfov()
          • mark_body_and_ring_conflicts()
          • parse_ring_occlusion_annuli()
          • integrated_signal_dn()
          • predicted_snr()
          • psf_aperture_pixels()
          • psf_sigma_px()
          • compute_smear_vector_px()
          • movement_granularity_px()
          • render_smeared_psf()
          • smear_length_px()
          • DAOPHOT_DEFAULT_DETECTION_SIGMA
          • DAOPHOT_DEFAULT_ROUNDNESS_BOUND
          • DAOPHOT_DEFAULT_SHARPNESS_MAX
          • DAOPHOT_DEFAULT_SHARPNESS_MIN
          • DetectedSource
            • DetectedSource.peak_dn
            • DetectedSource.roundness
            • DetectedSource.saturated
            • DetectedSource.sharpness
            • DetectedSource.u
            • DetectedSource.v
          • apply_shape_cuts()
          • centroid_gaussian_fit()
          • centroid_saturated()
          • detect_ccd_bloom_columns()
          • detect_sources()
          • matched_filter_image()
      • spindoctor.nav_technique
        • NCCCovarianceTuning
          • NCCCovarianceTuning.localization_uncertainty_scale
          • NCCCovarianceTuning.model_error_floor_px
          • NCCCovarianceTuning.model_error_size_frac
        • NavTechnique
          • NavTechnique.__init_subclass__()
          • NavTechnique.accepts_feature_types
          • NavTechnique.confidence_attributes
          • NavTechnique.confidence_spec
          • NavTechnique.is_feasible()
          • NavTechnique.name
          • NavTechnique.navigate()
          • NavTechnique.requires_prior
          • NavTechnique.tier
          • NavTechnique.tuning
        • ROTATION_AT_EDGE_FRACTION
        • ROTATION_UNOBSERVABLE_VARIANCE
        • add_model_error_floor()
        • add_size_scaled_model_error()
        • embed_rotation_unobservable()
        • filter_technique_names()
        • load_model_error_floor()
        • load_ncc_covariance_tuning()
        • log_confidence_breakdown()
        • rotation_pivot_distance_px()
        • rotation_unobservable_sigma_rad()
        • search_window_for_obs()
        • technique_tier()
        • validate_registered_confidence_specs()
        • NavFeasibilityReport
          • NavFeasibilityReport.__post_init__()
          • NavFeasibilityReport.consumed_feature_count
          • NavFeasibilityReport.feasible
          • NavFeasibilityReport.reason
        • NavTechniqueResult
          • NavTechniqueResult.__post_init__()
          • NavTechniqueResult.at_edge
          • NavTechniqueResult.confidence
          • NavTechniqueResult.covariance_px2
          • NavTechniqueResult.diagnostics
          • NavTechniqueResult.feature_ids
          • NavTechniqueResult.offset_px
          • NavTechniqueResult.prior_source_techniques
          • NavTechniqueResult.rotation_rad
          • NavTechniqueResult.sigma_rotation_rad
          • NavTechniqueResult.source_bodies
          • NavTechniqueResult.spurious
          • NavTechniqueResult.technique_name
        • BodyBlobDiagnostics
          • BodyBlobDiagnostics.CURATOR_FIELDS
          • BodyBlobDiagnostics.blob_count
          • BodyBlobDiagnostics.body_extent_px
          • BodyBlobDiagnostics.body_snr_inside_predicted_bbox
          • BodyBlobDiagnostics.max_phase_angle_deg
          • BodyBlobDiagnostics.max_phase_irregularity_factor
          • BodyBlobDiagnostics.residual_px
        • BodyDiscDiagnostics
          • BodyDiscDiagnostics.CURATOR_FIELDS
          • BodyDiscDiagnostics.body_count
          • BodyDiscDiagnostics.consistency_px
          • BodyDiscDiagnostics.consistency_ratio
          • BodyDiscDiagnostics.ncc_peak
          • BodyDiscDiagnostics.peak_to_runner_up_ratio
          • BodyDiscDiagnostics.used_gradient
        • BodyLimbDiagnostics
          • BodyLimbDiagnostics.CURATOR_FIELDS
          • BodyLimbDiagnostics.coarse_peak_fraction
          • BodyLimbDiagnostics.dt_fit_rms_px
          • BodyLimbDiagnostics.lm_converged
          • BodyLimbDiagnostics.lm_iterations
          • BodyLimbDiagnostics.polarity_rejection_fraction
          • BodyLimbDiagnostics.tukey_inlier_count
          • BodyLimbDiagnostics.visible_arc_px
          • BodyLimbDiagnostics.visible_limb_arc_fraction
        • BodyTerminatorDiagnostics
          • BodyTerminatorDiagnostics.CURATOR_FIELDS
          • BodyTerminatorDiagnostics.coarse_peak_fraction
          • BodyTerminatorDiagnostics.dt_fit_rms_px
          • BodyTerminatorDiagnostics.lm_converged
          • BodyTerminatorDiagnostics.lm_iterations
          • BodyTerminatorDiagnostics.mean_albedo_penalty
          • BodyTerminatorDiagnostics.mean_phase_angle_factor
          • BodyTerminatorDiagnostics.polarity_rejection_fraction
          • BodyTerminatorDiagnostics.secondary_basin_cost_ratio
          • BodyTerminatorDiagnostics.secondary_basin_distance_px
          • BodyTerminatorDiagnostics.tukey_inlier_count
          • BodyTerminatorDiagnostics.visible_arc_px
          • BodyTerminatorDiagnostics.visible_terminator_arc_fraction
        • ManualNavDiagnostics
          • ManualNavDiagnostics.CURATOR_FIELDS
          • ManualNavDiagnostics.operator_accepted
        • NavTechniqueDiagnostics
        • RingAnnulusDiagnostics
          • RingAnnulusDiagnostics.CURATOR_FIELDS
          • RingAnnulusDiagnostics.annulus_count
          • RingAnnulusDiagnostics.ncc_peak
          • RingAnnulusDiagnostics.peak_to_runner_up_ratio
          • RingAnnulusDiagnostics.used_gradient
        • RingEdgeDiagnostics
          • RingEdgeDiagnostics.CURATOR_FIELDS
          • RingEdgeDiagnostics.coarse_peak_fraction
          • RingEdgeDiagnostics.edge_count
          • RingEdgeDiagnostics.is_rank_1
          • RingEdgeDiagnostics.lm_converged
          • RingEdgeDiagnostics.per_edge_dt_median_max
          • RingEdgeDiagnostics.per_edge_dt_rms_mean
          • RingEdgeDiagnostics.per_edge_dt_rms_summed
          • RingEdgeDiagnostics.sigma_orbit_radial_px
          • RingEdgeDiagnostics.total_edge_length_px
        • StarFieldDiagnostics
          • StarFieldDiagnostics.CURATOR_FIELDS
          • StarFieldDiagnostics.median_residual_px
          • StarFieldDiagnostics.n_catalog_predicted
          • StarFieldDiagnostics.n_detected_sources
          • StarFieldDiagnostics.n_inliers
          • StarFieldDiagnostics.n_triplets_evaluated
          • StarFieldDiagnostics.rotation_below_separability_floor
        • StarRefineDiagnostics
          • StarRefineDiagnostics.CURATOR_FIELDS
          • StarRefineDiagnostics.median_pos_err_px
          • StarRefineDiagnostics.n_stars_used
          • StarRefineDiagnostics.residual_scatter_px
        • StarUniqueMatchDiagnostics
          • StarUniqueMatchDiagnostics.CURATOR_FIELDS
          • StarUniqueMatchDiagnostics.brightness_margin_mag
          • StarUniqueMatchDiagnostics.detection_peak_ratio
          • StarUniqueMatchDiagnostics.mode
          • StarUniqueMatchDiagnostics.predicted_snr
          • StarUniqueMatchDiagnostics.residual_px
        • ConfidenceBreakdown
          • ConfidenceBreakdown.alpha0
          • ConfidenceBreakdown.confidence
          • ConfidenceBreakdown.hard_cap_applied
          • ConfidenceBreakdown.hard_zero
          • ConfidenceBreakdown.sigmoid_arg
          • ConfidenceBreakdown.terms
        • ConfidenceSpec
          • ConfidenceSpec.__post_init__()
          • ConfidenceSpec.alpha0
          • ConfidenceSpec.hard_cap
          • ConfidenceSpec.hard_zero_if
          • ConfidenceSpec.terms
        • ConfidenceTerm
          • ConfidenceTerm.__post_init__()
          • ConfidenceTerm.alpha
          • ConfidenceTerm.cap_at
          • ConfidenceTerm.divisor
          • ConfidenceTerm.feature
          • ConfidenceTerm.offset
        • ConfidenceTermContribution
          • ConfidenceTermContribution.alpha
          • ConfidenceTermContribution.contribution
          • ConfidenceTermContribution.feature
          • ConfidenceTermContribution.normalized
          • ConfidenceTermContribution.raw
        • evaluate_sigmoid_combination()
        • ConfidenceConfigError
        • load_confidence_spec()
        • load_technique_tuning()
        • CoarseSearchResult
          • CoarseSearchResult.offset_vu
          • CoarseSearchResult.score
        • LMRefineResult
          • LMRefineResult.__post_init__()
          • LMRefineResult.converged
          • LMRefineResult.covariance
          • LMRefineResult.degenerate
          • LMRefineResult.inlier_count
          • LMRefineResult.iterations
          • LMRefineResult.offset_vu
          • LMRefineResult.polarity_rejected_count
          • LMRefineResult.raw_rms_px
          • LMRefineResult.residuals_px
          • LMRefineResult.rms_px
          • LMRefineResult.rotation_rad
          • LMRefineResult.weights
        • RidgeRefineResult
          • RidgeRefineResult.applied
          • RidgeRefineResult.converged
          • RidgeRefineResult.iterations
          • RidgeRefineResult.offset_vu
          • RidgeRefineResult.rotation_rad
        • SecondaryBasin
          • SecondaryBasin.converged_cost_px
          • SecondaryBasin.cost_px
          • SecondaryBasin.distance_px
          • SecondaryBasin.offset_vu
        • build_polyline_mask()
        • coarse_ncc_search()
        • coarse_ncc_search_scored()
        • find_secondary_dt_minimum()
        • gradient_ridge_refine()
        • information_matrix_to_covariance()
        • lm_subpixel_refine()
        • polarity_filter()
        • tukey_biweight_weights()
        • BodyLimbNav
          • BodyLimbNav.accepts_feature_types
          • BodyLimbNav.confidence_attributes
          • BodyLimbNav.is_feasible()
          • BodyLimbNav.name
          • BodyLimbNav.navigate()
          • BodyLimbNav.requires_prior
        • BodyTerminatorNav
          • BodyTerminatorNav.accepts_feature_types
          • BodyTerminatorNav.confidence_attributes
          • BodyTerminatorNav.is_feasible()
          • BodyTerminatorNav.name
          • BodyTerminatorNav.navigate()
          • BodyTerminatorNav.requires_prior
          • BodyTerminatorNav.tier
        • BodyDiscCorrelateNav
          • BodyDiscCorrelateNav.accepts_feature_types
          • BodyDiscCorrelateNav.confidence_attributes
          • BodyDiscCorrelateNav.is_feasible()
          • BodyDiscCorrelateNav.name
          • BodyDiscCorrelateNav.navigate()
          • BodyDiscCorrelateNav.requires_prior
        • BodyBlobNav
          • BodyBlobNav.accepts_feature_types
          • BodyBlobNav.confidence_attributes
          • BodyBlobNav.is_feasible()
          • BodyBlobNav.name
          • BodyBlobNav.navigate()
          • BodyBlobNav.requires_prior
          • BodyBlobNav.tier
        • RingEdgeNav
          • RingEdgeNav.accepts_feature_types
          • RingEdgeNav.confidence_attributes
          • RingEdgeNav.is_feasible()
          • RingEdgeNav.name
          • RingEdgeNav.navigate()
          • RingEdgeNav.requires_prior
        • aggregate_edge_normal_angle_deg()
        • RingAnnulusNav
          • RingAnnulusNav.accepts_feature_types
          • RingAnnulusNav.confidence_attributes
          • RingAnnulusNav.is_feasible()
          • RingAnnulusNav.name
          • RingAnnulusNav.navigate()
          • RingAnnulusNav.requires_prior
        • StarFieldFromCatalogNav
          • StarFieldFromCatalogNav.accepts_feature_types
          • StarFieldFromCatalogNav.confidence_attributes
          • StarFieldFromCatalogNav.is_feasible()
          • StarFieldFromCatalogNav.name
          • StarFieldFromCatalogNav.navigate()
          • StarFieldFromCatalogNav.requires_prior
        • StarRefineNav
          • StarRefineNav.accepts_feature_types
          • StarRefineNav.confidence_attributes
          • StarRefineNav.is_feasible()
          • StarRefineNav.name
          • StarRefineNav.navigate()
          • StarRefineNav.requires_prior
        • StarUniqueMatchNav
          • StarUniqueMatchNav.accepts_feature_types
          • StarUniqueMatchNav.confidence_attributes
          • StarUniqueMatchNav.is_feasible()
          • StarUniqueMatchNav.name
          • StarUniqueMatchNav.navigate()
          • StarUniqueMatchNav.requires_prior
        • NavTechniqueManual
          • NavTechniqueManual.accepts_feature_types
          • NavTechniqueManual.is_feasible()
          • NavTechniqueManual.name
          • NavTechniqueManual.navigate()
          • NavTechniqueManual.requires_prior
        • run_manual_nav()
      • spindoctor.reproj
        • BodyMosaic
          • BodyMosaic.body_name
          • BodyMosaic.add()
          • BodyMosaic.bounds
          • BodyMosaic.generate_latitudes()
          • BodyMosaic.generate_longitudes()
          • BodyMosaic.latitude_longitude_to_pixels()
          • BodyMosaic.reproject()
          • BodyMosaic.to_bounded()
          • BodyMosaic.to_full()
        • BodyMosaicData
          • BodyMosaicData.body_name
          • BodyMosaicData.contributing_image_names
          • BodyMosaicData.eff_resolution
          • BodyMosaicData.emission
          • BodyMosaicData.image_dtype
          • BodyMosaicData.image_number
          • BodyMosaicData.img
          • BodyMosaicData.incidence
          • BodyMosaicData.lat_range
          • BodyMosaicData.lat_resolution
          • BodyMosaicData.latlon_type
          • BodyMosaicData.load()
          • BodyMosaicData.lon_direction
          • BodyMosaicData.lon_range
          • BodyMosaicData.lon_resolution
          • BodyMosaicData.metadata_dtype
          • BodyMosaicData.phase
          • BodyMosaicData.photometric_model_name
          • BodyMosaicData.resolution
          • BodyMosaicData.save()
          • BodyMosaicData.sub_observer_lat_per_image
          • BodyMosaicData.sub_observer_lon_per_image
          • BodyMosaicData.sub_solar_lat_per_image
          • BodyMosaicData.sub_solar_lon_per_image
          • BodyMosaicData.time
        • BodyMosaicMergeStrategy
          • BodyMosaicMergeStrategy.BEST_RESOLUTION
        • BodyReprojResult
          • BodyReprojResult.body_name
          • BodyReprojResult.eff_resolution
          • BodyReprojResult.emission
          • BodyReprojResult.image_dtype
          • BodyReprojResult.image_name
          • BodyReprojResult.img
          • BodyReprojResult.incidence
          • BodyReprojResult.lat_idx_range
          • BodyReprojResult.lat_resolution
          • BodyReprojResult.latlon_type
          • BodyReprojResult.load()
          • BodyReprojResult.lon_direction
          • BodyReprojResult.lon_idx_range
          • BodyReprojResult.lon_resolution
          • BodyReprojResult.metadata_dtype
          • BodyReprojResult.phase
          • BodyReprojResult.photometric_model_name
          • BodyReprojResult.resolution
          • BodyReprojResult.save()
          • BodyReprojResult.sub_observer_lat
          • BodyReprojResult.sub_observer_lon
          • BodyReprojResult.sub_solar_lat
          • BodyReprojResult.sub_solar_lon
          • BodyReprojResult.time
        • USE_MOSAIC_LIMITS
        • RingMosaic
          • RingMosaic.add()
          • RingMosaic.body_name
          • RingMosaic.bounds
          • RingMosaic.generate_longitudes()
          • RingMosaic.generate_radii()
          • RingMosaic.longitude_radius_to_pixels()
          • RingMosaic.orbit_pixels()
          • RingMosaic.reproject()
          • RingMosaic.ring_body_name
          • RingMosaic.shadow_body_name
          • RingMosaic.to_bounded()
          • RingMosaic.to_full()
          • RingMosaic.to_sparse()
        • RingMosaicData
          • RingMosaicData.body_name
          • RingMosaicData.contributing_image_names
          • RingMosaicData.image_dtype
          • RingMosaicData.image_number
          • RingMosaicData.img
          • RingMosaicData.load()
          • RingMosaicData.longitude_antimask
          • RingMosaicData.longitude_range
          • RingMosaicData.longitude_resolution
          • RingMosaicData.mean_angular_resolution
          • RingMosaicData.mean_emission
          • RingMosaicData.mean_incidence
          • RingMosaicData.mean_phase
          • RingMosaicData.mean_radial_resolution
          • RingMosaicData.metadata_dtype
          • RingMosaicData.orbit_model_name
          • RingMosaicData.photometric_model_name
          • RingMosaicData.radius_inner
          • RingMosaicData.radius_outer
          • RingMosaicData.radius_resolution
          • RingMosaicData.ring_body_name
          • RingMosaicData.save()
          • RingMosaicData.shadow_body_name
          • RingMosaicData.time
        • RingMosaicMergeStrategy
          • RingMosaicMergeStrategy.BEST_RESOLUTION
          • RingMosaicMergeStrategy.MOST_COVERAGE_THEN_RESOLUTION
        • RingReprojResult
          • RingReprojResult.body_name
          • RingReprojResult.image_dtype
          • RingReprojResult.image_name
          • RingReprojResult.img
          • RingReprojResult.incidence
          • RingReprojResult.load()
          • RingReprojResult.longitude_antimask
          • RingReprojResult.longitude_resolution
          • RingReprojResult.mean_angular_resolution
          • RingReprojResult.mean_emission
          • RingReprojResult.mean_phase
          • RingReprojResult.mean_radial_resolution
          • RingReprojResult.metadata_dtype
          • RingReprojResult.orbit_model
          • RingReprojResult.photometric_model_name
          • RingReprojResult.radius_inner
          • RingReprojResult.radius_outer
          • RingReprojResult.radius_resolution
          • RingReprojResult.save()
          • RingReprojResult.time
        • CartographicModelResult
          • CartographicModelResult.model_img
          • CartographicModelResult.resolution_ratio
        • create_cartographic_model()
        • LambertModel
          • LambertModel.correct()
          • LambertModel.min_cos_incidence
          • LambertModel.name
          • LambertModel.uncorrect()
        • LommelSeeligerModel
          • LommelSeeligerModel.correct()
          • LommelSeeligerModel.min_cos_incidence
          • LommelSeeligerModel.min_denom
          • LommelSeeligerModel.name
          • LommelSeeligerModel.uncorrect()
        • MinnaertModel
          • MinnaertModel.correct()
          • MinnaertModel.k
          • MinnaertModel.min_cos_emission
          • MinnaertModel.min_cos_incidence
          • MinnaertModel.name
          • MinnaertModel.uncorrect()
        • PhotometricModel
          • PhotometricModel.correct()
          • PhotometricModel.name
        • photometric_model_from_name()
        • FRING_CORE
        • RingOrbitModel
          • RingOrbitModel.__post_init__()
          • RingOrbitModel.a
          • RingOrbitModel.corotating_to_inertial()
          • RingOrbitModel.dw
          • RingOrbitModel.e
          • RingOrbitModel.epoch_utc
          • RingOrbitModel.inertial_to_corotating()
          • RingOrbitModel.longitude_radius()
          • RingOrbitModel.mean_motion
          • RingOrbitModel.name
          • RingOrbitModel.radius_at_longitude()
          • RingOrbitModel.w0
        • get_orbit_model_by_name()
      • spindoctor.dataset
        • DataSetPDS3
          • DataSetPDS3.add_selection_arguments()
          • DataSetPDS3.camera_from_index_row()
          • DataSetPDS3.image_et_from_index_row()
          • DataSetPDS3.pds3_holdings_root
          • DataSetPDS3.supported_grouping()
          • DataSetPDS3.yield_image_files_from_arguments()
          • DataSetPDS3.yield_image_files_index()
        • METADATA_SUFFIX
        • RESULTS_FILTER_BATCH_SIZE
        • ResultsFilter
          • ResultsFilter.filter_batch()
          • ResultsFilter.needs_batch_filtering
          • ResultsFilter.passes_presence()
        • SUMMARY_PNG_SUFFIX
        • DataSetPDS4
          • DataSetPDS4.add_selection_arguments()
          • DataSetPDS4.supported_grouping()
          • DataSetPDS4.yield_image_files_from_arguments()
          • DataSetPDS4.yield_image_files_index()
        • DataSetPDS3CassiniISS
          • DataSetPDS3CassiniISS.add_selection_arguments()
          • DataSetPDS3CassiniISS.pds4_bundle_name()
          • DataSetPDS3CassiniISS.pds4_bundle_path_for_image()
          • DataSetPDS3CassiniISS.pds4_bundle_template_dir()
          • DataSetPDS3CassiniISS.pds4_image_name_to_browse_lid()
          • DataSetPDS3CassiniISS.pds4_image_name_to_browse_lidvid()
          • DataSetPDS3CassiniISS.pds4_image_name_to_data_lid()
          • DataSetPDS3CassiniISS.pds4_image_name_to_data_lidvid()
          • DataSetPDS3CassiniISS.pds4_lid_part_to_image_name()
          • DataSetPDS3CassiniISS.pds4_path_stub()
          • DataSetPDS3CassiniISS.pds4_template_variables()
          • DataSetPDS3CassiniISS.supported_grouping()
          • DataSetPDS3CassiniISS.yield_image_files_index()
        • DataSetPDS3CassiniISSCruise
        • DataSetPDS3CassiniISSSaturn
        • DataSetPDS3VoyagerISS
          • DataSetPDS3VoyagerISS.pds4_bundle_name()
          • DataSetPDS3VoyagerISS.pds4_bundle_path_for_image()
          • DataSetPDS3VoyagerISS.pds4_bundle_template_dir()
          • DataSetPDS3VoyagerISS.pds4_image_name_to_browse_lid()
          • DataSetPDS3VoyagerISS.pds4_image_name_to_browse_lidvid()
          • DataSetPDS3VoyagerISS.pds4_image_name_to_data_lid()
          • DataSetPDS3VoyagerISS.pds4_image_name_to_data_lidvid()
          • DataSetPDS3VoyagerISS.pds4_lid_part_to_image_name()
          • DataSetPDS3VoyagerISS.pds4_path_stub()
          • DataSetPDS3VoyagerISS.pds4_template_variables()
        • DataSetPDS3GalileoSSI
          • DataSetPDS3GalileoSSI.pds4_bundle_name()
          • DataSetPDS3GalileoSSI.pds4_bundle_path_for_image()
          • DataSetPDS3GalileoSSI.pds4_bundle_template_dir()
          • DataSetPDS3GalileoSSI.pds4_image_name_to_browse_lid()
          • DataSetPDS3GalileoSSI.pds4_image_name_to_browse_lidvid()
          • DataSetPDS3GalileoSSI.pds4_image_name_to_data_lid()
          • DataSetPDS3GalileoSSI.pds4_image_name_to_data_lidvid()
          • DataSetPDS3GalileoSSI.pds4_lid_part_to_image_name()
          • DataSetPDS3GalileoSSI.pds4_path_stub()
          • DataSetPDS3GalileoSSI.pds4_template_variables()
        • DataSetPDS3NewHorizonsLORRI
          • DataSetPDS3NewHorizonsLORRI.pds4_bundle_name()
          • DataSetPDS3NewHorizonsLORRI.pds4_bundle_path_for_image()
          • DataSetPDS3NewHorizonsLORRI.pds4_bundle_template_dir()
          • DataSetPDS3NewHorizonsLORRI.pds4_image_name_to_browse_lid()
          • DataSetPDS3NewHorizonsLORRI.pds4_image_name_to_browse_lidvid()
          • DataSetPDS3NewHorizonsLORRI.pds4_image_name_to_data_lid()
          • DataSetPDS3NewHorizonsLORRI.pds4_image_name_to_data_lidvid()
          • DataSetPDS3NewHorizonsLORRI.pds4_lid_part_to_image_name()
          • DataSetPDS3NewHorizonsLORRI.pds4_path_stub()
          • DataSetPDS3NewHorizonsLORRI.pds4_template_variables()
        • DataSetSim
          • DataSetSim.add_selection_arguments()
          • DataSetSim.pds4_bundle_name()
          • DataSetSim.pds4_bundle_path_for_image()
          • DataSetSim.pds4_bundle_template_dir()
          • DataSetSim.pds4_path_stub()
          • DataSetSim.pds4_template_variables()
          • DataSetSim.supported_grouping()
          • DataSetSim.yield_image_files_from_arguments()
          • DataSetSim.yield_image_files_index()
      • spindoctor.obs
        • Obs
        • ObsSnapshot
          • ObsSnapshot.body_distance()
          • ObsSnapshot.bp
          • ObsSnapshot.center_bp
          • ObsSnapshot.clip_extfov()
          • ObsSnapshot.clip_fov()
          • ObsSnapshot.clip_rect_extfov()
          • ObsSnapshot.clip_rect_fov()
          • ObsSnapshot.closest_planet
          • ObsSnapshot.corner_bp
          • ObsSnapshot.data_shape_u
          • ObsSnapshot.data_shape_uv
          • ObsSnapshot.data_shape_v
          • ObsSnapshot.data_shape_vu
          • ObsSnapshot.ext_bp
          • ObsSnapshot.ext_corner_bp
          • ObsSnapshot.extdata
          • ObsSnapshot.extdata_shape_uv
          • ObsSnapshot.extdata_shape_vu
          • ObsSnapshot.extfov_data_sensor_mask()
          • ObsSnapshot.extfov_margin_u
          • ObsSnapshot.extfov_margin_v
          • ObsSnapshot.extfov_margin_vu
          • ObsSnapshot.extfov_u_max
          • ObsSnapshot.extfov_u_min
          • ObsSnapshot.extfov_v_max
          • ObsSnapshot.extfov_v_min
          • ObsSnapshot.extfov_vu_max
          • ObsSnapshot.extfov_vu_min
          • ObsSnapshot.extract_offset_array()
          • ObsSnapshot.fov_u_max
          • ObsSnapshot.fov_u_min
          • ObsSnapshot.fov_v_max
          • ObsSnapshot.fov_v_min
          • ObsSnapshot.fov_vu_max
          • ObsSnapshot.fov_vu_min
          • ObsSnapshot.inventory_body_in_extfov()
          • ObsSnapshot.inventory_body_in_fov()
          • ObsSnapshot.make_extfov_false()
          • ObsSnapshot.make_extfov_zeros()
          • ObsSnapshot.make_fov_zeros()
          • ObsSnapshot.ra_dec_limits()
          • ObsSnapshot.ra_dec_limits_ext()
          • ObsSnapshot.reset_all()
          • ObsSnapshot.sun_body_distance()
          • ObsSnapshot.unpad_array_to_extfov()
        • ObsSnapshotInst
        • ObsInst
          • ObsInst.camera
          • ObsInst.from_file()
          • ObsInst.get_public_metadata()
          • ObsInst.inst_config
          • ObsInst.star_max_usable_vmag()
          • ObsInst.star_min_usable_vmag()
          • ObsInst.star_psf()
          • ObsInst.star_psf_size()
        • ObsCassiniISS
          • ObsCassiniISS.camera
          • ObsCassiniISS.from_file()
          • ObsCassiniISS.get_public_metadata()
          • ObsCassiniISS.star_max_usable_vmag()
          • ObsCassiniISS.star_min_usable_vmag()
        • ObsVoyagerISS
          • ObsVoyagerISS.camera
          • ObsVoyagerISS.from_file()
          • ObsVoyagerISS.get_public_metadata()
          • ObsVoyagerISS.star_max_usable_vmag()
          • ObsVoyagerISS.star_min_usable_vmag()
        • ObsGalileoSSI
          • ObsGalileoSSI.camera
          • ObsGalileoSSI.from_file()
          • ObsGalileoSSI.get_public_metadata()
          • ObsGalileoSSI.star_max_usable_vmag()
          • ObsGalileoSSI.star_min_usable_vmag()
        • ObsNewHorizonsLORRI
          • ObsNewHorizonsLORRI.camera
          • ObsNewHorizonsLORRI.from_file()
          • ObsNewHorizonsLORRI.get_public_metadata()
          • ObsNewHorizonsLORRI.star_max_usable_vmag()
          • ObsNewHorizonsLORRI.star_min_usable_vmag()
        • ObsSim
          • ObsSim.camera
          • ObsSim.from_file()
          • ObsSim.get_public_metadata()
          • ObsSim.star_max_usable_vmag()
          • ObsSim.star_min_usable_vmag()
      • spindoctor.annotation
        • Annotation
          • Annotation.add_text_info()
          • Annotation.avoid_mask
          • Annotation.config
          • Annotation.obs
          • Annotation.overlay
          • Annotation.overlay_color
          • Annotation.text_info_list
        • Annotations
          • Annotations.add_annotations()
          • Annotations.annotations
          • Annotations.combine()
        • AnnotationTextInfo
          • AnnotationTextInfo.__repr__()
          • AnnotationTextInfo.__str__()
          • AnnotationTextInfo.color
          • AnnotationTextInfo.font
          • AnnotationTextInfo.font_size
          • AnnotationTextInfo.ref_vu
          • AnnotationTextInfo.text
          • AnnotationTextInfo.text_loc
        • TextLocInfo
          • TextLocInfo.label
          • TextLocInfo.label_u
          • TextLocInfo.label_v
      • spindoctor.config
        • Config
          • Config.backplanes
          • Config.bodies
          • Config.body_shape
          • Config.bootstrap
          • Config.category()
          • Config.ensure_loaded()
          • Config.environment
          • Config.fuzzy_satellites()
          • Config.general
          • Config.is_loaded
          • Config.offset
          • Config.orchestrator
          • Config.override_paths
          • Config.pds4
          • Config.planets
          • Config.read_config()
          • Config.resolved_config_hash()
          • Config.ring_satellites()
          • Config.rings
          • Config.satellites()
          • Config.stars
          • Config.titan
          • Config.update_config()
        • get_backplane_results_root()
        • get_nav_results_root()
        • get_pds4_bundle_results_root()
        • load_default_and_user_config()
        • image_log_handlers()
        • setup_logging()
      • spindoctor.support
        • AttrDict
        • evaluate_candidate()
        • fourier_shift()
        • gradient_magnitude()
        • int_to_signed()
        • masked_ncc()
        • matched_filter_covariance()
        • navigate_single_scale_kpeaks()
        • navigate_with_pyramid_kpeaks()
        • nms_topk()
        • peak_to_runner_up_ratio()
        • per_metric()
        • pmr_metric()
        • psr_metric()
        • upsampled_dft()
        • apply_translation()
        • sample_dt_bilinear()
        • NavContractError
        • clean_obj()
        • dump_yaml()
        • json_as_string()
        • canonicalize()
        • NavFilterKind
          • NavFilterKind.ANISOTROPIC_GAUSSIAN
          • NavFilterKind.BANDPASS_DOG
          • NavFilterKind.DISTANCE_TRANSFORM
          • NavFilterKind.GRADIENT_OF_GAUSSIAN
          • NavFilterKind.ISOTROPIC_GAUSSIAN
          • NavFilterKind.MORPH_DILATE
          • NavFilterKind.NONE
        • NavFilterSpec
          • NavFilterSpec.align_axis
          • NavFilterSpec.bandpass_cutoffs_px
          • NavFilterSpec.covariance_px2
          • NavFilterSpec.dt_half_width_px
          • NavFilterSpec.kind
          • NavFilterSpec.null_filter_threshold_sigma
          • NavFilterSpec.sigma_xy
        • apply_filter()
        • clean_sclass()
        • apply_linear_gamma_stretch()
        • array_unzoom()
        • array_zoom()
        • crop_center()
        • draw_circle()
        • draw_line()
        • draw_line_arrow()
        • draw_rect()
        • filter_downsample()
        • filter_local_maximum()
        • filter_sub_median()
        • gaussian_blur_cov()
        • gradient_magnitude()
        • next_power_of_2()
        • normalize_array()
        • pad_array()
        • pad_array_to_power_of_2()
        • pad_top_left()
        • require_finite_int_or_float()
        • shift_array()
        • unpad_array()
        • cosmic_ray_mask()
        • saturation_mask()
        • current_git_version()
        • dec_rad_to_dms()
        • flatten_list()
        • get_local_host_name()
        • log_run_environment()
        • mad_std()
        • ra_rad_to_hms()
        • safe_lstrip_zero()
        • NavBase
          • NavBase.config
          • NavBase.logger
        • estimate_background_and_sky_sigma()
        • estimate_image_noise_sigma()
        • NavStatusReason
          • NavStatusReason.ALL_FEATURES_GATED
          • NavStatusReason.ALL_TECHNIQUES_SPURIOUS
          • NavStatusReason.CONFLICTED_TECHNIQUES
          • NavStatusReason.CONTRACT_VIOLATION
          • NavStatusReason.FINAL_CONFIDENCE_BELOW_THRESHOLD
          • NavStatusReason.FINAL_SIGMA_ABOVE_THRESHOLD
          • NavStatusReason.IMAGE_CORRUPT
          • NavStatusReason.IMAGE_OVEREXPOSED
          • NavStatusReason.INSTRUMENT_NOT_CONFIGURED
          • NavStatusReason.KERNELS_UNAVAILABLE
          • NavStatusReason.MISSING_DATA_DOMINANT
          • NavStatusReason.NO_FEASIBLE_TECHNIQUES
          • NavStatusReason.NO_FEATURES_EXTRACTED
          • NavStatusReason.NO_SIGNAL_IN_IMAGE
          • NavStatusReason.OK
          • NavStatusReason.RANK_1_ONLY
          • NavStatusReason.TITAN_UNSUPPORTED
          • NavStatusReason.UNOBSERVABLE_OFFSET
        • grayscale_to_rgb_with_quantile_stretch()
        • render_annotated_summary_rgb()
        • dt_delta_str()
        • et_to_utc()
        • now_dt()
        • now_iso()
        • utc_to_et()
        • MutableStar
          • MutableStar.b_v
          • MutableStar.catalog_name
          • MutableStar.conflicts
          • MutableStar.dec
          • MutableStar.dec_pm
          • MutableStar.diff_u
          • MutableStar.diff_v
          • MutableStar.dn
          • MutableStar.johnson_mag_b
          • MutableStar.johnson_mag_faked
          • MutableStar.johnson_mag_v
          • MutableStar.move_u
          • MutableStar.move_v
          • MutableStar.name
          • MutableStar.pretty_name
          • MutableStar.psf_size
          • MutableStar.ra
          • MutableStar.ra_dec_with_pm()
          • MutableStar.ra_pm
          • MutableStar.spectral_class
          • MutableStar.temperature
          • MutableStar.temperature_faked
          • MutableStar.u
          • MutableStar.unique_number
          • MutableStar.v
          • MutableStar.vmag
      • spindoctor.sim
        • clear_render_caches()
        • render_combined_model()
        • resolve_oversample()
        • SimFrame
          • SimFrame.oversample
          • SimFrame.point_e
          • SimFrame.signal
          • SimFrame.truth
        • Stage
        • downsample_to_detector()
        • new_sim_frame()
        • run_pipeline()
        • compose_scene_radiance()
        • ScreenOp
          • ScreenOp.box_u
          • ScreenOp.box_v
          • ScreenOp.intensity
          • ScreenOp.is_ring
          • ScreenOp.mask
          • ScreenOp.transmission
        • check_depth_ambiguity()
        • check_halo_ambiguity()
        • check_ring_system_ambiguity()
        • translucent_screen_ops()
        • create_simulated_body()
        • render_single_body()
        • render_single_mesh_body()
        • TopoBodySpec
          • TopoBodySpec.albedo_texture
          • TopoBodySpec.anti_aliasing
          • TopoBodySpec.axis1
          • TopoBodySpec.axis2
          • TopoBodySpec.axis3
          • TopoBodySpec.crater_fill
          • TopoBodySpec.crater_max_radius
          • TopoBodySpec.crater_min_radius
          • TopoBodySpec.crater_power_law_exponent
          • TopoBodySpec.crater_relief_scale
          • TopoBodySpec.crater_seed
          • TopoBodySpec.disc_texture
          • TopoBodySpec.illumination_angle
          • TopoBodySpec.limb_relief_corr_deg
          • TopoBodySpec.limb_relief_rms
          • TopoBodySpec.minnaert_k
          • TopoBodySpec.oversample
          • TopoBodySpec.phase_angle
          • TopoBodySpec.photometric_law
          • TopoBodySpec.relief_seed
          • TopoBodySpec.rotation_tilt
          • TopoBodySpec.rotation_z
          • TopoBodySpec.surge_amplitude
          • TopoBodySpec.surge_width_deg
          • TopoBodySpec.transits
        • create_topographic_body()
        • AlbedoTextureSpec
          • AlbedoTextureSpec.corr_px
          • AlbedoTextureSpec.rms
          • AlbedoTextureSpec.seed
          • AlbedoTextureSpec.spots
        • DiscTextureSpec
          • DiscTextureSpec.band_amplitude
          • DiscTextureSpec.band_phase_deg
          • DiscTextureSpec.band_wavenumber
          • DiscTextureSpec.storms
        • TransitSpec
          • TransitSpec.moon
          • TransitSpec.shadow
        • albedo_spec_from_params()
        • apply_transits()
        • disc_texture_spec_from_params()
        • surface_texture_factor()
        • transit_specs_from_params()
        • MarchStats
          • MarchStats.candidate_count
          • MarchStats.max_steps
          • MarchStats.steps_executed
        • ReliefField
          • ReliefField.corr_deg
          • ReliefField.grid
          • ReliefField.h_max
          • ReliefField.h_min
          • ReliefField.limb_delta()
          • ReliefField.limb_slice()
          • ReliefField.rms
          • ReliefField.sample()
        • march_shadows()
        • synthesize_albedo_field()
        • synthesize_relief_field()
        • incidence_cosines()
        • shade_surface()
        • surge_factor()
        • RingSystemMaps
          • RingSystemMaps.depth_km
          • RingSystemMaps.intensity
          • RingSystemMaps.mask
          • RingSystemMaps.transmission
        • henyey_greenstein_phase()
        • render_ring_system()
        • ring_reflection_factor()
        • faint_sky_cutoff_mag()
        • render_sky_counts()
        • render_stars()
        • total_flux_for_vmag()
        • apply_optics()
        • apply_stray_light()
        • effective_psf()
        • instrument_defaults_on()
        • apply_smear()
        • smear_kernel()
        • apply_distortion()
        • apply_psf()
        • psf_kernel()
        • psf_truncation_for_instrument()
        • apply_ghosts()
        • DetectorParams
          • DetectorParams.artifacts_adversarial
          • DetectorParams.banding_amplitude_e
          • DetectorParams.banding_period_px
          • DetectorParams.bias_col_gradient_dn
          • DetectorParams.bias_dn
          • DetectorParams.bias_pedestal_sigma_dn
          • DetectorParams.bias_row_gradient_dn
          • DetectorParams.bloom_length
          • DetectorParams.calibration_scale_dn_per_s_per_if
          • DetectorParams.cosmic_ray_rate_per_sec
          • DetectorParams.dark_current_e_per_sec
          • DetectorParams.dark_dn
          • DetectorParams.data_units
          • DetectorParams.detector_model
          • DetectorParams.detector_modes
          • DetectorParams.exposure_ref_sec
          • DetectorParams.exposure_sec
          • DetectorParams.full_well_dn
          • DetectorParams.full_well_e
          • DetectorParams.gain_e_per_dn
          • DetectorParams.hot_pixel_adversarial
          • DetectorParams.hot_pixel_amplitude_e
          • DetectorParams.hot_pixel_column_factor
          • DetectorParams.hot_pixel_fraction
          • DetectorParams.hot_pixel_mode_active
          • DetectorParams.instrument_defaults
          • DetectorParams.pixel_area_cm2
          • DetectorParams.poisson
          • DetectorParams.quantization
          • DetectorParams.quantization_contour_step
          • DetectorParams.random_seed
          • DetectorParams.read_noise_e
          • DetectorParams.saturation_dn
          • DetectorParams.signal_full_scale_frac
          • DetectorParams.vidicon
        • apply_detector()
        • apply_saturation()
        • quantize_dn()
        • resolve_detector_params()
        • DetectorParams
          • DetectorParams.artifacts_adversarial
          • DetectorParams.banding_amplitude_e
          • DetectorParams.banding_period_px
          • DetectorParams.bias_col_gradient_dn
          • DetectorParams.bias_dn
          • DetectorParams.bias_pedestal_sigma_dn
          • DetectorParams.bias_row_gradient_dn
          • DetectorParams.bloom_length
          • DetectorParams.calibration_scale_dn_per_s_per_if
          • DetectorParams.cosmic_ray_rate_per_sec
          • DetectorParams.dark_current_e_per_sec
          • DetectorParams.dark_dn
          • DetectorParams.data_units
          • DetectorParams.detector_model
          • DetectorParams.detector_modes
          • DetectorParams.exposure_ref_sec
          • DetectorParams.exposure_sec
          • DetectorParams.full_well_dn
          • DetectorParams.full_well_e
          • DetectorParams.gain_e_per_dn
          • DetectorParams.hot_pixel_adversarial
          • DetectorParams.hot_pixel_amplitude_e
          • DetectorParams.hot_pixel_column_factor
          • DetectorParams.hot_pixel_fraction
          • DetectorParams.hot_pixel_mode_active
          • DetectorParams.instrument_defaults
          • DetectorParams.pixel_area_cm2
          • DetectorParams.poisson
          • DetectorParams.quantization
          • DetectorParams.quantization_contour_step
          • DetectorParams.random_seed
          • DetectorParams.read_noise_e
          • DetectorParams.saturation_dn
          • DetectorParams.signal_full_scale_frac
          • DetectorParams.vidicon
        • resolve_detector_params()
        • apply_detector()
        • apply_saturation()
        • quantize_dn()
        • add_banding()
        • add_bias_structure()
        • add_cosmic_rays()
        • add_dark_current()
        • add_hot_pixels()
        • deposit_morphological_events()
        • add_bright_dark_pairs()
        • add_coherent_banding()
        • add_dark_ramp()
        • add_fixed_pattern_dn()
        • add_fixed_pattern_response()
        • add_residual_image()
        • add_serial_tail()
        • apply_beam_bend()
        • apply_exposure_shading()
        • apply_frame_transfer_smear()
        • apply_telemetry()
        • apply_alternating_lines()
        • apply_cutout_window()
        • apply_dead_columns()
        • apply_dead_pixels()
        • apply_edited_frame()
        • apply_embedded_header()
        • apply_line_garble()
        • apply_missing_blocks()
        • apply_missing_lines()
        • apply_partial_lines()
        • apply_pixel_spikes()
        • apply_truncated_frame()
        • apply_compression_dct()
        • apply_resample_texture()
        • apply_reseau_scars()
        • marker_mask()
        • measured_missing_blocks()
        • measured_missing_lines()
        • measured_partial_lines()
        • measured_pixel_dropouts()
        • planted_incidence()
        • FeatureLoci
          • FeatureLoci.has_pixels
          • FeatureLoci.has_rows
          • FeatureLoci.pixel_u
          • FeatureLoci.pixel_v
          • FeatureLoci.rows
        • choose_pixels()
        • choose_rows()
        • dilated_pixels()
        • extract_feature_loci()
        • AtmosphereLayers
          • AtmosphereLayers.disc
          • AtmosphereLayers.halo
        • AtmosphereSpec
          • AtmosphereSpec.detached_px
          • AtmosphereSpec.g
          • AtmosphereSpec.ref_altitude_px
          • AtmosphereSpec.scale_height_px
          • AtmosphereSpec.tau_ref
        • HaloScreen
          • HaloScreen.box_u
          • HaloScreen.box_v
          • HaloScreen.emission
          • HaloScreen.mask
          • HaloScreen.transmission
        • apply_atmosphere()
        • atmosphere_spec_from_params()
        • hg_phase_factor()
        • ArtifactMode
          • ArtifactMode.availability
          • ArtifactMode.implemented
          • ArtifactMode.incidence_semantics
          • ArtifactMode.name
          • ArtifactMode.param_map
          • ArtifactMode.params
          • ArtifactMode.stage
          • ArtifactMode.unavailable_reason
        • ModeParam
          • ModeParam.choices
          • ModeParam.default
          • ModeParam.kind
          • ModeParam.length
          • ModeParam.name
        • mode_available()
        • mode_unavailable_message()
        • normalize_instrument()
        • resolve_mode_config()
        • resolve_detector_defaults()
        • resolve_mode_with_catalog()
        • resolve_sky_pixel_scale_arcsec()
        • resolve_star_flux_zero_point()
        • EllipsoidProjection
          • EllipsoidProjection.aa_scale
          • EllipsoidProjection.cos_rz
          • EllipsoidProjection.ellipse_dist_sq
          • EllipsoidProjection.ellipse_mask
          • EllipsoidProjection.inside_mask
          • EllipsoidProjection.sin_rz
          • EllipsoidProjection.u_coords
          • EllipsoidProjection.u_rot
          • EllipsoidProjection.v_coords
          • EllipsoidProjection.v_rot
          • EllipsoidProjection.work_center_u
          • EllipsoidProjection.work_center_v
          • EllipsoidProjection.work_semi_c
          • EllipsoidProjection.work_semi_major
          • EllipsoidProjection.work_semi_minor
          • EllipsoidProjection.z_coords
        • ellipsoid_image_normals()
        • illumination_vector()
        • lambert_from_normals()
        • project_ellipsoid()
        • Mesh
          • Mesh.faces
          • Mesh.vertices
        • MeshBodySpec
          • MeshBodySpec.detail_octaves
          • MeshBodySpec.lumpiness
          • MeshBodySpec.n_lat
          • MeshBodySpec.n_lon
          • MeshBodySpec.pose_euler_deg
          • MeshBodySpec.seed
        • make_irregular_mesh()
        • mesh_spec_from_params()
        • render_mesh_body_image()
        • render_polyhedral_body()
        • RingEdgeWave
          • RingEdgeWave.amp
          • RingEdgeWave.damp
          • RingEdgeWave.lam0
          • RingEdgeWave.wavelength
        • RingOrbit
          • RingOrbit.a
          • RingOrbit.ae
          • RingOrbit.edge_wave
          • RingOrbit.long_peri
          • RingOrbit.modes
          • RingOrbit.rate_peri
          • RingOrbit.scaled()
          • RingOrbit.widened()
        • RingOrbitMode
          • RingOrbitMode.amp
          • RingOrbitMode.m
          • RingOrbitMode.peri
        • compute_antialiasing_shade()
        • compute_edge_radii_array()
        • compute_edge_radius_at_angle()
        • compute_edge_wave_dr()
        • compute_orbit_radii()
        • ring_los_depth()
        • ring_orbit_from_mapping()
        • ring_plane_from_sky()
        • ring_radial_scale()
        • ring_sky_from_plane()
        • star_record_from_params()
        • SimSceneValidationError
        • build_nav_params()
        • iter_scene_paths()
        • load_sim_scene()
        • save_sim_scene()
        • scene_class_for_path()
        • validate_sim_params()
        • SimSceneValidationError
        • navigator_matched_psf()
        • resolve_extfov_margin()
        • resolve_sim_inst_config()
        • derive_effect_seed()
        • stable_param_seed()
        • render_scene_png()
        • save_png()
        • stretch_to_uint8()
        • ArtifactIncidence
          • ArtifactIncidence.missing_line_fraction
          • ArtifactIncidence.spike_fraction
          • ArtifactIncidence.spike_positions_vu
        • measure_artifact_incidence()
        • split_stationary_spikes()
        • CohortSupport
          • CohortSupport.LIMITED
          • CohortSupport.SUPPORTED
          • CohortSupport.UNSUPPORTED
        • W1Result
          • W1Result.n_real
          • W1Result.n_sim
          • W1Result.real_iqr
          • W1Result.usable
          • W1Result.w1
          • W1Result.w1_normalized
        • cohort_support()
        • w1_between_densities()
        • w1_divergence()
        • DynamicRangeStats
          • DynamicRangeStats.frac_near_floor
          • DynamicRangeStats.frac_saturated
          • DynamicRangeStats.percentiles
        • frame_dynamic_range()
        • stratify_by_exposure()
        • SkyPatch
          • SkyPatch.mean
          • SkyPatch.sigma
          • SkyPatch.size
          • SkyPatch.u0
          • SkyPatch.v0
        • find_uniform_patches()
        • paired_difference_sigma()
        • radial_power_spectrum()
        • edge_normal_profiles()
        • ee_radius()
        • encircled_energy()
        • profile_rise_width()
        • radial_profile()
      • spindoctor.ui
        • ManualNavDialog
          • ManualNavDialog.run_modal()
        • LibraryEntryDraft
          • LibraryEntryDraft.camera
          • LibraryEntryDraft.exposure_time_sec
          • LibraryEntryDraft.filter_combo
          • LibraryEntryDraft.image_datetime_utc
          • LibraryEntryDraft.image_id
          • LibraryEntryDraft.mission
        • build_sidecar_yaml()
        • compute_image_url()
        • infer_obs_metadata()
        • spindoctor.ui.mosaic_viewer
          • Normalized-unit conventions per kind
          • Coordinate system
          • ProjectionKind
            • ProjectionKind.MOLLWEIDE
            • ProjectionKind.POLAR_N
            • ProjectionKind.POLAR_S
            • ProjectionKind.RECT
            • ProjectionKind.SPHERE_3D
          • ProjectionParams
            • ProjectionParams.cx
            • ProjectionParams.cy
            • ProjectionParams.kind
            • ProjectionParams.pitch_deg
            • ProjectionParams.scale
            • ProjectionParams.yaw_deg
          • display_to_lonlat()
          • fit_scale()
          • lonlat_to_display()
          • sphere_pixel_to_lonlat()
          • render_to_image()
          • graticule_label_anchors()
          • graticule_polylines()
      • spindoctor.navigate_image_files
        • build_metadata_from_result()
        • build_timing_section()
        • navigate_image_files()
        • write_summary_png()
    • Contributing
      • Contributing to SpinDoctor
        • Code of Conduct
        • Getting Started
        • Development Workflow
        • Coding Standards
        • Pull Request Process
        • Testing
        • Documentation
        • Reporting Issues
  • Simulator Performance and Sensitivity Report
    • Purpose and scope
    • Methodology
    • Running the sweeps
    • Realism match against real cohorts
      • Artifact-incidence defaults and provenance
      • Cassini match quality
      • The other instruments
      • Technique diagnostics (read-only)
      • Known gaps
    • Example scenes
    • Algorithmic-invariant recovery
    • Single-variable sensitivity
      • Read-noise sweep
      • Phase-angle sweep
      • Body-size (range) sweep
    • Offset accuracy by technique
    • Star-field centroiding: dim vs bright
    • Per-technique accuracy across SNR and injected offset
    • Irregular-body navigation
      • Shape mismatch vs irregularity
      • Pose disagreement
    • Camera-roll sensitivity and roll / translation separability
    • Small-body navigation floor
    • I/F-calibrated vs raw-DN navigation
    • Model-mismatch sensitivity
    • Summary
SpinDoctor
  • User Guide
  • Navigation Statistics
  • View page source

Navigation Statistics

The statistics system turns the per-image metadata JSON files written by the navigation pipeline into a local SQLite database and a deterministic report (Markdown text plus PNG charts). It is the standing quality check on a production run: success and failure rates, which techniques and models carry the load, offset distributions, how well the techniques agree with one another, and whether the confidence tiers behave as designed.

Two commands cooperate over the database and are cron-friendly (each is a single non-interactive invocation):

# Ingest one or more navigation-results roots into ./nav_stats.sqlite3
sd_stats_ingest /data/nav-offset-results --db nav_stats.sqlite3

# Generate report.md + charts for any slice of the database
sd_stats_report --db nav_stats.sqlite3 --output-dir stats_report
sd_stats_report --db nav_stats.sqlite3 --instrument coiss \
    --start-date 2005-03-01 --end-date 2005-03-01 --output-dir day_report

Ingestion

sd_stats_ingest ROOT [ROOT ...] [--db PATH] scans each root recursively for *_metadata.json files (the documents navigate_image_files() writes under nav_results_root) and loads them into the database. Roots may be local directories or any URL the project’s filecache layer accepts, so cloud-hosted results ingest the same way as local ones.

Ingestion is idempotent: the database holds one row per image (keyed by image name), and re-ingesting the same or an updated metadata file replaces that image’s row and its child rows rather than duplicating them. Malformed files are logged and skipped; the exit status is nonzero only when nothing at all was ingested.

Every ingestible document must carry observation.image_name and observation.instrument (the pipeline records both in every metadata document it writes). A document missing either field is logged, skipped, and counted as an error, exactly like a file that fails to parse.

The database is disposable, and there is no schema migration: opening a database whose images table does not match the current column set raises an error naming the mismatched columns. The remedy is always the same – delete the database file and re-run sd_stats_ingest (the source of truth is the metadata documents, so nothing is lost).

Database schema

The database is plain SQLite; opening it directly (sqlite3 command-line shell, Python’s sqlite3 module, pandas, a GUI browser) is a supported way to answer questions the standard report does not. Three tables hold the data; techniques and feature_sources reference images by image_name with ON DELETE CASCADE, and re-ingesting an image replaces its row and children.

images — one row per image, keyed by image_name:

Column

Type

Meaning

image_name

TEXT

Image filename (primary key), e.g. N1454725799_1_CALIB.IMG.

instrument

TEXT

coiss / vgiss / gossi / nhlorri / sim, from the metadata document’s observation.instrument field (required; a document without it is skipped as an ingest error).

camera

TEXT

The camera that took the image (NAC / WAC / SSI / LORRI), from the metadata document’s observation.camera field. Offset statistics group by this: pointing error belongs to the camera, not the spacecraft. NULL when the document carries no camera (results navigated before the field existed); it is never inferred from the image name.

image_path

TEXT

Absolute path of the source image at navigate time.

image_et

REAL

Observation midtime, TDB seconds past J2000. Taken from the navigation provenance, or — for an image that never loaded, which has no provenance — from the observation.image_et the navigator read out of the PDS3 index. An image whose navigation died for want of a SPICE kernel is therefore still placed in time.

image_date

TEXT

UTC calendar date YYYY-MM-DD derived from image_et; drives the --start-date / --end-date report filters.

status

TEXT

Navigation outcome: success, failed, conflicted, or error (the last from image-load failures); unknown when the metadata document carries no status at all.

status_reason

TEXT

Outcome reason: successes hold ok or rank_1_only; failures hold the failure reason (e.g. no_features_extracted, missing_spice_data). NULL only when the metadata carries neither status_reason nor status_error.

offset_dv, offset_du

REAL

Fused pointing offset in pixels (V then U); NULL when navigation found no offset.

sigma_dv, sigma_du

REAL

Per-axis 1-sigma uncertainty of the fused offset, pixels.

confidence

REAL

Fused confidence in [0, 1].

confidence_rank

TEXT

Confidence tier label assigned by the ensemble.

n_techniques

INTEGER

Number of per-technique results recorded for the image.

excluded_from_consensus

TEXT

JSON list of technique names the ensemble excluded as outliers ([] when none).

image_class

TEXT

Image-classifier verdict (e.g. clean).

noise_sigma

REAL

Image-classifier noise estimate.

image_shape_v, image_shape_u

INTEGER

Pixel dimensions of the image data (V then U), from the metadata document’s observation.image_shape field; NULL when the image never loaded (e.g. a read error).

run_start, run_end

TEXT

UTC ISO8601 run start and end of the navigation of this image, from the metadata document’s timing section; start is captured before the image load and end after navigation (or at error time).

elapsed_s

REAL

Wall-clock seconds between run_start and run_end.

config_hash

TEXT

sha256 of the fully-resolved configuration used for the run.

git_sha

TEXT

Short git SHA of the navigating code (-dirty suffix when the tree had uncommitted changes).

pipeline_run

TEXT

UTC ISO8601 timestamp of the navigation run.

source_file

TEXT

Path or URL of the ingested metadata document.

techniques — one row per technique result per image:

Column

Type

Meaning

image_name

TEXT

Foreign key into images.

technique_name

TEXT

Technique class name (e.g. BodyLimbNav, StarUniqueMatchNav).

offset_dv, offset_du

REAL

The technique’s own offset estimate, pixels.

sigma_dv, sigma_du

REAL

Per-axis 1-sigma from the technique’s covariance.

confidence

REAL

The technique’s calibrated confidence in [0, 1].

spurious

INTEGER

1 when the technique flagged its own result as spurious.

at_edge

INTEGER

1 when the fit landed at the edge of its search space.

source_names

TEXT

JSON list of body / ring / catalog names the technique used.

diagnostics

TEXT

The technique’s full diagnostics dataclass as a JSON object.

feature_sources — per image, feature counts grouped by source:

Column

Type

Meaning

image_name

TEXT

Foreign key into images.

feature_type

TEXT

Feature type (e.g. BODY_DISC, STAR, RING_EDGE).

source_model

TEXT

NavModel family that produced the features (body, rings, stars).

source_name

TEXT

Body, ring, or catalog name (e.g. IAPETUS, UCAC4).

n_features

INTEGER

Features of this type/source extracted for the image.

n_gated

INTEGER

How many of them the reliability gate removed.

Indexes exist on images(image_date), images(instrument), and the image_name foreign keys.

Querying the database directly

Success rate per instrument, from the sqlite3 shell:

SELECT instrument,
       COUNT(*) AS images,
       AVG(status = 'success') AS success_rate
FROM images
GROUP BY instrument;

The ten largest fused offsets, with their confidence tier:

SELECT image_name, offset_dv, offset_du, confidence_rank
FROM images
WHERE status = 'success'
ORDER BY MAX(ABS(offset_dv), ABS(offset_du)) DESC
LIMIT 10;

JSON columns unpack with SQLite’s built-in JSON functions – for example, counting how often each technique was excluded from the consensus:

SELECT excluded.value AS technique, COUNT(*) AS images
FROM images, json_each(images.excluded_from_consensus) AS excluded
GROUP BY excluded.value
ORDER BY COUNT(*) DESC;

The same database loads straight into pandas:

import pandas as pd
import sqlite3

conn = sqlite3.connect('nav_stats.sqlite3')
images = pd.read_sql_query('SELECT * FROM images', conn)
per_technique = pd.read_sql_query(
    'SELECT t.*, i.instrument, i.image_date '
    'FROM techniques t JOIN images i USING (image_name)',
    conn,
)
# Median per-technique confidence by instrument:
print(per_technique.groupby(['instrument', 'technique_name'])['confidence'].median())

Reporting

sd_stats_report [--db PATH] [--output-dir DIR] [--instrument NAME] [--start-date YYYY-MM-DD] [--end-date YYYY-MM-DD] [--min-image NAME] [--max-image NAME] [--top-n N] [--filelists] [--suspect-fraction F] [--csv] writes report.md and its charts into the output directory. All filters combine and apply to every section; dates are inclusive UTC image dates, so a single day’s run is --start-date D --end-date D. --min-image / --max-image bound the numeric portion of the image name (the first digit run in the basename, so --min-image N1454725799 and --min-image 1454725799 are equivalent); both bounds are inclusive and either may be given alone. The same inputs always produce the same numbers and the same charts.

Three options control drill-down output:

  • --top-n N makes each categorical section (failure reasons, failure taxonomy, ensemble exclusions, suspect offsets) list up to N example image names per category and instrument, caps the suspect-offset and worst-BOTSIM-pair tables at N rows, and lists the N slowest images.

  • --filelists writes one plain-text file per category and instrument (one image name per line, the full list rather than the top N) into the filelists/ subdirectory of the output directory, ready to feed back into re-runs and triage scripts.

  • --csv writes images.csv next to report.md: one row per image with every images column plus per-image technique and feature-source counts, for pandas or spreadsheet analysis.

The first two write image names rather than file names — N1454725799 rather than N1454725799_1_CALIB.IMG — because that is the token the datasets’ --image-filelist option selects on. The filelists are directly consumable by it: one name per line, with a leading # comment naming the category.

Every image count in the report carries its percentage — 5 (3.2%). Counts are broken down by instrument: a table of counts gets one column per instrument plus a total column, where an instrument column’s percentage is of that instrument’s images and the total column’s is of all selected images, so each column sums to 100% on its own. Tables of statistics rather than counts (offsets, run time, per-body shares, cross-technique agreement) carry an instrument column instead, a total being meaningless for a mean or a standard deviation. Bar charts are stacked, one segment per instrument, with a fixed color per instrument across every chart.

The report contains:

  • Images selected — per instrument: how many images, the first and last image, and the first and last available date. Image numbers only compare within one instrument, so the bounds are never pooled across instruments. The date bounds are found independently of the image ordering, so a single image with no recorded epoch at either end of the number range cannot hide the instrument’s real time span.

  • Success / failure counts with a breakdown of failure reasons. The reason table carries each reason’s status, so errors (SPICE-related or not) are visible alongside outright navigation failures.

  • Failure taxonomy by image content — failed images classified from their recorded feature inventory (stars-only, single-body, multi-body, rings-only, body+rings, no-features), with a per-category failure-reason breakdown and a per-body table of how often each named body appears in failed versus successful images (a body with a high failure share points at a modeling problem for that body).

  • Technique usage — the images each technique ran on, plus a per- technique, per-instrument detail table of non-spurious runs and mean confidence.

  • Model and source usage — which bodies, rings, and star catalogs appeared, in how many images, and how many of their features survived the reliability gate.

  • Offset statistics — mean, median, standard deviation, minimum, and maximum of the fused V and U offsets over successful images, grouped by camera, with one histogram per camera, plus the same statistics grouped by (instrument, camera, image size). Distributions are never pooled across cameras: one Cassini WAC pixel is ten NAC pixels, so a pooled distribution would describe neither camera.

  • Suspect offsets — successful images whose fused offset reaches at least --suspect-fraction (default 0.9) of the instrument’s per-axis maximum expected pointing offset (the configured extfov_margin_vu search margin; for Cassini ISS the NAC/WAC margin chosen from the image name) on either axis. An offset pinned near the search boundary may be a correlation artifact, so these images deserve operator review. When a limit cannot be resolved for an image (unknown instrument, no recorded image shape), the report says so rather than silently skipping it.

  • BOTSIM pair consistency (Cassini ISS) — BOTSIM observations shutter the NAC and WAC simultaneously and the image names share one spacecraft-clock count. One WAC pixel is ten NAC pixels, so a consistent pair satisfies NAC offset = 10 x WAC offset per axis; the section reports the count, median, and 95th percentile of the NAC - 10 x WAC residuals over pairs where both frames navigated successfully, and (with --top-n) the worst pairs. This is an end-to-end accuracy check that needs no ground truth.

  • Cross-technique agreement — for every technique pair, the median and 95th-percentile Euclidean distance between their offsets on images where both produced non-spurious results.

  • Confidence calibration — per confidence tier, the distribution of each image’s maximum cross-technique disagreement. The tiers always read high / medium / low / failed / conflicted, so a tier with no images reads as an explicit zero rather than a missing row. Without ground truth, agreement between independent techniques is the production proxy for accuracy (the calibrated anchor is the simulation campaign; see Confidence Calibration (Shared Sigmoid-of-Linear Combination)): a healthy pipeline shows high-tier images agreeing tightly and disagreement growing toward the low tier.

  • Ensemble outlier exclusions — how often the ensemble excluded a technique from the consensus, and which techniques.

  • Run-time statistics — per instrument (and pooled, when more than one instrument is selected): minimum, maximum, mean, median, standard deviation, and total of the per-image wall-clock run times, a run-time histogram, and (with --top-n) the slowest images. The section is omitted when no ingested document carries timing data.

Previous Next

© Copyright 2025, SETI Institute.

Built with Sphinx using a theme provided by Read the Docs.