Skip to content

RINEX File Header/Data Editing

RINEX file header editing can be invoked by providing a configuration file for the header manipulations to be done. It has to be specified via the -crux command line parameter providing the configuration file name.

There are two modes available: * Header editing as part of other operations on the input RINEX file. * Header editing only. Only the header input, editing and check are performed, but the data part is simply copied as it is.

In the following examples, the configuration file header_crux.txt is used.

Header Editing (Standard)

gfzrnx -finp mizt1600.15o -fout mizt1600.15o_new -crux header_crux.txt

Header Editing (Only)

For the editing only mode one has to use the -hded option in addition.

gfzrnx -finp mizt1600.15o -fout mizt1600.15o_hded -crux header_crux.txt -hded

An additional epoch and station identifier have to be given if no standard RINEX file names are used. If no additional information provided, the MARKER NAME and the first data epoch is used if it exists. This information is needed to extract the right header editing information from the overall configuration information.

gfzrnx -finp file.rnx -fout file.rnx_hded -crux header_crux.txt -hded -epo_beg 2015234_000000 \
                                                                                 -site POTS
gfzrnx -finp file.rnx -fout file.rnx_hded -crux header_crux.txt -hded -epo_beg 2015234_000000 \
                                                                                 -site POTS00DEU

Editing Operations

The following operations are supported: * Update single elements of an existing header line (label) * Insert single elements of a non-existing header line (label) * Update (insert) a complete header line or multiple header lines per label * Common string replacement in a string- or regular expression mode * Renaming of PRN in the header and data part * Renaming of OBS types in the header par * Station-, data type- and epoch interval-dependent settings in a single configuration file are possible

Show Config. File Interpretation ( -show_crux )

Due to the variety of input options, one can check how the configuration is interpreted in the program. It can be used as a kind of check via the -show_crux option before the real use.

gfzrnx -crux header_crux.txt -show_crux
gfzrnx -crux header_crux.txt -show_crux -fout crux.log -f

The default header edit settings are shown via:

gfzrnx -show_crux

Configuration file

Formally there are 3 major modes: update_insert, replace or rename delimited by colon.

In case of rename a type (prn|obs) has to be given additionally. The mode definition line has to be followed by an optional data type identifier string (OMN Obs., Met., Nav.) delimited with a hyphen, an optional epoch interval delimited by a hyphen, and a valid station identifier (4- or 9-char.) or dot-separated list of station identifiers delimited by a colon. Now the editing definitions can follow.

Update_insert :
#--------------
    [OMN-][YYYYMMDD:HHMMSS YYYYMMDD:HHMMSS-] ALL:
...
    [OMN-][YYYYDDD:SSSSS   YYYYDDD:SSSSS-]   STA1[.STA2[.STA3...] :
    [OMN-][YYYYDDD:SSSSS   YYYYDDD:SSSSS-]   STA1MRCCC[.STA2MRCCC[.STA3MRCCC...] :
...

Replace :
#--------
    [OMN-][YYYYMMDD:HHMMSS YYYYMMDD:HHMMSS-] ALL:
...
    [OMN-][YYYYDDD:SSSSS   YYYYDDD:SSSSS-]   STA1[.STA2[.STA3...]:
...

Every rename setting has to be done completely on a single line using the following syntax:

Rename : prn
#--------
    [ON-][YYYYMMDD:HHMMSS YYYYMMDD:HHMMSS-] - <prn-from> - <prn-to> : ALL
    [ON-][YYYYDDD:SSSSS   YYYYDDD:SSSSS-]   - <prn-from> - <prn-to> : STA1[.STA2[.STA3...]
    [ON-][YYYYDDD:SSSSS   YYYYDDD:SSSSS-]   - <prn-from> - <prn-to> : STA1MRCCC[.STA2MRCCC[.STA3MRCCC...]


Rename : obs
#--------
    [OM][YYYYMMDD:HHMMSS YYYYMMDD:HHMMSS-] <obs-from> - <obs-to> - <sat.sys> : ALL
    [OM][YYYYDDD:SSSSS   YYYYDDD:SSSSS-]   <obs-from> - <obs-to> - <sat.sys> : STA1[.STA2[.STA3...]
    [OM][YYYYDDD:SSSSS   YYYYDDD:SSSSS-]   <obs-from> - <obs-to> - <sat.sys> : STA1MRCCC[.STA2MRCCC[.STA3MRCCC...]

The following rules have to be taken into account:

  • Comment lines have to begin with #
  • The file name station identifier has to be used for the station name. Currently, only the 4 characters station identifier is supported (RINEX-2 file naming)
  • For non-specific station definitions, the ALL station identifier can be used
  • Omitting the data types identifier extends the validity to all supported data types (OMN)
  • Omitting the epoch interval leads to an overall validity
  • Station-dependent settings overwrite non-specific ALL settings
  • Overlapping epoch intervals for the same header label and station lead to an error
  • The date of the epoch interval can be given either as YYYYDDD (year, day of year) or YYYYMMDD (year, month, day of month)
  • The time of the epoch interval can be given as SSSSS (second of day 0-86399) or HHMMSS ( hour, minute, second )
  • Unlimited begin or end of an epoch interval can be given using zeros in the date and time values (e.g. 0000000:000000)

See also the examples below.

Update - Single Header Element

Single header element update/insert can be done by providing the label in double quotes, "+" an optional time interval, ":" and the list of index-value pairs enclosed in curly brackets. Every definition should cover only one line!

"<label>" [+ YYYYMMDD:HHMMSS YYYYMMDD:HHMMSS ] : { k: "<value>", [ [ l: "<value>" ], ... ] }
"<label>" [+  YYYYDDD:HHMMSS YYYYDDDD:HHMMSS ] : { k: "<value>", [ [ l: "<value>" ], ... ] }
"<label>" [+  YYYYDDD:SSSSS  YYYYDDDD:SSSSS  ] : { k: "<value>", [ [ l: "<value>" ], ... ] }
...

indexes k,l,... = 0,1,...

See some examples below:

update_insert :
#--------------
    O - POTS.OUST.WINT:
    "REC # / TYPE / VERS"  : { 1 : "TRIMBLE NETR9" }

    O - 2015209:00000 0000000:00000 - MIZT00JPN:
    "APPROX POSITION XYZ"  : { 0: "-3857167.6484", 1: "3108694.9138", 2: "4004041.6876" }
    "ANTENNA: DELTA H/E/N" : { 0: "0.1209",        1: "0.0008",       2: "0.0007" }

    O - POTS00DEU:
    "OBSERVER / AGENCY" + 0000000:00000 2013126:86399  : { 0:"automatic", 1:"GFZ" }
    "OBSERVER / AGENCY" + 2013127:00000 0000000:00000  : { 0:"gfz",       1:"GFZ/IHL" }

  • Multi-string elements in the index-value pairs have to be enclosed with double quotes. Please make sure that the given values don't exceed the element's format length!

  • The first header element is at index 0

  • The site name used to search for site-dependent settings in the loaded crux information is extracted from the standard RINEX-2 or 3 input file name. In case of wrong or non-standard input file names or in pipe environments, the site name has to be provided via the -site command line parameter. The -site parameter overwrites any otherwise derived site name in general.

    gfzrnx -finp xxxx282a.19o -crux crux.txt -fout ::RX3:: -kv -f -site MET300FIN
    cat      MET300FIN_R_20192820000_01H_30S_MO.rnx   |gfzrnx -crux crux.txt -fout ::RX2:: -kv -f \
                                                                                    -site MET300FIN
    gzip -dc MET300FIN_R_20192820000_01H_30S_MO.rnx.gz|gfzrnx -crux crux.txt -fout ::RX3:: -kv -f \
                                                                                    -site MET3
    

Supported String Substitutes

The following variable string substitutes are supported to be used via crux single header elements updates and added COMMENT lines. To be more independent of OS-derived values, the following environment variables are used with a higher preference if existing.

Substitute String Substitute/Example Description Environment variables
uSeR nisn user name provided by os USERNAME, USER
pRoGrAm gfzrnx-1.08-8003 gfzrnx-version-revision
hOsTnAmE serv01 simple hostname provided by os HOSTNAME
hOsTdOmAiNnAmE serv01.gfz-potsdam.de fully qualified hostname provided by os HOSTFQDN
dOmAiNnAmE gfz-potsdam.de domain name provided by os USERDOMAIN
tImEsTaMp 20170712 113126 UTC time stamp of current time

Warning

Please check in advance if you get the expected results for your operating system!

update_insert :
#---
MNO - ALL:
          "COMMENT"             : "PG tImEsTaMp pRoGrAm uSeR@dOmAiNnAmE"
          "PGM / RUN BY / DATE" : { 0: "pRoGrAm" , 1: "uSeR@dOmAiNnAmE", 2: "tImEsTaMp" }

For the upper configuration, the "PGM / RUN BY / DATE" record will be updated and the "COMMENT" record below will be added:

PG 20170712 120203 UTC gfzrnx-1.08-7179 nisn@gfz-potsdam.de COMMENT             
gfzrnx-1.08-7179    nisn@gfz-potsdam.de 20170713 065255 UTC PGM / RUN BY / DATE 

If the "COMMENT" string gets longer than 60 characters, it will be cut to 60!

Update - Multi Header

Multiple header elements like the "SENSOR MOD/TYPE/ACC" or "SENSOR POS XYZ/H" for meteo data need an additional condition (here the sensor identifiers TD, PR, HR,...). An additional "+ column_number:value" pair has to be added to the label and optional epoch interval information. The column counter starts with 0. Here is a crux example block.

"<label>" [+ YYYYMMDD:HHMMSS YYYYMMDD:HHMMSS ] i:"CC" : { k:"<value>", [ [ l:"<value> ],..] }
"<label>" [+  YYYYDDD:HHMMSS YYYYDDDD:HHMMSS ] i:"CC" : { k:"<value>", [ [ l:"<value> ],..] }
"<label>" [+  YYYYDDD:SSSSS  YYYYDDDD:SSSSS  ] i:"CC" : { k:"<value>", [ [ l:"<value> ],..] }

indexes i,k,l,... = 0,1,...
CC                = condition string

Here is a crux example block.

update_insert :

#-----

M - 2015209:00000 0000000:00000 - ALL :

    "SENSOR MOD/TYPE/ACC" + 3:"TD" : { 0:"Vaisala", 1:"PTU 303/5.14", 2:"0.10" }
    "SENSOR MOD/TYPE/ACC" + 3:"PR" : { 0:"Vaisala", 1:"PTU 303/5.14", 2:"0.05" }
    "SENSOR MOD/TYPE/ACC" + 3:"HR" : { 0:"Vaisala", 1:"PTU 303/5.14", 2:"1.7"  }

    "SENSOR MOD/TYPE/ACC" + 3:"XX" : { 0:"XXXXXXX", 1:"XXX 125",      2:"1.0"  }

M - POTS00DEU :

    "SENSOR POS XYZ/H" + 4:"TD"    : { 0:"3275753.9120", 1:"321110.8651", 2:"5445041.8829", 3:"5" }   
    "SENSOR POS XYZ/H" + 4:"PR"    : { 0:"3275753.9120", 1:"321110.8651", 2:"5445041.8829", 3:"5" }
    "SENSOR POS XYZ/H" + 4:"HR"    : { 0:"3275753.9120", 1:"321110.8651", 2:"5445041.8829", 3:"5" }

    "SENSOR POS XYZ/H" + 4:"XX"    : { 0:"3275753.9120", 1:"321110.8651", 2:"5445041.8829", 3:"5" }

If an element is not found, it will be added (see the "XX" sensor).

See below a small example of a header manipulation with the initial header and the manipulation result.

gfzrnx -finp pots3410.15m -f -fout pots3410.15m_new -crux crux.txt

pots3410.15m

     2.11           METEOROLOGICAL DATA                     RINEX VERSION / TYPE
TPP 3.1                                 2015-12-07 00:01:03 PGM / RUN BY / DATE 
pots                                                        MARKER NAME         
     3    TD    HR    PR                                    # / TYPES OF OBSERV 
Paroscientific      Model 760                     0.1    TD SENSOR MOD/TYPE/ACC 
Paroscientific      Model 760                     2.0    HR SENSOR MOD/TYPE/ACC 
Paroscientific      Model 760                     0.1    PR SENSOR MOD/TYPE/ACC 
  3275756.3423   321111.4422  5445046.8829        0.0000 TD SENSOR POS XYZ/H    
  3275756.3423   321111.4422  5445046.8829        0.0000 HR SENSOR POS XYZ/H    
  3275756.3423   321111.4422  5445046.8829        0.0000 PR SENSOR POS XYZ/H    
                                                            END OF HEADER       

pots3410.15m_new

    3.03           METEOROLOGICAL DATA                      RINEX VERSION / TYPE
TPP 3.1                                 2015-12-07 00:01:03 COMMENT             
RINEX_DB.pm        GFZ FILE CONVERSION  20150807 14:32:19UTCPGM / RUN BY / DATE 
pots                                                        MARKER NAME         
Vaisala             PTU 303/5.14                  0.1    TD SENSOR MOD/TYPE/ACC 
Vaisala             PTU 303/5.14                  1.7    HR SENSOR MOD/TYPE/ACC 
Vaisala             PTU 303/5.14                  0.1    PR SENSOR MOD/TYPE/ACC 
  3275753.9120   321110.8651  5445041.8829        5.0000 TD SENSOR POS XYZ/H    
  3275753.9120   321110.8651  5445041.8829        5.0000 HR SENSOR POS XYZ/H    
  3275753.9120   321110.8651  5445041.8829        5.0000 PR SENSOR POS XYZ/H    
XXXXXXX             XXX 125                       1.0    XX SENSOR MOD/TYPE/ACC 
    3275753.9120   321110.8651  5445041.8829      5.0000 XX SENSOR POS XYZ/H    
        3    HR    PR    TD                                 # / TYPES OF OBSERV 
                                                            END OF HEADER      

Proposed Use

There are several possibilities to organize the header editing configuration file. The clearest form would be to organize it per station. Below you can find a configuration example for the single station POTS covering the whole station history information for Observation and Meteo file header entries.

update_insert:

OM - POTS:

"APPROX POSITION XYZ" : { 0:"3800689.6341", 1:"882077.3857", 2:"5028791.3179" }
"MARKER NAME"         : { 0:"POTS" }
"MARKER NUMBER"       : { 0:"14106M003" }
"OBSERVER / AGENCY"   : { 0:"GFZ", 1:"GFZ" }

"REC # / TYPE / VERS" + 1994274:00000 1996015:86340 : { 0:"289",  1:"ROGUE SNR-8000",      ...}
"REC # / TYPE / VERS" + 1996016:49680 1996151:28380 : { 0:"279",  1:"ROGUE SNR-8000",      ...}
"REC # / TYPE / VERS" + 1996151:28860 1999231:00000 : { 0:"289",  1:"ROGUE SNR-8000",      ...}
"REC # / TYPE / VERS" + 1999232:00000 2000232:00000 : { 0:"281",  1:"AOA SNR-8000 ACT",    ...}
"REC # / TYPE / VERS" + 2000233:00000 2009089:00000 : { 0:"281-U",1:"AOA SNR-8000 ACT",    ...}
"REC # / TYPE / VERS" + 2009089:00000 2011046:61200 : { 0:"1358", 1:"SEPT POLARX2",        ...}
"REC # / TYPE / VERS" + 2011046:61200 2011307:52200 : { 0:"205",  1:"JAVAD TRE_G3TH DELTA",...}
"REC # / TYPE / VERS" + 2011307:52200 2011354:38280 : { 0:"205",  1:"JAVAD TRE_G3TH DELTA",...}
"REC # / TYPE / VERS" + 2011354:38280 2012164:32400 : { 0:"205",  1:"JAVAD TRE_G3TH DELTA",...}
"REC # / TYPE / VERS" + 2012164:32400 2013009:36720 : { 0:"205",  1:"JAVAD TRE_G3TH DELTA",...}
"REC # / TYPE / VERS" + 2013009:36780 2015258:50280 : { 0:"205",  1:"JAVAD TRE_G3TH DELTA",...}
"REC # / TYPE / VERS" + 2015258:50280 0000000:00000 : { 0:"205",  1:"JAVAD TRE_G3TH DELTA",...}

"ANT # / TYPE"        + 1994301:00000 1995276:28800 : { 0:"261", 1:"AOAD/M_T",       2:"NONE" }
"ANT # / TYPE"        + 1995276:28800 2009105:47700 : { 0:"235", 1:"AOAD/M_T",       2:"NONE" }
"ANT # / TYPE"        + 2009105:47700 2011046:61200 : { 0:"354-U",1:"AOAD/M_T",      2:"NONE" }
"ANT # / TYPE"        + 2011046:61200 0000000:00000 : { 0:"316", 1:"JAV_RINGANT_G3T",2:"NONE" }

"ANTENNA: DELTA H/E/N"+ 1994301:00000 1995276:28800 : { 0:"0.046", 1:"0", 2:"0" }
"ANTENNA: DELTA H/E/N"+ 1995276:28800 2009105:47700 : { 0:"0.046", 1:"0", 2:"0" }
"ANTENNA: DELTA H/E/N"+ 2009105:47700 2011046:61200 : { 0:"0.046", 1:"0", 2:"0" }
"ANTENNA: DELTA H/E/N"+ 2011046:61200 0000000:00000 : { 0:"0.121", 1:"0", 2:"0" }

"SENSOR MOD/TYPE/ACC" + 1996254:00000 2006011:00000 + 3:"PR" : { 0:"Vaisala", 1:"PTB100B",... }
"SENSOR MOD/TYPE/ACC" + 2006011:00000 0000000:00000 + 3:"PR" : { 0:"Vaisala", 1:"PTU200", ... }

"SENSOR MOD/TYPE/ACC" + 1996254:00000 2006011:00000 + 3:"HR" : { 0:"Timetech",1:"HC 500", ... }
"SENSOR MOD/TYPE/ACC" + 2006011:00000 0000000:00000 + 3:"HR" : { 0:"Vaisala", 1:"HMP45A-P",.. }

"SENSOR MOD/TYPE/ACC" + 1996254:00000 2006011:00000 + 3:"TD" : { 0:"Timetech",1:"PT100",  ... }
"SENSOR MOD/TYPE/ACC" + 2006011:00000 0000000:00000 + 3:"TD" : { 0:"Vaisala", 1:"HMP45A-P",.. }

Depending on the first data epoch the appropriate header entry is updated.

Remark

There is one exception concerning the RINEX header fields manipulation. According to IGS antenna definition (number, antenna + radome) the "ANT # / TYPE" record consists of 3 columns, which is a deviation from the RINEX standard.

This means the standard (A20,A20) RINEX definition is in gfzrnx handled as (A20,A16,A4). A correction record should be of the following form:

update_insert :
# -------------
POTS:
     "ANT # / TYPE"  : { 0:"30336561", 1:"TRM55971.00", 2:"NONE" }

Complete Header Line(s) Update

For a single line definition, one has to give the label name in double quotes followed by an "+" optional epoch interval string followed by a colon and the 60 char. string to be updated or inserted. The multi-line definition has to be enclosed in square brackets as a comma-separated list of 60 char. strings with one string per line. The square brackets have to be given on the first ([) and last (]) 60 char. string definition line.

"<label>" [+ YYYYMMDD:HHMMSS YYYYMMDD:HHMMSS ] : [ "<60-char. string>",
                                                   "<60-char. string>",
                                                   ...
                                                   "<60-char. string>" ]



update_insert :
#--------------
O - 2015010:00000 0000000:00000 - POTS00DEU:
    "OBSERVER / AGENCY"    :   "Automatic           Deutsches GeoForschungsZentrum (GFZ)    "
    "SYS / PHASE SHIFT"    : [ "G L1C  0.00000                                              ",
                               "J L1C  0.00000                                              ",
                               "J L1X  0.25000                                              ",
                               "E L1X  0.00000                                              ",
                               "C L7I  0.00000                                              ",
                               "R L1P  0.25000                                              ",
                               "R L2C  0.00000                                              ",
                               "R L2P  0.25000                                              ",
                               "G L2X -0.25000                                              ",
                               "G L5X  0.00000                                              "  ]

Please keep in mind that an already existing header label content is completely removed. Only COMMENT header lines are appended.

Remark

COMMENT lines are inserted only

Header Label Independent String Replacement

For the string replacement, the major mode replace has to be used. One has to define the station identifier as before. Afterward, you can define from/to pairs of type regexp or string. The regular expression syntax follows Perl syntax. Each pair element (from/to) should be given on a separate line. The example below shows how to correct an erroneous label name.

replace :
#--------
    ALL:
    regexp_from : "^(.{60})PGM\s*/\s*RUN\s*BY\s*/\s*DATE\s*$"
    regexp_to   : "$1PGM / RUN BY / DATE"
    ALL:
    string_from : "PGM/RUN BY/DATE"
    string_to   : "PGM / RUN BY / DATE"

To remove single header label lines on input use an empty regexp_to (""). To remove all COMMENT lines use:

replace :
#--------
    ALL:
    regexp_from : "^.{60}COMMENT\s*$"
    regexp_to   : ""

To remove lines containing the string "ABC DEF" use:

replace :
#--------
    ALL:
    regexp_from : "^.*ABC DEF.*$"
    regexp_to   : ""

Rename - PRNs

If raw data conversion programs don't assign the right PRN, this can be changed via the "rename: PRN" mode. Here is the crux configuration syntax:

Here are some examples:

rename: prn
#----------

ON - 20140105:000000 20150101:000000 - E51 - E01: ALL
ON - 20140105:000000 00000000:000000 - E52 - E02 : ABC1.ABC2.ABC3

E51 - E01 : ALL
E52 - E02 : ALL

Rename - OBS types

rename: obs
#----------

20140105:000000 20150101:000000 - L2X - L2L - G : ABCD
20140105:000000 20150101:000000 - L2L - L2X - G : ABCD

20140105:000000 20150101:000000 - *2* - *1* - C : ALL
20140105:000000 20150101:000000 - *2  - *1  - C : ALL

20140105:000000 20150101:000000 - **X - **L - C : ALL
20140105:000000 20150101:000000 - *2  - *1  - C : ALL

20140105:000000 20150101:000000 - **X - **L - G04.G08 : ALL
20140105:000000 20150101:000000 - *2  - *1  - G04.G08 : ALL

*2* - *1* - C : ALL
*2  - *1  - C : ALL

Remark

You can use 9-char. station names in crux-config-file for the handling of 4-char. station names too! The replace mode is done directly on input, the update_insert and rename modes are done after the whole header has been read.

Header edit via command line ( -cx_updins )

Single update_insert header edit options can also be provided via command line using the -cx_updins command line parameter, providing a list of edit options. The site definition has to be given before the header label change option.

See an example below Unix:

gfzrnx -finp /data1/VALD00CAN_R_20181001200_01H_30S_MO.rnx \
        -fout /data1/VALD00CAN_R_20181001200_01H_30S_MO.rnx.hded -hded -cx_updins \
'O - VALD: "APPROX POSITION XYZ" : { 0:"3800689.6341", 1:"882077.3857", 2:"5028791.3179" }' \
'O - VALD: "REC # / TYPE / VERS" : { 0 : "", 1 : "JAVAD TRE_G3TH DELTA", 2 : "3.6.3 Jul,01,2017" }'

See an example below Windows (swapped single and double quotes):

gfzrnx -finp /data1/VALD00CAN_R_20181001200_01H_30S_MO.rnx \
       -fout /data1/VALD00CAN_R_20181001200_01H_30S_MO.rnx.hded -hded -cx_updins \
"O - VALD: "APPROX POSITION XYZ" : { 0:'3800689.6341', 1:'882077.3857', 2:'5028791.3179' }" \
"O - VALD: "REC # / TYPE / VERS" : { 0 : '', 1 : 'JAVAD TRE_G3TH DELTA', 2 : '3.6.3 Jul,01,2017' }"

Remark

Please pay attention to the different single/double quote usage on Windows- and Unix-based operating systems. Please check in advance with -show_crux the acceptance of your header edit options due to the mixture of different quotation marks after -cx_updins.

gfzrnx -show_crux -cx_updins \
'O - VALD: "APPROX POSITION XYZ" : { 0:"3800689.6341", 1:"882077.3857", 2:"5028791.3179" }' \
'O - VALD: "REC # / TYPE / VERS" : { 0 : "", 1 : "JAVAD TRE_G3TH DELTA", 2 : "3.6.3 Jul,01,2017" }'

Remark

COMMENT lines are inserted only

Internal/Data Headers via crux-file ( -cx_addinthd )

Metadata changes following e.g. hardware changes can be introduced at the event epochs into the data part of a RINEX file if information is found in the crux-file. This mechanism can be activated additionally to the normal header edit operations via the -cx_addinthd command line parameter for update_insert crux-settings.

Here is an example:

gfzrnx -cx_addinthd -crux obwt_crux.txt -finp obwt107g.18o -fout obwt107g.18o_crx

The following crux-configuration

update_insert:
O - 20141105:071700 20180417:060500 - OBWT:
    "REC # / TYPE / VERS"   : { 0: "4831K57521", 1: "TRIMBLE NETR5", 2: "Nav 4.87 / Boot 4.18"}
    "ANT # / TYPE"          : { 0: "30767802",   1: "TRM55971.00",   2: "TZGD"}
O - 20180417:061500 00000000:000000 - OBWT:
    "REC # / TYPE / VERS"   : { 0: "1705310",    1: "LEICA GR30",    2: "4.20.232"}
    "ANT # / TYPE"          : { 0: "09440002",   1: "LEIAR25.R3",    2: "LEIT" }

will lead to file header records of e.g.:

4831K57521            TRIMBLE NETR5       Nav 4.87 / Boot 4.18REC # / TYPE / VERS
30767802              TRM55971.00     TZGD                        ANT # / TYPE        

and a header block in the data part of a RINEX-2 file of:

    23913577.070   127921488.413 6  99494529.138 8  23913582.523          42.100  
        33.300  
    23773818.648   127129528.196 4                                        38.700  

    18 04 17 06 15 00.0000000  4  2
1705310                  LEICA GR30          4.20.232             REC # / TYPE / VERS 
09440002                 LEIAR25.R3      LEIT                     ANT # / TYPE        
    18 04 17 06 15 00.0000000  0 16G02G05G07G09G13G27G28G30R06R07R08R09
                                R10R16R23R24
    24247477.484   127421298.588 6  99289349.307 6  24247479.359          42.200  
        25.500  
    21028794.141   110507030.196 7  86109402.765 9  21028797.266          49.300  

Remark

Windows users should swap single and double quotes using -cx_addinthd similar to -cx_updins command line options.

Manipulate Header Version Number ( -vnum )

By default, the latest supported version number is used for the "RINEX VERSION / TYPE" header element, and there are made manipulations to fit this version. If a special version number is needed (for whatever reason) one can use the -vnum command line parameter to manipulate the version number to a certain value.

     3.04          OBSERVATION DATA    M                   RINEX VERSION / TYPE
gfzrnx -finp ... -vnum 3.03
     3.03          OBSERVATION DATA    M                   RINEX VERSION / TYPE

This will change the default output header value e.g. 3.04 to the wished value of 3.03.

Remark

The -vnum version number change is only a formal exchange of the version number to meet any conditions of external software. The file content will be still conform to the highest supported version number!