sean.theinformed.org / training / orbit / guide

Orbit and upper-atmosphere studies

Seven efforts ran on a supercomputer this week, all reading one public record of satellite orbits. This guide builds up what they measure and how, from the record itself to the checks each run had to pass.

1. The question and why it matters

The United States publishes the orbit of every tracked object in a public catalog: 232.7 million records for 68,900 objects since 1959, several a day for each object now. Operators, researchers and our own sites use it to say when a satellite changed its orbit, how close two objects passed, and how likely a collision was. The catalog does not say how wrong each record is.

The seven efforts ask four questions of that one record.

The answers matter outside this site. A collision chance computed with an error model that is too narrow in its tails will call a pass safe that is not. A detector that counts its own noise as maneuvers misstates what operators do in orbit.

2. The basics

An element set

Each record in the catalog is an element set: seven numbers that describe an orbit at one instant, called the epoch. Five give the shape and orientation of the orbit and where the object is on it; the mean motion gives revolutions per day; and a drag term says how fast the air slows the object. The catalog fits a new set whenever its radars and telescopes have enough new observations.

One element setepochthe instant it describesinclinationtilt of the orbit planenodewhere it crosses the equatoreccentricityhow stretchedargument of perigeewhere the low point ismean anomalywhere the object ismean motionrevolutions per daydrag termhow fast air slows itSGP4the fixed propagation formulasposition and velocityat any time you ask forerror vs. true orbitdays from the epoch0
Eight numbers in, a position out; the further from the epoch, the larger the error.

What SGP4 does

SGP4 is the set of formulas that turns an element set into a position and velocity at any time. The elements are fitted for SGP4 and mean little without it: they are averages that absorb the pull of Earth's bulge and the drag the formulas model. A day from its epoch, a typical set puts a low-orbit object within about a kilometer of where it is, most of that along the direction of travel.

One quantity the efforts read is the semi-major axis, half the long axis of the orbit, which sets its size. It can be computed straight from the mean motion, or recovered through SGP4's own initialization. The two differ by meters, and the difference follows the orbit's tilt.

A change, and the catalog's own noise

A burn moves the orbit in a step: the semi-major axis jumps after an along-track burn, the tilt after a cross-track one. Drag makes a slow slope. A detector compares the size of a step with the object's own scatter from set to set and flags steps that stand well clear of it. Every fit the catalog makes adds scatter of its own, and when that scatter has occasional large values the detector flags steps that never happened. Debris and spent stages cannot fire engines, so their flag rate measures false alarms directly. Payloads, which can, should be flagged far more often.

Drag the slider.

Each orange line is a flag; with heavy-tailed noise, single bad sets raise flags where nothing changed.

Heavy-tailed errors

The usual model of measurement error is the normal (bell-shaped) spread: 68% of errors within one standard deviation, 95% within two. Compared with orbits known to the centimeter, the catalog's errors do not behave that way. A normal spread sized to its middle holds 59% to 64% of the errors within one sigma and only 78% to 87% within two. The rest sit far out.

A Student-t spread has one extra number, the degrees of freedom ν, that sets how heavy the tails are. Large ν is the normal spread; small ν puts more errors far out. The catalog's errors fit ν of about 1.9. Below 2 the spread has no finite variance, so its width is given as a scale: half of all errors fall within 0.674 scales, as half of normal errors fall within 0.674 standard deviations.

within 1within 2beyond 4
normal
Student-t
catalog, measured0.59 to 0.640.78 to 0.87-
Both curves hold the same middle half; as ν falls, the t moves errors from the shoulders into the far tails.

What "generalize" means here

None of these efforts trains a neural network. They are methods built from physics and statistics, and each still has constants fitted to data: a factor that turns set-to-set scatter into true error, the degrees of freedom of a tail, the score at which the cadence detector declares a train of burns. A constant fitted on some data is trusted only after it holds on data it was not fitted on. Here that means three things.

ObjectsSplit by catalog number; fit on one half, check on the other.Fleetsnavigation118 objectslaser spheres11 objectsStarlink233 objectsStarlink truth is the operator's own prediction, so it is kept apart.ErasSep 2023Sep 2024Sep 2025Sep 2026Oct 2025 changeA factor measured in one September is checked on the others.
Every fitted constant is checked on objects, fleets or years it was not fitted on.

Each effort also runs a null: the same analysis on data where the effect has been destroyed, such as orbits shuffled between objects or storm dates moved at random. A result that the null reproduces comes from the method. Several efforts also plant a known signal and measure how much of it comes back.

3. The data

The archive holds every public element set since 1959 together with the hour each one reached us: 232.7 million sets, 68,900 objects, 15.9 GB. Before 2026 it was filled from yearly bulk files. January to July 2026 was rebuilt from the catalog's per-object history service, since the 2026 bulk file arrives in early 2027. Since 7 August 2026 an hourly capture adds new sets as they appear and holds about 99.4% of what the catalog publishes.

