{"id":18818985,"url":"https://github.com/geoscienceaustralia/gnssanalysis","last_synced_at":"2026-03-12T01:07:15.910Z","repository":{"id":216238975,"uuid":"731361000","full_name":"GeoscienceAustralia/gnssanalysis","owner":"GeoscienceAustralia","description":"basic python module for gnss analysis","archived":false,"fork":false,"pushed_at":"2026-03-03T04:05:09.000Z","size":1265,"stargazers_count":39,"open_issues_count":10,"forks_count":13,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-03-03T08:30:37.321Z","etag":null,"topics":["coordinate-systems","coordinate-transformation","crustal-deformation","data","data-analysis","data-analysis-python","geodesy","geodesy-functions","geophysics","geospatial","gnss","gnss-signals","gps","gps-data","transformation"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/gnssanalysis/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GeoscienceAustralia.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-12-13T23:00:28.000Z","updated_at":"2026-02-18T06:09:20.000Z","dependencies_parsed_at":"2024-04-01T23:27:16.638Z","dependency_job_id":"c19dff91-15a5-4f39-8322-39b0b79b2761","html_url":"https://github.com/GeoscienceAustralia/gnssanalysis","commit_stats":{"total_commits":50,"total_committers":7,"mean_commits":7.142857142857143,"dds":0.6799999999999999,"last_synced_commit":"887da53f50b35ea4174ce72a85637414966ef360"},"previous_names":["geoscienceaustralia/gnssanalysis"],"tags_count":33,"template":false,"template_full_name":null,"purl":"pkg:github/GeoscienceAustralia/gnssanalysis","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GeoscienceAustralia%2Fgnssanalysis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GeoscienceAustralia%2Fgnssanalysis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GeoscienceAustralia%2Fgnssanalysis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GeoscienceAustralia%2Fgnssanalysis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GeoscienceAustralia","download_url":"https://codeload.github.com/GeoscienceAustralia/gnssanalysis/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GeoscienceAustralia%2Fgnssanalysis/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30410366,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-12T00:40:14.898Z","status":"ssl_error","status_checked_at":"2026-03-12T00:40:08.439Z","response_time":84,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["coordinate-systems","coordinate-transformation","crustal-deformation","data","data-analysis","data-analysis-python","geodesy","geodesy-functions","geophysics","geospatial","gnss","gnss-signals","gps","gps-data","transformation"],"created_at":"2024-11-08T00:19:43.669Z","updated_at":"2026-03-12T01:07:15.893Z","avatar_url":"https://github.com/GeoscienceAustralia.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gnssanalysis\nThe package encompasses various GNSS-related functionality such as efficient reading and writing GNSS files (e.g. SINEX, SP3, CLK, IONEX and many others), advanced analysis and comparison, various coordinate transformations including geodetic frame rotations, predictions and combinations.\nPackage  Solver.\n\n## Install\n\n```bash\npip install gnssanalysis\n```\n\n\n\n### File formats supported\n- BLQ\n- BSX/BIA\n- CLK\n- ERP\n- IONEX\n- NANU\n- RINEX\n- SINEX (including discontinuity, post-seismic file formats)\n- SP3\n- TROP\n- GINAN proprietary formats: PEA partials, POD output, STEC and TRACE\n\n# Standalone utilities\nThere is a set of standalone utilities installed together with the module module which are build on top of gnssanalysis.\n\n## diffutil\nA utility originally created for automated testing of the computed GNSS files relative to the known good solution files.\nThe simplest use case for the `diffutil` is to call it with two GNSS files specified after `-i`:\n```bash\ndiffutil -i file1 file2\n```\n`diffutil` parses files' extensions and automatically calls a command needed, e.g. `sp3` for `file.sp3`. It is also possible to specify the command manually in case file extensions are non-standard or missing.\n\n```bash\ndiffutil -i file1 file2 sp3 # sp3 is a command inside diffutil\n```\n\n## snxmap\nReads any number of sinex files given, specifically the SITE/ID block and creates an interactive html map with all the stations plotted. Every file will get a unique color marker, with decreasing size for each additional marker, constructing \"lollipops\" at common stations. This allows seeing intersections of stations within files to be easily seen.\nThe sinex files may also be compressed (either .Z or .gz)\n\nHow to use:\n```bash\nsnxmap snxfile1 snxfile2.Z snxfile3.gz\n```\n`-o path_to_output`\n\n## sp3merge\nMerges any number of sp3 files together creating sp3 file of any length. Could also accept clk files to populate merged sp3 with clock offset values.\n\nHow to use:\n```bash\nsp3merge -s file1.sp3 file2.sp3.Z file3.sp3.gz -c file1.clk file2.clk.Z file3.clk.gz\n```\n## log2snx\nA utility to parse collection of igs-format station files and create a sinex file with required station information - location, station hardware etc. \n\nHow to use:\n```bash\nlog2snx -l \"~/logfiles/*/*log\"\n```\n\n\n## trace2mongo (needs update)\nConverts tracefile to the mongo database that is compatible with Ginan's mongo output for EDA\n\n## gnss-filename\nDetermines appropriate filename for GNSS based on the content\n\n\n## orbq\nCompares two sp3 files and outputs statistics to the terminal window.\n\nHow to use:\n```bash\norbq -i IGS2R03FIN_20191990000_01D_05M_ORB.SP3 TUG0R03FIN_20191990000_01D_05M_ORB.SP3\n```\nResult:\n```\nPRN     R_RMS   A_RMS   C_RMS   dX_RMS  dY_RMS  dZ_RMS  1D_MEAN 3D_RMS\nE01     0.01429 0.00629 0.0077  0.01116 0.00894 0.00993 0.01001 0.01741\nE02     0.01931 0.01063 0.01009 0.01564 0.01332 0.01288 0.01395 0.02424\nE03     0.0207  0.01334 0.00935 0.0139  0.01909 0.01168 0.01489 0.02634\n...\n=======================================================================\n        R_RMS   A_RMS   C_RMS   dX_RMS  dY_RMS  dZ_RMS  1D_MEAN 3D_RMS\nAVG     0.01155 0.01536 0.01346 0.01504 0.01443 0.01277 0.01408 0.02485\nSTD     0.01045 0.02978 0.01767 0.02065 0.02253 0.01809 0.02017 0.03522\nRMS     0.01553 0.03334 0.02212 0.02543 0.02663 0.02205 0.02449 0.04292\n\n```\n\n## clkq\nCompares two clk files and outputs statistics to the terminal window.\nHow to use:\n```bash\nclkq -i IGS2R03FIN_20191990000_01D_30S_CLK.CLK COD0R03FIN_20191990000_01D_30S_CLK.CLK\n```\nResult:\n```\nINFO:root:filtering using 10.00 hard cutoff on the detrended data. [99.99% data left]\nINFO:root:filtering using 3.00*sigma cut on the detrended data. [99.99% data left]\nINFO:root:clkq\nCODE    AVG     STD     RMS\nE01     3.6127  0.0469  3.613\nE02     3.5929  0.0469  3.5932\nE03     3.6221  0.042   3.6224\n...\n==============================\nGNSS    AVG     STD     RMS\nE       3.6075  0.0595  3.608\nG       -0.0621 0.0663  0.0909\nR       6.1658  0.3282  6.1746\n```\n### Reject satellites\nYou are able to provide a regex to reject satellites, e.g.:\n```bash\nclkq -i IGS2R03FIN_20191990000_01D_30S_CLK.CLK COD0R03FIN_20191990000_01D_30S_CLK.CLK --reject \"G18\"\n```\nResult:\n```\nNFO:root:Excluding satellites based on regex expression: 'G18'\nINFO:root:Removed the following satellites from first file: '['G18']'\nINFO:root:Removed the following satellites from second file: '['G18']'\nINFO:root:filtering using 10.00 hard cutoff on the detrended data. [100.00% data left]\nINFO:root:filtering using 3.00*sigma cut on the detrended data. [100.00% data left]\nINFO:root:clkq\nCODE    AVG     STD     RMS\nE01     3.6127  0.0469  3.613\nE02     3.5929  0.0469  3.5932\n...\n```\n### Normalisation Procedure\nAnd you are also able to provide a normalisation parameter to choose how the data is normalised (daily, epoch), e.g.:\n```bash\nclkq -i IGS2R03FIN_20191990000_01D_30S_CLK.CLK COD0R03FIN_20191990000_01D_30S_CLK.CLK --norm \"daily\"\n```\nResult:\n```\nINFO:root::_clk_compare:using ['daily'] clk normalization\nINFO:root:---removing common mode from clk 1---\nINFO:root:Using daily offsets for common mode removal\nINFO:root:---removing common mode from clk 2---\nINFO:root:Using daily offsets for common mode removal\nINFO:root:filtering using 10.00 hard cutoff on the detrended data. [99.99% data left]\nINFO:root:filtering using 3.00*sigma cut on the detrended data. [99.99% data left]\nINFO:root:clkq\nCODE    AVG     STD     RMS\nE01     -0.1216 0.0469  0.1303\nE02     -0.1214 0.0469  0.1302\nE03     -0.1216 0.042   0.1286\n...\n```\nThese can also be stacked:\n```bash\nclkq -i IGS2R03FIN_20191990000_01D_30S_CLK.CLK COD0R03FIN_20191990000_01D_30S_CLK.CLK --norm \"daily\" --norm \"epoch\"\n```\nResult:\n```\nINFO:root::_clk_compare:using ['daily', 'epoch'] clk normalization\nINFO:root:---removing common mode from clk 1---\nINFO:root:Using daily offsets for common mode removal\nINFO:root:Using epoch normalization (mean gnss) offsets for common mode removal\nINFO:root:---removing common mode from clk 2---\nINFO:root:Using daily offsets for common mode removal\nINFO:root:Using epoch normalization (mean gnss) offsets for common mode removal\nINFO:root:filtering using 10.00 hard cutoff on the detrended data. [99.99% data left]\nINFO:root:filtering using 3.00*sigma cut on the detrended data. [99.99% data left]\nINFO:root:clkq\nCODE    AVG     STD     RMS\nE01     -0.0    0.0149  0.0149\nE02     -0.0    0.0191  0.0191\nE03     -0.0    0.0076  0.0076\n...\n```\n\n# Some usage examples\n\n## Combination of sinex solutions files\nCombination of with a frame file projected to a midday of a date of interest\nUsage examples:\n\n- Daily comnination with frame_of_day centered at midday\n```python\nfrom gnssanalysis import gn_combi\ndaily_comb_neq = gn_combi.addneq(snx_filelist=_glob.glob('/data/cddis/2160/[!sio][!mig]*0.snx.Z'),frame_of_day=frame_of_day)\n```\n\n- Weekly combination with frame_of_day centered at week's center:\n```python\nweekly_comb_neq = gn_combi.addneq(snx_filelist=_glob.glob('/data/cddis/2160/[!sio][!mig]*.snx.Z'),frame_of_day=frame_of_day)\n```\n\n The frame of day could be generated using a respective function from `gn_frame` module:\n```python\nfrom gnssanalysis import gn_frame, gn_datetime\n\nframe_datetime = gn_datetime.gpsweeksec2datetime(2160,43200)\n\nframe_of_day = gn_frame.get_frame_of_day(date_or_j2000=frame_datetime, itrf_path_or_df = '/data/cddis/itrf2014/ITRF2014-IGS-TRF.SNX.gz',discon_path_or_df='/data/cddis/itrf2014/ITRF2014-soln-gnss.snx',psd_path_or_df='/data/cddis/itrf2014/ITRF2014-psd-gnss.snx')\n ```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeoscienceaustralia%2Fgnssanalysis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgeoscienceaustralia%2Fgnssanalysis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeoscienceaustralia%2Fgnssanalysis/lists"}