RINGO: RINEX pre-processing tool using Go!

RINGO is a RINEX pre-processing tool capable of handling multi-GNSS data. The software is a command line based CLI tool that works on various platforms including Windows OS, macOS, Linux, Unix.

RINGO’s command line interface (CLI) is simple to use, but fully featured to manage daily GNSS data observed by a Continuously Operating Reference Stations (CORS) network.

Table of Contents


  • RINEX file editing
  • RINEX file merging
  • Clock jump correction
  • Quality check
  • Ionospheric correction
  • Generation of interactive viewer
  • Conversion of BINEX and RTCM binaries to RINEX files
  • Generation of a shell completion script


Prebuilt binaries for various platforms are available on this website.

  1. Download the latest release of the RINGO software from the download page
  2. Copy the binary executable suitable to your operating system to your desired directory
  3. Add the directory to the PATH environment variable
  4. Add the permission to the installed executable, i.e.:
$ chmod +x ringo

Supported Platforms

Currently supports Windows OS, macOS, Linux, UNIX (FreeBSD, Solaris).

Supported formats

file format version
RINEX 2.00*, 2.10, 2.11, 2.12
3.00, 3.01, 3.02, 3.03, 3.04, 3.05

* Currently official RINEX version 2.00 document is not available from IGS, so RINGO support for RINEX version 2.00 may not be maintained.

Supported formats for data conversion:

file format record types
BINEX 0x7f: GNSS observables
0x01-0x01: GPS ephemeris
0x01-0x02: GLO ephemeris
0x01-0x03: SBAS ephemeris
0x01-0x06: QZS ephemeris
0x01-0x14: GAL ephemeris
file format record types
RTCM MSM7 (1077, 1087, 1097, 1117): GNSS observation data
1019: GPS ephemeris
1020: GLO ephemeris
1044: QZS ephemeris
1046: GAL ephemeris

Basic usage

Test installation

You can test your installation by version command:

$ ringo

Then you will see like:

$ ringo
RINEX file pre-processing tool using Go.

ringo is a program for editing, pre-processing, and quality checking RINEX files,
also includes features such as conversion from BINEX or RTCM to RINEX format, interactive viewer etc.


RINGO is a CLI tool that provides several sub-commands. Basic interface is as follows:

$ ringo [sub-command] [flags] inputfiles > outputfile

RINGO reads all inputfiles that are given in arguments, and print data to the standard output. The basic usage is to specify input files as command line arguments and redirect it to an output file.

$ ringo merge rinex1 rinex2 > rinex_merged

or you can use the option “-o” to specify the output file as a command line argument.

$ ringo merge rinex1 rinex2 -o rinex_merged

See the help for each sub-command to see the full set of options available.

Input file

The inputfiles can be any of RINEX observation file, RINEX navigation file, IGS IONEX file. The file format is automatically identified from the file header.
The direct reading of compressed file is also supported. Acceptable formats are “compress (.Z)”, “zip (.zip)”, “gzip (.gz)”, “bzip2 (.bz2)” for all file format, and tar archived navigation file is also supported. Furthermore, hatanaka compressed file can also be accepted if “CRX2RNX” command is available in PATH.
For example:

$ ringo merge rinex_obs1.o rinex_obs2.o.gz > rinex_merged
$ ringo merge rinex_obs1.o rinex_obs2.d    > rinex_merged
$ ringo merge rinex_nav.tar.bz2            > rinex_nav.p

Show commands available

$ ringo help


  ringo [command]

Available Commands:
  bingo       Convert a BINEX file to RINEX files
  clkcorr     Correct obs rinex by timetag smoothing
  completion  Generate the autocompletion script for the specified shell
  genconf     Generate a default conf file
  help        Help about any command
  ioncorr     Correct ionospheric delay of rinex obs file
  merge       Merge observation or navigation RINEX files
  qc          Quality check of a rinex obs file
  rtcmgo      Convert a RTCM3 file to RINEX files
  shiftcorr   Correct quarter cycle phase shift
  version     Show version
  viewer      Generate a HTML5-based viewer

Use "ringo [command] --help" for more information about a command.

The helps for each sub-command can also be also displayed by:

$ ringo [command] --help

For example,

$ ringo bingo --help
Convert a BINEX file to RINEX files
        Currently supports 0x01 ephemerides and 0x7f-05 observations.


  convert a BINEX file to RINEX obs and nav files.
  >> ringo bingo --outobs rinexobs --outnav rinexnav binex

Command references


ringo is the main command of the RINGO software, and each sub-command is invoked by passing the command in the first argument. There are two types of flags: global flags and command options. The global flags are commonly used for all sub-commands, and the command options are defined for each-command.

global flags