Six other sources join it, by catalog number or by time.

precise orbits148 satellites, cm-leveloperator positionsStarlink, from SpaceXconjunction messages3,944 since late Augustdecay dates34,089 objectsspace weatherKp since 1932, F10.7object tabletype, launch, sizeelement-set archive232.7 million sets68,900 objects, 15.9 GB
Six sources join the archive by catalog number or by time; the archive is the only one that covers 1959 to now.

Where the record has seams

Sep 25Jan 26May 26Oct 26navigation sets twice as often under an hour apartJan to Jul 2026 rebuilt from the history servicehourly capture from 7 Aug20 Sep: detector read the live archive23 Sep: object table saved1-2 Oct: 35,455 objects gain a type2 Oct: pull every hour, was every other3 Oct: 15.9 GB copy sent to the cluster
Most changes in how the archive was filled sit in the last thirteen months, where the runs read most.

The cluster copy was taken at 00:33 UTC on 3 October 2026, sent once, and read in place by every later package.

4. The methods

Nothing here is a trained network. Each effort is a fixed computation over the archive: propagate orbits with SGP4, fit lines and steps, compare with truth, count. What makes them supercomputer jobs is scale: every object, every set, every day, with thousands of resampled and shuffled copies for the nulls. Each diagram reads top to bottom, with the size of the data at each stage.

Element sets232.7 million sets of 68,898 objects; the objecttable of 23 SeptemberPlan1,024 shards of consecutive catalog numbers,balanced by row countPer objectIntervals between sets; the step rule on tworeadings of orbit size, from mean motion and fromSGP4; a flag must be corroborated by tilt or shapeNull20 recounts with each object given another object'sinclinationPer-object counts61,377 admitted objects; flags per object on eachaxis and in each half of its recordLinesControl counts reproduced; payload over debris flagrate at least 10; lost corroborations against thenull band
One rule, two readings of orbit size, counted for every object.
Close passes and sets1,048,697 passes under 10 km over 1,005 days,959,001 of them in low orbit; 52.9 million sets of35,487 objectsPer object-month655,368 fits of set-to-set scatter in threedirections, up to 400 pairs of sets eachScale to truthMultiply by a class factor measured on 122satellites with precise orbitsPer passAdd both objects' error ellipsoids at closestapproach; integrate over discs of 1 km, 500 m and100 m under four error modelsChancesRound normal, full normal, Student-t and drawnerrors for every passLinesCoverage of truth; held-out t coverage; shuffledpairs; round case and geometry against the site
Each pass gets its own error ellipse; four error models run side by side.
WindowsRecall: 288 objects, 3 years, 253 grid cells,195,912 planted histories. Belt: 1,929 objects,66,153 one-year windowsSeriesOne median per day; five series in m/s of equivalentimpulse; tides of Sun and Moon removedLocal stepsA step fitted every quarter day from seven days eachsideTwo filter banksCombs over burn periods of 5 to 120 days, coherentand jittered; scaled by 200 or 100 noise series perwindowScore per windowDeclared when it reaches level k with three or moreteeth; k from burn-free ring objects at 1%LinesRecall gain over the step detector; false alarms;shuffled periods; period and size recovered
A matched filter looks for steps repeated at one period, then the level is set on objects that never burn.
Element sets232,671,878 sets; 2,453,650 object-quartersPer object-quarter1,689,846 fits: set-to-set scale and growth with agein three directions, and a t tailCalibrateClass factors and degrees of freedom from 148satellites with precise orbits in four SeptembersAtlasError scale for any object, quarter and set age:factor times scatter times age to a powerLinesHeld-out coverage per class; planted tails anddoubled errors; factors stable across years;shuffled truth and labels
Scatter between successive sets, scaled to true error by satellites whose orbits are known exactly.
Passive objects26,111 debris and rocket bodies with sets from 2004to 2026; 16,956 usable below 1,000 kmSpans21,776,019 intervals between sets; the decay eachone showsModelReference atmosphere density integrated along eachspan's orbitFitOne density ratio per 50 km shell per day, 16 shellsfrom 200 km; 200 bootstrap draws; a planted signal;20 scramblesDaily recordMeasured over modeled density, by shell and day,with its bandLinesQuiet-day agreement; storm rise above the quietspread; plant recovered; shuffled storms; scrambledshells
Debris slows faster when the air is thicker; the ratio to the model is the measurement.
Catalog and messagesEvery object, 1 Jan 2024 to 2 Oct 2026; 553 messagedpairs on 37 daysEvery 60 secondsSGP4 for every object; a k-d tree finds pairs within520 km in low orbit and 675 km aboveRefineClosest approach to 0.05 s; keep passes under 10 kmTwo runsMessages matched or explained (3,180 tasks); medium,stretched and belt orbits against a shuffled catalogevery day (4,036 tasks)Lines97% of messaged pairs found; moved messages findalmost none; rates within 5% of the shuffled copywhere chance rules
Every pair, every minute, with nothing skipped to save time.

