Underworld

“The descent to Avernus is easy … but to retrace the step and come out to the upper air, this is the task, this the labour.” — Virgil, Aeneid VI.126–129

Reproducibility

Method and sources

How what we found is known, how sure each part is, and how to check it. Everything on this site is generated from the repository by code anyone can run: the compositions from their JSON, the simulations from their scripts, the figures and volumes from the runs that made them. Nothing is edited by hand, and every number carries its source or is marked as assumed.

Three reasons, each checked against something it could have failed, and each with its own limits

P2-03 · real and simulated

Correlating one image’s looks registers little of ground motion

Looks cut from one image share their overlapping spectrum; for whole images their correlation peaks at zero lag exactly, and for patch registration that is a strong pull toward zero, measured rather than proved. For speckle, motion shared by a patch leaves the image’s distribution unchanged.

Checked: the same block motion is recovered in full against a motionless twin, so the motion is in the data; a lone bright point’s envelope follows its motion (100 ± 2%); the real crop’s spectrum reproduces its own coherence to 10−9. Limit: measured for this estimator; others need their own measurement.

P2-04, P2-05 · modelled

In our model, the chamber’s imprint is far below the reach

Static relaxation with the lab’s elastic solver gives the chamber’s imprint on the ground’s motion (6.6 × 10−5 of it); the budget combines it with what P2-03 measured, allowing every advantage.

Checked: intact rock stays exactly still; the result changes 3.5% from a 1 m to a 0.5 m grid and not at all with domain size; Eshelby’s void with Okada’s point sources agrees within 40%; the detection threshold is confirmed by simulation (24 of 24 detected). Limit: one small chamber in uniform rock, quasi-static, at the regional microseism level; not a measurement at Giza during a pass.

P2-06, P2-07 · algebra, checked in code

The depth axis is a frequency axis

The steering wavenumber grows linearly with slow time, so the published focusing is a Fourier transform over time: 6.76 m of depth per hertz on the real geometry, whatever lies below.

Checked: the pipeline’s own code reproduces the rule to the grid, folds where predicted, and draws identical profiles over a chamber at 15 m, at 30 m and over rock; run whole (P2-07), its sections with and without the chamber differ by 10−8. Limit: the scale depends on the sound wavelength, which rescales it without changing the fit (a calibration ambiguity); the relation makes absolute depth uncalibrated, and does not by itself decide whether horizontal location or shape survive.

Graded claim by claim on the satellite page, which also says what would settle what is open. The full audit, with what is not established and the corrections adopted after an independent review, is METHOD_AUDIT.md; every run’s parameters, code and data are linked from its details panel on the satellite page.

Every figure says whether it is simulated, measured, claimed or planned

simulatedcomputed over a composition whose contents are knownmeasuredcomputed from a real acquisitionclaimedstated by others, placed as stated, never treated as foundplanneddesigned, not yet run

Every material property is sourced, derived from a source, or marked assumed

P and S wave speeds in m/s; ′ derived from a source by a stated ratio; * assumed. Densities are assumed throughout until an open source is found.

MaterialP waveS waveSource
Air3430gpg
Water1,450–1,5000gpg
Soil300–700100–300gpg
Dry sand and gravel (Giza surface layer)500–1,000100–500sharafeldin2019
Wet sand1,500–2,000400–600gpg
Saturated clay and shale1,100–2,500200–800gpg
Marl (Maadi Formation)2,000–3,000750–1,500gpg
Fractured, wet limestone and marl (Giza second layer)1,200–2,500520–1,090 ′sharafeldin2019
Mokattam limestone and dolomite (plateau bedrock)2,800–3,8001,550–2,110 ′sharafeldin2019
Limestone (textbook)3,500–6,0002,000–3,300gpg
Porous saturated sandstone2,000–3,500800–1,800gpg
Granite4,500–6,0002,500–3,300gpg
Limestone masonry (pyramid core)1,500–3,000 *700–1,600 *assumed
Rubble fill500–1,400 *200–700 *assumed

sharafeldin2019 Sharafeldin, S. M., Essa, K. S., Youssef, M. A. S., Karsli, H., Diab, Z. E., Sayil, N. (2019). Shallow geophysical techniques to investigate the groundwater table at the Great Pyramids of Giza, Egypt. Geoscientific Instrumentation, Methods and Data Systems 8, 29-43. doi:10.5194/gi-8-29-2019