Flag Shorthand Description
--config use a config file (default is $HOME/.ringo.yaml)
--debug enable debug print to stderr [default: false]
--help -h show help for ringo
--etime -e end of time window (e.g. ‘2017/01/01 15:00:00’) (default “2099/12/31 23:59:59”)
--stime -s start of time window (e.g. ‘2017/01/01 03:00:00’) (default “1980/01/06 00:00:00”)
--exclPRN list of PRN to exclude (e.g. ‘G01,G02’) [default: ‘’]
--exclSat list of satsys to exclude (e.g. ‘G’, ‘REJ’) [default: ‘’]
--inclPRN list of PRN to include (e.g. ‘G01,G02’) [default: ‘’]
--inclSat list of satsys to include (e.g. ‘G’, ‘REJ’) [default: ‘’]
--interval time interval to output (seconds)
--outfile -o output file [default: STDOUT]
--outver RINEX version to output, e.g., ‘4.00’
--sort sort timetag and PRN [default: false]
--toggle -t help message for toggle
--verbose -v enable verbose print to stderr [default: false]
--version show version for ringo


merge merges and edits RINEX observation and navigation files. It offers basic editing features for RINEX files, including clipping, sorting, editing header, change of observation types.

The header contents of the merged file basically follow the header contents of the first file appeared in the argument. However, some header contents are automatically modified according to the contents of the merged file.

The header contents listed below are modified after merge multiple files.

Header label Description
VERSION The output version will be the same as the version of the first file unless you choose otherwise in the option
TIME OF FIRST OBS automatically modified according to the data period of the merged file
TIME OF LAST OBS automatically modified according to the data period of the merged file. Note that the “TIME OF LAST OBS” is an optional, but RINGO always outputs this header.
INTERVAL automatically modified according to the data interval. Currently RINGO determines the interval as the most frequently occurred time interval in the merged file.
# / TYPES OF OBSERV The obstypes will change according to the contents of the file contents after the merge.
SYS / # / OBS TYPES Same as the “# / TYPES OF OBSERV”


Flag Shorthand Description
--obstypes -t mask of obscodes (e.g. ‘C1C,L1C,L2X&R:S1C,C1P&E:L5X’) [default: ‘’]
--help -h show help for merge
--h.add-new-record add new optional headers if possible
--h.agency string set agency
--h.ante string set antenna dE
--h.anth string set antenna dH
--h.antn string set antenna dN
--h.antnum string set antenna number
--h.anttype string set antenna type
--h.aprx string set approximate pos x
--h.apry string set approximate pos y
--h.aprz string set approximate pos z
--h.doi string set DOI for data citation
--h.license string set License (separator ‘;’ for multiple lines)
--h.mname string set monument name
--h.mtype string set monument type
--h.no-inpfiles do not show input files in the header
--h.observer string set observer
--h.recnum string set receiver number
--h.rectype string set receiver type
--h.recver string set receiver version
--h.stainfo string set Station Information (’;’ for multiple lines)


File merge

$ ringo merge 02550010.21o 02550020.21o > 02550010_merged.21o
$ ringo merge 025500[12]0.21o           > 02550010_merged.21o

Extraction of compressed file is possible.

$ ringo merge 02550010.21o.gz           > 02550010.21o
$ ringo merge 02550010.21o.bz2          > 02550010.21o

Hatanaka compressed file can also be extracted if “CRX2RNX” is available in the $PATH.

$ ringo merge 02550010.21d.gz           > 02550010.21o

Creation of merged navigation file

$ ringo merge ????0010.21n              > merg0010.21n

Merge of tar archived navigation file provided by GSI

$ ringo merge 02550010.21N.tar.gz       > 02550010.21p

Set header to the file

$ ringo merge 02550010.21d.gz --h.agency GSI  --h.observer Kawamoto > 02550010.21o

Clip the data between “2021/01/01 01:00:00” and “2021/01/01 02:00:00”

$ ringo merge --stime "2021/01/01 01:00:00" --etime "2021/01/01 02:00:00" 02550010.21o > 02550010_clip.21o

Crop the data of L1 and L2 only.
The observation types can be specified by a comma separated string.

$ ringo merge --obstypes "L1,L2" 02550010.21o > 02550010_l1l2.21o 

Clipping to the L1C data only, but only GPS clipping to L2X and L5X.
The observation types can be set for each satellite system individually. The setting for each satellite system can be specified by starting one of the character “GRJECS”. The settings can be combined with “&”.

$ ringo merge --obstypes "L1C&G:L2X,L5X" 02550010.21o > 02550010_m.21o 

Clip to data containing only specific satellite systems. The satellite systems can be a combination of “GRJECS”.

$ ringo merge --inclSat "G" 02550010.21o > 02550010_G.21o   # GPS only file
$ ringo merge --inclSat "GJ" 02550010.21o > 02550010_GJ.21o   # GPS and QZSS
$ ringo merge --exclSat "G" 02550010.21o > 02550010_noGPS.21o   # no GPS 

Clip to data containing only specific satellites. The satellites can be a comma separated string with viecle IDs.

