ooi-data-explorations 0.2.3__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 (198) hide show
  1. ooi_data_explorations-0.2.3/.gitignore +120 -0
  2. ooi_data_explorations-0.2.3/LICENSE.txt +21 -0
  3. ooi_data_explorations-0.2.3/PKG-INFO +457 -0
  4. ooi_data_explorations-0.2.3/README.md +410 -0
  5. ooi_data_explorations-0.2.3/__init__.py +0 -0
  6. ooi_data_explorations-0.2.3/examples/__init__.py +0 -0
  7. ooi_data_explorations-0.2.3/examples/camds/uncabled.ipynb +412 -0
  8. ooi_data_explorations-0.2.3/examples/ctdbp/__init__.py +0 -0
  9. ooi_data_explorations-0.2.3/examples/ctdbp/combine_mooring_ctdbp.py +212 -0
  10. ooi_data_explorations-0.2.3/examples/ctdbp/recovered_host_ctdbp.py +52 -0
  11. ooi_data_explorations-0.2.3/examples/ctdbp/recovered_inst_ctdbp.py +51 -0
  12. ooi_data_explorations-0.2.3/examples/ctdbp/telemetered_ctdbp.py +52 -0
  13. ooi_data_explorations-0.2.3/examples/ctdpf/__init__.py +0 -0
  14. ooi_data_explorations-0.2.3/examples/ctdpf/cspp_ctdpf.py +47 -0
  15. ooi_data_explorations-0.2.3/examples/dosta/__init__.py +0 -0
  16. ooi_data_explorations-0.2.3/examples/dosta/combine_mooring_dosta.py +210 -0
  17. ooi_data_explorations-0.2.3/examples/dosta/recovered_host_ctdbp_dosta.py +52 -0
  18. ooi_data_explorations-0.2.3/examples/dosta/recovered_host_solo_dosta.py +52 -0
  19. ooi_data_explorations-0.2.3/examples/dosta/recovered_inst_ctdbp_dosta.py +52 -0
  20. ooi_data_explorations-0.2.3/examples/dosta/telemetered_ctdbp_dosta.py +52 -0
  21. ooi_data_explorations-0.2.3/examples/dosta/telemetered_solo_dosta.py +52 -0
  22. ooi_data_explorations-0.2.3/examples/flort/__init__.py +0 -0
  23. ooi_data_explorations-0.2.3/examples/flort/cabled_profiler_flort.py +39 -0
  24. ooi_data_explorations-0.2.3/examples/flort/cspp_flort.py +50 -0
  25. ooi_data_explorations-0.2.3/examples/flort/recovered_host_flort.py +51 -0
  26. ooi_data_explorations-0.2.3/examples/flort/recovered_inst_flort.py +51 -0
  27. ooi_data_explorations-0.2.3/examples/flort/telemetered_flort.py +51 -0
  28. ooi_data_explorations-0.2.3/examples/flort/wfp_flort.py +50 -0
  29. ooi_data_explorations-0.2.3/examples/metbk/__init__.py +0 -0
  30. ooi_data_explorations-0.2.3/examples/metbk/recovered_host_metbk.py +48 -0
  31. ooi_data_explorations-0.2.3/examples/metbk/telemetered_bulk_flux.py +50 -0
  32. ooi_data_explorations-0.2.3/examples/metbk/telemetered_metbk.py +50 -0
  33. ooi_data_explorations-0.2.3/examples/notebooks/dosta/ooiea_cabled_dosta_processing.ipynb +1784 -0
  34. ooi_data_explorations-0.2.3/examples/notebooks/dosta/ooiea_dosta_annotations_hitl_qc.ipynb +220 -0
  35. ooi_data_explorations-0.2.3/examples/notebooks/dosta/ooiea_dosta_quality_assessments.ipynb +786 -0
  36. ooi_data_explorations-0.2.3/examples/notebooks/dosta/ooiea_uncabled_dosta_data.ipynb +368 -0
  37. ooi_data_explorations-0.2.3/examples/notebooks/fdchp/.gitignore +1 -0
  38. ooi_data_explorations-0.2.3/examples/notebooks/fdchp/FdchpExample.ipynb +552 -0
  39. ooi_data_explorations-0.2.3/examples/notebooks/fdchp/ProcessFdchpRaw.ipynb +6235 -0
  40. ooi_data_explorations-0.2.3/examples/notebooks/ifcb/combining_ifcb_and_environmental.ipynb +1619 -0
  41. ooi_data_explorations-0.2.3/examples/notebooks/m2m_explorations.ipynb +2313 -0
  42. ooi_data_explorations-0.2.3/examples/notebooks/optaa/acs137_20210302_pre_deployment_adat.csv +84 -0
  43. ooi_data_explorations-0.2.3/examples/notebooks/optaa/acs137_20210302_pre_deployment_cdat.csv +84 -0
  44. ooi_data_explorations-0.2.3/examples/notebooks/optaa/process_kdata_cabled_profiler_ce04osps.ipynb +3863 -0
  45. ooi_data_explorations-0.2.3/examples/notebooks/optaa/process_kdata_cabled_profiler_rs01sbps.ipynb +3902 -0
  46. ooi_data_explorations-0.2.3/examples/notebooks/optaa/process_kdata_optaa.ipynb +2283 -0
  47. ooi_data_explorations-0.2.3/examples/notebooks/optaa/process_thredds_optaa.ipynb +2292 -0
  48. ooi_data_explorations-0.2.3/examples/notebooks/optaa/process_thredds_optaa_cspp.ipynb +1078 -0
  49. ooi_data_explorations-0.2.3/examples/notebooks/optaa/processing_workflow_using_the_cspp_optaa.ipynb +5364 -0
  50. ooi_data_explorations-0.2.3/examples/notebooks/optaa/when_things_go_bad.ipynb +2087 -0
  51. ooi_data_explorations-0.2.3/examples/notebooks/pco2a/carbonate_climatologies.ipynb +686 -0
  52. ooi_data_explorations-0.2.3/examples/notebooks/pco2a/regional_pco2_comparisons.png +0 -0
  53. ooi_data_explorations-0.2.3/examples/notebooks/pco2a/regional_ph_comparisons.png +0 -0
  54. ooi_data_explorations-0.2.3/examples/notebooks/pco2w/PCO2_Calculations.ipynb +2880 -0
  55. ooi_data_explorations-0.2.3/examples/notebooks/pco2w/ce01issm_pco2w_C0119_converted_2019-10-31.csv +2357 -0
  56. ooi_data_explorations-0.2.3/examples/notebooks/phsen/creating_annotations.ipynb +1983 -0
  57. ooi_data_explorations-0.2.3/examples/nutnr/__init__.py +0 -0
  58. ooi_data_explorations-0.2.3/examples/nutnr/cspp_nutnr.py +47 -0
  59. ooi_data_explorations-0.2.3/examples/nutnr/recovered_host_nutnr.py +52 -0
  60. ooi_data_explorations-0.2.3/examples/nutnr/recovered_inst_nutnr.py +52 -0
  61. ooi_data_explorations-0.2.3/examples/nutnr/telemetered_nutnr.py +52 -0
  62. ooi_data_explorations-0.2.3/examples/optaa/__init__.py +0 -0
  63. ooi_data_explorations-0.2.3/examples/optaa/cabled_benthic_optaa.py +48 -0
  64. ooi_data_explorations-0.2.3/examples/optaa/cabled_profiler_optaa.py +48 -0
  65. ooi_data_explorations-0.2.3/examples/optaa/cspp_optaa.py +49 -0
  66. ooi_data_explorations-0.2.3/examples/optaa/recovered_host_optaa.py +49 -0
  67. ooi_data_explorations-0.2.3/examples/optaa/telemetered_optaa.py +54 -0
  68. ooi_data_explorations-0.2.3/examples/pco2a/__init__.py +0 -0
  69. ooi_data_explorations-0.2.3/examples/pco2a/recovered_host_pco2a.py +59 -0
  70. ooi_data_explorations-0.2.3/examples/pco2a/telemetered_pco2a.py +57 -0
  71. ooi_data_explorations-0.2.3/examples/pco2w/__init__.py +0 -0
  72. ooi_data_explorations-0.2.3/examples/pco2w/combine_mooring_pco2w.py +195 -0
  73. ooi_data_explorations-0.2.3/examples/pco2w/recovered_host_pco2w.py +52 -0
  74. ooi_data_explorations-0.2.3/examples/pco2w/recovered_inst_pco2w.py +51 -0
  75. ooi_data_explorations-0.2.3/examples/pco2w/streamed_pco2w.py +52 -0
  76. ooi_data_explorations-0.2.3/examples/pco2w/telemetered_pco2w.py +52 -0
  77. ooi_data_explorations-0.2.3/examples/phsen/__init__.py +0 -0
  78. ooi_data_explorations-0.2.3/examples/phsen/combine_mooring_phsen.py +180 -0
  79. ooi_data_explorations-0.2.3/examples/phsen/imodem_phsen.py +51 -0
  80. ooi_data_explorations-0.2.3/examples/phsen/recovered_host_phsen.py +52 -0
  81. ooi_data_explorations-0.2.3/examples/phsen/recovered_inst_phsen.py +51 -0
  82. ooi_data_explorations-0.2.3/examples/phsen/streamed_phsen.py +52 -0
  83. ooi_data_explorations-0.2.3/examples/phsen/telemetered_phsen.py +52 -0
  84. ooi_data_explorations-0.2.3/examples/spkir/__init__.py +0 -0
  85. ooi_data_explorations-0.2.3/examples/spkir/cspp_spkir.py +47 -0
  86. ooi_data_explorations-0.2.3/examples/spkir/recovered_host_spkir.py +47 -0
  87. ooi_data_explorations-0.2.3/examples/spkir/telemetered_spkir.py +45 -0
  88. ooi_data_explorations-0.2.3/examples/tensorflow/sealion_detection_example.ipynb +708 -0
  89. ooi_data_explorations-0.2.3/examples/tensorflow/sealion_training_example.ipynb +371 -0
  90. ooi_data_explorations-0.2.3/examples/vel3d/__init__.py +0 -0
  91. ooi_data_explorations-0.2.3/examples/vel3d/recovered_host_vel3d.py +48 -0
  92. ooi_data_explorations-0.2.3/examples/vel3d/recovered_wfp_vel3d.py +42 -0
  93. ooi_data_explorations-0.2.3/examples/vel3d/telemetered_vel3d.py +47 -0
  94. ooi_data_explorations-0.2.3/examples/vel3d/telemetered_wfp_vel3d.py +42 -0
  95. ooi_data_explorations-0.2.3/examples/velpt/__init__.py +0 -0
  96. ooi_data_explorations-0.2.3/examples/velpt/cspp_velpt.py +47 -0
  97. ooi_data_explorations-0.2.3/examples/velpt/recovered_host_velpt.py +45 -0
  98. ooi_data_explorations-0.2.3/examples/velpt/recovered_inst_velpt.py +39 -0
  99. ooi_data_explorations-0.2.3/examples/velpt/telemetered_velpt.py +45 -0
  100. ooi_data_explorations-0.2.3/examples/water_quality/__init__.py +0 -0
  101. ooi_data_explorations-0.2.3/examples/water_quality/wqx_ctdbp.py +147 -0
  102. ooi_data_explorations-0.2.3/examples/water_quality/wqx_dosta.py +145 -0
  103. ooi_data_explorations-0.2.3/examples/water_quality/wqx_flort.py +158 -0
  104. ooi_data_explorations-0.2.3/examples/water_quality/wqx_nutnr.py +146 -0
  105. ooi_data_explorations-0.2.3/examples/water_quality/wqx_phsen.py +144 -0
  106. ooi_data_explorations-0.2.3/examples/wavss/__init__.py +0 -0
  107. ooi_data_explorations-0.2.3/examples/wavss/recovered_host_wavss_directional.py +38 -0
  108. ooi_data_explorations-0.2.3/examples/wavss/recovered_host_wavss_summary.py +37 -0
  109. ooi_data_explorations-0.2.3/examples/wavss/telemetered_wavss_directional.py +42 -0
  110. ooi_data_explorations-0.2.3/examples/wavss/telemetered_wavss_summary.py +42 -0
  111. ooi_data_explorations-0.2.3/ooi_data_explorations/__init__.py +7 -0
  112. ooi_data_explorations-0.2.3/ooi_data_explorations/bottles.py +264 -0
  113. ooi_data_explorations-0.2.3/ooi_data_explorations/cabled/__init__.py +0 -0
  114. ooi_data_explorations-0.2.3/ooi_data_explorations/cabled/process_flort.py +157 -0
  115. ooi_data_explorations-0.2.3/ooi_data_explorations/cabled/process_optaa.py +531 -0
  116. ooi_data_explorations-0.2.3/ooi_data_explorations/cabled/process_phsen.py +176 -0
  117. ooi_data_explorations-0.2.3/ooi_data_explorations/calibrations.py +64 -0
  118. ooi_data_explorations-0.2.3/ooi_data_explorations/combine_data.py +238 -0
  119. ooi_data_explorations-0.2.3/ooi_data_explorations/common.py +1381 -0
  120. ooi_data_explorations-0.2.3/ooi_data_explorations/construct_urls.py +210 -0
  121. ooi_data_explorations-0.2.3/ooi_data_explorations/data_request.py +272 -0
  122. ooi_data_explorations-0.2.3/ooi_data_explorations/m2m_urls.yml +12186 -0
  123. ooi_data_explorations-0.2.3/ooi_data_explorations/profilers.py +296 -0
  124. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/__init__.py +0 -0
  125. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/cgsn/scripts/CTDBP.ipynb +2878 -0
  126. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/cgsn/scripts/CTDMO.ipynb +2894 -0
  127. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/cgsn/scripts/CTDPF.ipynb +1129 -0
  128. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/cgsn/scripts/DOSTA.ipynb +1156 -0
  129. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/cgsn/scripts/FLORD.ipynb +1267 -0
  130. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/cgsn/scripts/FLORT.ipynb +1320 -0
  131. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/cgsn/scripts/METBK.ipynb +1299 -0
  132. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/cgsn/scripts/NUTNR.ipynb +1550 -0
  133. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/cgsn/scripts/PAR.ipynb +1101 -0
  134. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/cgsn/scripts/PCO2A.ipynb +1069 -0
  135. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/cgsn/scripts/PCO2W.ipynb +1090 -0
  136. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/cgsn/scripts/PHSEN.ipynb +1099 -0
  137. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/cgsn/scripts/WAVSS.ipynb +1301 -0
  138. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/cgsn/scripts/wavss_sensor_ranges.yaml +41 -0
  139. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/climatology.py +211 -0
  140. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/discrete_samples.py +196 -0
  141. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/endurance/__init__.py +0 -0
  142. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/endurance/qartod_ce_ctdbp.py +205 -0
  143. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/endurance/qartod_ce_ctdpf.py +195 -0
  144. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/endurance/qartod_ce_dofst.py +199 -0
  145. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/endurance/qartod_ce_dosta.py +271 -0
  146. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/endurance/qartod_ce_flort.py +324 -0
  147. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/endurance/qartod_ce_gliders.py +135 -0
  148. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/endurance/qartod_ce_metbk.py +258 -0
  149. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/endurance/qartod_ce_nutnr.py +287 -0
  150. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/endurance/qartod_ce_parad.py +209 -0
  151. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/endurance/qartod_ce_pco2a.py +218 -0
  152. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/endurance/qartod_ce_pco2w.py +166 -0
  153. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/endurance/qartod_ce_phsen.py +194 -0
  154. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/endurance/qartod_ce_presf.py +193 -0
  155. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/endurance/qartod_ce_spkir.py +231 -0
  156. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/endurance/qartod_ce_vel3d.py +298 -0
  157. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/endurance/qartod_ce_velpt.py +239 -0
  158. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/endurance/qartod_ce_wavss.py +187 -0
  159. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/endurance/reports/__init__.py +0 -0
  160. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/endurance/reports/reports_ce_ctdbp.py +397 -0
  161. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/endurance/reports/reports_ce_nutnr.py +395 -0
  162. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/endurance/reports/reports_ce_phsen.py +406 -0
  163. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/gross_range.py +281 -0
  164. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/plotting.py +145 -0
  165. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/qc_processing.py +668 -0
  166. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/rca/decimate.py +211 -0
  167. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/rca/parameterMap.csv +13 -0
  168. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/rca/qartodTests.csv +3 -0
  169. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/rca/qartod_rca.py +344 -0
  170. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/rca/siteParameters.csv +41 -0
  171. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/reporting.py +92 -0
  172. ooi_data_explorations-0.2.3/ooi_data_explorations/qartod/table_checker.py +270 -0
  173. ooi_data_explorations-0.2.3/ooi_data_explorations/uncabled/__init__.py +0 -0
  174. ooi_data_explorations-0.2.3/ooi_data_explorations/uncabled/ooim2m_cspp.py +280 -0
  175. ooi_data_explorations-0.2.3/ooi_data_explorations/uncabled/process_adcp.py +452 -0
  176. ooi_data_explorations-0.2.3/ooi_data_explorations/uncabled/process_ctdbp.py +216 -0
  177. ooi_data_explorations-0.2.3/ooi_data_explorations/uncabled/process_ctdpf.py +144 -0
  178. ooi_data_explorations-0.2.3/ooi_data_explorations/uncabled/process_dofst.py +215 -0
  179. ooi_data_explorations-0.2.3/ooi_data_explorations/uncabled/process_dosta.py +547 -0
  180. ooi_data_explorations-0.2.3/ooi_data_explorations/uncabled/process_fdchp.py +1141 -0
  181. ooi_data_explorations-0.2.3/ooi_data_explorations/uncabled/process_flord.py +306 -0
  182. ooi_data_explorations-0.2.3/ooi_data_explorations/uncabled/process_flort.py +607 -0
  183. ooi_data_explorations-0.2.3/ooi_data_explorations/uncabled/process_metbk.py +384 -0
  184. ooi_data_explorations-0.2.3/ooi_data_explorations/uncabled/process_mopak.py +1621 -0
  185. ooi_data_explorations-0.2.3/ooi_data_explorations/uncabled/process_nutnr.py +835 -0
  186. ooi_data_explorations-0.2.3/ooi_data_explorations/uncabled/process_optaa.py +843 -0
  187. ooi_data_explorations-0.2.3/ooi_data_explorations/uncabled/process_parad.py +259 -0
  188. ooi_data_explorations-0.2.3/ooi_data_explorations/uncabled/process_pco2a.py +289 -0
  189. ooi_data_explorations-0.2.3/ooi_data_explorations/uncabled/process_pco2w.py +491 -0
  190. ooi_data_explorations-0.2.3/ooi_data_explorations/uncabled/process_phsen.py +595 -0
  191. ooi_data_explorations-0.2.3/ooi_data_explorations/uncabled/process_spkir.py +394 -0
  192. ooi_data_explorations-0.2.3/ooi_data_explorations/uncabled/process_turbd.py +99 -0
  193. ooi_data_explorations-0.2.3/ooi_data_explorations/uncabled/process_vel3d.py +1347 -0
  194. ooi_data_explorations-0.2.3/ooi_data_explorations/uncabled/process_velpt.py +521 -0
  195. ooi_data_explorations-0.2.3/ooi_data_explorations/uncabled/process_wavss.py +540 -0
  196. ooi_data_explorations-0.2.3/pyproject.toml +115 -0
  197. ooi_data_explorations-0.2.3/setup.py +59 -0
  198. ooi_data_explorations-0.2.3/version.py +1 -0
