Documentation
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⌗
Features⌗
- 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
Installation⌗
Prebuilt binaries for various platforms are available on this website.
- Download the latest release of the RINGO software from the download page
- Copy the binary executable suitable to your operating system to your desired directory
- Add the directory to the PATH environment variable
- 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 | |
4.00 |
* 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.
Interface⌗
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
shows
.....
Usage:
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.
Example:
convert a BINEX file to RINEX obs and nav files.
>> ringo bingo --outobs rinexobs --outnav rinexnav binex
.....
Command references⌗
ringo⌗
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⌗
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” |
options⌗
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) |
Examples⌗
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⌗
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.
Examples⌗
$ ringo qc 02550010.21o 02550010.21n > qc.log
$ ringo qc 02550010.21d.gz 02550010.21N.tar.gz > qc.log
clkcorr⌗
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.
Examples⌗
$ ringo clkcorr XXXXXXXX.XXo > timetagsmoothed_RINEX
$ ringo clkcorr --smpr XXXXXXXX.XXo > rangesmoothed_RINEX
ioncorr⌗
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.
Examples⌗
// 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⌗
viewer generates a HTML5-based interactive viewer for RINEX observation file and quality check result.
Examples⌗
$ ringo viewer 02550010.21o > 02550010_21o.html
$ ringo viewer --qcmode 02550010.21o > 02550010_21o_qc.html
bingo⌗
bingo converts a BINEX file to RINEX observation and navigation files.
Examples⌗
$ ringo bingo 02550010_21.bnx --outobs 02550010.21o --outnav 02550010.21p
rtcmgo⌗
rtcmgo converts a RTCM file to RINEX observation and navigation files.
Examples⌗
$ ringo rtcmgo 02550010_21.rtcm --outobs 02550010.21o --outnav 02550010.21p
completion⌗
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.
Examples⌗
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))