$ ringo merge --inclPRN "G01,G02" 02550010.21o > 02550010_G01G02.21o  # only G01 and G02  
$ ringo merge --exclPRN "G01,G02" 02550010.21o > 02550010_G01G02.21o  # without G01 and G02

Change the data interval by thinning out the data. The data interval can be set in seconds.

$ ringo merge --interval 60  02550010.21o > 02550010_60s.21o

Sorting of the data is also possible

$ ringo merge --sort 02550010.21o > 02550010_sorted.21o

Then the sorted file looks like:

> 2021 01 01 00 00  0.0000000  0 31
G05  21697284.266   114019997.871 7     -2085.000          46.700    21697290.6094   88846772.50546     -1624.6764
G13  20934053.969   110009159.077 8     -1751.844          49.100    20934059.5314   85721462.52546     -1365.0704
G14  24505154.219   128775502.796 6       613.117          39.200    24505160.5594  100344544.64143       477.7544
G15  20366192.609   107025043.761 8       544.027          51.300    20366198.4884   83396175.49049       423.9184
G18  21709562.883   114084519.671 7      1345.543          44.600    21709568.6414   88897037.58246      1048.4774
G20  23553429.875   123774104.162 6      3244.309          38.400    23553435.1254   96447392.24343      2528.0314
G23  23850618.016   125335843.457 6      3100.906          39.800    23850624.1374   97664324.07344      2416.2894
G24  21628936.797   113660828.469 7      3088.203          44.900    21628945.8284   88566938.42948      2406.3914


qc checks the quality of RINEX observation file. It summarizes the total number of epochs, the number of obsevation data, number of observations for each signal, multipath noise, cycle slips, etc.


$ ringo qc 02550010.21o 02550010.21n > qc.log
$ ringo qc 02550010.21d.gz 02550010.21N.tar.gz > qc.log


clkcorr corrects clock jump events in RINEX files. In default, the output file is aligned to regulary spaced timetags by correcting clock jumps. This behavior is similar to the “-smtt” by the teqc software. Optionally the output file can be switched to a smoothed range data. Then the msec clock jumps could be accumulated on the timetags.


$ ringo clkcorr        XXXXXXXX.XXo  >  timetagsmoothed_RINEX
$ ringo clkcorr --smpr XXXXXXXX.XXo  >  rangesmoothed_RINEX


ioncorr corrects ionospheric effects on GNSS signals. The 1st- and 2nd-orders of ionospheric corrections are implemented in RINGO ioncorr. The correction requires IONEX file provided by IGS as well as navigation files.


// remove the 1st order effect
$ ringo ioncorr -1    02550010.21o 02550010.21N.tar.gz igsg0010.21i > 02550010_1.21o

// remove both the 1st and 2nd order effects
$ ringo ioncorr -1 -2 02550010.21o 02550010.21N.tar.gz igsg0010.21i > 02550010_12.21o


viewer generates a HTML5-based interactive viewer for RINEX observation file and quality check result.


$ ringo viewer          02550010.21o > 02550010_21o.html
$ ringo viewer --qcmode 02550010.21o > 02550010_21o_qc.html


bingo converts a BINEX file to RINEX observation and navigation files.


$ ringo bingo 02550010_21.bnx --outobs 02550010.21o --outnav 02550010.21p


rtcmgo converts a RTCM file to RINEX observation and navigation files.


$ ringo rtcmgo 02550010_21.rtcm --outobs 02550010.21o --outnav 02550010.21p


completion outputs shell completion scripts for bash, fish, powershell, and zsh. These scripts enable the tab auto-completion when ringo command is typed in the terminal, and automatically fills in partially typed command and flags when tab key is pressed.

The following command outputs the shell completion script for ringo:

$ ringo completion [ bash | fish | powershell | zsh ] > completion

Note that currently this feature depends on cobra library.


If you want to enable shell completion, firstly output the completion script as:

$ ringo completion bash > completion.bash

Then you can enable the completion for ringo command by adding following line in .bashrc etc.

source completion.bash

The completion example is shown below.

$ ringo merge --h.[tab]
--h.add-new-record  (add new optional headers if possible)
--h.agency          (set agency)
--h.ante            (set antenna dE)
--h.anth            (set antenna dH)
--h.antn            (set antenna dN)
--h.antnum          (set antenna number)
--h.anttype         (set antenna type)
--h.aprx            (set approximate pos x)
--h.apry            (set approximate pos y)
--h.aprz            (set approximate pos z)
--h.doi             (set DOI for data citation)
--h.license         (set License (separator ';' for multiple lines))
--h.mname           (set monument name)
--h.mtype           (set monument type)
--h.no-inpfiles     (do not show input files in the header)
--h.observer        (set observer)
--h.recnum          (set receiver number)
--h.rectype         (set receiver type)
--h.recver          (set receiver version)
--h.stainfo         (set Station Information (';' for multiple lines))