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_viewdifferences 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).