{"id":37083221,"url":"https://github.com/gasflux/gasflux","last_synced_at":"2026-01-14T10:06:15.254Z","repository":{"id":233280049,"uuid":"597869396","full_name":"gasflux/gasflux","owner":"gasflux","description":"Algorithms for deriving gas emissions flux from mobile atmospheric measurements","archived":false,"fork":false,"pushed_at":"2025-05-23T14:10:42.000Z","size":343,"stargazers_count":4,"open_issues_count":14,"forks_count":0,"subscribers_count":2,"default_branch":"develop","last_synced_at":"2025-11-08T13:17:55.790Z","etag":null,"topics":["ch4","co2","drones","emissions","gas","mass-balance","methane","so2","uav"],"latest_commit_sha":null,"homepage":"https://gasflux.github.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gasflux.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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}},"created_at":"2023-02-05T21:38:11.000Z","updated_at":"2025-08-03T19:36:09.000Z","dependencies_parsed_at":"2025-05-23T12:57:11.774Z","dependency_job_id":"841977d0-2402-44f8-bf03-41d394f30c7d","html_url":"https://github.com/gasflux/gasflux","commit_stats":null,"previous_names":["gasflux/gasflux"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/gasflux/gasflux","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gasflux%2Fgasflux","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gasflux%2Fgasflux/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gasflux%2Fgasflux/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gasflux%2Fgasflux/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gasflux","download_url":"https://codeload.github.com/gasflux/gasflux/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gasflux%2Fgasflux/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28416497,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T08:38:59.149Z","status":"ssl_error","status_checked_at":"2026-01-14T08:38:43.588Z","response_time":107,"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":["ch4","co2","drones","emissions","gas","mass-balance","methane","so2","uav"],"created_at":"2026-01-14T10:06:14.331Z","updated_at":"2026-01-14T10:06:15.249Z","avatar_url":"https://github.com/gasflux.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n[![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0)\n[![Tests](https://github.com/gasflux/gasflux/workflows/CI/badge.svg)](https://github.com/gasflux/gasflux/actions?query=workflow%3A%22CI%22)\n[![linting - Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v0.json)](https://github.com/charliermarsh/ruff)\n[![format - Black](https://img.shields.io/badge/format-black-000000.svg)](https://github.com/psf/black)\n[![types - mypy](https://img.shields.io/badge/types-mypy-blue.svg)](https://github.com/python/mypy)\n\n# GasFlux\n\n`pip install gasflux` \\\n`gasflux --help`\n\nGasFlux is a tool for processing atmospheric gas concentration data and windspeeds into mass emissions fluxes, with principle applications to greenhouse gas measurement and vulcanology. Currently it works with in situ (\"sniffing\") data from UAVs and other aircraft, using mass balance as a paradigm and kriging as an interpolation strategy, but the intention is to expand this to other kinds of sampling and processing strategies, such as open-path and tracer methods.\n\nIt is released under the AGPLv3 license as a free and open-source project - comments, pull requests, issues and co-development are warmly welcomed. Currently development is co-ordinated by Jamie McQuilkin ([@pipari](https://github.com/pipari)) at the UAV Greenhouse Gas group at the University of Manchester.\n\n## User Installation\n\nThe package is available on PyPi and can be installed using `pip install gasflux`.\n\n## Usage\n\nThe package interface is in active development. Currently it ingests a data csv file (or folder containing only data csv files) and a config file that dictates the parameters of the analysis.\n\nThis is done through the syntax `gasflux process \u003cinput_file\u003e --config \u003cconfig_file\u003e`.\n\n### The config file\n\nThe default gasflux_config.yaml is located in the package source. It can be generated in a supplied directory using `gasflux generate-config \u003cpath\u003e`. If a directory is supplied to `gasflux process` and a config is not also explicitly supplied, the package will look for one config file in that directory or its subdirectories and attempt to process all csv files in that directory and subdirectories. If multiple or no config is found, it will raise an error. If supplying a single csv file for processing (rather than a directory), only the parent directory will be searched for config files (not its subdirectories).\n\nThrough it, variables can be passed to the [scikit-gstat](https://scikit-gstat.readthedocs.io/en/latest/) package used for kriging and the [pybaselines](https://pybaselines.readthedocs.io/en/latest/) package used for background correction.\n\n### The data file\n\nInput data files must be csv-type (i.e. readable by `pandas`) and have the following columns (all lower case):\n\n- `timestamp` (datetime)\n- `latitude` (float)\n- `longitude` (float)\n- `height_ato` (float) - height above takeoff\n- `windspeed` (float) - in m/s, as measured or inferred at each measurement point\n- `winddir` (float) - in standard 0-360 degree format, relative to the earth\n- `temperature` (float) in degrees celsius\n- `pressure` (float) - in hPa/mBar\n\nAt least one gas concentration in ppm is also required. The column name should be the gas name, e.g. `co2`, `ch4`, `n2o`, etc.\n\nThe gas should be entered in the gasflux_config.yaml file along with a range of concentrations in ppmv, e.g.:\n\n```\ngases:\n  ch4: [1.5, 500]\n  co2: [300, 5000]\n  c2h6: [-0.5, 10]\n```\n\nEnsuring input data are sufficient and correctly formatted is non-trivial and important, but is left to the user. Data sources vary enormously so it is difficult to generalise this part of the analysis - in many cases these will be a mix of flight logs, GPS, one or more anemometers, one or more gas sensors, a thermometer, hygrometer, barometer.\n\nSynchronisation and fusion of these data sources is important and should be given great attention - there are several ways to do this, including GPS logging on each sensor, recording everything on a single device, or NTP server synchronisation. Care should also be taken to avoid loss of data through resampling or interpolation.\n\nOne way to convert encoded DJI logs is to use `djiparsetext`, a C++ library available on github [here](https://github.com/uav4geo/djiparsetxt) and documented [here](http://djilogs.live555.com/).\n\n## Development\n\n### Installation\n\nTo install, clone the repository using e.g. `git clone` and use  `pip install -e .` to install it as an editable python package.\n\nIt's highly recommended to use a virtual environment to manage dependencies. If you're not currently using one, [virtualenvwrapper](https://virtualenvwrapper.readthedocs.io/en/latest/install.html) is a good option.\n\nThen run `pip install -r requirements.txt` and `pip install -r dev-requirements.txt` to install the required dependencies.\n\nUser requirements.txt is generated using `pigar generate` rather than `pip freeze`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgasflux%2Fgasflux","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgasflux%2Fgasflux","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgasflux%2Fgasflux/lists"}