Skip to content

ntpstats.research

Research and time-laboratory data: CGGTTS, RINEX clock, BIPM Circular T, RIPE Atlas, NTP Pool.

  • CGGTTS (BIPM/CCTF generic GNSS time-transfer format, V2E): one line per satellite track. REFSYS (reference − GNSS system time, 0.1 ns) is averaged per epoch into a series; line checksums are verified. :func:common_view differences two stations, satellite by satellite (common view) or epoch by epoch (all in view), giving UTC(A) − UTC(B).
  • RINEX clock (IGS .clk, 3.0x): one series per receiver (AR) or satellite (AS) clock bias, in seconds against the file's time scale.
  • BIPM Circular T, section 1: UTC − UTC(k) per laboratory every five days. Concatenate several issues into one file for a long series.
  • RIPE Atlas NTP results (JSON from the public API): one series per probe and server. Atlas reports offsets as local − server; they are negated to the ntpstats convention (server − local).
  • NTP Pool score logs (/scores/<ip>/log?monitor=* CSV): one series per monitor, with round-trip time and score.

cggtts_tracks(lines)

Header fields and one record per track (dict of columns) of a CGGTTS file.

Several files concatenated together (as in the BIPM archives) are accepted.

parse_cggtts(lines, name='cggtts')

REFSYS (reference − GNSS time) averaged over the satellites of each epoch.

common_view(a_lines, b_lines, mode='cv', min_sats=1, name=None)

REF(A) − REF(B) from two CGGTTS files.

mode="cv": common view, REFSV differences of the same satellite at the same epoch, averaged per epoch (satellite clock errors cancel). mode="aiv": all in view, difference of the per-epoch REFSYS means (needs no common satellites; relies on precise orbits and clocks).

parse_rinex_clock(lines, name='rinex-clock', types=('AR', 'AS'), clocks=None)

Clock bias series from a RINEX clock file (one per receiver/satellite).

parse_circular_t(lines, name='circular-t', labs=None)

UTC − UTC(k) per laboratory from section 1 of one or more concatenated Circular T issues.

parse_ripe_atlas(text, name='atlas')

NTP measurement results from the RIPE Atlas API (JSON list or JSON lines).

group_summary(series, by='peer')

Offset distribution per group (peer: server, probe: vantage point) across many series.

parse_ntppool(lines, name='ntppool')

NTP Pool monitoring log CSV: one series per monitor (offset in s, rtt in ms).

parse_interop(lines, name='interop')

The ntpstats Live-interop dataset (JSON lines, data/interop/): one series per test and server.

Failed probes carry no offset; they are counted in meta (probes, failures, availability) and their times in meta["failure_times"].

interop_summary(lines)

Per test and server: runs, availability, median offset/delay, last error (from the raw records).