oceanarray 0.2.0__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {oceanarray-0.2.0 → oceanarray-0.3.0}/.github/workflows/docs_deploy.yml +7 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/.github/workflows/tests.yml +3 -1
- {oceanarray-0.2.0 → oceanarray-0.3.0}/CHANGELOG.md +28 -1
- {oceanarray-0.2.0 → oceanarray-0.3.0}/CITATION.cff +3 -5
- {oceanarray-0.2.0/oceanarray.egg-info → oceanarray-0.3.0}/PKG-INFO +13 -1
- {oceanarray-0.2.0 → oceanarray-0.3.0}/README.md +12 -0
- oceanarray-0.3.0/docs/source/_static/logo.png +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/cli_reference.rst +1 -98
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/file_naming_conventions.rst +4 -3
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/index.rst +0 -7
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/legacy.rst +1 -1
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/methods/nortek_coordinate_transform.rst +4 -4
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/methods/standardisation.rst +10 -9
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/methods/vertical_gridding.rst +2 -2
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/oceanarray.rst +0 -9
- oceanarray-0.3.0/docs/source/project_structure.md +211 -0
- oceanarray-0.3.0/oceanarray/_version.py +1 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/cli.py +180 -392
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/config/parameters.py +225 -3
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/config/validation.py +6 -6
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/plotters/current.py +3 -2
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/plotters/diagnostic.py +249 -245
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/plotters/helpers.py +0 -3
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/plotters/hydrography.py +5 -5
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/plotters/primitives.py +4 -4
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/plotters/spectrum.py +0 -3
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/plotters/timeseries.py +4 -5
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/plotters/ts.py +7 -6
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/processors/__init__.py +30 -9
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/processors/coordinate.py +6 -6
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/processors/helpers.py +5 -5
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/processors/pressure.py +2 -2
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/processors/qc.py +11 -59
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/processors/stack.py +7 -7
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/processors/stage1.py +5 -5
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/processors/stage2.py +2 -2
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/processors/stage3.py +25 -13
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/report/_array.py +17 -27
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/report/_grid.py +17 -25
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/report/_plots.py +250 -226
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/report/_recovery_table.py +0 -8
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/report/_stack.py +110 -107
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/tools/rapid_interp.py +54 -54
- {oceanarray-0.2.0 → oceanarray-0.3.0/oceanarray.egg-info}/PKG-INFO +13 -1
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray.egg-info/SOURCES.txt +9 -22
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray.egg-info/scm_file_list.json +185 -198
- oceanarray-0.3.0/oceanarray.egg-info/scm_version.json +8 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/pyproject.toml +2 -23
- {oceanarray-0.2.0 → oceanarray-0.3.0}/requirements-dev.txt +0 -3
- oceanarray-0.3.0/tests/fixtures/raw/dune2_1_2026/aquadopp/9920_recovery.dat +9960 -0
- oceanarray-0.3.0/tests/fixtures/raw/dune2_1_2026/aquadopp/9920_recovery.hdr +174 -0
- oceanarray-0.3.0/tests/fixtures/raw/dune2_1_2026/microcat/2941_recovery.asc +19948 -0
- oceanarray-0.3.0/tests/fixtures/regenerate_dune2_microcat.py +73 -0
- oceanarray-0.3.0/tests/integration/test_readers.py +273 -0
- oceanarray-0.3.0/tests/integration/test_stage1_from_raw.py +158 -0
- oceanarray-0.3.0/tests/test_imports.py +26 -0
- oceanarray-0.3.0/tests/unit/test_array.py +233 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_cli.py +72 -0
- oceanarray-0.3.0/tests/unit/test_parameters.py +122 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_plot_guard.py +19 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_process_api.py +124 -4
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_stage1.py +2 -2
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_stage3.py +11 -11
- oceanarray-0.2.0/docs/source/_static/logo.png +0 -0
- oceanarray-0.2.0/docs/source/logsheets.rst +0 -223
- oceanarray-0.2.0/docs/source/project_structure.md +0 -218
- oceanarray-0.2.0/oceanarray/_version.py +0 -1
- oceanarray-0.2.0/oceanarray/logsheet/__init__.py +0 -60
- oceanarray-0.2.0/oceanarray/logsheet/_columns.py +0 -97
- oceanarray-0.2.0/oceanarray/logsheet/_config.py +0 -245
- oceanarray-0.2.0/oceanarray/logsheet/_firmware.py +0 -43
- oceanarray-0.2.0/oceanarray/logsheet/_latex.py +0 -128
- oceanarray-0.2.0/oceanarray/logsheet/_render.py +0 -126
- oceanarray-0.2.0/oceanarray/logsheet/builders/__init__.py +0 -13
- oceanarray-0.2.0/oceanarray/logsheet/builders/caldip_download.py +0 -195
- oceanarray-0.2.0/oceanarray/logsheet/builders/caldip_setup.py +0 -188
- oceanarray-0.2.0/oceanarray/logsheet/builders/deployment_setup.py +0 -218
- oceanarray-0.2.0/oceanarray/logsheet/builders/mooring_download.py +0 -243
- oceanarray-0.2.0/oceanarray/logsheet/builders/recovery.py +0 -157
- oceanarray-0.2.0/oceanarray/logsheet/data/column_defs.yaml +0 -686
- oceanarray-0.2.0/oceanarray/logsheet/data/latex_templates/_base_instrument.tex.j2 +0 -42
- oceanarray-0.2.0/oceanarray/logsheet/data/latex_templates/caldip_download.tex.j2 +0 -47
- oceanarray-0.2.0/oceanarray/logsheet/data/latex_templates/caldip_setup.tex.j2 +0 -70
- oceanarray-0.2.0/oceanarray/logsheet/data/latex_templates/deployment_setup.tex.j2 +0 -97
- oceanarray-0.2.0/oceanarray/logsheet/data/latex_templates/mooring_download.tex.j2 +0 -54
- oceanarray-0.2.0/oceanarray/logsheet/data/latex_templates/recovery.tex.j2 +0 -103
- oceanarray-0.2.0/oceanarray.egg-info/scm_version.json +0 -8
- oceanarray-0.2.0/tests/integration/test_readers.py +0 -3
- oceanarray-0.2.0/tests/unit/test_logsheets.py +0 -678
- {oceanarray-0.2.0 → oceanarray-0.3.0}/.github/ISSUE_TEMPLATE.md +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/.github/dependabot.yml +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/.github/workflows/docs.yml +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/.github/workflows/pypi.yml +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/.gitignore +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/CONTRIBUTING.md +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/LICENSE +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/MIGRATION-BASEDIR.md +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/Makefile +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/How do I transform a coordinate system manually_ /342/200/223 Nortek Support Center.pdf" +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/array_processing.png +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/array_processing_v2.png +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/code/3_beam_transformation.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/code/auto_filt.m +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/code/hydro_grid.m +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/code/microcat2rodb_2.m +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/code/microcat2rodb_3.m +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/code/microcat_apply_cal.m +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/code/microcat_apply_cal_plus.m +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/code/microcat_raw2use_003.m +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/code/mooring_interp_wb2_3_5.m +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/css/custom.css +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/github_solo_workflow.png +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/github_workflow2.png +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/instrument_processing.png +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/instrument_processing_v2.png +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/instrument_processing_v4.png +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/instrument_processing_v5.png +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/instrument_processing_v6.png +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/mooring_processing.png +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/mooring_processing_V2.png +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/mooring_processing_v3.png +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/mooring_processing_v4.png +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/oceanarray_grid_report.png +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/oceanarray_icon.png +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/oceanarray_instrument_report.png +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/oceanarray_report_header.png +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/oceanarray_stack_report.png +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/rotary_spectrum_plan.rst +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/calibration_dips.rst +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/clock_offset.rst +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/conf.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/directory_structure.rst +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/methods/acquisition.rst +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/methods/auto_qc.rst +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/methods/calibration.rst +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/methods/concatenation.rst +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/methods/conversion.rst +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/methods/multisite_merging.rst +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/methods/time_gridding.rst +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/methods/trimming.rst +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/migration.rst +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/oceanSITES_manual.rst +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/oceanarray_format.rst +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/processing_framework.rst +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/quickstart.rst +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/reports.rst +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/roadmap.rst +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/setup.md +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/style_guide.md +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/troubleshooting.rst +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/yaml_configuration.rst +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/environment.yml +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/notebooks/demo_check_clock.ipynb +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/notebooks/demo_climatology.ipynb +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/notebooks/demo_clock_offset.ipynb +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/notebooks/demo_instrument.ipynb +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/notebooks/demo_mooring.ipynb +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/notebooks/demo_stage1.ipynb +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/notebooks/demo_stage2.ipynb +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/notebooks/demo_step1.ipynb +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/notebooks/dsE_1_2018_microcat_7518_temperature.png +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/notebooks/legacy/README.md +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/notebooks/legacy/demo_batch_instrument.ipynb +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/notebooks/legacy/demo_instrument_rdb.ipynb +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/notebooks/legacy/demo_mooring_rdb.ipynb +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/__init__.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/analysis/__init__.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/analysis/clock.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/analysis/hydrographic.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/analysis/science.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/analysis/spectral.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/analysis/temporal.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/analysis/vector.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/config/OS1_sensor_attrs.yaml +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/config/OS1_var_names.yaml +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/config/__init__.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/config/legacy/project_RAPID.yaml +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/config/legacy/rodb_keys.txt +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/config/legacy/rodb_keys.yaml +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/config/logging.yaml +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/inspect.py +0 -0
- {oceanarray-0.2.0/oceanarray/config → oceanarray-0.3.0/oceanarray/legacy}/OS1_vocab_attrs.yaml +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/legacy/__init__.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/legacy/caldip.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/legacy/convertOS.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/legacy/find_deployment.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/legacy/mooring_rodb.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/legacy/process_rodb.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/legacy/rodb.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/legacy/tools.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/logger.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/oceanarray.mplstyle +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/paths.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/plotters/__init__.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/plotters/_cli_legacy.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/plotters/animation.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/processors/caldip.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/processors/grid.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/report/__init__.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/report/_html_helpers.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/report/_instrument.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/report/_mooring.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/tools/__init__.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/tools/readers.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/tools/writers.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/utilities.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray.egg-info/dependency_links.txt +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray.egg-info/entry_points.txt +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray.egg-info/requires.txt +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray.egg-info/top_level.txt +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/pytest.ini +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/requirements-test.txt +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/requirements.txt +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/setup.cfg +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/conftest.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/fixtures/proc/dune2_1_2026/aquadopp/dune2_1_2026_9920_stage1.nc +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/fixtures/proc/dune2_1_2026/aquadopp/dune2_1_2026_9920_stage2.nc +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/fixtures/proc/dune2_1_2026/aquadopp/dune2_1_2026_9920_stage3.nc +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/fixtures/proc/dune2_1_2026/dune2_1_2026.mooring.yaml +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/fixtures/proc/dune2_1_2026/dune2_1_2026_grid.nc +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/fixtures/proc/dune2_1_2026/dune2_1_2026_stack.nc +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/fixtures/proc/dune2_1_2026/microcat/dune2_1_2026_2941_stage1.nc +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/fixtures/proc/dune2_1_2026/microcat/dune2_1_2026_2941_stage2.nc +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/fixtures/proc/dune2_1_2026/microcat/dune2_1_2026_2941_stage3.nc +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/integration/__init__.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/integration/conftest.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/integration/test_pipeline.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/integration/test_recovery_table.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/integration/test_stage1.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/integration/test_stage2.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/integration/test_time_gridding.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/legacy/__init__.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/legacy/test_convertOS.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/legacy/test_mooring_rodb.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/legacy/test_process_rodb.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/legacy/test_rodb.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/__init__.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_flag_merge.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_logger.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_paths.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_plotters.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_recovery_table.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_report.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_stage2.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_time_gridding.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_tools.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_utilities.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_validation.py +0 -0
- {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_writers.py +0 -0
|
@@ -54,3 +54,10 @@ jobs:
|
|
|
54
54
|
publish_dir: docs/build/html
|
|
55
55
|
# Optional: publish_branch: gh-pages
|
|
56
56
|
# Optional: cname: docs.example.org
|
|
57
|
+
# Replace gh-pages with a single commit each deploy. The built site is
|
|
58
|
+
# regenerable, so its history has no value. The saving is smaller than it
|
|
59
|
+
# looks: git deltas near-identical HTML well, and squashing 70-120 deploys
|
|
60
|
+
# shrinks a fresh clone by only 4-18%. What it does bound is the growth from
|
|
61
|
+
# re-executed demo notebooks, whose embedded PNGs differ every build and so
|
|
62
|
+
# never delta. Current site size dominates, not history - keep _static small.
|
|
63
|
+
force_orphan: true
|
|
@@ -32,7 +32,9 @@ jobs:
|
|
|
32
32
|
run: pip install -e . --no-deps --force-reinstall
|
|
33
33
|
|
|
34
34
|
- name: Run unit tests
|
|
35
|
-
run:
|
|
35
|
+
run: >
|
|
36
|
+
pytest tests/unit -m "not slow and not local and not needs_seasenselib" -q
|
|
37
|
+
${{ matrix.os == 'ubuntu-latest' && '--cov=oceanarray --cov-report=term-missing --cov-fail-under=38' || '--no-cov' }}
|
|
36
38
|
|
|
37
39
|
integration:
|
|
38
40
|
runs-on: ubuntu-latest
|
|
@@ -4,10 +4,37 @@ All notable changes to oceanarray are documented here.
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
## [0.
|
|
7
|
+
## [0.3.0] — 2026-08-11
|
|
8
8
|
|
|
9
9
|
### Breaking changes
|
|
10
10
|
|
|
11
|
+
- **`oceanarray.logsheet` subpackage deleted** ([#66](https://github.com/ocean-uhh/oceanarray/pull/66)): the deprecated `logsheet` subpackage has been removed from the tree. `oceanarray logsheet` still emits a `DeprecationWarning` and exits 1. Use the standalone [`logsheet`](https://github.com/eleanorfrajka/logsheet) package: `pip install git+https://github.com/eleanorfrajka/logsheet`, then `logsheet build ...`.
|
|
12
|
+
- **`oceanarray run` skips grid when stack fails** ([#65](https://github.com/ocean-uhh/oceanarray/pull/65)): if the stack stage fails, the grid stage is now skipped rather than attempted on incomplete input. This matches `process()` behaviour.
|
|
13
|
+
|
|
14
|
+
### Bug fixes
|
|
15
|
+
|
|
16
|
+
- **Grid report N² computed at latitude 0**: the grid report derived buoyancy frequency (N²) at latitude 0° because its `_dms_to_deg` import still pointed at the removed `mooring_level` module and failed silently inside a broad `except`. The import now resolves from `utilities`, so N² uses the mooring's actual latitude.
|
|
17
|
+
|
|
18
|
+
### Refactoring
|
|
19
|
+
|
|
20
|
+
- **`STAGES` registry as single source of truth in CLI dispatch** ([#65](https://github.com/ocean-uhh/oceanarray/pull/65)): `process()` accepts a stage list (always applied in `STAGES` order); `cmd_process` and `cmd_run` route through a single `process()` call; argparse `choices` are derived from `STAGES`.
|
|
21
|
+
- **Plot/report hardening** ([#64](https://github.com/ocean-uhh/oceanarray/pull/64)): `render_b64` guard, `plt.style.context`, `vlabel()` helper, `SIGMA_GRID` fix, and a `VARIABLES` registry (21 entries with `valid_min`/`valid_max`).
|
|
22
|
+
|
|
23
|
+
### Documentation
|
|
24
|
+
|
|
25
|
+
- Updated developer docs (`project_structure.md`, `methods/standardisation.rst`, `methods/vertical_gridding.rst`, `methods/nortek_coordinate_transform.rst`, `legacy.rst`) to the current `oceanarray.processors.*` module layout after the reorg; fixed broken import examples and API references.
|
|
26
|
+
|
|
27
|
+
### Tests
|
|
28
|
+
|
|
29
|
+
- Golden Stage 1 tests, reader and `_array` helper tests, plus associated bug fixes and dead-code removal ([#63](https://github.com/ocean-uhh/oceanarray/pull/63)).
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## [0.2.0] — 2026-08-07
|
|
34
|
+
|
|
35
|
+
### Breaking changes
|
|
36
|
+
|
|
37
|
+
- **`oceanarray logsheet` disabled**: calling `oceanarray logsheet` now emits a `DeprecationWarning` and exits 1. The `logsheet` subpackage remains in the tree but is unused (deleted in v0.3.0). Use the standalone [`logsheet`](https://github.com/eleanorfrajka/logsheet) package: `pip install git+https://github.com/eleanorfrajka/logsheet`, then `logsheet build ...`.
|
|
11
38
|
- **`--basedir` removed** ([#52](https://github.com/ocean-uhh/oceanarray/pull/52)): use `--raw-dir` and `--proc-dir` instead. See the [migration guide](https://ocean-uhh.github.io/oceanarray/migration.html).
|
|
12
39
|
- **`plotter.py` retired** ([#53](https://github.com/ocean-uhh/oceanarray/pull/53)): the monolithic `oceanarray/plotter.py` and all backward-compatibility re-export shims have been removed. Import from canonical modules (`oceanarray.plotters.current`, `oceanarray.plotters.timeseries`, etc.).
|
|
13
40
|
- **Subpackage reorganisation** ([#49](https://github.com/ocean-uhh/oceanarray/pull/49), [#59](https://github.com/ocean-uhh/oceanarray/pull/59)): processing modules moved from `oceanarray/instrument/` and `oceanarray/mooring/` into `oceanarray.processors.*`. Top-level `oceanarray` imports unchanged; internal paths have moved.
|
|
@@ -6,15 +6,13 @@ authors:
|
|
|
6
6
|
orcid: https://orcid.org/0000-0001-8773-7838
|
|
7
7
|
affiliation: University of Hamburg, Bundesstraße 53, 20146 Hamburg, Germany
|
|
8
8
|
title: oceanarray
|
|
9
|
-
version: 0.
|
|
10
|
-
date-released: 2026-
|
|
9
|
+
version: 0.3.0
|
|
10
|
+
date-released: 2026-08-11
|
|
11
11
|
url: https://github.com/ocean-uhh/oceanarray
|
|
12
12
|
repository-code: https://github.com/ocean-uhh/oceanarray
|
|
13
13
|
license: MIT
|
|
14
14
|
abstract: >
|
|
15
|
-
Multi-stage processing pipeline for moored oceanographic array observations:
|
|
16
|
-
converts raw instrument files (Sea-Bird, RBR, Nortek, RDI) to QC-flagged,
|
|
17
|
-
CF-compliant NetCDF and generates self-contained HTML mooring recovery reports.
|
|
15
|
+
Multi-stage processing pipeline for moored oceanographic array observations: converts raw instrument files (Sea-Bird, RBR, Nortek, RDI) to QC-flagged, CF-compliant NetCDF and generates self-contained HTML mooring recovery reports.
|
|
18
16
|
keywords:
|
|
19
17
|
- oceanography
|
|
20
18
|
- mooring
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: oceanarray
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: Multi-stage processing pipeline for moored oceanographic observations: raw instrument files to QC-flagged CF-compliant NetCDF with automated HTML reports.
|
|
5
5
|
Maintainer-email: Eleanor Frajka-Williams <eleanorfrajka@gmail.com>
|
|
6
6
|
License: MIT License
|
|
@@ -60,6 +60,12 @@ Dynamic: license-file
|
|
|
60
60
|
|
|
61
61
|
# OceanArray
|
|
62
62
|
|
|
63
|
+
[](https://pypi.org/project/oceanarray/)
|
|
64
|
+
[](https://pypi.org/project/oceanarray/)
|
|
65
|
+
[](https://github.com/ocean-uhh/oceanarray/blob/main/LICENSE)
|
|
66
|
+
[](https://github.com/ocean-uhh/oceanarray/actions/workflows/tests.yml)
|
|
67
|
+
[](https://ocean-uhh.github.io/oceanarray/)
|
|
68
|
+
|
|
63
69
|
Python tools for processing moored oceanographic array observations from raw instrument files to quality-controlled, CF-compliant NetCDF.
|
|
64
70
|
|
|
65
71
|
**Documentation**: https://ocean-uhh.github.io/oceanarray/
|
|
@@ -103,6 +109,12 @@ oceanarray.process('dsG3_1_2026', raw_dir='/data/raw', proc_dir='/data/proc')
|
|
|
103
109
|
|
|
104
110
|
See the [API reference](https://ocean-uhh.github.io/oceanarray/oceanarray.html) for the full interface.
|
|
105
111
|
|
|
112
|
+
## Acknowledgements
|
|
113
|
+
|
|
114
|
+
Development was assisted by Claude Code (Anthropic) and GitHub Copilot code review.
|
|
115
|
+
|
|
116
|
+
The data-processing approach draws on methods developed for the RAPID mooring array programme (UK/US funded). `oceanarray` is developed toward the DFG Ocean Array infrastructure project (DFG project number 571027118), from which it takes its name, and was first applied in the AEI–DFG MIXSED project (DFG project number 541914507).
|
|
117
|
+
|
|
106
118
|
## License
|
|
107
119
|
|
|
108
120
|
MIT License
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# OceanArray
|
|
2
2
|
|
|
3
|
+
[](https://pypi.org/project/oceanarray/)
|
|
4
|
+
[](https://pypi.org/project/oceanarray/)
|
|
5
|
+
[](https://github.com/ocean-uhh/oceanarray/blob/main/LICENSE)
|
|
6
|
+
[](https://github.com/ocean-uhh/oceanarray/actions/workflows/tests.yml)
|
|
7
|
+
[](https://ocean-uhh.github.io/oceanarray/)
|
|
8
|
+
|
|
3
9
|
Python tools for processing moored oceanographic array observations from raw instrument files to quality-controlled, CF-compliant NetCDF.
|
|
4
10
|
|
|
5
11
|
**Documentation**: https://ocean-uhh.github.io/oceanarray/
|
|
@@ -43,6 +49,12 @@ oceanarray.process('dsG3_1_2026', raw_dir='/data/raw', proc_dir='/data/proc')
|
|
|
43
49
|
|
|
44
50
|
See the [API reference](https://ocean-uhh.github.io/oceanarray/oceanarray.html) for the full interface.
|
|
45
51
|
|
|
52
|
+
## Acknowledgements
|
|
53
|
+
|
|
54
|
+
Development was assisted by Claude Code (Anthropic) and GitHub Copilot code review.
|
|
55
|
+
|
|
56
|
+
The data-processing approach draws on methods developed for the RAPID mooring array programme (UK/US funded). `oceanarray` is developed toward the DFG Ocean Array infrastructure project (DFG project number 571027118), from which it takes its name, and was first applied in the AEI–DFG MIXSED project (DFG project number 541914507).
|
|
57
|
+
|
|
46
58
|
## License
|
|
47
59
|
|
|
48
60
|
MIT License
|
|
Binary file
|
|
@@ -7,8 +7,7 @@ CLI Reference
|
|
|
7
7
|
The typical workflow is: validate the YAML, run ``oceanarray process`` stage by
|
|
8
8
|
stage, inspect with ``oceanarray report``, combine with ``oceanarray stack`` and
|
|
9
9
|
``oceanarray grid``, then use ``oceanarray run`` to reproduce the full pipeline
|
|
10
|
-
in one command.
|
|
11
|
-
independent of the processing pipeline.
|
|
10
|
+
in one command.
|
|
12
11
|
|
|
13
12
|
All processing subcommands accept a mooring name as the first positional
|
|
14
13
|
argument. The mooring name is used to locate the YAML file at
|
|
@@ -555,102 +554,6 @@ reports.
|
|
|
555
554
|
|
|
556
555
|
----
|
|
557
556
|
|
|
558
|
-
``oceanarray logsheet``
|
|
559
|
-
------------------------
|
|
560
|
-
|
|
561
|
-
Generate PDF logsheets for mooring fieldwork and calibration-dip casts.
|
|
562
|
-
See :doc:`logsheets` for a full description of sheet types and configuration.
|
|
563
|
-
|
|
564
|
-
**Synopsis**
|
|
565
|
-
|
|
566
|
-
.. code-block:: text
|
|
567
|
-
|
|
568
|
-
oceanarray logsheet [--type TYPE] [--mooring MOORING] [--cast CAST]
|
|
569
|
-
[--config-dir DIR] [--inventory PATH]
|
|
570
|
-
[--logsheet-config PATH]
|
|
571
|
-
[--output-dir DIR] [--format {pdf,tex}]
|
|
572
|
-
[--all]
|
|
573
|
-
[--proc-dir DIR]
|
|
574
|
-
|
|
575
|
-
**Flags**
|
|
576
|
-
|
|
577
|
-
.. list-table::
|
|
578
|
-
:header-rows: 1
|
|
579
|
-
:widths: 28 10 12 50
|
|
580
|
-
|
|
581
|
-
* - Flag
|
|
582
|
-
- Type
|
|
583
|
-
- Default
|
|
584
|
-
- Description
|
|
585
|
-
* - ``--type TYPE``
|
|
586
|
-
- string
|
|
587
|
-
- (required)
|
|
588
|
-
- Sheet type: ``caldip-setup``, ``caldip-download``, ``mooring-download``,
|
|
589
|
-
``mooring-recovery``, or ``mooring-setup``.
|
|
590
|
-
* - ``--mooring MOORING``
|
|
591
|
-
- string
|
|
592
|
-
- —
|
|
593
|
-
- Mooring name (required for mooring sheet types).
|
|
594
|
-
* - ``--cast CAST``
|
|
595
|
-
- string
|
|
596
|
-
- —
|
|
597
|
-
- Cast name, e.g. ``B1`` (required for caldip sheet types).
|
|
598
|
-
* - ``--config-dir DIR``
|
|
599
|
-
- path
|
|
600
|
-
- ``$LOGSHEETS_CONFIG_DIR`` or ``./``
|
|
601
|
-
- Directory containing ``logsheet_config.yaml`` and
|
|
602
|
-
``instrument_inventory.csv``.
|
|
603
|
-
* - ``--inventory PATH``
|
|
604
|
-
- path
|
|
605
|
-
- ``{config-dir}/instrument_inventory.csv``
|
|
606
|
-
- Explicit path to the instrument inventory CSV (overrides ``--config-dir``).
|
|
607
|
-
* - ``--logsheet-config PATH``
|
|
608
|
-
- path
|
|
609
|
-
- ``{config-dir}/logsheet_config.yaml``
|
|
610
|
-
- Explicit path to the logsheet YAML (overrides ``--config-dir``).
|
|
611
|
-
* - ``--output-dir DIR``
|
|
612
|
-
- path
|
|
613
|
-
- ``./logsheets/``
|
|
614
|
-
- Directory where PDF (or TeX) files are written.
|
|
615
|
-
* - ``--format {pdf,tex}``
|
|
616
|
-
- string
|
|
617
|
-
- ``pdf``
|
|
618
|
-
- Output format: compile to PDF (requires ``pdflatex``) or write LaTeX
|
|
619
|
-
source only.
|
|
620
|
-
* - ``--all``
|
|
621
|
-
- flag
|
|
622
|
-
- off
|
|
623
|
-
- Generate all sheet types for every cast and mooring listed in
|
|
624
|
-
``logsheet_config.yaml``.
|
|
625
|
-
* - ``--proc-dir DIR``
|
|
626
|
-
- path
|
|
627
|
-
- (required for mooring sheets)
|
|
628
|
-
- Cruise-level processed data directory (used to locate mooring YAMLs).
|
|
629
|
-
|
|
630
|
-
**Examples**
|
|
631
|
-
|
|
632
|
-
Caldip setup sheet for cast B1:
|
|
633
|
-
|
|
634
|
-
.. code-block:: bash
|
|
635
|
-
|
|
636
|
-
oceanarray logsheet --type caldip-setup --cast B1 \
|
|
637
|
-
--config-dir config/ --proc-dir /data/proc
|
|
638
|
-
|
|
639
|
-
Mooring recovery log:
|
|
640
|
-
|
|
641
|
-
.. code-block:: bash
|
|
642
|
-
|
|
643
|
-
oceanarray logsheet --type mooring-recovery --mooring dsG3_1_2026 \
|
|
644
|
-
--config-dir config/ --proc-dir /data/proc
|
|
645
|
-
|
|
646
|
-
All sheets for every cast and mooring:
|
|
647
|
-
|
|
648
|
-
.. code-block:: bash
|
|
649
|
-
|
|
650
|
-
oceanarray logsheet --all --config-dir config/ --proc-dir /data/proc
|
|
651
|
-
|
|
652
|
-
----
|
|
653
|
-
|
|
654
557
|
``oceanarray list``
|
|
655
558
|
--------------------
|
|
656
559
|
|
|
@@ -63,7 +63,8 @@ the instrument type and firmware:
|
|
|
63
63
|
- binary raw files; ``filename:`` points to the first file
|
|
64
64
|
|
|
65
65
|
These conventions are recorded in the ``filename_conventions:`` section of
|
|
66
|
-
``logsheet_config.yaml`` and are used by
|
|
66
|
+
``logsheet_config.yaml`` and are used by the standalone
|
|
67
|
+
`logsheet <https://github.com/ocean-uhh/logsheet>`_ package to pre-fill
|
|
67
68
|
expected filenames on the download logsheets.
|
|
68
69
|
|
|
69
70
|
----
|
|
@@ -122,5 +123,5 @@ See also
|
|
|
122
123
|
- :doc:`directory_structure` — where these files live on disk
|
|
123
124
|
- :doc:`yaml_configuration` — YAML fields that control filenames (``name:``,
|
|
124
125
|
``serial:``, ``filename:``)
|
|
125
|
-
-
|
|
126
|
-
raw-file naming to the logsheet workflow
|
|
126
|
+
- `logsheet package <https://github.com/ocean-uhh/logsheet>`_ — how ``logsheet_config.yaml``
|
|
127
|
+
filename conventions connect raw-file naming to the logsheet workflow
|
|
@@ -59,13 +59,6 @@ Contents
|
|
|
59
59
|
Stack into one NetCDF <methods/time_gridding>
|
|
60
60
|
Grid onto pressure <methods/vertical_gridding>
|
|
61
61
|
|
|
62
|
-
.. toctree::
|
|
63
|
-
:maxdepth: 1
|
|
64
|
-
:caption: Logsheets
|
|
65
|
-
|
|
66
|
-
Fieldwork Logsheets <logsheets>
|
|
67
|
-
|
|
68
|
-
|
|
69
62
|
.. toctree::
|
|
70
63
|
:maxdepth: 1
|
|
71
64
|
:caption: Caldips
|
|
@@ -34,7 +34,7 @@ active processing code:
|
|
|
34
34
|
|
|
35
35
|
``mooring_rodb.py``
|
|
36
36
|
Mooring-level stacking and filtering for RODB data — superseded by
|
|
37
|
-
:mod:`oceanarray.
|
|
37
|
+
:mod:`oceanarray.processors.stack` and :mod:`oceanarray.processors.grid`.
|
|
38
38
|
|
|
39
39
|
``convertOS.py``
|
|
40
40
|
OceanSites format conversion from RODB — superseded by the Stage 1–3 pipeline.
|
|
@@ -249,7 +249,7 @@ The reference Python script from Nortek Support is reproduced at
|
|
|
249
249
|
|
|
250
250
|
R = H @ P
|
|
251
251
|
|
|
252
|
-
The ``oceanarray`` implementation in ``
|
|
252
|
+
The ``oceanarray`` implementation in ``processors.coordinate.xyz_to_enu()`` expands this
|
|
253
253
|
product analytically (vectorised over the time dimension) and adds the magnetic
|
|
254
254
|
declination offset to the heading before computing :math:`h`.
|
|
255
255
|
|
|
@@ -286,6 +286,6 @@ See also
|
|
|
286
286
|
- `Nortek Support: How do I transform a coordinate system manually?
|
|
287
287
|
<https://support.nortekgroup.com/hc/en-us/articles/26048113914652-How-do-I-transform-a-coordinate-system-manually>`_
|
|
288
288
|
- :doc:`auto_qc` — QARTOD flags applied to velocity after tilt QC
|
|
289
|
-
- :py:func:`oceanarray.
|
|
290
|
-
- :py:func:`oceanarray.
|
|
291
|
-
- :py:func:`oceanarray.stage1.
|
|
289
|
+
- :py:func:`oceanarray.processors.coordinate.xyz_to_enu` — vectorised ENU rotation
|
|
290
|
+
- :py:func:`oceanarray.processors.coordinate.apply_beam_to_enu` — full BEAM/XYZ → ENU pipeline
|
|
291
|
+
- :py:func:`oceanarray.processors.stage1._parse_nortek_T_matrix_hdr` — header parsing
|
|
@@ -28,12 +28,12 @@ This creates a uniform structure suitable for later trimming, filtering, and con
|
|
|
28
28
|
3. Current Implementation (Stage 1)
|
|
29
29
|
-----------------------------------
|
|
30
30
|
|
|
31
|
-
The standardisation process is implemented in the :mod:`oceanarray.stage1` module, which provides automated conversion from native instrument formats to standardised NetCDF files.
|
|
31
|
+
The standardisation process is implemented in the :mod:`oceanarray.processors.stage1` module, which provides automated conversion from native instrument formats to standardised NetCDF files.
|
|
32
32
|
|
|
33
33
|
3.1. Input Formats Supported
|
|
34
34
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
35
35
|
|
|
36
|
-
The :class:`oceanarray.stage1.MooringProcessor` class supports multiple instrument formats:
|
|
36
|
+
The :class:`oceanarray.processors.stage1.MooringProcessor` class supports multiple instrument formats:
|
|
37
37
|
|
|
38
38
|
- **Sea-Bird CNV files** (`sbe-cnv`): Standard SBE 37 MicroCAT output
|
|
39
39
|
- **Sea-Bird ASCII files** (`sbe-ascii`): Alternative SBE ASCII format
|
|
@@ -136,15 +136,16 @@ The ``instruments`` list contains one entry per instrument on the mooring, with:
|
|
|
136
136
|
|
|
137
137
|
.. code-block:: python
|
|
138
138
|
|
|
139
|
-
|
|
139
|
+
import oceanarray
|
|
140
140
|
|
|
141
|
-
# Process a single mooring
|
|
142
|
-
|
|
143
|
-
|
|
141
|
+
# Process a single mooring through Stage 1
|
|
142
|
+
oceanarray.process('mooring_name', stage=1,
|
|
143
|
+
raw_dir='/path/to/raw/', proc_dir='/path/to/proc/')
|
|
144
144
|
|
|
145
145
|
# Process multiple moorings
|
|
146
|
-
|
|
147
|
-
|
|
146
|
+
for mooring in ['mooring1', 'mooring2', 'mooring3']:
|
|
147
|
+
oceanarray.process(mooring, stage=1,
|
|
148
|
+
raw_dir='/path/to/raw/', proc_dir='/path/to/proc/')
|
|
148
149
|
|
|
149
150
|
4. Output Format
|
|
150
151
|
----------------
|
|
@@ -238,7 +239,7 @@ This script performed similar functions to the current Python implementation:
|
|
|
238
239
|
:linenos:
|
|
239
240
|
:caption: Excerpt from `microcat2rodb_3.m`
|
|
240
241
|
|
|
241
|
-
The modern Python implementation in :mod:`oceanarray.stage1` provides equivalent functionality with improved:
|
|
242
|
+
The modern Python implementation in :mod:`oceanarray.processors.stage1` provides equivalent functionality with improved:
|
|
242
243
|
|
|
243
244
|
- **Error handling**: Comprehensive logging and graceful failure modes
|
|
244
245
|
- **Format support**: Multiple instrument types through pluggable readers
|
|
@@ -25,9 +25,9 @@ Python API
|
|
|
25
25
|
|
|
26
26
|
.. code-block:: python
|
|
27
27
|
|
|
28
|
-
from oceanarray.
|
|
28
|
+
from oceanarray.processors.grid import MooringGridder
|
|
29
29
|
|
|
30
|
-
MooringGridder(proc_dir).grid(mooring_name, p_start=200.0, p_end=1000.0, dp=20.0, force=False)
|
|
30
|
+
MooringGridder(proc_dir=proc_dir).grid(mooring_name, p_start=200.0, p_end=1000.0, dp=20.0, force=False)
|
|
31
31
|
|
|
32
32
|
Purpose
|
|
33
33
|
-------
|
|
@@ -60,15 +60,6 @@ Path resolution helpers for raw and processed directory trees.
|
|
|
60
60
|
:members:
|
|
61
61
|
:undoc-members:
|
|
62
62
|
|
|
63
|
-
logsheet
|
|
64
|
-
^^^^^^^^
|
|
65
|
-
Generate fieldwork logsheet PDFs for mooring deployments/recoveries and
|
|
66
|
-
calibration-dip casts.
|
|
67
|
-
|
|
68
|
-
.. automodule:: oceanarray.logsheet
|
|
69
|
-
:members:
|
|
70
|
-
:undoc-members:
|
|
71
|
-
|
|
72
63
|
Instrument processing
|
|
73
64
|
----------------------
|
|
74
65
|
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
# OceanArray Project Structure
|
|
2
|
+
|
|
3
|
+
This document provides an overview of the oceanarray codebase structure and organisation.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Project Structure Overview
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
oceanarray/
|
|
11
|
+
├── oceanarray/ # Main Python package
|
|
12
|
+
│ ├── __init__.py # Public API: process(), STAGES, parameters
|
|
13
|
+
│ ├── _version.py # Package version (auto-generated by setuptools-scm)
|
|
14
|
+
│ ├── cli.py # [core] Command-line interface (oceanarray init/process/run/report/validate/…)
|
|
15
|
+
│ ├── utilities.py # [core] Shared utility helpers used across the pipeline
|
|
16
|
+
│ ├── inspect.py # [core] Quick dataset inspection helpers for interactive use
|
|
17
|
+
│ ├── logger.py # [core] Logging configuration and helpers
|
|
18
|
+
│ ├── paths.py # [core] Filesystem path and filename conventions
|
|
19
|
+
│ │
|
|
20
|
+
│ ├── processors/ # [core] Processing stages + pipeline registry
|
|
21
|
+
│ │ ├── __init__.py # Pipeline stage registry and public process() entry point
|
|
22
|
+
│ │ ├── stage1.py # Stage 1: raw data → CF-NetCDF (*_stage1.nc)
|
|
23
|
+
│ │ ├── stage2.py # Stage 2: clock correction + deployment trim (*_stage2.nc)
|
|
24
|
+
│ │ ├── stage3.py # Stage 3: pressure interpolation + QARTOD QC (*_stage3.nc)
|
|
25
|
+
│ │ ├── pressure.py # Pressure interpolation helpers for stage 3
|
|
26
|
+
│ │ ├── qc.py # QARTOD QC tests and CTD derivations for stage 3
|
|
27
|
+
│ │ ├── coordinate.py # BEAM→ENU transforms and ADCP QC for stage 3
|
|
28
|
+
│ │ ├── caldip.py # CalDip calibration-dip corrections (not yet implemented)
|
|
29
|
+
│ │ ├── stack.py # MooringStacker: instruments → common time grid (*_stack.nc)
|
|
30
|
+
│ │ ├── grid.py # MooringGridder: stack → regular pressure grid (*_grid.nc)
|
|
31
|
+
│ │ └── helpers.py # Internal helpers for stack and grid operations
|
|
32
|
+
│ │
|
|
33
|
+
│ ├── analysis/ # [analysis] Science utilities
|
|
34
|
+
│ │ ├── clock.py # Clock-offset analysis functions
|
|
35
|
+
│ │ ├── hydrographic.py # Hydrographic analysis utilities
|
|
36
|
+
│ │ ├── science.py # QC and dataset processing functions
|
|
37
|
+
│ │ ├── spectral.py # Spectral analysis of time series
|
|
38
|
+
│ │ ├── temporal.py # Time-series analysis utilities
|
|
39
|
+
│ │ └── vector.py # Vector rotation and progressive-vector utilities
|
|
40
|
+
│ │
|
|
41
|
+
│ ├── plotters/ # [viz] Three-tier plotting package
|
|
42
|
+
│ │ ├── __init__.py # Public API
|
|
43
|
+
│ │ ├── primitives.py # Tier 1: data-agnostic plotting primitives
|
|
44
|
+
│ │ ├── current.py # Tier 2: current/velocity domain plots
|
|
45
|
+
│ │ ├── diagnostic.py # Tier 2: T-S, histogram, spectrum, QC diagnostic plots
|
|
46
|
+
│ │ ├── hydrography.py # Tier 2: hydrographic section and isopycnal plots
|
|
47
|
+
│ │ ├── timeseries.py # Tier 2: time-series and gridded-section plots
|
|
48
|
+
│ │ ├── spectrum.py # Tier 2: spectral diagnostics
|
|
49
|
+
│ │ ├── ts.py # T-S diagram and thermohaline structure plots
|
|
50
|
+
│ │ ├── animation.py # Animated plot functions
|
|
51
|
+
│ │ ├── helpers.py # Shared colormap/style helpers
|
|
52
|
+
│ │ └── _cli_legacy.py # Legacy CLI plots (pending `oceanarray plot <file>` redesign)
|
|
53
|
+
│ │
|
|
54
|
+
│ ├── report/ # [report] HTML report generation
|
|
55
|
+
│ │ ├── __init__.py # Public entry-points (MooringReport, etc.)
|
|
56
|
+
│ │ ├── _mooring.py # Mooring summary template + MooringReport orchestrator
|
|
57
|
+
│ │ ├── _instrument.py # Per-instrument report ({mooring}_{serial}_report.html)
|
|
58
|
+
│ │ ├── _stack.py # Stack report (multi-instrument timeseries, tilt panels)
|
|
59
|
+
│ │ ├── _grid.py # Grid report (vertical section, spectra, N²)
|
|
60
|
+
│ │ ├── _array.py # Array-level multi-mooring summary report
|
|
61
|
+
│ │ ├── _plots.py # Tier 3: report-level figure wrappers (base64 PNGs)
|
|
62
|
+
│ │ ├── _html_helpers.py # HTML/QC constants, base64 helpers, NC metadata readers
|
|
63
|
+
│ │ └── _recovery_table.py # Per-mooring cruise-report recovery table
|
|
64
|
+
│ │
|
|
65
|
+
│ ├── tools/ # [core] Shared I/O infrastructure
|
|
66
|
+
│ │ ├── readers.py # NetCDF and legacy-format instrument readers
|
|
67
|
+
│ │ ├── writers.py # NetCDF write helpers (OceanSITES-compliant)
|
|
68
|
+
│ │ └── rapid_interp.py # Physics-informed vertical interpolation for sparse profiles
|
|
69
|
+
│ │
|
|
70
|
+
│ ├── config/ # Configuration
|
|
71
|
+
│ │ ├── parameters.py # Package-level defaults (VARIABLES, QC ranges, style)
|
|
72
|
+
│ │ ├── validation.py # Mooring YAML validation
|
|
73
|
+
│ │ ├── OS1_var_names.yaml # OceanSITES variable name mappings
|
|
74
|
+
│ │ ├── OS1_sensor_attrs.yaml # OceanSITES sensor attributes
|
|
75
|
+
│ │ ├── logging.yaml # Logging configuration
|
|
76
|
+
│ │ └── legacy/ # Legacy RAPID/RODB configuration files
|
|
77
|
+
│ │
|
|
78
|
+
│ └── legacy/ # Legacy RODB/RAPID processing (deprecated; excluded from lint)
|
|
79
|
+
│
|
|
80
|
+
├── tests/ # pytest test suite
|
|
81
|
+
│ ├── unit/ # seasenselib-free unit tests
|
|
82
|
+
│ ├── integration/ # Golden + pipeline tests (needs_seasenselib)
|
|
83
|
+
│ ├── fixtures/ # Committed raw + processed dune2_1_2026 fixtures
|
|
84
|
+
│ └── legacy/ # Tests for legacy RODB/RAPID processing
|
|
85
|
+
│
|
|
86
|
+
├── notebooks/ # Demo notebooks
|
|
87
|
+
├── docs/ # Sphinx documentation
|
|
88
|
+
│ └── source/
|
|
89
|
+
│ ├── methods/ # Method documentation (one page per processing step)
|
|
90
|
+
│ └── _static/ # Static files, code examples, CSS
|
|
91
|
+
│
|
|
92
|
+
├── CLAUDE.md # Claude Code guidance (local-only)
|
|
93
|
+
├── CITATION.cff # Citation metadata
|
|
94
|
+
├── CHANGELOG.md
|
|
95
|
+
├── pyproject.toml # Build system and project metadata
|
|
96
|
+
├── requirements.txt
|
|
97
|
+
└── README.md
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Processing Stages
|
|
103
|
+
|
|
104
|
+
The pipeline processes raw instrument data through sequential stages, each
|
|
105
|
+
producing a CF-NetCDF output file. `oceanarray.STAGES` is the registry of stages,
|
|
106
|
+
and `oceanarray.process(mooring, stage=…, proc_dir=…, raw_dir=…)` runs any subset.
|
|
107
|
+
|
|
108
|
+
### Stage 1 — Standardisation (`processors/stage1.py`)
|
|
109
|
+
- **Input**: raw instrument files (`.cnv`, `.rsk`, `.dat`, `.hex`, RDI raw)
|
|
110
|
+
- **Output**: `{proc_dir}/{mooring}/{mooring}_{serial}_stage1.nc`
|
|
111
|
+
- Faithful to the raw data — no QC, no trimming. Stores the transformation matrix
|
|
112
|
+
and coordinate system so later stages can rotate correctly.
|
|
113
|
+
|
|
114
|
+
### Stage 2 — Clock correction + trimming (`processors/stage2.py`)
|
|
115
|
+
- **Input**: `*_stage1.nc` + mooring YAML (clock offsets, deployment window)
|
|
116
|
+
- **Output**: `*_stage2.nc`
|
|
117
|
+
- Applies linear clock-offset correction; trims to the deployment window.
|
|
118
|
+
|
|
119
|
+
### Stage 3 — QC, rotation, derived variables (`processors/stage3.py`)
|
|
120
|
+
- **Input**: `*_stage2.nc`
|
|
121
|
+
- **Output**: `*_stage3.nc`
|
|
122
|
+
- Gross-range and tilt QC flags, BEAM→ENU rotation (Aquadopp), magnetic declination
|
|
123
|
+
correction, salinity, density.
|
|
124
|
+
|
|
125
|
+
### Stack — multi-instrument coordination (`processors/stack.py`)
|
|
126
|
+
- **Input**: `*_stage3.nc` files for all instruments on a mooring
|
|
127
|
+
- **Output**: `{mooring}_stack.nc` — `(N_LEVELS, time)` Dataset
|
|
128
|
+
- Aligns instruments onto a common time axis; HAB-ordered deepest-first (index 0).
|
|
129
|
+
|
|
130
|
+
### Grid — vertical gridding (`processors/grid.py`)
|
|
131
|
+
- **Input**: `*_stack.nc`
|
|
132
|
+
- **Output**: `{mooring}_grid.nc` — `(N_LEVELS, time)` on uniform pressure levels
|
|
133
|
+
- Simple 1-D linear interpolation at each time step (preliminary; no objective mapping).
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Data Flow
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
Raw files
|
|
141
|
+
│
|
|
142
|
+
▼ oceanarray process --stage 1
|
|
143
|
+
*_stage1.nc (faithful copy, CF-NetCDF)
|
|
144
|
+
│
|
|
145
|
+
▼ oceanarray process --stage 2
|
|
146
|
+
*_stage2.nc (clock-corrected, trimmed)
|
|
147
|
+
│
|
|
148
|
+
▼ oceanarray process --stage 3
|
|
149
|
+
*_stage3.nc (QC flagged, ENU velocities, salinity/density)
|
|
150
|
+
│
|
|
151
|
+
▼ oceanarray process --stage stack
|
|
152
|
+
{mooring}_stack.nc (N_LEVELS × time)
|
|
153
|
+
│
|
|
154
|
+
├──▶ oceanarray report → HTML reports
|
|
155
|
+
│
|
|
156
|
+
▼ oceanarray process --stage grid
|
|
157
|
+
{mooring}_grid.nc (uniform pressure × time)
|
|
158
|
+
│
|
|
159
|
+
└──▶ oceanarray report → grid HTML report
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
The full pipeline runs in one command: `oceanarray process MOORING --stage 1 2 3 stack grid`
|
|
163
|
+
(or `oceanarray run MOORING`).
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Plotters Package Architecture
|
|
168
|
+
|
|
169
|
+
Three-tier architecture (see `.claude/plotters_update-20260718.md` for the rules):
|
|
170
|
+
|
|
171
|
+
- **Tier 1** (`plotters/primitives.py`): low-level axes primitives, no domain knowledge
|
|
172
|
+
- **Tier 2** (`plotters/current.py`, `timeseries.py`, `hydrography.py`, etc.): domain
|
|
173
|
+
functions that know about oceanographic variables
|
|
174
|
+
- **Tier 3** (`report/_plots.py`): report wrappers that call Tier-2 functions and return
|
|
175
|
+
base64 PNG strings for embedding in HTML
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## Report Package
|
|
180
|
+
|
|
181
|
+
Report types, each in its own module:
|
|
182
|
+
|
|
183
|
+
| Report | Module | Output file |
|
|
184
|
+
|--------|--------|-------------|
|
|
185
|
+
| Mooring summary | `report/_mooring.py` | `{mooring}_report.html` |
|
|
186
|
+
| Per-instrument | `report/_instrument.py` | `{mooring}_{serial}_report.html` |
|
|
187
|
+
| Stack | `report/_stack.py` | `{mooring}_stack_report.html` |
|
|
188
|
+
| Grid | `report/_grid.py` | `{mooring}_grid_report.html` |
|
|
189
|
+
| Array | `report/_array.py` | `{array}_array_report.html` |
|
|
190
|
+
|
|
191
|
+
All figures are generated by `report/_plots.py` (Tier 3) and embedded as base64 PNGs.
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## Key Design Principles
|
|
196
|
+
|
|
197
|
+
- **Data provenance**: never silently substitute defaults; store all processing
|
|
198
|
+
parameters in NetCDF global attributes so treatment can be reconstructed from the file.
|
|
199
|
+
- **CF-compliant**: CF conventions for metadata and variable naming throughout.
|
|
200
|
+
- **xarray-based**: `xr.Dataset` is the primary data structure in all stages.
|
|
201
|
+
- **Discrete colorbars**: all figures use `_nice_colorbar_bounds` + `BoundaryNorm`;
|
|
202
|
+
continuous colorbars are not used.
|
|
203
|
+
- **Configurable**: YAML-driven configuration for QC ranges, clock offsets, deployment
|
|
204
|
+
windows, and instrument metadata.
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## Legacy Modules
|
|
209
|
+
|
|
210
|
+
`legacy/` contains the RODB/RAPID-format processing path, kept for backward
|
|
211
|
+
compatibility with older datasets. New projects use the stage 1–3 pipeline above.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '0.3.0'
|