{"id":18739717,"url":"https://github.com/roblabs/teqc","last_synced_at":"2026-01-25T12:02:14.734Z","repository":{"id":136165421,"uuid":"585346053","full_name":"roblabs/teqc","owner":"roblabs","description":"Notes on how to use `teqc` with Leica GG04 files.","archived":false,"fork":false,"pushed_at":"2023-01-30T21:47:04.000Z","size":42,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"trunk","last_synced_at":"2026-01-16T02:45:46.407Z","etag":null,"topics":["gg04","glonass","gps","leica","teqc","unavco"],"latest_commit_sha":null,"homepage":"https://RobLabs.com/teqc","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/roblabs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-01-04T23:54:34.000Z","updated_at":"2023-01-31T16:09:22.000Z","dependencies_parsed_at":"2023-12-07T21:00:16.796Z","dependency_job_id":null,"html_url":"https://github.com/roblabs/teqc","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/roblabs/teqc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roblabs%2Fteqc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roblabs%2Fteqc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roblabs%2Fteqc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roblabs%2Fteqc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/roblabs","download_url":"https://codeload.github.com/roblabs/teqc/tar.gz/refs/heads/trunk","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roblabs%2Fteqc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28752671,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-25T10:25:12.305Z","status":"ssl_error","status_checked_at":"2026-01-25T10:25:11.933Z","response_time":113,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gg04","glonass","gps","leica","teqc","unavco"],"created_at":"2024-11-07T15:37:07.789Z","updated_at":"2026-01-25T12:02:14.718Z","avatar_url":"https://github.com/roblabs.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"[\u003cimg src=\"https://avatars.githubusercontent.com/u/118112\" style=\"border-radius:2px\" width=\"20\" /\u003e](https://roblabs.com)\n[![GitHub Repo Source](https://img.shields.io/github/stars/roblabs/teqc?label=Source\u0026style=social)](https://github.com/roblabs/teqc)\n![GitHub](https://img.shields.io/github/license/roblabs/teqc)\n\n\u003e \"TEQC (**Translation, Editing and Quality Checking**) — is [UNAVCO]-designed and supported for a variety of [GPS]/[GNSS] pre-processing and quick post-processing tasks, including translation to [RINEX] or BINEX, time windowing, satellite filtering, metadata correction, dataset merging or splitting, and GPS/GNSS quality checking of the data including coarse point-positioning.\"\n\n\u003e \"[Teqc] (pronouced \"tek\") is a simple yet powerful and unified approach to solving many pre-processing problems with [GPS], GLONASS, Galileo, SBAS, Beidou, QZSS, and IRNSS data, especially in [RINEX] or BINEX format:\"\n\n---\n\n## Definitions\n\nThe Teqc documenation has an excellent glossary of terms they use in the `teqc` software.  Of note for this blog post are:\n\n* decimate - \"*modulo decimation of OBS epochs to # time units*\"\n* [epoch] - \"*a specific time instance, using the GPS time basis or the time basis from another constellation*\"\n* [GPS] - \"*'**G**lobal **P**ositioning **S**ystem'; a specific spaceborne radionavigation system financed and operated by the U.S. Department of Defense*\"\n* [RINEX] - \"*'**R**eceiver **In**dependent **Ex**change'; ASCII exchange representation of [GNSS] data and metadata*\"\n* [SV] - \"*'**S**pace **V**ehicle', referring originally to a specific Navstar GPS satellite, but now used to refer to any one of the Navstar GPS, GLONASS, Beidou/Compass, Galileo, QZSS, IRNSS, or SBAS satellites*\"\n\n## Getting Started\n\nDownload binaries for macOS, Linux, Windows and others from the [Teqc](https://www.unavco.org/software/data-processing/teqc/teqc.html) site.  You can also find documentation \u0026 tutorials at that site.\n\n```bash\nteqc -version\n\n# executable:  teqc\n# version:     teqc  2019Feb25\n```\n\n---\n\n## Example\n\n### Example of converting [Leica](https://leica-geosystems.com/en-us) file in the `.m00` format.\n\n#### `teqc` Help \n\nYou can filter help results for *leica*.\n\n```bash\nteqc -help | grep lei\n```\n\n```console\n \t-lei[ca] code        input is from Leica receiver, record type 'code':\n\t                       code = ds for Leica DS format\n\t                       code = lb2 for Leica LB2 format\n\t                       code = mdb for Leica MDB format\n```\n\n---\n\n#### Convert Leica to RINEX\n\n```bash\n# The output RINEX file could be `.obs`\n# You may also see it in the format of `.yyo`, where yy = 22.  E.g, `.22o`\n\n# Use either of these commands.  The record type is `mdb`\nteqc -lei   mdb GNSS202235660778.m00 \u003e GNSS202235660778.obs\nteqc -leica mdb GNSS202235660778.m00 \u003e GNSS202235660778.obs\n```\n\n```bash\n     2.11           OBSERVATION DATA    M (MIXED)           RINEX VERSION / TYPE\nteqc  2019Feb25                         20230105 00:07:30UTCPGM / RUN BY / DATE\nOSX ker:10.11.6|Core i5|gcc 4.3 -m64|OSX ker:10.10+|=+      COMMENT\nBIT 2 OF LLI FLAGS DATA COLLECTED UNDER A/S CONDITION       COMMENT\n-Unknown-                                                   MARKER NAME\n-Unknown-           -Unknown-                               OBSERVER / AGENCY\n287551              LEICA               7.500/4.000         REC # / TYPE / VERS\n-Unknown-           -Unknown-       NONE                    ANT # / TYPE\n        0.0000        0.0000        0.0000                  APPROX POSITION XYZ\n        2.0000        0.0000        0.0000                  ANTENNA: DELTA H/E/N\n     1     1                                                WAVELENGTH FACT L1/2\n     6    L1    L2    C1    P2    S1    S2                  # / TYPES OF OBSERV\n     1.0000                                                 INTERVAL\nGNSS Survey                                                 COMMENT\nGNSS Survey                                                 COMMENT\nProject creator:                                            COMMENT\nLeica Geosystems AG                                         COMMENT\n SNR is mapped to RINEX snr flag value [0-9]                COMMENT\n  L1 \u0026 L2: min(max(int(snr_dBHz/6), 0), 9)                  COMMENT\n  2022    12    22    16    53   18.0000000     GPS         TIME OF FIRST OBS\n    18                                                      LEAP SECONDS\n                                                            END OF HEADER\n 22 12 22 16 53 18.0000000  0 22G31G22G03G04G21G01G26G32G16S31S33S35\n```\n\n---\n\n### decimate\n\nDecimate the file from 1 sec to 30 seconds.\n\n```bash\nteqc -help | grep dec\n```\n\n\u003e\t\t`-O.dec[imate] interval[:offset]          modulo decimation of OBS epochs to interval time units (default in seconds),`\n\n```bash\nteqc -O.dec 30 GNSS202235660778.obs \u003e GNSS202235660778.30.obs\n```\n\n#### Results\n\nThis reduces a *1 second* file from 32 MB to a *30 second* file down to 1.1 MB.  You can inspect the `.obs` file for `COMMENT` and see that the decimation is now 30 seconds.\n\n*Analyze the RINEX output, focusing on decimation and excluded satellites.*\n\n```console\nll -h *.obs\n\n# result of Linux listing of OBS files to determine file size, human readable\n-rw-r--r--  1 roblabs  staff   1.1M Jan  4 16:24 GNSS202235660778.30.obs\n-rw-r--r--  1 roblabs  staff    32M Jan  4 16:16 GNSS202235660778.obs\n\n# ---\n\ncat GGNSS202235660778.30.obs | grep COMMENT\n\n# result of Linux regular expression (grep)\nteqc  2019Feb25                         20230105 00:16:58UTCCOMMENT\nBIT 2 OF LLI FLAGS DATA COLLECTED UNDER A/S CONDITION       COMMENT\nGNSS Survey                                                 COMMENT\nGNSS Survey                                                 COMMENT\nProject creator:                                            COMMENT\nLeica Geosystems AG                                         COMMENT\n SNR is mapped to RINEX snr flag value [0-9]                COMMENT\n  L1 \u0026 L2: min(max(int(snr_dBHz/6), 0), 9)                  COMMENT\nForced Modulo Decimation to 30 seconds                      COMMENT\n```\n\n---\n\n### Decimate \u0026 GPS Only\n\nOur goal here is to do two operations in the same `teqc` command:  _decimate_ \u0026 convert only the GPS data in the original file.\n\nYou can call `teqc` with multiple flags (or sometimes called switches).  This will be important if, for example, you want to convert with the following options:\n\n1.  Convert to [RINEX]\n2.  decimate down to 30 seconds\n3.  Only use [SV]s from [GPS].  That is, _filter out_ other constellations such as GLONASS, etc.\n\nFirst, we need to understand how to _filter out_ or remove from the RINEX the constellations that we don't want.\n\nLet's look at how the help information from the `teqc` executable is displayed.\n\n```\nteqc -help | grep use\\ any\n```\n\n        -G                   don't use any GPS SVs\n        -R                   don't use any GLONASS SVs\n        -S                   don't use any SBAS SVs\n        -E                   don't use any Galileo SVs\n        -C                   don't use any Beidou SVs\n        -J                   don't use any QZSS SVs\n        -I                   don't use any IRNSS SVs\n\n\nThe [Teqc Tutorial](https://www.unavco.org/software/data-processing/teqc/doc/UNAVCO_Teqc_Tutorial.pdf) from unavco.org has this documentation about excluding GLONASS(**R**), GALILEO(**E**), and SBAS(**S**), but leaving all GPS(G): \n\n```bash\n# These flags can explicity used to remove some constellations.\n# See page 12 of the PDF documentation for details\n# -R                   don't use any GLONASS SVs\n# -S                   don't use any SBAS SVs\n# -E                   don't use any Galileo SVs\nteqc -R -E -S +obs + +nav +,+ -tbin 1d tbinoutput inputfiles\n```\n\n#### Command\n\nNow we can put together decmitate and save GPS only.\n\n```bash\nteqc -O.dec 30 -R -E -S -C -J GNSS202235660778.obs \u003e GNSS202235660778.30.GPS.obs\n```\n\n#### Results\n\n* As we saw with just [_decimate_](#decimate), we reduced a 32 MB *1-second* file down to a *30-second* file at 1.1 MB.\n* Now with _decimate_ and _GPS Only_, we reduced a 32 MB file down to 423K.\n* You can review the comments in the RINEX file that shows which satellites were excluded.\n\n*Analyze the RINEX output, focusing on decimation and excluded satellites.*\n\n```console\nll -h *.obs\n\n# result of Linux listing of OBS files to determine file size, human readable\n-rw-r--r--  1 roblabs  staff    32M Jan  4 16:16 GNSS202235660778.obs\n-rw-r--r--  1 roblabs  staff   1.1M Jan  4 16:24 GNSS202235660778.30.obs\n-rw-r--r--  1 roblabs  staff   423K Jan 12 18:11 GNSS202235660778.30.GPS.obs\n\n# ---\n\ncat GNSS202235660778.30.GPS.obs | grep COMMENT\n\n# result of Linux regular expression (grep)\nteqc  2019Feb25                         20230105 00:16:58UTCCOMMENT\nBIT 2 OF LLI FLAGS DATA COLLECTED UNDER A/S CONDITION       COMMENT\nGNSS Survey                                                 COMMENT\nGNSS Survey                                                 COMMENT\nProject creator:                                            COMMENT\nLeica Geosystems AG                                         COMMENT\n SNR is mapped to RINEX snr flag value [0-9]                COMMENT\n  L1 \u0026 L2: min(max(int(snr_dBHz/6), 0), 9)                  COMMENT\nForced Modulo Decimation to 30 seconds                      COMMENT\nteqc edited: all GLONASS satellites excluded                COMMENT\nteqc edited: all SBAS satellites excluded                   COMMENT\nteqc edited: all Galileo satellites excluded                COMMENT\nteqc edited: all Beidou satellites excluded                 COMMENT\nteqc edited: all QZSS satellites excluded                   COMMENT\n```\n\n---\n\n### `meta`\n\nYou can use the metadata extraction options `+meta`.\n\nInterrogate the file native m00 file\n\n```bash\nteqc +meta GNSS202235660778.m00\n```\n\nResult:\n\n\u003e week: 2255\n\n---\n\nOnce you have decimate'd the file \u0026 filtered the SVs for *GPS Only*, you can use `+meta` to get a summary of the RINEX file.\n\n\n```console\nteqc +meta GNSS202235660778.30.GPS.obs\n\n# result of metadata extraction\nfilename:                GNSS202235660778.30.GPS.obs\nfile format:             RINEX\nfile size (bytes):       432666\nstart date \u0026 time:       2022-12-22 16:53:30.000\nfinal date \u0026 time:       2022-12-22 21:17:30.000\nsample interval:         30.0000\npossible missing epochs: 0\n4-char station code:     GNSS\nstation name:            -Unknown-\nstation ID number:       \nantenna ID number:       -Unknown-\nantenna type:            -Unknown-       NONE\nantenna latitude (deg):   90\nantenna longitude (deg):   0\nantenna elevation (m):   -6356752.3142\nantenna height (m):      2.0000\nreceiver ID number:      287551\nreceiver type:           LEICA\nreceiver firmware:       7.500/4.000\nRINEX version:           2.11\nRINEX translator:        teqc  2019Feb25\ntrans date \u0026 time:       2023-01-13 02:11:36.000\n```\n\n[epoch]:  https://www.unavco.org/help/glossary/glossary.html#epoch\n[GNSS]:   https://www.unavco.org/help/glossary/glossary.html#GNSS\n[GPS]:    https://www.unavco.org/help/glossary/glossary.html#GPS\n[RINEX]:  https://www.unavco.org/help/glossary/glossary.html#RINEX\n[SV]:     https://www.unavco.org/help/glossary/glossary.html#SV\n[Teqc]:   https://www.unavco.org/software/data-processing/teqc/teqc.html\n[UNAVCO]: https://www.unavco.org\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Froblabs%2Fteqc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Froblabs%2Fteqc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Froblabs%2Fteqc/lists"}