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.
Files changed (250) hide show
  1. {oceanarray-0.2.0 → oceanarray-0.3.0}/.github/workflows/docs_deploy.yml +7 -0
  2. {oceanarray-0.2.0 → oceanarray-0.3.0}/.github/workflows/tests.yml +3 -1
  3. {oceanarray-0.2.0 → oceanarray-0.3.0}/CHANGELOG.md +28 -1
  4. {oceanarray-0.2.0 → oceanarray-0.3.0}/CITATION.cff +3 -5
  5. {oceanarray-0.2.0/oceanarray.egg-info → oceanarray-0.3.0}/PKG-INFO +13 -1
  6. {oceanarray-0.2.0 → oceanarray-0.3.0}/README.md +12 -0
  7. oceanarray-0.3.0/docs/source/_static/logo.png +0 -0
  8. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/cli_reference.rst +1 -98
  9. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/file_naming_conventions.rst +4 -3
  10. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/index.rst +0 -7
  11. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/legacy.rst +1 -1
  12. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/methods/nortek_coordinate_transform.rst +4 -4
  13. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/methods/standardisation.rst +10 -9
  14. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/methods/vertical_gridding.rst +2 -2
  15. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/oceanarray.rst +0 -9
  16. oceanarray-0.3.0/docs/source/project_structure.md +211 -0
  17. oceanarray-0.3.0/oceanarray/_version.py +1 -0
  18. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/cli.py +180 -392
  19. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/config/parameters.py +225 -3
  20. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/config/validation.py +6 -6
  21. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/plotters/current.py +3 -2
  22. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/plotters/diagnostic.py +249 -245
  23. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/plotters/helpers.py +0 -3
  24. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/plotters/hydrography.py +5 -5
  25. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/plotters/primitives.py +4 -4
  26. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/plotters/spectrum.py +0 -3
  27. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/plotters/timeseries.py +4 -5
  28. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/plotters/ts.py +7 -6
  29. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/processors/__init__.py +30 -9
  30. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/processors/coordinate.py +6 -6
  31. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/processors/helpers.py +5 -5
  32. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/processors/pressure.py +2 -2
  33. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/processors/qc.py +11 -59
  34. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/processors/stack.py +7 -7
  35. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/processors/stage1.py +5 -5
  36. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/processors/stage2.py +2 -2
  37. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/processors/stage3.py +25 -13
  38. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/report/_array.py +17 -27
  39. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/report/_grid.py +17 -25
  40. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/report/_plots.py +250 -226
  41. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/report/_recovery_table.py +0 -8
  42. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/report/_stack.py +110 -107
  43. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/tools/rapid_interp.py +54 -54
  44. {oceanarray-0.2.0 → oceanarray-0.3.0/oceanarray.egg-info}/PKG-INFO +13 -1
  45. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray.egg-info/SOURCES.txt +9 -22
  46. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray.egg-info/scm_file_list.json +185 -198
  47. oceanarray-0.3.0/oceanarray.egg-info/scm_version.json +8 -0
  48. {oceanarray-0.2.0 → oceanarray-0.3.0}/pyproject.toml +2 -23
  49. {oceanarray-0.2.0 → oceanarray-0.3.0}/requirements-dev.txt +0 -3
  50. oceanarray-0.3.0/tests/fixtures/raw/dune2_1_2026/aquadopp/9920_recovery.dat +9960 -0
  51. oceanarray-0.3.0/tests/fixtures/raw/dune2_1_2026/aquadopp/9920_recovery.hdr +174 -0
  52. oceanarray-0.3.0/tests/fixtures/raw/dune2_1_2026/microcat/2941_recovery.asc +19948 -0
  53. oceanarray-0.3.0/tests/fixtures/regenerate_dune2_microcat.py +73 -0
  54. oceanarray-0.3.0/tests/integration/test_readers.py +273 -0
  55. oceanarray-0.3.0/tests/integration/test_stage1_from_raw.py +158 -0
  56. oceanarray-0.3.0/tests/test_imports.py +26 -0
  57. oceanarray-0.3.0/tests/unit/test_array.py +233 -0
  58. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_cli.py +72 -0
  59. oceanarray-0.3.0/tests/unit/test_parameters.py +122 -0
  60. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_plot_guard.py +19 -0
  61. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_process_api.py +124 -4
  62. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_stage1.py +2 -2
  63. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_stage3.py +11 -11
  64. oceanarray-0.2.0/docs/source/_static/logo.png +0 -0
  65. oceanarray-0.2.0/docs/source/logsheets.rst +0 -223
  66. oceanarray-0.2.0/docs/source/project_structure.md +0 -218
  67. oceanarray-0.2.0/oceanarray/_version.py +0 -1
  68. oceanarray-0.2.0/oceanarray/logsheet/__init__.py +0 -60
  69. oceanarray-0.2.0/oceanarray/logsheet/_columns.py +0 -97
  70. oceanarray-0.2.0/oceanarray/logsheet/_config.py +0 -245
  71. oceanarray-0.2.0/oceanarray/logsheet/_firmware.py +0 -43
  72. oceanarray-0.2.0/oceanarray/logsheet/_latex.py +0 -128
  73. oceanarray-0.2.0/oceanarray/logsheet/_render.py +0 -126
  74. oceanarray-0.2.0/oceanarray/logsheet/builders/__init__.py +0 -13
  75. oceanarray-0.2.0/oceanarray/logsheet/builders/caldip_download.py +0 -195
  76. oceanarray-0.2.0/oceanarray/logsheet/builders/caldip_setup.py +0 -188
  77. oceanarray-0.2.0/oceanarray/logsheet/builders/deployment_setup.py +0 -218
  78. oceanarray-0.2.0/oceanarray/logsheet/builders/mooring_download.py +0 -243
  79. oceanarray-0.2.0/oceanarray/logsheet/builders/recovery.py +0 -157
  80. oceanarray-0.2.0/oceanarray/logsheet/data/column_defs.yaml +0 -686
  81. oceanarray-0.2.0/oceanarray/logsheet/data/latex_templates/_base_instrument.tex.j2 +0 -42
  82. oceanarray-0.2.0/oceanarray/logsheet/data/latex_templates/caldip_download.tex.j2 +0 -47
  83. oceanarray-0.2.0/oceanarray/logsheet/data/latex_templates/caldip_setup.tex.j2 +0 -70
  84. oceanarray-0.2.0/oceanarray/logsheet/data/latex_templates/deployment_setup.tex.j2 +0 -97
  85. oceanarray-0.2.0/oceanarray/logsheet/data/latex_templates/mooring_download.tex.j2 +0 -54
  86. oceanarray-0.2.0/oceanarray/logsheet/data/latex_templates/recovery.tex.j2 +0 -103
  87. oceanarray-0.2.0/oceanarray.egg-info/scm_version.json +0 -8
  88. oceanarray-0.2.0/tests/integration/test_readers.py +0 -3
  89. oceanarray-0.2.0/tests/unit/test_logsheets.py +0 -678
  90. {oceanarray-0.2.0 → oceanarray-0.3.0}/.github/ISSUE_TEMPLATE.md +0 -0
  91. {oceanarray-0.2.0 → oceanarray-0.3.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  92. {oceanarray-0.2.0 → oceanarray-0.3.0}/.github/dependabot.yml +0 -0
  93. {oceanarray-0.2.0 → oceanarray-0.3.0}/.github/workflows/docs.yml +0 -0
  94. {oceanarray-0.2.0 → oceanarray-0.3.0}/.github/workflows/pypi.yml +0 -0
  95. {oceanarray-0.2.0 → oceanarray-0.3.0}/.gitignore +0 -0
  96. {oceanarray-0.2.0 → oceanarray-0.3.0}/CONTRIBUTING.md +0 -0
  97. {oceanarray-0.2.0 → oceanarray-0.3.0}/LICENSE +0 -0
  98. {oceanarray-0.2.0 → oceanarray-0.3.0}/MIGRATION-BASEDIR.md +0 -0
  99. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/Makefile +0 -0
  100. {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
  101. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/array_processing.png +0 -0
  102. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/array_processing_v2.png +0 -0
  103. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/code/3_beam_transformation.py +0 -0
  104. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/code/auto_filt.m +0 -0
  105. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/code/hydro_grid.m +0 -0
  106. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/code/microcat2rodb_2.m +0 -0
  107. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/code/microcat2rodb_3.m +0 -0
  108. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/code/microcat_apply_cal.m +0 -0
  109. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/code/microcat_apply_cal_plus.m +0 -0
  110. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/code/microcat_raw2use_003.m +0 -0
  111. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/code/mooring_interp_wb2_3_5.m +0 -0
  112. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/css/custom.css +0 -0
  113. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/github_solo_workflow.png +0 -0
  114. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/github_workflow2.png +0 -0
  115. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/instrument_processing.png +0 -0
  116. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/instrument_processing_v2.png +0 -0
  117. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/instrument_processing_v4.png +0 -0
  118. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/instrument_processing_v5.png +0 -0
  119. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/instrument_processing_v6.png +0 -0
  120. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/mooring_processing.png +0 -0
  121. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/mooring_processing_V2.png +0 -0
  122. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/mooring_processing_v3.png +0 -0
  123. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/mooring_processing_v4.png +0 -0
  124. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/oceanarray_grid_report.png +0 -0
  125. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/oceanarray_icon.png +0 -0
  126. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/oceanarray_instrument_report.png +0 -0
  127. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/oceanarray_report_header.png +0 -0
  128. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/oceanarray_stack_report.png +0 -0
  129. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/_static/rotary_spectrum_plan.rst +0 -0
  130. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/calibration_dips.rst +0 -0
  131. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/clock_offset.rst +0 -0
  132. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/conf.py +0 -0
  133. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/directory_structure.rst +0 -0
  134. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/methods/acquisition.rst +0 -0
  135. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/methods/auto_qc.rst +0 -0
  136. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/methods/calibration.rst +0 -0
  137. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/methods/concatenation.rst +0 -0
  138. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/methods/conversion.rst +0 -0
  139. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/methods/multisite_merging.rst +0 -0
  140. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/methods/time_gridding.rst +0 -0
  141. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/methods/trimming.rst +0 -0
  142. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/migration.rst +0 -0
  143. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/oceanSITES_manual.rst +0 -0
  144. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/oceanarray_format.rst +0 -0
  145. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/processing_framework.rst +0 -0
  146. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/quickstart.rst +0 -0
  147. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/reports.rst +0 -0
  148. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/roadmap.rst +0 -0
  149. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/setup.md +0 -0
  150. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/style_guide.md +0 -0
  151. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/troubleshooting.rst +0 -0
  152. {oceanarray-0.2.0 → oceanarray-0.3.0}/docs/source/yaml_configuration.rst +0 -0
  153. {oceanarray-0.2.0 → oceanarray-0.3.0}/environment.yml +0 -0
  154. {oceanarray-0.2.0 → oceanarray-0.3.0}/notebooks/demo_check_clock.ipynb +0 -0
  155. {oceanarray-0.2.0 → oceanarray-0.3.0}/notebooks/demo_climatology.ipynb +0 -0
  156. {oceanarray-0.2.0 → oceanarray-0.3.0}/notebooks/demo_clock_offset.ipynb +0 -0
  157. {oceanarray-0.2.0 → oceanarray-0.3.0}/notebooks/demo_instrument.ipynb +0 -0
  158. {oceanarray-0.2.0 → oceanarray-0.3.0}/notebooks/demo_mooring.ipynb +0 -0
  159. {oceanarray-0.2.0 → oceanarray-0.3.0}/notebooks/demo_stage1.ipynb +0 -0
  160. {oceanarray-0.2.0 → oceanarray-0.3.0}/notebooks/demo_stage2.ipynb +0 -0
  161. {oceanarray-0.2.0 → oceanarray-0.3.0}/notebooks/demo_step1.ipynb +0 -0
  162. {oceanarray-0.2.0 → oceanarray-0.3.0}/notebooks/dsE_1_2018_microcat_7518_temperature.png +0 -0
  163. {oceanarray-0.2.0 → oceanarray-0.3.0}/notebooks/legacy/README.md +0 -0
  164. {oceanarray-0.2.0 → oceanarray-0.3.0}/notebooks/legacy/demo_batch_instrument.ipynb +0 -0
  165. {oceanarray-0.2.0 → oceanarray-0.3.0}/notebooks/legacy/demo_instrument_rdb.ipynb +0 -0
  166. {oceanarray-0.2.0 → oceanarray-0.3.0}/notebooks/legacy/demo_mooring_rdb.ipynb +0 -0
  167. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/__init__.py +0 -0
  168. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/analysis/__init__.py +0 -0
  169. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/analysis/clock.py +0 -0
  170. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/analysis/hydrographic.py +0 -0
  171. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/analysis/science.py +0 -0
  172. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/analysis/spectral.py +0 -0
  173. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/analysis/temporal.py +0 -0
  174. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/analysis/vector.py +0 -0
  175. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/config/OS1_sensor_attrs.yaml +0 -0
  176. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/config/OS1_var_names.yaml +0 -0
  177. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/config/__init__.py +0 -0
  178. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/config/legacy/project_RAPID.yaml +0 -0
  179. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/config/legacy/rodb_keys.txt +0 -0
  180. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/config/legacy/rodb_keys.yaml +0 -0
  181. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/config/logging.yaml +0 -0
  182. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/inspect.py +0 -0
  183. {oceanarray-0.2.0/oceanarray/config → oceanarray-0.3.0/oceanarray/legacy}/OS1_vocab_attrs.yaml +0 -0
  184. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/legacy/__init__.py +0 -0
  185. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/legacy/caldip.py +0 -0
  186. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/legacy/convertOS.py +0 -0
  187. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/legacy/find_deployment.py +0 -0
  188. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/legacy/mooring_rodb.py +0 -0
  189. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/legacy/process_rodb.py +0 -0
  190. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/legacy/rodb.py +0 -0
  191. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/legacy/tools.py +0 -0
  192. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/logger.py +0 -0
  193. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/oceanarray.mplstyle +0 -0
  194. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/paths.py +0 -0
  195. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/plotters/__init__.py +0 -0
  196. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/plotters/_cli_legacy.py +0 -0
  197. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/plotters/animation.py +0 -0
  198. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/processors/caldip.py +0 -0
  199. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/processors/grid.py +0 -0
  200. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/report/__init__.py +0 -0
  201. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/report/_html_helpers.py +0 -0
  202. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/report/_instrument.py +0 -0
  203. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/report/_mooring.py +0 -0
  204. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/tools/__init__.py +0 -0
  205. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/tools/readers.py +0 -0
  206. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/tools/writers.py +0 -0
  207. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray/utilities.py +0 -0
  208. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray.egg-info/dependency_links.txt +0 -0
  209. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray.egg-info/entry_points.txt +0 -0
  210. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray.egg-info/requires.txt +0 -0
  211. {oceanarray-0.2.0 → oceanarray-0.3.0}/oceanarray.egg-info/top_level.txt +0 -0
  212. {oceanarray-0.2.0 → oceanarray-0.3.0}/pytest.ini +0 -0
  213. {oceanarray-0.2.0 → oceanarray-0.3.0}/requirements-test.txt +0 -0
  214. {oceanarray-0.2.0 → oceanarray-0.3.0}/requirements.txt +0 -0
  215. {oceanarray-0.2.0 → oceanarray-0.3.0}/setup.cfg +0 -0
  216. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/conftest.py +0 -0
  217. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/fixtures/proc/dune2_1_2026/aquadopp/dune2_1_2026_9920_stage1.nc +0 -0
  218. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/fixtures/proc/dune2_1_2026/aquadopp/dune2_1_2026_9920_stage2.nc +0 -0
  219. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/fixtures/proc/dune2_1_2026/aquadopp/dune2_1_2026_9920_stage3.nc +0 -0
  220. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/fixtures/proc/dune2_1_2026/dune2_1_2026.mooring.yaml +0 -0
  221. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/fixtures/proc/dune2_1_2026/dune2_1_2026_grid.nc +0 -0
  222. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/fixtures/proc/dune2_1_2026/dune2_1_2026_stack.nc +0 -0
  223. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/fixtures/proc/dune2_1_2026/microcat/dune2_1_2026_2941_stage1.nc +0 -0
  224. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/fixtures/proc/dune2_1_2026/microcat/dune2_1_2026_2941_stage2.nc +0 -0
  225. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/fixtures/proc/dune2_1_2026/microcat/dune2_1_2026_2941_stage3.nc +0 -0
  226. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/integration/__init__.py +0 -0
  227. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/integration/conftest.py +0 -0
  228. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/integration/test_pipeline.py +0 -0
  229. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/integration/test_recovery_table.py +0 -0
  230. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/integration/test_stage1.py +0 -0
  231. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/integration/test_stage2.py +0 -0
  232. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/integration/test_time_gridding.py +0 -0
  233. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/legacy/__init__.py +0 -0
  234. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/legacy/test_convertOS.py +0 -0
  235. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/legacy/test_mooring_rodb.py +0 -0
  236. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/legacy/test_process_rodb.py +0 -0
  237. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/legacy/test_rodb.py +0 -0
  238. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/__init__.py +0 -0
  239. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_flag_merge.py +0 -0
  240. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_logger.py +0 -0
  241. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_paths.py +0 -0
  242. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_plotters.py +0 -0
  243. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_recovery_table.py +0 -0
  244. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_report.py +0 -0
  245. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_stage2.py +0 -0
  246. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_time_gridding.py +0 -0
  247. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_tools.py +0 -0
  248. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_utilities.py +0 -0
  249. {oceanarray-0.2.0 → oceanarray-0.3.0}/tests/unit/test_validation.py +0 -0
  250. {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: pytest tests/unit -m "not slow and not local and not needs_seasenselib" -q
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.2.0] — unreleased
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.2.0
10
- date-released: 2026-07-27
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.2.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
+ [![PyPI](https://img.shields.io/pypi/v/oceanarray.svg)](https://pypi.org/project/oceanarray/)
64
+ [![Python versions](https://img.shields.io/pypi/pyversions/oceanarray.svg)](https://pypi.org/project/oceanarray/)
65
+ [![License: MIT](https://img.shields.io/pypi/l/oceanarray.svg)](https://github.com/ocean-uhh/oceanarray/blob/main/LICENSE)
66
+ [![Tests](https://github.com/ocean-uhh/oceanarray/actions/workflows/tests.yml/badge.svg)](https://github.com/ocean-uhh/oceanarray/actions/workflows/tests.yml)
67
+ [![Documentation](https://img.shields.io/badge/docs-ocean--uhh.github.io-blue.svg)](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
+ [![PyPI](https://img.shields.io/pypi/v/oceanarray.svg)](https://pypi.org/project/oceanarray/)
4
+ [![Python versions](https://img.shields.io/pypi/pyversions/oceanarray.svg)](https://pypi.org/project/oceanarray/)
5
+ [![License: MIT](https://img.shields.io/pypi/l/oceanarray.svg)](https://github.com/ocean-uhh/oceanarray/blob/main/LICENSE)
6
+ [![Tests](https://github.com/ocean-uhh/oceanarray/actions/workflows/tests.yml/badge.svg)](https://github.com/ocean-uhh/oceanarray/actions/workflows/tests.yml)
7
+ [![Documentation](https://img.shields.io/badge/docs-ocean--uhh.github.io-blue.svg)](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
@@ -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. ``oceanarray logsheet`` covers fieldwork logistics and is
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 ``oceanarray logsheet`` to pre-fill
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
- - :doc:`logsheets` — how ``logsheet_config.yaml`` filename conventions connect
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.mooring_level`.
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 ``stage3._xyz_to_enu()`` expands this
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.stage3._xyz_to_enu` — vectorised ENU rotation
290
- - :py:func:`oceanarray.stage3._apply_beam_to_enu` — full BEAM/XYZ → ENU pipeline
291
- - :py:func:`oceanarray.stage1.Stage1Processor._parse_nortek_T_matrix_hdr` — header parsing
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
- from oceanarray.stage1 import MooringProcessor, process_multiple_moorings
139
+ import oceanarray
140
140
 
141
- # Process a single mooring
142
- processor = MooringProcessor('/path/to/data/')
143
- success = processor.process_mooring('mooring_name')
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
- moorings = ['mooring1', 'mooring2', 'mooring3']
147
- results = process_multiple_moorings(moorings, '/path/to/data/')
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.mooring_level import MooringGridder
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'