{"id":23586808,"url":"https://github.com/hammerling-research-group/placement","last_synced_at":"2026-02-27T03:31:51.055Z","repository":{"id":258649717,"uuid":"866612890","full_name":"Hammerling-Research-Group/placement","owner":"Hammerling-Research-Group","description":"Production code for Sensor Placement Optimization","archived":false,"fork":false,"pushed_at":"2025-05-07T19:43:32.000Z","size":13507,"stargazers_count":2,"open_issues_count":2,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-07-23T03:33:31.216Z","etag":null,"topics":["cms","continuous-monitoring-sensor","emissions","oil-and-gas","optimization","python"],"latest_commit_sha":null,"homepage":"https://ams.mines.edu/hammerling-research-group/research/placement","language":"Python","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/Hammerling-Research-Group.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}},"created_at":"2024-10-02T15:12:38.000Z","updated_at":"2025-05-07T19:43:36.000Z","dependencies_parsed_at":"2025-07-23T03:33:15.406Z","dependency_job_id":null,"html_url":"https://github.com/Hammerling-Research-Group/placement","commit_stats":null,"previous_names":["hammerling-research-group/placement"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Hammerling-Research-Group/placement","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hammerling-Research-Group%2Fplacement","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hammerling-Research-Group%2Fplacement/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hammerling-Research-Group%2Fplacement/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hammerling-Research-Group%2Fplacement/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Hammerling-Research-Group","download_url":"https://codeload.github.com/Hammerling-Research-Group/placement/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hammerling-Research-Group%2Fplacement/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29883703,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-26T23:51:21.483Z","status":"online","status_checked_at":"2026-02-27T02:00:06.759Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["cms","continuous-monitoring-sensor","emissions","oil-and-gas","optimization","python"],"created_at":"2024-12-27T04:14:16.371Z","updated_at":"2026-02-27T03:31:51.041Z","avatar_url":"https://github.com/Hammerling-Research-Group.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# placement\n*Production code for Sensor Placement Optimization*\n\n[![CI tests](https://github.com/Hammerling-Research-Group/placement/actions/workflows/CI%20tests.yml/badge.svg)](https://github.com/Hammerling-Research-Group/placement/actions/workflows/CI%20tests.yml)\n[![Check Link Rot](https://github.com/Hammerling-Research-Group/placement/actions/workflows/check-link-rot.yaml/badge.svg)](https://github.com/Hammerling-Research-Group/placement/actions/workflows/check-link-rot.yaml)\n[![Spell Check](https://github.com/Hammerling-Research-Group/placement/actions/workflows/spellcheck.yml/badge.svg)](https://github.com/Hammerling-Research-Group/placement/actions/workflows/spellcheck.yml)\n[![GitHub license](https://img.shields.io/github/license/Hammerling-Research-Group/placement?color=blue)](https://github.com/Hammerling-Research-Group/placement/blob/main/LICENSE)\n[![GitHub contributors](https://img.shields.io/github/contributors/Hammerling-Research-Group/placement.svg)](https://github.com/Hammerling-Research-Group/placement/graphs/contributors/)\n\n## Optimal Sensor Placement\n\nWe have developed an intelligent and adaptable system designed to optimize the placement of continuous monitoring sensors on oil and gas sites for methane emissions detection. Further, our approach addresses a larger problem scale compared to previous studies and can be customized for various sensor placement objectives.\n\nRead the [paper associated with this work](https://chemrxiv.org/engage/chemrxiv/article-details/66cd5008a4e53c4876b93af7) for more detail. \n\n## Installation \u0026 Usage\n\nTo run and engage with the code, the simplest approach is to follow these steps to clone and work from the `placement` directory within the `gp` environment:\n\n0. Setup the `gp` environment for [`FastGaussianPuff`](https://github.com/Hammerling-Research-Group/FastGaussianPuff)\n\n1. Clone `placement` locally:\n```bash\ngit clone https://github.com/Hammerling-Research-Group/placement.git\n```\n\n2. Move into the `placement` directory:\n```bash\ncd placement\n```\n\n3.1 If a first-time user, *create* the `placement` environment:\n```bash\nconda env create -f root_environment.yml\n```\n\n3.2 If previously created, *update* the `placement` environment:\n```bash\nconda env update -f root_environment.yml\n```\n\n4. Activate the `gp`  environment (from `FastGaussianPuff`):\n```bash\nconda activate gp\n```\n\n5. Pip install to work with the latest version of `FastGaussianPuff`:\n```bash\npip install .\n```\n\n*Of note:* As noted above, `placement` relies heavily on `FastGaussianPuff`, and *Step 1* assumes users have set up the associated `gp` environment already. If *not* done, users must first setup the `gp` environment for `FastGaussianPuff` *prior* to running the `placement` code per *Step 0*. Follow the steps to do so [here](https://github.com/Hammerling-Research-Group/FastGaussianPuff).\n\nWhen finished and input data are either developed or ingested (see the following section for a clearer understanding of the directory structure), users may run each of the three core scripts in sequence (as well as the unit testing suite, each prefixed by `test_*`):\n\n  - `simulate_concentrations.py`\n  - `evaluate_detection.py`\n  - `optimization.py`\n\nIn the current architecture, output data from running this process will be sent to `./demo/output_data/`. Users may easily update these paths if desired. \n\n## Testing\n\nUsers are encouraged to test the `placement` codebase as well. Our testing framework leverages `pytest`, so be sure to call `pytest` instead of `python` when testing. See the following examples for more. \n\nTo test all main step scripts (3 in total), run: \n\n```bash\npytest tests/\n```\n\nTo test individual scripts, run, e.g.:\n\n```bash\npytest tests/test_optimization.py\n```\n\n## (Evolving) Package Structure\n\n*Note*: structuring according to requirements for submission to pypi, as well as in line with package best practices. \n\n```\nplacement/\n│\n├── placement/\n│   ├── __init__.py\n│   ├── simulate_concentrations.py\n│   ├── evaluate_detection.py\n│   └── optimization.py\n│   └── PORSS.py\n│\n├── tests/\n│   ├── __init__.py           \n│   ├── test_simulate_concentrations.py\n│   ├── test_evaluate_detection.py\n│   └── test_optimization.py\n│\n├── docs/                   # Documentation (Note: only for pypi)\n│   ├── index.rst           # Main documentation index for Sphinx\n│   └── api.rst             # API docs for each module\n│\n├── demo\n│   ├── input_data\n│   ├── output_data\n│   ├── results_fenceline_locations\n│   ├── step1_generate_emission_scenarios.ipynb\n│   ├── step2_specify_sensor_locations.ipynb\n├── LICENSE\n├── README.md\n├── setup.py                # Setup script for packaging and metadata\n├── MANIFEST.in             # Manifest file to include non-code files in the package\n├── .gitignore\n└── pyproject.toml\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhammerling-research-group%2Fplacement","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhammerling-research-group%2Fplacement","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhammerling-research-group%2Fplacement/lists"}