@@ -0,0 +1,120 @@
1
+ # specific repo ignores
2
+ config.yaml
3
+
4
+ # Byte-compiled / optimized / DLL files
5
+ __pycache__/
6
+ *.py[cod]
7
+ *$py.class
8
+
9
+ # C extensions
10
+ *.so
11
+
12
+ # Distribution / packaging
13
+ .Python
14
+ build/
15
+ develop-eggs/
16
+ dist/
17
+ downloads/
18
+ eggs/
19
+ .eggs/
20
+ lib/
21
+ lib64/
22
+ parts/
23
+ sdist/
24
+ var/
25
+ wheels/
26
+ *.egg-info/
27
+ .installed.cfg
28
+ *.egg
29
+ MANIFEST
30
+ config.yaml
31
+
32
+ # PyInstaller
33
+ # Usually these files are written by a python script from a template
34
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
35
+ *.manifest
36
+ *.spec
37
+
38
+ # Installer logs
39
+ pip-log.txt
40
+ pip-delete-this-directory.txt
41
+
42
+ # Unit test / coverage reports
43
+ htmlcov/
44
+ .tox/
45
+ .coverage
46
+ .coverage.*
47
+ .cache
48
+ nosetests.xml
49
+ coverage.xml
50
+ *.cover
51
+ .hypothesis/
52
+ .pytest_cache/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+
63
+ # Flask stuff:
64
+ instance/
65
+ .webassets-cache
66
+
67
+ # Scrapy stuff:
68
+ .scrapy
69
+
70
+ # Sphinx documentation
71
+ docs/_build/
72
+
73
+ # PyBuilder
74
+ target/
75
+
76
+ # Jupyter Notebook
77
+ .ipynb_checkpoints
78
+
79
+ # pyenv
80
+ .python-version
81
+
82
+ # celery beat schedule file
83
+ celerybeat-schedule
84
+
85
+ # SageMath parsed files
86
+ *.sage.py
87
+
88
+ # Environments
89
+ .env
90
+ .venv
91
+ env/
92
+ venv/
93
+ ENV/
94
+ env.bak/
95
+ venv.bak/
96
+
97
+ # Spyder project settings
98
+ .spyderproject
99
+ .spyproject
100
+
101
+ # Pycharm project settings
102
+ .idea/
103
+
104
+ # Rope project settings
105
+ .ropeproject
106
+
107
+ # mkdocs documentation
108
+ /site
109
+
110
+ # mypy
111
+ .mypy_cache/
112
+
113
+ # R
114
+ .Rhistory
115
+
116
+ # Custom
117
+ *.jpg
118
+ *.mp4
119
+
120
+ *_build/*
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) [year] [fullname]
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,457 @@
1
+ Metadata-Version: 2.4
2
+ Name: ooi_data_explorations
3
+ Version: 0.2.3
4
+ Summary: Tools for interacting with OOI data, including downloading, cleaning, and visualizing.
5
+ Author-email: Christopher Wingard <chris.wingard@oregonstate.edu>, Andrew Reed <areed@whoi.edu>, Joffrey Peters <joffreyp@gmail.com>
6
+ Maintainer-email: Christopher Wingard <chris.wingard@oregonstate.edu>, Andrew Reed <areed@whoi.edu>, Joffrey Peters <joffreyp@gmail.com>
7
+ License-Expression: MIT
8
+ License-File: LICENSE.txt
9
+ Keywords: Ocean Observatories Initiative,URL parameters,jupyter_server
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Framework :: Jupyter
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Intended Audience :: Science/Research
14
+ Classifier: Intended Audience :: System Administrators
15
+ Classifier: License :: OSI Approved :: BSD License
16
+ Classifier: Programming Language :: Python
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3 :: Only
19
+ Classifier: Programming Language :: Python :: 3.9
20
+ Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Requires-Python: >=3.9
24
+ Requires-Dist: beautifulsoup4
25
+ Requires-Dist: dask
26
+ Requires-Dist: gsw
27
+ Requires-Dist: h5netcdf
28
+ Requires-Dist: matplotlib
29
+ Requires-Dist: munch
30
+ Requires-Dist: netcdf4
31
+ Requires-Dist: ntplib
32
+ Requires-Dist: numpy
33
+ Requires-Dist: pandas
34
+ Requires-Dist: pyyaml
35
+ Requires-Dist: requests
36
+ Requires-Dist: tqdm
37
+ Requires-Dist: urllib3
38
+ Requires-Dist: xarray[accel]
39
+ Provides-Extra: dev
40
+ Requires-Dist: build; extra == 'dev'
41
+ Requires-Dist: hatch; extra == 'dev'
42
+ Requires-Dist: ipykernel; extra == 'dev'
43
+ Requires-Dist: pre-commit; extra == 'dev'
44
+ Requires-Dist: requests; extra == 'dev'
45
+ Requires-Dist: ruff; extra == 'dev'
46
+ Description-Content-Type: text/markdown
47
+
48
+ # OOI Data Explorations with Python
49
+
50
+ ## Overview
51
+
52
+ The python code provided here was developed primarily as a toolset for the OOI Data Team to
53
+ facilitate accessing data from OOINet for the QC reviews, gap analyses, metadata checks, etc. that OOI performs to quality check its datasets.
54
+ This code is provided to the larger community in the hopes that it will be of use. The code
55
+ uses several methods to access data:
56
+ * [OOI M2M API](https://oceanobservatories.org/ooi-m2m-interface/)
57
+ * [OOI THREDDS Data Server](https://thredds.dataexplorer.oceanobservatories.org/thredds/catalog/ooigoldcopy/public/catalog.html)
58
+ * [JupyterHub-mounted NetCDF store](`/home/jovyan/ooi/kdata` from an OOI JupyterHub session)
59
+
60
+ Datasets are loaded into the user workspace as an [xarray](http://xarray.pydata.org/en/stable/) dataset, or saved to disk as a NetCDF filein different examples.
61
+ There are instructions below of how to setup and use the package, with several example notebooks
62
+ and scripts available in the examples directory.
63
+
64
+ If you have any comments, questions or issues, please don't hesitate to
65
+ [open an issue]((https://github.com/oceanobservatories/ooi-data-explorations/issues)).
66
+
67
+ ## Table of Contents
68
+
69
+ * [Installation](#installation)
70
+ * [Download and Install OOI Data Explorations](#obtaining-the-code-and-configuring-the-environment)
71
+ * [Setup Access Credentials](#access-credentials)
72
+ * [Installing Bash, Git and Python](#configuring-system-for-python-install-bash-git-and-anacondaminiconda)
73
+ * [Usage](#usage)
74
+ * [M2M Terminology](#m2m-terminology)
75
+ * [Requesting As-Is (Mostly) Data](#requesting-as-is-mostly-data)
76
+ * [Simplifying the As-Is Requests](#simplifying-the-as-is-requests)
77
+ * [YAML Structure](#yaml-structure)
78
+ * [Simplified Request](#simplified-request)
79
+ * [Additional Utilities](#additional-utilities)
80
+ * [Requesting Processed Data](#requesting-processed-data)
81
+ * [QARTOD Workflows](#qartod-workflows)
82
+
83
+ ## Installation
84
+
85
+
86
+
87
+ ### Obtaining the Code and Configuring the Environment
88
+
89
+ If you do not have python installed, read about [Installing Bash, Git and Python](#configuring-system-for-python-install-bash-git-and-anaconda-miniconda) below before following these instructions to use this code repository.
90
+
91
+ This section describes getting a copy the python code, setting up a virtual environment, and installing this module for use in that environment.
92
+
93
+ Clone the `ooi-data-explorations` code to your local machine:
94
+
95
+ ```shell
96
+ # download the ooi-data-explorations code
97
+ git clone https://github.com/oceanobservatories/ooi-data-explorations.git
98
+ ```
99
+
100
+ What follows are two ways to set up a code environment to run `ooi-data-explorations` examples and use the python code base using either `conda` or `pip` as the package manager.
101
+
102
+ #### Create conda environment
103
+ If you prefer to use the `conda` package manager, follow this section to set up the `ooi` environment which has the dependencies needed to run the `ooi-data-explorer` python code and example notebooks.
104
+ ``` shell
105
+ # configure the OOI python environment
106
+ cd ooi-data-explorations/python
107
+ conda env create -f environment.yml
108
+ conda init # might be required for windows users if environment is not active
109
+ conda activate ooi
110
+
111
+ # install the package as a local development package
112
+ conda develop .
113
+ ```
114
+
115
+ #### Create a pip environment
116
+ If you prefer to use the `pip` package manager, follow this section to set up the `ooi` environment which has the dependencies needed to run the `ooi-data-explorer` python code and example notebooks.
117
+
118
+ ```shell
119
+ cd ooi-data-explorations/python
120
+ python -m venv venv
121
+ source venv/bin/activate
122
+ pip install -r requirements.txt
123
+ pip install -e .
124
+ ```
125
+
126
+ #### Ensure the python environment is available in JupyterHub
127
+ If using this code in a JupyterHub environment, an additional step will be needed to ensure the environment is available for running in a JupyterHub kernel.
128
+ If using a pip environment, a couple of additional dependencies are required. Install them with pip:
129
+
130
+ ```shell
131
+ pip install ipykernel ipympl
132
+ ```
133
+
134
+ For either the conda or pip environments, the environment must be added to a list of available kernels using the following command:
135
+
136
+ ```shell
137
+ python -m ipykernel install --user --name=ooi
138
+ ```
139
+ Now the `ooi` kernel should be listed as available when running a Jupyter Notebook.
140
+
141
+ ### Access Credentials
142
+
143
+ Access credentials are required to download data from OOINet via the M2M interface. Directions on how to obtain
144
+ these, in addition to details about the M2M system, are [available on the OOI website](https://oceanobservatories.org/ooi-m2m-interface/).
145
+
146
+ * If you haven't already done so, either create a user account on the [OOI Data Portal](https://ooinet.oceanobservatories.org),
147
+ or use the CILogon button with an academic or Google account (login button is towards the upper right corner of the
148
+ web page) to login to the portal.
149
+ * Navigate to the drop down menu screen in the top-right corner of the menu bar
150
+ * Click on the "User Profile" element of the drop down.
151
+ * Copy and save the following data from the user profile: API Username and API Token.
152
+
153
+ The python code uses the [netrc](https://docs.python.org/3.6/library/netrc.html) utility to obtain your access
154
+ credentials. Users need to create a `.netrc` file in their home directory to store these access credentials. Using
155
+ either a text editor or the bash terminal, create the `.netrc` file (replacing the `<API Username>` and `<API Token>`
156
+ in the example below with the corresponding values from your login credentials for the [OOI Data Portal](https://ooinet.oceanobservatories.org)):
157
+
158
+ ```shell script
159
+ cd ~
160
+ touch .netrc
161
+ chmod 600 .netrc
162
+ cat <<EOT >> .netrc
163
+ machine ooinet.oceanobservatories.org
164
+ login <API Username>
165
+ password <API Token>
166
+ EOT
167
+ ```
168
+
169
+ ### Configuring System for Python (Install Bash, Git and Anaconda/Miniconda)
170
+
171
+ If you already have python installed or are using the OOI JupyterHub, you can skip this section, as the required tools are already available.
172
+
173
+ In order to use the python code in this repository, you will need to set up the proper tools. There
174
+ are several examples on how to this, so I'll avoid reinventing the wheel here. One of the best
175
+ tutorials I've found has been developed by the folks at [Earth Lab](https://www.earthdatascience.org/). The
176
+ [tutorial](https://www.earthdatascience.org/workshops/setup-earth-analytics-python/setup-git-bash-conda/) they have
177
+ prepared will guide you through the process of setting up a system to use Python for Earth Science analysis from start
178
+ to finish, regardless of your computer's operating system. Experienced users can easily skip and skim through to the
179
+ sections relevant to them.
180
+
181
+ One key difference between the tutorial and my personal preference is to use the full [Anaconda](https://www.anaconda.com)
182
+ installation instead of [Miniconda](https://docs.conda.io/en/latest/miniconda.html) as called out in the tutorial. All
183
+ the tools you would need, and then some, are installed with Anaconda. You can follow the tutorial exactly as written
184
+ and all of the code in this project will work, but I recommend using Anaconda instead of Miniconda. There are several
185
+ other packages and tools provided by Anaconda that you may end up wanting to work with.
186
+
187
+ Additionally, you do not need to install Bash or Git for the code to work. You can
188
+ [directly download the code](https://github.com/oceanobservatories/ooi-data-explorations/archive/master.zip) instead of
189
+ using Git, use a text editor to [setup your access credentials](#access-credentials), and/or use the Anaconda Prompt or
190
+ a terminal of your choice instead of following the examples given below. I am trying to be OS independent, thus the
191
+ examples below assume you are using some form of bash (Git Bash if you followed the tutorial from above). Adjust as you
192
+ need and see fit.
193
+
194
+ Note, for Windows users only and assuming you are using Git Bash, if you already have Anaconda/Miniconda installed on
195
+ your machine, you do not need to uninstall/reinstall as described in the
196
+ [tutorial](https://www.earthdatascience.org/workshops/setup-earth-analytics-python/setup-git-bash-conda/).
197
+ You can leave everything as-is. However, you do need to link Git Bash to Anaconda (or Miniconda); this happens
198
+ automagically if you follow the sequence in the tutorial by installing Git Bash before Anaconda. If you already have
199
+ Anaconda installed, however, from the bash terminal add the following code to the `.bash_profile` file in your home
200
+ directory (assuming you installed Anaconda in your home directory, which is the default):
201
+
202
+ ```shell script
203
+ cd ~
204
+ echo ". ${HOME}/Anaconda3/etc/profile.d/conda.sh" >> ~/.bash_profile
205
+ source .bash_profile
206
+ ```
207
+
208
+ ## Usage
209
+
210
+ The code is available in the [ooi_data_explorations](ooi_data_explorations) directory with examples (both scripts
211
+ and notebooks) in the [examples](examples) directory. The python code has been developed and used with Python 3.6+
212
+ on Windows and Linux machines. The functions are configured in a granular fashion to allow users to access the
213
+ data in a few different ways.
214
+
215
+ ### M2M Terminology
216
+
217
+ Before using these functions, it is important to understand how requests to the
218
+ [OOI M2M API](https://oceanobservatories.org/ooi-m2m-interface/) are structured. A request is built around the
219
+ reference designator (comprised of the site, node, and sensor names), the data delivery method, and data stream (think
220
+ of a stream as a dataset). Beginning and ending dates for the time period of interest are optional inputs. If omitted,
221
+ all of the data for a particular instrument of interest will be downloaded.
222
+
223
+ * Site -- 8 character uppercase string denoting the array and location within the array of the system. These are
224
+ [defined](https://oceanobservatories.org/research-arrays/) on the OOI website.
225
+ * Node -- 5 character uppercase string (of which the first 2 characters are really the key) denoting the assembly the
226
+ instrument is connected to/mounted on. These can be thought of as physical locations within/under the higher level site
227
+ designator.
228
+ * Sensor -- 12 character uppercase string that indicates, among other things, the instrument class and series. The
229
+ instrument class and series are [defined](https://oceanobservatories.org/instruments/) on the OOI website.
230
+ * Delivery Method -- Method of data delivery (lowercase).
231
+ * `streamed` -- Real-time data delivery method for all cabled assets. Data is "streamed" to shore over the fiber
232
+ optic network as it outputs from an instrument.
233
+ * `telemetered` -- Near real-time data delivery method for most uncabled assets. Data is recorded remotely
234
+ by a data logger system and delivered in batches over a satellite or cellular network link on a recurring schedule
235
+ (e.g every 2 hours).
236
+ * `recovered_host` -- Usually the same data set as telemetered for uncabled assets. Key difference is this data is
237
+ downloaded from the data logger system after the asset is recovered. In most cases, this is 1:1 with the
238
+ telemetered data unless there was an issue with telemetry during the deployment or the data was decimated
239
+ (temporal and/or # of parameters) by the data logger system prior to transmission.
240
+ * `recovered_inst` -- Data recorded on and downloaded directly from an individual instrument after the instrument is
241
+ recovered. Not all instruments internally record data, so this method will not be available for all instruments.
242
+ * `recovered_wfp` -- Data recorded on and downloaded from the McLane Moored Profiler system used at several sites
243
+ in OOI. Telemetered data is decimated, this data set represents the full-resolution data.
244
+ * `recovered_cspp` -- Data recorded on and downloaded from the Coastal Surface Piercing Profiler system used in
245
+ the Endurance array. Telemetered data is decimated, this data set represents the full-resolution data.
246
+ * Stream -- A collection of parameters output by an instrument or read from a file, and parsed into a named data set.
247
+ Stream names are all lowercase. Streams are mostly associated with the data delivery methods and there may be more than
248
+ one stream per method.
249
+
250
+ ### Requesting As-Is (Mostly) Data
251
+
252
+ The core functions used to request and download data are `m2m_request` and `m2m_collect`, located in the
253
+ [`common.py`](ooi_data_explorations/common.py) module. From those two functions, you can pretty much create your own
254
+ library of functions to download and process whatever data you want from the system and either save it locally or
255
+ continue to work on it within your python environment. It is important to note, these functions require inputs that
256
+ map directly to those required by the [OOI M2M API](https://oceanobservatories.org/ooi-m2m-interface/).
257
+
258
+ The data requested and downloaded by the `m2m_request` and `m2m_collect` functions is somewhat modified from the
259
+ original: I switch the dimensions from `obs` to `time`, drop certain timing variables that were originally never meant
260
+ to be exposed to the user, and clean up some basic metadata attributes. Beyond that, the data is provided as-is. No
261
+ effort is made to select a subset of the variables, conduct QC, clean up the variable names, or in any other way alter
262
+ the data obtained from the [OOI Data Portal](https://ooinet.oceanobservatories.org). For example:
263
+
264
+ ```python
265
+ import os
266
+ from ooi_data_explorations.common import m2m_request, m2m_collect
267
+
268
+ # Setup the needed information to request data from the pH sensor on the Oregon
269
+ # Shelf Surface Mooring near-surface (7 m depth) instrument frame (NSIF).
270
+ site = 'CE02SHSM' # OOI Net site designator
271
+ node = 'RID26' # OOI Net node designator
272
+ sensor = '06-PHSEND000' # OOI Net sensor designator
273
+ method = 'telemetered' # OOI Net data delivery method
274
+ stream = 'phsen_abcdef_dcl_instrument' # OOI Net stream name
275
+ start = '2019-04-01T00:00:00.000Z' # data for spring 2019 ...
276
+ stop = '2019-09-30T23:59:59.999Z' # ... through the beginning of fall
277
+
278
+ # Request the data (this may take some time).
279
+ r = m2m_request(site, node, sensor, method, stream, start, stop)
280
+
281
+ # Use a regex tag to download only the pH sensor data from the THREDDS catalog
282
+ # created by our request.
283
+ tag = '.*PHSEN.*\\.nc$'
284
+ data = m2m_collect(r, tag)
285
+
286
+ # Save the data to the users home directory under a folder called ooidata for
287
+ # further processing
288
+ out_path = os.path.join(os.path.expanduser('~'), 'ooidata')
289
+ out_path = os.path.abspath(out_path)
290
+ if not os.path.exists(out_path):
291
+ os.makedirs(out_path)
292
+
293
+ # setup the output file
294
+ out_file = ('%s.%s.%s.%s.%s.nc' % (site, node, sensor, method, stream))
295
+ nc_out = os.path.join(out_path, out_file)
296
+
297
+ # save the data to disk
298
+ data.to_netcdf(nc_out, mode='w', format='NETCDF4', engine='h5netcdf')
299
+ ```
300
+
301
+ The example above will request data from the pH sensor (PHSEN) on the Oregon Shelf Surface Mooring (CE02SHSM)
302
+ near-surface (7 m depth) instrument frame (NSIF) via `m2m_request`. The requested data is gathered by the system in a
303
+ THREDDS catalog specific to the user and the request. One or more NetCDF files with the requested data will be in the
304
+ catalog. The second function, `m2m_collect`, will load the content of those files into an xarray dataset. A key input to
305
+ `m2m_collect` is the regex tag used to select the files to load. In most cases, a user could use `'.*\\.nc$'` as the
306
+ tag, downloading all available NetCDF files. In some cases, however, the tag used needs to be more selective. If an
307
+ instrument requires data from a co-located sensor, those NetCDF files will be present as well. Part of the process in
308
+ collecting the requested data is concatenating the downloaded data into a single xarray dataset. That will fail if the
309
+ individual data files contain different variables. In the above example, the pH sensor requires salinity data from a
310
+ co-located CTD. Both pH sensor and CTD NetCDF files will be present in the THREDDS catalog. The tag `'.*PHSEN.*\\.nc$'`
311
+ is used to select only the pH sensor data.
312
+
313
+ ### Simplifying the As-Is Requests
314
+
315
+ Users really only need to use `m2m_request` and `m2m_collect` for the data requests. However, the user needs to
316
+ explicitly know all of the details (e.g. correct regex tag) and terms from above. Outside of OOI (and even inside of
317
+ OOI), the terminology used for sites, nodes, sensors, methods, and streams can be intimidating and confusing. In an
318
+ attempt to clean up some of that terminology, limit the need for the user to learn all of the OOI lingo, and to align
319
+ with some of the functionality in the Matlab and R utilities, I've organized a subset of all of the sources of OOI data
320
+ into a [YAML structure](ooi_data_explorations/m2m_urls.yml) that users can query using a simpler set of terms as part of
321
+ a data request. The YAML structure removes from consideration all so-called engineering sensors and instruments that
322
+ cannot be accessed through the API (e.g. cameras or bio-accoustic sonar), as well as most of the non-science streams
323
+ (engineering or metadata streams). The idea is to cover the most common needs, rather than all possible cases. Users can
324
+ still access any data set desired, but they need to use the [method from above](#requesting-as-is-mostly-data) to
325
+ explicitly call any stream not represented in the YAML structure.
326
+
327
+ #### YAML Structure
328
+
329
+ The YAML structure I've created uses the OOI site codes as-is. It simplifies the node designation by taking the 100+
330
+ nodes and groups them according to an assembly type indicating where co-located sensors can be found. There are 6
331
+ assembly types with differing numbers of subassemblies (see table below). Either the assembly or subassembly name can
332
+ be used to request the data.
333
+
334
+ | Assembly | Subassembly | Description |
335
+ | --- | --- | --- |
336
+ | buoy | n/a | Surface buoys with meteorological, wave, and/or sea surface (~1 m depth) instrumentation |
337
+ | midwater | nsif, riser, sphere, 200m_platform | Platforms located at various depths below the sea surface and above the seafloor |
338
+ | seafloor |mfn, bep, low-pwr-jbox, medium-pwr-jbox| Platforms resting directly on the seafloor |
339
+ | profiler | cspp, coastal-wfp, global-wfp, shallow-profiler, deep-profiler | Profiling systems with integrated instrumentation |
340
+ | glider | coastal-glider, global-glider, profiling-glider | Autonomous, buoyancy driven underwater vehicles with integrated instrumentation |
341
+ | auv | n/a | Autonomous underwater vehicles, currently only deployed in the Pioneer Array |
342
+
343
+ The shorter OOI instrument class name is used instead of the full sensor designator. The data delivery methods are as
344
+ defined above and are used to determine the stream(s) available. There is usually just one. In the few cases where
345
+ there is more than one, the code defaults to selecting the first. I've curated the list to make sure this is the stream
346
+ of interest to 99.9% of users. The key utility here is users do not have to know the stream name. You can still get at
347
+ the other streams, if needed, but you have to explicitly know what they are and call them as shown in example above.
348
+
349
+ The last things to consider are the date ranges to bound the request and an aggregation value. Date ranges are fairly
350
+ self-explanatory. You need to select a starting and ending date for the data of interest, otherwise you will get all of
351
+ the data for that instrument. That could potentially be a large request, so be careful. The dates entered need to be
352
+ recognizable as such. I'm using the [dateutil parser function](https://dateutil.readthedocs.io/en/stable/parser.html) to
353
+ convert the dates you enter into the proper form for the M2M API. Alternatively, you can use the deployment number and
354
+ the M2M API will determine the dates.
355
+
356
+ The aggregation value addresses a few cases where more than one instance of an instrument class is associated with
357
+ an assembly. For example the Global surface moorings have a midwater chain of 10 CTDs connected to an inductive modem
358
+ line. If you do not specify the aggregation flag, you will only get the first of those 10 CTDs. If, however, you set the
359
+ aggregation flag to `0`, you will get all of them in a data set with a variable added called `sensor_count`, so you can
360
+ distinguish between them. Conversely, you can request a specific instrument by using its sequential number.
361
+
362
+ #### Simplified Request
363
+
364
+ At the end of the day, users need to know the site, assembly, instrument class and data delivery method. Somewhat
365
+ simpler than the full site, node, sensor, method, and stream name, and hopefully more meaningful. Additionally, any
366
+ date/time string format, so long as it can be recognized by the
367
+ [dateutil parser function](https://dateutil.readthedocs.io/en/stable/parser.html), will work for setting starting and
368
+ ending dates for the data requests as opposed to explicitly setting the date to a format of `YYYY-MM-DDThh:mm:ss.fffZ`.
369
+ Or, you can just use the deployment number and let the system figure out the dates. Take a look at the examples below:
370
+
371
+ ```python
372
+ from ooi_data_explorations.data_request import data_request
373
+
374
+ # Setup the needed information to request data from the pH sensor on the Oregon
375
+ # Shelf Surface Mooring near-surface (7 m depth) instrument frame (NSIF).
376
+ site = 'ce02shsm' # OOI site designator
377
+ assembly = 'midwater' # Assembly grouping name
378
+ instrument = 'phsen' # OOI instrument class
379
+ method = 'telemetered' # data delivery method
380
+
381
+ # the first four inputs are required in the order given above, the following
382
+ # inputs are semi optional, You need to specify at least a start date and/or
383
+ # stop date, or use the deployment number
384
+ start = '2019-04-01' # data for April 2019 ...
385
+ stop = '2019-05-30' # ... through May 2019
386
+ deploy = 9 # The Spring 2019 deployment number
387
+
388
+ # request and download the data using specific dates
389
+ data_01 = data_request(site, assembly, instrument, method, start=start, stop=stop)
390
+
391
+ # request and download the data using the deployment number
392
+ data_02 = data_request(site, assembly, instrument, method, deploy=deploy)
393
+
394
+ # Setup the needed information to request data from the CTDMO sensor on the
395
+ # Global Irminger Surface Mooring inductive modem line.
396
+ site = 'gi01sumo' # OOI site designator
397
+ assembly = 'riser' # Subassembly grouping name
398
+ instrument = 'ctdmo' # OOI instrument class
399
+ method = 'recovered_inst' # data delivery method
400
+
401
+ start = '2019-04-01' # data for April 2019 ...
402
+ stop = '2019-05-30' # ... through May 2019
403
+
404
+ # request and download the data using specific dates, this only returns the
405
+ # first instance of the CTDMOs
406
+ data_03 = data_request(site, assembly, instrument, method, start=start, stop=stop)
407
+
408
+ # request and download the data for all 10 CTDMOs
409
+ data_04 = data_request(site, assembly, instrument, method, start=start, stop=stop, aggregate=0)
410
+
411
+ # request and download the data for the CTDMO 5 out of 10.
412
+ data_05 = data_request(site, assembly, instrument, method, start=start, stop=stop, aggregate=5)
413
+ ```
414
+
415
+ ### Additional Utilities
416
+
417
+ In addition to `m2m_request` and `m2m_collect`, a collection of additional utilities are available to access instrument
418
+ and site deployment information. This information is collected in the OOI [Asset Management](https://github.com/oceanobservatories/asset-management)
419
+ database. It includes the dates, times and locations of deployments, instrument serial numbers, calibration coefficients,
420
+ and all the other pieces of information that combine to form the OOI metadata. These utilities and their use are
421
+ demonstrated in a [Jupyter notebook](examples/notebooks/m2m_explorations.ipynb) available in the [examples](examples/notebooks)
422
+ directory.
423
+
424
+ ### Requesting Processed Data
425
+
426
+ For most individuals, the above code should satisfy your needs. For some of the data QC tasks I work through, the data
427
+ needs organizational reworking, renaming of variables or different processing to fit within my workflow. The
428
+ process_*.py modules in the [cabled](./ooi_data_explorations/cabled) and [uncabled](./ooi_data_explorations/uncabled)
429
+ directories represent an attempt on my part to rework the data sets into more useful forms before conducting any
430
+ further work. Primarily, these re-works are for my own use, but they are available for others to use. The primary steps
431
+ are:
432
+
433
+ * Deleting certain variables that are of no use to my needs (helps to reduce file sizes)
434
+ * Renaming some parameters to more consistent names (across and within datasets). The original OOI names are preserved
435
+ as variable level attributes termed `ooinet_variable_name`.
436
+ * Resetting the QC parameters to use the `flag_mask` and `flag_meaning` attributes from the
437
+ [CF Metadata conventions](http://cfconventions.org/Data/cf-conventions/cf-conventions-1.7/cf-conventions.html#flags).
438
+ * Reseting incorrectly set units and other attributes for some variables.
439
+ * Reworking certain parameters by splitting or reshaping the data into more useful forms.
440
+ * Update global attributes and otherwise cleaning up the data set.
441
+
442
+ Additionally, some instrument data is collected in burst mode (e.g. every 15 minutes for 3 minutes at 1 Hz). This
443
+ can make the data sets fairly large. By applying a median average to each of the bursts, the size of the data set can
444
+ be reduced to a more workable form, and the point-to-point variability in each burst can be smoothed out. Burst
445
+ averaging is optional. Most of the processing functions are set to run from the command line. Examples of how these are
446
+ run can be found in the [examples directory](examples). Bash scripts to automate downloading date using these processing
447
+ scripts are in the [utilities/harvesters](utilities/harvesters) directory.
448
+
449
+ ### QARTOD Workflows
450
+
451
+ OOI is beginning the process of replacing the current automated QC algorithms with [QARTOD](https://ioos.noaa.gov/project/qartod/)
452
+ [tests](https://github.com/ioos/ioos_qc) developed by [IOOS](https://ioos.noaa.gov/). The workflows and functions used
453
+ to generate the test limits for Endurance Array assets are available under the [qartod](ooi_data_explorations/qartod)
454
+ directory. These workflows rely on the processing functions described above. As more QARTOD tests are developed, the
455
+ processing functions and the QARTOD workflows will be extended. The goal is to create a record for the community
456
+ detailing how the test limits were created and to facilitate regenerating those limits as more data is collected over
457
+ time.