Overview
Purpose
The Planetary Data System (PDS) distributes planetary science data as
collections (also called volumes). Alongside the data products themselves,
each collection ships metadata tables: flat ASCII tables in which every row
describes one data product (for example, one image), together with a PDS3
label that documents the columns. rms-metadata-tools (the importable
package metadata_tools) generates these tables and labels for the PDS
Ring-Moon Systems Node at the SETI Institute.
The tables feed two consumers: the OPUS search service, which indexes their columns so users can search a collection by observation time, geometry, instrument settings, and so on; and ordinary PDS users, who download the supplemental tables directly.
The package generates three kinds of table, described below. They are the distinguishing feature of the tool: rather than hand-editing tables, you describe a collection once (its label template and a small configuration module) and the tool produces consistent, label-validated output for an entire volume tree.
Table kinds
The three table kinds are generated in this order, because each builds on the output of the previous one.
- Index tables (supplemental index files)
Extra columns added to a project’s corrected index file, drawn from each data product’s PDS3 label or derived from label quantities. Index tables have the same structure as the corrected index files they supplement, so they can be merged back in when a host’s
from_indexmethod reads a collection. Index tables are produced byprocess_index().- Geometry tables
Geometric quantities (positions, angles, ranges, and resolutions for bodies, rings, the sky, and the Sun) computed from SPICE through the
oopslibrary, using pointing taken from the index table or the PDS3 label. Each observation yields a summary table (one row per observation) and, optionally, a detailed table (one row per spatial subregion, or “tile”). Geometry tables are produced byprocess_tables().- Cumulative tables
Concatenations of the per-volume index and geometry tables across a whole volume tree, with a matching label. Cumulative tables are produced by
create_cumulative_indexes().
Workflow
For a single collection the workflow is a three-stage pipeline. Each stage is a command-line program that you run from inside the collection’s host directory (see Installation and setup):
flowchart TD
L[PDS3 data labels<br/>+ corrected index file] --> I[Stage 1: index<br/>HOST_index.py]
I --> IT[(Supplemental<br/>index table + label)]
IT --> G[Stage 2: geometry<br/>HOST_geometry.py]
SPICE[SPICE kernels<br/>via oops] --> G
G --> GT[(Geometry tables<br/>summary/detailed + labels)]
IT --> C[Stage 3: cumulative<br/>HOST_cumulative.py]
GT --> C
C --> CT[(Cumulative tables + labels)]
Index reads each data product’s PDS3 label and writes a supplemental index table for every volume in the tree.
Geometry reads the supplemental index table for each volume, computes the geometry backplanes with
oops, and writes the summary (and optionally detailed) geometry tables.Cumulative walks the whole tree and concatenates the per-volume index and geometry tables into cumulative tables.
Each stage writes a .tab (or .csv for the inventory) data file plus a
.lbl PDS3 label generated from the host’s label template.
For how each program is invoked and what options it accepts, see The index program, The geometry program, and The cumulative program. For distributing the work across many machines on Google Cloud, see Distributed (cloud) runs.