5. How a run is built

In place of a training schedule, each effort has a run schema: how the work is cut into pieces, how the pieces spread across one node, how a stopped job picks up again, and what it costs.

One node, many workers

One CPU node: 128 cores, 256 GB124 workers, one per core; 4 cores coordinatenode memoryarchive copied in 11 swork file systemoutputs, DONE markersBilled whole: one hour costs 128 core-hours.A100 node: four 40 GB graphics cards, 512 GB.
Each job takes one whole node and runs one worker per core.

A job asks for one whole node. Most runs used CPU nodes with 128 cores (AMD EPYC 7713) and 256 GB of memory. The detector's timing job ran on a node that also carries four NVIDIA A100 graphics processors with 40 GB each and 512 GB of memory; it ran a 1-in-25 sample on the graphics processors and on the CPU and compared them. The full detector run then went to a CPU node. The work is millions of small fits, one per object or window, and spreads well over 124 Python workers.

Shards and DONE markers

A plan step cuts the work into shards: 1,024 runs of consecutive catalog numbers balanced by row count for the detector, 2,048 for the thermosphere study, one per object or day for the others. Workers take shards in turn. Each finished shard writes its output and a small DONE marker. A job that stops for any reason is submitted again, and finished shards are skipped.

1,024 shards waiting.

Workers clear the shards; stop the job and resubmit it, and the finished ones are skipped.

A timing job first, the run held behind it

Every package submits two jobs at once. A timing job on the 30-minute debug queue runs every step on a small sample and prints the wall hours and core-hours the full run needs. The production run is submitted with a dependency, so it starts only if the timing job finishes cleanly. If the estimate is far above the planned figure, the held run is resized before it starts, which takes the operator's word.

Step through the eight stages from a package at home to a scored result.

The environment

Each package builds a Python virtual environment on the center's own Python 3.11 module, with the numerical libraries pinned to versions that module supports, and runs synthetic checks before any job is queued. The first submissions built their environment against an interpreter found on the login node and missing on the compute nodes; they failed in 7 to 42 seconds. Building on the center's module fixed every package at once. No container image was needed.

What it cost

A node-hour is one hour on one whole node, billed as 128 core-hours.

Repeated-burn detector: 4.61 node-hours over 6 jobsRepeated-burn detector4.61Full-depth screen against official close-approach warnings: 2.41 node-hours over 4 jobsFull-depth screen against official close-approach warnings2.41The catalog as an upper-atmosphere sensor: 1.40 node-hours over 3 jobsThe catalog as an upper-atmosphere sensor1.40Orbit-change detector, rerun on a better height reading: 1.29 node-hours over 6 jobsOrbit-change detector, rerun on a better height reading1.29Close-pass rates beyond low orbit: 0.76 node-hours over 1 jobsClose-pass rates beyond low orbit0.76Error atlas of the public catalog: 0.25 node-hours over 3 jobsError atlas of the public catalog0.25Close-pass chances with error ellipses: 0.21 node-hours over 6 jobsClose-pass chances with error ellipses0.2110.9 node-hours in the last 7 days, 1,395 core-hours
Node-hours per study in the last 7 days, timing tests and transfers included; the largest is the repeated-burn detector at 4.61 of 10.9. The status page shows the same figures.

The figures are what the scheduler charged for each job in the last 7 days, read from the status page's data file when this page was built. The two screen runs were still running then, so their bars hold only the time used so far.

6. Evaluation

Each effort's study plan sets its pass lines, its nulls and the planted signals before the job is queued. The error atlas is the exception: its lines were written after a one-year slice of the same truth had been read, so its results are labeled provisional.

Orbit-change detector, SGP4 axis

  • met Payloads flagged at least 10 times as often as passive objects: 18.212.
  • read Corroborations lost on the new axis: 89 of 3,760 (2.37%), above the shuffled band of 0.29% to 0.59%.
  • not met Published counts reproduced: 22 of 36 inside their ranges; 15 objects changed type between the read and the table.
  • not met Axis changes counts more than the halves of a record differ: ratio 0.085 for debris, 0.040 for payloads.

Close-pass chances

  • not met Normal spread holds 90% within two sigma: 0.812 radial, 0.781 along track, 0.865 cross track.
  • met Student-t with 1.87 degrees of freedom holds the held-out half, both ways round.
  • met Shuffled objects: 1 pair under 1 km against a summed chance of 0.479 (interval 0.03 to 5.57).
  • met Round case matches the site's figure to 1.3e-06; 99.89% of passes reproduce their miss within 10 m.

