{"id":32564029,"url":"https://github.com/euroargodev/argodmqc_owc","last_synced_at":"2025-10-29T03:54:22.886Z","repository":{"id":46054282,"uuid":"268806321","full_name":"euroargodev/argodmqc_owc","owner":"euroargodev","description":"Argo float salinity calibration software","archived":false,"fork":false,"pushed_at":"2025-10-10T12:28:50.000Z","size":158356,"stargazers_count":10,"open_issues_count":19,"forks_count":3,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-10-10T13:23:10.931Z","etag":null,"topics":["argo","argo-floats","dmqc","oceanography","python","quality-control"],"latest_commit_sha":null,"homepage":"","language":"HTML","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/euroargodev.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":"2020-06-02T13:19:35.000Z","updated_at":"2025-08-22T14:05:03.000Z","dependencies_parsed_at":"2025-08-22T12:28:14.441Z","dependency_job_id":null,"html_url":"https://github.com/euroargodev/argodmqc_owc","commit_stats":{"total_commits":756,"total_committers":11,"mean_commits":68.72727272727273,"dds":0.6137566137566137,"last_synced_commit":"ba048f9a14ff614fc03ffaa77cc4218d656b5e6f"},"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/euroargodev/argodmqc_owc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/euroargodev%2Fargodmqc_owc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/euroargodev%2Fargodmqc_owc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/euroargodev%2Fargodmqc_owc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/euroargodev%2Fargodmqc_owc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/euroargodev","download_url":"https://codeload.github.com/euroargodev/argodmqc_owc/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/euroargodev%2Fargodmqc_owc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281556916,"owners_count":26521571,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-29T02:00:06.901Z","response_time":59,"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":["argo","argo-floats","dmqc","oceanography","python","quality-control"],"created_at":"2025-10-29T03:54:18.366Z","updated_at":"2025-10-29T03:54:22.873Z","avatar_url":"https://github.com/euroargodev.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"|\u003cimg src=\"https://raw.githubusercontent.com/euroargodev/argodmqc_owc/master/docs/_static/pyowc-logo.png\" alt=\"pyowc logo\" width=\"100\"/\u003e|``pyowc`` is a python library for OWC salinity calibration in Python \u003cbr\u003e\u003cbr\u003e [![Status](https://img.shields.io/badge/lifecycle-stable-green.svg)](https://www.tidyverse.org/lifecycle/#stable) ![Python](https://img.shields.io/badge/python-3.6%20%7C%203.7%20%7C%203.8-blue.svg) [![Gitter](https://badges.gitter.im/Argo-floats/owc-python.svg)](https://gitter.im/Argo-floats/owc-python?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge) \u003cbr\u003e [![codecov](https://codecov.io/gh/euroargodev/argodmqc_owc/branch/refactor-configuration/graph/badge.svg)](https://codecov.io/gh/euroargodev/argodmqc_owc) [![build](https://github.com/euroargodev/argodmqc_owc/actions/workflows/main.yml/badge.svg)](https://github.com/euroargodev/argodmqc_owc/actions/workflows/main.yml)|\n|:---------:|:---------:|\n\nThis software is a python implementation of the \"OWC\" salinity calibration method used in Argo floats Delayed Mode Quality Control.\n\n[Post an issue to get involved if you're interested](https://github.com/euroargodev/argodmqc_owc/issues/new/choose).\n\n# General Guidance\n\nTo use this software, you'll need Python, and ideally a virtual environment with the package installed.  \nA virtual environment is not absolutely essential — you can install the package globally — but it is recommended to avoid issues.\n\nThere are two ways of working with this software:\n\n## 1. Installation and General Usage via PyPI\n\nThis method is intended for general usage, without modifying the codebase.  \nIf you intend to use the software this way, follow the documentation from the **General Usage** section.\n\n## 2. Installation and Development Work via GitHub\n\nThis method is intended for development work and gives access to the codebase, it is intended for those wanting to develop the code. If this is what you intend to do, follow the documentation from the **Developer Usage** section.\n\n---\n\n## Overview\n\nTo use the app installed via PyPi there are 3 steps to follow.\n\n1. Pip install it\n\nRun `pip install argodmqc-owc`\n\n\n2. Setup folder structure\n  The app requires a specific folder structure, and these folders \u0026 files are referenced in the config JSON file.\n  The example structure here is reflected in the example config JSON file.\n\n\n\n## General Usage\n\nTo use the app installed via PyPi there are 3 steps to follow.\n\n1. Pip install it\n\n  Run `pip install argodmqc-owc`\n\n\n2. Setup folder structure\n\n  The app requires a specific folder structure, and these folders \u0026 files are referenced in the config JSON file.\n  The example structure here is reflected in the example config JSON file. Please note that the `data` folder is available [here](https://github.com/euroargodev/argodmqc_owc/tree/feature/pypi-preparation/data)\n  - data\n    - climatology\n      - historical_argo\n      - historical_bot\n      - historical_ctd\n    - constants\n      - bathymetry\n      - coastline\n      - reefs\n    - float_calib\n    - float_mapped\n    - float_plots\n    - float_source\n\n3. Create the config JSON file\n\n  See the example config JSON file [here](https://github.com/euroargodev/argodmqc_owc/blob/feature/pypi-preparation/owc_config.json)\n\n\nThe configuration file contains 2 fields `splits` and `exclusions` which are used together.\nThe splits field refers to the splitting of profiles, and if left empty will process all the data.\nIf the data is to be split up, then the value needs to be changed to a list of profiles to split into. \nFor example if splits is [5, 10] then splits will be made at profiles 1-4, 5-10, and then 10 until the end.\n\nIf the exclusions list is empty then all data is processed, but profiles can be added to the exclusions list if they are to be omitted from the program.\n\n4. Run the software\n\n  Use the example script provided here [here](https://github.com/euroargodev/argodmqc_owc/blob/feature/pypi-preparation/start_owc_python.py) to run the DMQC software.\n  \n  Please note that the config JSON is checked before any processing runs, so any errors in the config will be reported back.\n\n  The script contains a line which has the floats to be processed: `FLOAT_NAMES = [\"3901960\"]`.\n  This can be one or more floats, and when the code is ran they will be processed in turn.\n\n---\n\n## Developer Usage\n\nUsing the app as a developer requires git-cloning rather than pip-installing so direct access to the code is possible, and modifying the code is easy. To use the app as a developer it is recommended you follow the sections below in the order prescribed\n\n1. Virtual Environments\n2. Installing Poetry\n3. Cloning the repository\n4. Installing the dependencies\n5. Running the linting \u0026 tests and docs builder\n6. Executing the DMQC code\n\n---\n\n## Virtual Environments\n\nA virtual environment is recommended to work in as the dependencies wont conflict with any globally installed packages.\n\nTo create a virtual environment:\n\n- **Mac/Linux**\n\n  `python3 -m venv .venv`\n\n  `source .venv/bin/activate`\n\n- **Windows**\n\n  `python -m venv .venv`\n\n  `.\\.venv\\Scripts\\Activate`\n\n\n\n## Installing Poetry\n\nPoetry is a dependency management tool and the software uses a `pyproject.toml` file to handle the dependencies.\n\n\nTo Install Poetry, run: `pip install poetry`\n\nIf any messages appear with 'poetry not found', try prefixing your command with `python` or `python -m`\n\n\n## Cloning the Repository\n\nThe repository can be cloned by clicking the green `\u003c\u003e Code` button near the top of the main page on Github. Follow the prompts to either clone it via the command line, or open with Github Desktop.\n\nIt is recommended to clone the repository to a new folder. Make sure you are in this folder with your virtual environment activated and the repository cloned before moving to the next step. You need to make sure you are at the same level as the `pyproject.toml` file.\n\n\n## Installing the dependencies\n\nInstall the dependencies with: `poetry install --no-root`\n\nThis will take a few seconds, and you should see a list of the installed packages in the terminal window.\n\n\n## Running the linting \u0026 tests and docs builder\n\nThe dependencies for running these utiltiies are also packaged up with Poetry, and they can be ran as follows:\n\n### Running the Linter with Poetry\n\n`poetry install --no-root --with lint`\n\n`poetry run ruff check`\n\n\n### Running the Docs Builder with Poetry\n\n`poetry install --with docs`\n\n`cd docs`\n\n`poetry run sphinx-build -M html source build -W`\n\n### Running the Tests with Poetry\n\n`poetry install --with tests`\n\n`poetry run pytest`\n\n\n\n\n## Executing the DMQC code\n  \n\nOpen the file `start_owc_python.py`\n\nLook at lines 15 \u0026 16, these are to be changed if different floats are to be processed, or a different configuration is to be used.\n\n\nRun the code (start_owc_python.py): `poetry run run-floats`.\n\n\nA short tutorial is available on the [argopy documentation here](https://argopy.readthedocs.io/en/latest/data_quality_control.html#running-the-calibration).\n\nFor Python beginners, you can run the pyowc in this way:\n\nIn start_owc_python.py, you can specify the WMO float number that you want to run the analysis on.\nYou can also add more float numbers, then the calculations of all floats will be done at the\nsame time.\n\n```python\n\n    FLOAT_NAMES = [\"3901960\"]  # add float names here e.g. [\"3901960\",\"3901961\",\"3901962\"]\n```\n\n\n## Parameters for your analysis\n\nParameters for the analysis are set in a configuration.py python code. \nThe configuration has the same parameters as the Matlab software (https://github.com/ArgoDMQC/matlab_owc).\n\n- You can change the default directories to locations of your historical data.\n```python\n        #    Climatology Data Input Paths\n        'HISTORICAL_DIRECTORY': \"data/climatology/\"\n        'HISTORICAL_CTD_PREFIX': \"/historical_ctd/ctd_\"\n        'HISTORICAL_BOTTLE_PREFIX': \"/historical_bot/bot_\"\n        'HISTORICAL_ARGO_PREFIX': \"/historical_argo/argo_\"\n```\n- To run the analysis,you need to have the float source file in .mat format. \n```python\n        #    Float Input Path\n        'FLOAT_SOURCE_DIRECTORY': \"data/float_source/\"\n        'FLOAT_SOURCE_POSTFIX': \".mat\"\n```\n- The output from the analysis will be saved in default directory of the code.You can change \nthe default directories to locations of your constants.\n```python\n        #    Constants File Path\n        'CONFIG_DIRECTORY': \"data/constants/\"\n        'CONFIG_COASTLINES': \"coastdat.mat\"\n        'CONFIG_WMO_BOXES': \"wmo_boxes.mat\"\n        'CONFIG_SAF': \"TypicalProfileAroundSAF.mat\"\n```\n- Final step is to set your objective mapping parameters, e.g.\n```python\n        'MAP_USE_PV': 0\n        'MAP_USE_SAF': 0\n\n        'MAPSCALE_LONGITUDE_LARGE': 8\n        'MAPSCALE_LONGITUDE_SMALL': 4\n        'MAPSCALE_LATITUDE_LARGE': 4\n        'MAPSCALE_LATITUDE_SMALL': 2\n ```\n- Additionally, you can set a specific ranges of theta bounds for salinity anomaly plot.\nThe code will crete two separate plots with set ranges.\n```python \n     #    Plotting Parameters\n        # Theta bounds for salinity anomaly plot\n        'THETA_BOUNDS': [[0, 5], [5, 20]]\n```\n\n\n\n\n## Software history\n\n- Major refactoring of the software for performance optimisation and to fully embrace the Pythonic way of doing this !\n\n- [UAT: Phase 1, 2, 3](https://github.com/euroargodev/User-Acceptance-Test-Python-version-of-the-OWC-tool) \n\n- Migration of the code from from BODC/NOC git to euroargodev/argodmqc_owc. See https://github.com/euroargodev/User-Acceptance-Test-Python-version-of-the-OWC-tool/issues/10 for more details on the migration. Contribution from [G. Maze](https://github.com/gmaze)\n\n- Alpha experts user testings with [feedbacks available here](https://github.com/euroargodev/User-Acceptance-Test-Python-version-of-the-OWC-tool/issues). Contributions from: [K. Walicka](https://github.com/kamwal), [C. Cabanes](https://github.com/cabanesc), [A. Wong](https://github.com/apswong)\n\n- BODC created [the first version of the code](https://git.noc.ac.uk/bodc/owc-software-python), following the [Matlab implementation](https://github.com/ArgoDMQC/matlab_owc).\n  Contributions from: [M. Donnelly](https://github.com/matdon17), [E. Small](https://github.com/edsmall-bodc),\n   [K. Walicka](https://github.com/kamwal), [A. Hale](https://github.com/halebodc), [T. Gardner](https://github.com/thogar-computer).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feuroargodev%2Fargodmqc_owc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feuroargodev%2Fargodmqc_owc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feuroargodev%2Fargodmqc_owc/lists"}