gpg UBC Geophysical Inversion Facility. Seismic Velocities of Rocks and Various Materials. Geophysics for Practicing Geoscientists (GPG), table_seismic_velocity. link

gamal2024 Gamal, M. A., Abdelfattah, M., Maher, G. (2024). Investigation and monitoring of rotational landslides in El Mokkattam plateau Egypt, using integrated geological and geophysical techniques. Heliyon 10, e36545. doi:10.1016/j.heliyon.2024.e36545

Two communities, one vocabulary

Seismologists and radar engineers rarely read each other. The terms this site uses from each, in plain words; they are underlined where they appear.

ambient-noise interferometry seismic
Cross-correlating the background hum recorded at two sensors turns it into the wave that would travel from one to the other, so noise can stand in for a source.
azimuth radar
The direction along the satellite’s track, as opposed to range, the direction of the beam.
coherence radar
How similar two radar looks of the same ground are, from 0 to 1. Phase can only be compared where coherence is high.
crosshole seismic
A survey with sources down one borehole and receivers down another, so rays pass through the ground between them rather than skimming the surface.
Doppler frequency radar
The frequency shift of an echo from the satellite’s motion. In a focused image it maps to the time and direction from which a target was seen.
Doppler tomography radar
The claimed method: reading ground vibration from the differences between sub-apertures of one image and focusing it into depth. Published 2022, retracted 2026.
eikonal equation seismic
The high-frequency limit of the wave equation: it gives the earliest arrival time everywhere, and the rays are its steepest descent.
first break seismic
The first arrival of energy on a seismic record. Its timing, picked on every record, is the data of travel-time tomography.
Fisher information seismic · radar
How sharply the probability of the data changes with a parameter. Its inverse bounds the variance of any unbiased estimate (the Cramér–Rao bound), and for a small change it sets, to first order, how well any test can tell the two cases apart; for a finite change it bounds that with an explicit remainder.
full-waveform inversion seismic
Fitting whole seismic records, not just arrival times, by adjusting a model of the ground; each step is a gradient computed by propagating the misfit backwards in time.
geophone seismic
A ground-motion sensor recording velocity; three-component geophones record east, north and up.
imprint seismic · radar
The difference a buried chamber makes to how the surface moves as a wave passes: what any passive method would have to detect.
line of sight radar
The direction from the satellite to the ground; radar measures motion only along it.
look radar
An image formed from part of the Doppler band. In a dwell the band is time, so a look sees the ground as it was during a few seconds, and averages any motion over them.
microseism seismic
The ground’s constant hum from ocean swell, strongest between 0.1 and 0.3 Hz, felt everywhere on Earth as surface waves kilometres long.
P wave seismic
The compressional wave: the fastest, so the first to arrive. About 3,300 m/s in Giza limestone.
PML seismic
Perfectly matched layer: an absorbing boundary that lets simulated waves leave the grid without reflecting.
points per wavelength seismic
How many grid cells span the shortest wave simulated; too few and the waves travel at the wrong speed.
Rayleigh wave seismic
A wave that rolls along the ground surface, slightly slower than S, carrying most of a hammer blow’s energy. It samples to about a third of its wavelength in depth.
reverse-time migration seismic
Imaging by sending recorded waves backwards through a model of the ground and marking where they meet the waves sent forward from the source. It is the first step of full-waveform inversion.
S wave seismic
The shear wave: slower than P (about 1,800 m/s in the same rock) and unable to cross air or water.
SLC radar
Single-look complex image: a focused radar image that keeps amplitude and phase for every pixel.
speckle radar
The grainy texture of radar images of natural ground: many small scatterers in each cell interfering. Each Doppler bin holds an independent speckle pattern.
Spotlight Dwell radar
An ICEYE mode that keeps the beam on one scene for tens of seconds, here 24.5 s, far longer than a normal image needs.
sub-aperture radar
A part of the synthetic aperture processed on its own: a look from a slightly different direction and time.
synthetic aperture radar
The stretch of orbit over which echoes are combined into one image; a long aperture gives fine resolution along the track.
tomogram seismic · radar
A three-dimensional image of a property (here, wave speed) reconstructed from measurements taken around it.
travel-time tomography seismic
Finding the speed of the ground from how long first arrivals take between many sources and receivers, by tracing their rays and adjusting the speeds until the times fit.
virtual source seismic
A sensor made to act as a source: the correlation of its noise record with another sensor’s is the wave a real source there would have sent. Noise sources spread over the ground give it as minus the lag derivative of the correlation.
X-band radar
Radar near 9.6 GHz (3.1 cm wavelength). It enters dry limestone by centimetres, not metres.

