IGETS Gravity Pipeline

IGETS · GFZ Potsdam · superconducting gravimeters

Months of gravity, read as one envelope.

The pipeline pulls raw .gg ASCII from igetsftp.gfz.de, strips every metadata header down to [YYMMDD] [HHMMSS] [gravity] [pressure], then compresses continuous 1-second and 1-minute sampling into vertical daily lines — each full 24-hour cycle a single tight spike, so long-period drift shows in the outer peak-and-trough baseline.

365days compressed
525,600raw samples folded in
418.9 – 588.0envelope nm/s²
Shared UTC grid · 2025-10-27 → 2026-10-26 · all four layers align
Station SU — Sutherland, South AfricaSAAO Station, Sutherland, South Africa · -32.38°, 20.81° · Superconducting gravimeter
map

Compressed timeline

Each vertical line is one day: top is the day's peak, bottom the trough, the tick is the mean. Watch the outer edge — that slow breathing is the long-period signal.

showing built-in SU demo · trailing 12 months · 365 days ending 2026-10-26

Automated ingestion

Mirrors the server layout Station_Code / Year / Month. Pick a target, fetch one day-file through the app, or drop .gg files below.

Directory: ftp://igetsftp.gfz.de/SU/2026/10/

Drop .gg files here or

Row contract

Every kept row is exactly four fields — date, time, raw gravity, atmospheric pressure:

250601 000000 512.40 1013.2 250601 000100 518.91 1013.1 250601 000200 524.77 1013.1

Lines starting with # * ; / or letters, short lines, and non-numeric gravity or pressure values are discarded and counted as skipped headers.

—rows kept
—headers skipped
—daily spikes

Standalone fetch script

The same ingestion the app runs server-side, as a copy-paste Python job for a cron host.

#!/usr/bin/env python3
# IGETS automated ingestion — GFZ Potsdam, host igetsftp.gfz.de
# Layout on server: Station_Code/Year/Month, files like ST250601.gg
# Usage: python3 fetch_igets.py ST 2025 06 ./data
import ftplib, os, sys
HOST = "igetsftp.gfz.de"
station, year, month, outdir = sys.argv[1], sys.argv[2], sys.argv[3].zfill(2), sys.argv[4]
os.makedirs(outdir, exist_ok=True)
ftp = ftplib.FTP(HOST, timeout=30); ftp.login()  # anonymous
remote = f"/{station}/{year}/{month}"
print("LIST", f"ftp://{HOST}{remote}/")
ftp.cwd(remote)
for name in ftp.nlst():
    if not name.lower().endswith(".gg"): continue
    local = os.path.join(outdir, name)
    with open(local, "wb") as f: ftp.retrbinary(f"RETR {name}", f.write)
    print("saved", local)
ftp.quit()

Anonymous FTP login. For authenticated mirrors set FTP_USER / FTP_PASS in the environment and call ftp.login(user, pw).

Network stations

Directory roots on igetsftp.gfz.de — every reading on this timeline comes from the station shown above. Click to preview another site.