Cadence detector

  • not met Finds at least 0.30 more of the planted 50 mm/s cross-track burns than the step detector: +0.0027.
  • met Burn-free ring windows declaring a cadence at most 5%: 0.0111.
  • met Period survives the shuffle in at most 10% of planted trains: 0.0182.
  • not met The same on real payload windows: 0.1228.
  • not met Period within 10% in at least 80% of trains: 0.7610.
  • met Recovered over planted impulse within 0.80 to 1.25: 0.9741.

Error atlas (provisional)

  • met Held-out Student-t coverage, all classes pooled: 0.915 to 0.980 within two scales.
  • not met The same for each class alone: medium, geosynchronous and low orbit each miss one value.
  • met Planted tails and scales recovered; class factors differ more than scrambled labels give; the close-pass fit reproduced exactly.
  • not met A doubled error shows in every direction; class factors stable across Septembers; an object's own scatter predicts its own error.

Thermosphere density

  • met Quiet days within a factor of 1.5 of the model below 600 km and 2 above: 0.874 to 0.999 of shell-days.
  • not met Storm rise at least 3 times the quiet spread in five shells from 250 to 650 km: 1.76 to 2.33 times.
  • not met Planted factor of 1.5 recovered in every shell from 250 to 600 km: 0.791 at 250 to 300 km.
  • met Shuffled storm dates and objects scrambled across shells both fall short of the real response.
  • read Ratio to the model alone: rises 1.074 to 1.144 on storm days from 200 to 600 km, above every shuffled 99th percentile; inside it above 650 km.

Full-depth close-pass screen (two efforts)

  • pending Timing job done in 30 minutes; the conjunction-message run and the deep-orbit run are waiting.
Each line as it was set before its run, with what the run returned.

What the nulls showed

What a null result means

A line that is not met is a measurement. The cadence detector, held to the false-alarm rate of burn-free ring objects, finds 0.62% of planted 50 mm/s cross-track burns, so it cannot carry the retirement test our first paper needs. The detector rerun shows the choice of orbit-size reading moves per-object counts by a tenth of the spread between halves of one record. Each such line removes a use the method cannot support and names the next measurement, listed in the notebook entries.

7. Reading the status page and the replay

The status page shows where each effort stands now and how it got there.

1. summary: jobs by state, time of last pull2. a card per effort: state, last result, node-hours3. a timeline: one bar per job, queued to finished4. the replay: play, pause, step through progress and events
The status page reads top to bottom: summary, cards, timeline, then the replay.

The research notebook holds the full record of each effort, one dated entry per design, run, result and review. The about page has the short form of this guide.

8. Glossary

Bootstrap
Recomputing a figure on many resamples of the data, here whole objects, to see how much it moves.
Close pass
Two objects coming within 10 km of each other; the miss distance is at closest approach.
Conjunction message
A warning the catalog's operator issues when it predicts a close pass.
Core-hour, node-hour
One core for an hour; one whole node of 128 cores for an hour, or 128 core-hours.
Corroboration
A second channel, tilt or shape of the orbit, that moves at the same time as a flagged step in size.
Coverage
The share of true errors that fall inside a stated width, such as two scales.
Debug queue
A short queue for jobs of 30 minutes or less, used here for timing jobs.
Degrees of freedom (ν)
The Student-t parameter that sets tail weight; below 2 the spread has no finite variance.
DONE marker
A small file a shard writes when it finishes, so a resubmitted job skips it.
Element set
Eight numbers describing an orbit at one instant, published by the catalog.
Epoch
The instant an element set describes.
Held out
Data kept out of a fit and used only to check it.
Jeffreys interval
A confidence interval for a rate from a count of events, sound for small counts.
Matched filter
A detector that adds the data at the places a known pattern predicts, here a train of steps at one period.
Null
The same analysis on data with the effect destroyed, to show what the method makes on its own.
Passive object
Debris or a spent rocket stage, which cannot change its own orbit.
Planted signal
A known effect added to real data to measure how much of it the analysis recovers.
Scale
The width of a heavy-tailed spread, set so half of all errors fall within 0.674 of it.
Semi-major axis
Half the long axis of an orbit; it sets the orbit's size and period.
Separation
How many times more often the detector flags payloads than passive objects.
SGP4
The standard formulas that turn an element set into a position and velocity.
Shard
One piece of a run's work, done by one worker.
Shell
A 50 km layer of altitude used to group objects in the density study.
Student-t
A bell-shaped spread with heavier tails than the normal, set by its degrees of freedom.
Thermosphere
The upper atmosphere from about 90 to 1,000 km, whose density rises sharply in geomagnetic storms.
Timing job
A short job that runs a sample of the work and estimates what the full run will need.