Three commands rebuild everything

cd sim && uv sync && uv run pytest                     # the simulation and its checks (~40 s)
uv run python experiments/p2_07_whole_chain.py         # any run, e.g. the whole chain (~5 min)
uv run python -m katabasis.export                      # everything the site reads
cd ../web && npm ci && npm run build                   # the site, into docs/

The lab’s Python package keeps its first name, katabasis. Real-image steps need the ICEYE products, which are not in the repository; their acquisition records are, so everything else reruns anywhere.

One command runs a method over any area of a product and adds the result to the lab

cd sim
uv run --with scikit-image python -m katabasis.lab gated --name khafre --site giza --centre 0,0 --twin 101
uv run python -m katabasis.export                      # the run appears in the lab, under the satellite

gated runs the stricter gated reconstruction, the publicReplication and Verification of the Biondi Protocol (v1.8 standalone package, commit ac6f2500), unchanged but for its input paths, along east–west lines --step metres apart across a square of the site (--half-ew, --half-ns), each line placed through the product’s RPC over the site’s surface (--lines ns lays them north–south). Its fit scores are hung below the surface into a volume, unsmoothed and empty where nothing passed; --twin SEED runs the same raster on a motionless copy of the image, the control every picture needs, and --producttakes another pass, or a synthetic product. In the lab, every place a method was run shows at once, and the pass and the lines become choices: things a real feature should survive. Each run writes sim/results/lab_<name>/: its record (date, commit, the method’s source hash, every parameter) and its volumes, which the export adds to the lab with the record attached. More methods will join it as they are built.

Every picture on this site comes from one of these 55 runs, and each can be made again

The record each run wrote: when, from which commit, how long it took, and the command that repeats it (from sim/). A commit marked + had uncommitted changes to the lab’s code when the run saved (8 of 55); rerunning at that commit may differ in small ways. Runs that read a real ICEYE product need it on disk, and the 18 runs of the gated reconstruction need its public package, whose hash each of those records carries.

RunWhat it does, and the command that repeats itDateCommitTook
M1-01Ambient ground motion measured near Gizauv run python experiments/m1_01_ambient_levels.py2026-09-27d341330+3 min
P1-01The elastic solver against exact solutionsuv run python experiments/p1_01_forward_validation.py2026-09-2734689432 min
P1-02First-arrival travel-time tomography over one chamberuv run python experiments/p1_02_traveltime.py [--reuse]2026-09-277489f48+1 min
P1-03The chamber's echo, imaged from the surfaceuv run python experiments/p1_03_scattered.py [--reuse]2026-09-270eff4a5+17 min
P1-04Ambient noise over one chamberuv run python experiments/p1_04_ambient.py [--reuse]2026-09-27e56337741 min
P1-05Full-waveform inversion from a practitioner's startuv run python experiments/p1_05_fwi.py [--reuse]2026-09-2737baecd2.1 h
P2-00Ambient motion on the Giza plateau against the radar flooruv run python experiments/p2_00_ambient_giza.py2026-09-27b6f3f9c1.5 s
P2-01The real dwell as the simulator's geometryuv run python experiments/p2_01_geometry.py2026-09-2875834200.3 s
P2-03What one dwell can see of the ground's motionuv run python experiments/p2_03_what_a_dwell_sees.py2026-09-28d9e33c254 s
P2-04The chamber's imprint on the ground's own motionuv run python experiments/p2_04_chamber_imprint.py2026-09-28d9e33c26 min
P2-05The smallest imprint one dwell could detectuv run python experiments/p2_05_budget.py2026-09-28d9e33c241 s
P2-06The published depth is the frequency of the ground's motionuv run python experiments/p2_06_depth_is_frequency.py2026-09-28d9e33c20.1 s
P2-07The whole chain: a satellite image of shaking ground over a chamberuv run python experiments/p2_07_whole_chain.py2026-09-2875834205 min
P2-08How the method draws pillars and boxesuv run python experiments/p2_08_pillars_and_boxes.py2026-09-2851697f051 s
P2-09A million virtual sensors: can the image act as a dense seismic array?uv run python experiments/p2_09_virtual_sensors.py2026-09-28b4d67761 min
P2-11Every way a buried room could reach a radaruv run python experiments/p2_11_every_way_in.py2026-09-28a32c15f0.1 s
P2-12The real pass over Giza, laid on the grounduv run python experiments/p2_12_real_pass.py2026-09-2802c72538.8 s
P2-13Stricter gates: motionless images pass them; a planted vibration is not recovereduv run --with scikit-image python experiments/p2_13_gates.py2026-09-28cbf806b44 min
P2-14The reconstruction's own lines round Khafre's base, with the same controlsuv run --with scikit-image python experiments/p2_14_own_lines.py2026-09-29d23f20b15 min
P2-15What the six-second pairs register of a vibration, measured rather than assumeduv run --with scikit-image python experiments/p2_15_pair_response.py2026-09-29a94ee0f5 min
P2-16The gated reconstruction over the Great Pyramid, in three dimensionsuv run --with scikit-image python experiments/p2_16_khufu_volume.py2026-09-29d8a00601.8 sreused
P2-17The same raster over open plateau: an in-image control for P2-16uv run --with scikit-image python experiments/p2_17_plateau_control.py2026-09-2996d5a6a16 min
P2-18The radar simulator, checked against pulsesuv run --with scikit-image python experiments/p2_18_echo_validation.py2026-09-29994469d6 min
P2-19A known vibration through the unchanged pipelineuv run --with scikit-image python experiments/p2_19_known_vibration.py2026-09-29a46ecd717 min
P2-20The gated reconstruction over the known benchuv run --with scikit-image python experiments/p2_20_bench_gated.py2026-09-293c68cdf38 min
P2-21What survives a change of pass or of linesuv run python experiments/p2_21_what_survives.py2026-09-29c232f060.5 s
P2-22One shaking: a vibrator beside the bench, with the chamber and without ituv run python experiments/p2_22_one_shaking.py2026-09-29aeffc3323 min
P2-23One shaking, read by geophones and by the satelliteuv run --with scikit-image python experiments/p2_23_every_reader.py2026-09-297e1138f2 min
P2-24The gated reconstruction on the one shakinguv run --with scikit-image python experiments/p2_24_gated_on_the_shaking.py2026-09-296e4e32e47 min
P2-25What one image can hold about the chamber, whatever reads ituv run python experiments/p2_25_information_bound.py2026-10-010f678884 min
P2-26The chamber's imprint at every frequency, and how long a room ringsuv run python experiments/p2_26_imprint_spectrum.py2026-09-30626337c52 s
P2-27What one image would need: the motion a room must add to the grounduv run python experiments/p2_27_requirement.py2026-10-010f678887.5 s
P2-28Two depths, hollow and solid: does the published picture follow the room?uv run python experiments/p2_28_two_depths.py2026-09-309e98de71.5 h
P2-29The oracle: what an ideal detector could learn, told more than any method knowsuv run python experiments/p2_29_oracle.py2026-10-010f678880.5 s
P2-30Finite certificates: the bound on every processor, the common background includeduv run python experiments/p2_30_finite_certificates.py2026-10-010f678880.1 s
P2-31The shape test: location and shape, with depth allowed to be wronguv run python experiments/p2_31_shape_test.py2026-09-301bf937d+2.7 h
P2-32Shape discrimination, boundeduv run python experiments/p2_32_shape_bounds.py2026-10-010f678882 min
P2-33Sacsayhuamán: the real pass over megalithic walls, houses and open fieldsuv run python experiments/p2_33_sacsayhuaman.py2026-09-30d13b0ca7.1 s
P2-34The gated reconstruction's depth scale, pass by passuv run python experiments/p2_34_gated_depth_scale.py2026-09-30714f4360.2 s
P2-35What would give the published pictures their rungs and roomsuv run python experiments/p2_35_rungs_and_rooms.py2026-09-30e5d8c521.9 s
P2-36One auditable comparison: presence, location and shape, bounds beside achieveduv run python experiments/p2_36_benchmark.py2026-10-01b5fa1ae+2 min
P2-37The benchmark read: the published method and a detector told the lorryuv run python experiments/p2_37_benchmark_read.py [worker k n]2026-10-01b5fa1ae+18 s
P2-38The claim computed: the structures announced under Khafreuv run python experiments/p2_38_claim.py2026-10-01b5fa1ae+2 min
P2-39The published Sphinx tomogram, reproduced, and how far it survives a one-pixel nudgeuv run --with scikit-image python experiments/p2_39_sphinx_line.py2026-10-023861feb29 s
P2-40Whether the Sphinx volume's blobs stay put from one pass to the nextuv run python experiments/p2_40_sphinx_passes.py2026-10-03c8494181.2 s
P2-41What survives a change of pass across Khufuuv run python experiments/p2_41_khufu_passes.py2026-10-03f2ed0e00.2 s
lab · khafreThe gated reconstruction across Khafre, from the 2022 imageuv run --with scikit-image python -m katabasis.lab gated --name khafre --site giza --centre 0,0 --half-ew 150 --half-ns 141 --step 3 --supports 1,4 --twin 1012026-09-294af4a3c38 min
lab · khafre_2025The gated reconstruction across Khafre, from the 2025 imageuv run --with scikit-image python -m katabasis.lab gated --name khafre_2025 --site giza --centre 0,0 --half-ew 150 --half-ns 141 --step 3 --supports 1,4 --twin 101 --product <path to ICEYE_X33_SLC_SLEDF_951562307_20250827T202654.h5>2026-09-29c232f061.5 h
lab · khafre_nsThe gated reconstruction across Khafre, north-south lines, from the 2022 imageuv run --with scikit-image python -m katabasis.lab gated --name khafre_ns --site giza --centre 0,0 --half-ew 141 --half-ns 150 --step 3 --supports 1,4 --twin 101 --lines ns2026-09-29c232f061.4 h
lab · khufu_2025The gated reconstruction across Khufu, from the 2025 pass, on the lines P2-16 laiduv run --with scikit-image python -m katabasis.lab gated --name khufu_2025 --site giza --centre 324.26,349.19 --half-ew 150 --half-ns 141 --step 3 --supports 1,4 --twin 101 --product <path to ICEYE_X33_SLC_SLEDF_951562307_20250827T202654.h5>2026-10-03c50a62f+40 min
lab · sacsay_fieldsThe gated reconstruction across the fields north of Sacsayhuamán, from the 2025 passuv run --with scikit-image python -m katabasis.lab gated --name sacsay_fields --site sacsayhuaman --centre -100,525 --half-ew 150 --half-ns 141 --step 3 --supports 1,4 --twin 101 --product <path to ICEYE_X35_SLC_SLEDF_5907293_20250822T152433.h5>2026-09-302e7004040 min
lab · sacsay_gridThe gated reconstruction across the city grid houses of Cusco, from the 2025 passuv run --with scikit-image python -m katabasis.lab gated --name sacsay_grid --site sacsayhuaman --centre -250,-1000 --half-ew 150 --half-ns 141 --step 3 --supports 1,4 --twin 101 --product <path to ICEYE_X35_SLC_SLEDF_5907293_20250822T152433.h5>2026-09-302e7004042 min
lab · sacsay_wallsThe gated reconstruction across the zigzag walls of Sacsayhuamán, from the 2025 passuv run --with scikit-image python -m katabasis.lab gated --name sacsay_walls --site sacsayhuaman --centre 14.6,-92.7 --half-ew 150 --half-ns 141 --step 3 --supports 1,4 --twin 101 --product <path to ICEYE_X35_SLC_SLEDF_5907293_20250822T152433.h5>2026-09-302e7004038 min
lab · sphinxThe gated reconstruction across the Sphinx enclosure, from the 2022 pass, with its author's Sphinx settings (Track 7, supports 1 to 3, 0 to 50 m)uv run --with scikit-image python -m katabasis.lab gated --name sphinx --site giza --centre 655.7,-86.8 --half-ew 45 --half-ns 30 --step 0.6 --supports 1,2,3 --twin 101 --lines ns --track 7 --depth-max 502026-10-026dccba652 min
lab · sphinx_2025The gated reconstruction across the Sphinx enclosure, from the 2025 pass, with the same Sphinx settings (Track 7, supports 1 to 3, 0 to 50 m)uv run --with scikit-image python -m katabasis.lab gated --name sphinx_2025 --site giza --centre 655.7,-86.8 --half-ew 45 --half-ns 30 --step 0.6 --supports 1,2,3 --twin 101 --lines ns --track 7 --depth-max 50 --product <path to ICEYE_X33_SLC_SLEDF_951562307_20250827T202654.h5>2026-10-02084207e58 min

One repository, three parts

sites/

The materials library and one composition per site, shared by the simulation and the viewer.

sim/

The Python lab: compositions, the elastic solver, the arrays and inversions, and the first investigation kept intact in sim/legacy/.

web/

This site: Astro and Three.js, hand-drawn figures, no chart library. Source · first investigation