Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
141 commits
Select commit Hold shift + click to select a range
ebaca0f
Add placeholder LRAUV_WORKFLOW.md file and rename original to DORADO_…
MBARIMike Oct 9, 2025
b2ced0d
Update link to DORADO_WORKFLOW.md.
MBARIMike Oct 9, 2025
9425692
Add runner for nc42netcdfs.py using a known_hash.
MBARIMike Oct 11, 2025
dc864cb
Update for supporting LRAUV data processing.
MBARIMike Oct 11, 2025
262d543
WIP: Initial commit
MBARIMike Oct 11, 2025
44e2558
Add extract_groups_to_files_netcdf4() as xarray fails on garbled data.
MBARIMike Oct 14, 2025
6f07788
Save variables from / into Universals.nc.
MBARIMike Oct 14, 2025
649a842
Add test for bad data to "1.3 - nc42netcdfs".
MBARIMike Oct 14, 2025
2340c5c
WIP: Working out lrauv data processing workflow.
MBARIMike Oct 14, 2025
bde0115
WIP: Copy of calibrate.py - rework to combine lrauv data.
MBARIMike Oct 14, 2025
d749bf9
Refactor extract_groups_to_files_netcdf4() into more readable methods.
MBARIMike Oct 15, 2025
405d8bc
WIP: Begin changing for use with LRAUV data.
MBARIMike Oct 15, 2025
b285895
Factor nudge_positions() out of calibrate.py so that combine.py can u…
MBARIMike Oct 15, 2025
7efef8d
WIP: Initial attempt at a process_lrauv.py module.
MBARIMike Oct 16, 2025
9f72b88
Merge pull request #47 from MBARIMike/LRAUV
MBARIMike Oct 16, 2025
1de36bb
Simplify calling methods with just log_file, save using <stem>_Group …
MBARIMike Oct 21, 2025
2c7575a
Add test for process_lrauv.py
MBARIMike Oct 21, 2025
6abcb69
Call process_log_files(), signifying that these are LRAUV data.
MBARIMike Oct 21, 2025
9aecc2a
Implement first and "last" steps in process.py for LRAUV data.
MBARIMike Oct 21, 2025
d805f97
Update EXPECTED_SIZE_GITHUB values.
MBARIMike Oct 21, 2025
886728e
Update EXPECTED_MD5_GITHUB value.
MBARIMike Oct 21, 2025
d97165a
Utility script for seafloor mapping in Monterey Bay in lieu of using …
MBARIMike Oct 22, 2025
8a6f6cb
Merge pull request #49 from MBARIMike/LRAUV
MBARIMike Oct 22, 2025
7f85fd1
Fixes for ruff and add installation instructions.
MBARIMike Oct 22, 2025
80450c7
Add gsw as we need to migrate from seawater.
MBARIMike Oct 22, 2025
36cdf56
Merge pull request #50 from MBARIMike/LRAUV
MBARIMike Oct 22, 2025
dbbff83
Remove obvious methods that dealt with Dorado log and sensor files.
MBARIMike Oct 22, 2025
77da251
Add netcdf4 dependency to the documentation.
MBARIMike Oct 22, 2025
b52cace
Merge pull request #52 from MBARIMike/LRAUV
MBARIMike Oct 22, 2025
dd0cc6c
Implement --filter_monotonic_time as a base level QC step.
MBARIMike Oct 23, 2025
3ae9886
Merge pull request #53 from MBARIMike/LRAUV
MBARIMike Oct 23, 2025
e135177
Resolution of Issue writen by Claude Sonnet 4
MBARIMike Oct 28, 2025
c2ef308
Add "2.2 - combine.py"
MBARIMike Oct 28, 2025
b5dd22f
WIP on combine.py. Add GROUP literal for globbing of Group .nc files.
MBARIMike Oct 28, 2025
70a7e88
Merge pull request #55 from MBARIMike/LRAUV
MBARIMike Oct 28, 2025
ff48d0d
Remove inheritance of add_global_metadata() to simplify things.
MBARIMike Oct 28, 2025
0022af2
Pass log_file and group_name down calling tree for better logs and me…
MBARIMike Oct 29, 2025
a87f35f
WIP: Write out combined (_cal.nc) file.
MBARIMike Oct 29, 2025
e047519
Remove unused options.
MBARIMike Oct 30, 2025
972cf51
Add reasonal bounds time coordinate filtering, add --plot_time option.
MBARIMike Oct 31, 2025
0b70c37
Add test for --plot_time.
MBARIMike Oct 31, 2025
689fd0b
Merge pull request #57 from MBARIMike/LRAUV
MBARIMike Oct 31, 2025
d15d142
Merge pull request #59 from MBARIMike/LRAUV
MBARIMike Oct 31, 2025
371f1c5
Output Group files as NetCDF3 each with one unlimited dimension.
MBARIMike Nov 1, 2025
d15c98a
Merge pull request #60 from MBARIMike/LRAUV
MBARIMike Nov 1, 2025
c9f58d6
Remove unused methods, override coordinates attribute with just '<var…
MBARIMike Nov 6, 2025
b06fafe
Use all fixed dimensions (no unlimited) and add attributes so that cf…
MBARIMike Nov 7, 2025
8367bd4
Add nudged longitude and latitude variables to the combined_nc dataset.
MBARIMike Nov 7, 2025
fb8a446
Use cf_xarray accessors by axis to avoid using actual names for the t…
MBARIMike Nov 7, 2025
18a631b
Add combine().
MBARIMike Nov 7, 2025
bab2134
Add _analyze_original_time_coordinates() to log warnings for log_file…
MBARIMike Nov 7, 2025
31c4030
Handle exceptions more explicitely, improve warning messages.
MBARIMike Nov 7, 2025
40d0610
Add --log_file option and generalize for doroado or lrauv processing.
MBARIMike Nov 10, 2025
060f097
Get seg_min as float(seconds) / 60.0.
MBARIMike Nov 10, 2025
8bcfeb1
Update docstring, remove unused methods, convert lon & lat from radia…
MBARIMike Nov 10, 2025
3c7ccde
Have combine.py write a *_combined.nc file.
MBARIMike Nov 10, 2025
e18d5de
Start testing align.py for lrauv log_files.
MBARIMike Nov 10, 2025
475cbec
Add additional diagnostic mesages for severe dead reckoned time sync …
MBARIMike Nov 10, 2025
455ccc5
Read in Group files with decode_cf=False, use xr.DataArray() to const…
MBARIMike Nov 11, 2025
b31fb8d
Add _consolidate_group_time_coords() and set dims and coords from its…
MBARIMike Nov 11, 2025
e956d03
Only set units to radians for lat & lon in the / group.
MBARIMike Nov 11, 2025
50376aa
Add required metadata for cf decoding, write intermediate file so tha…
MBARIMike Nov 11, 2025
019bdb1
WIP: Add time coordinate(s) to combined_nc - still having problems in…
MBARIMike Nov 12, 2025
d34cf2b
Factor out several small methods to make combine_groups() less comple…
MBARIMike Nov 12, 2025
38be49b
Shift dead reckoned nav data by 1 for shared nudge_positions() to wor…
MBARIMike Nov 12, 2025
3c77dfd
WIP: Making work for data from *_combined.nc
MBARIMike Nov 13, 2025
a8eb98f
Update numbers for tests to pass locally.
MBARIMike Nov 13, 2025
71445ce
Look for upstream summary metadata in the correct data member.
MBARIMike Nov 13, 2025
794eed8
Set create_plots to False - change back to True for debugging.
MBARIMike Nov 13, 2025
d389dc1
Add setting of HOST_NAME environment variable for more meaningful met…
MBARIMike Nov 13, 2025
8643e7d
Update numbers for tests to pass in Actions.
MBARIMike Nov 13, 2025
2da3e11
Try again with EXPECTED_SIZE_GITHUB.
MBARIMike Nov 13, 2025
fbe620a
Update EXPECTED_MD5_GITHUB.
MBARIMike Nov 13, 2025
aa360cf
Merge pull request #61 from MBARIMike/LRAUV
MBARIMike Nov 13, 2025
97f4604
Preparing for processing LRAUV data through the align step.
MBARIMike Nov 13, 2025
b2eefe0
WIP: Start with decoding the group name more simply for LRAUV data.
MBARIMike Nov 13, 2025
3841344
Merge branch 'main' of github.com:mbari-org/auv-python into LRAUV
MBARIMike Nov 15, 2025
afc7b54
Merge branch 'LRAUV' into LRAUV
MBARIMike Nov 15, 2025
86471d7
Merge pull request #65 from MBARIMike/LRAUV
MBARIMike Nov 17, 2025
4f39456
Add nudged_ variables, add variable_time_coord_mapping to global meta…
MBARIMike Nov 18, 2025
63af3a1
Add group_name to the global metadata.
MBARIMike Nov 18, 2025
a6880c0
Fixup metadata - use mapping from global variable_time_coord_mapping …
MBARIMike Nov 19, 2025
5b05b0d
Testing process_lrauv.
MBARIMike Nov 19, 2025
e7ef537
Get working for process_lrauv.
MBARIMike Nov 19, 2025
be840a5
Modify for reuse with LRAUV _align.nc data.
MBARIMike Nov 19, 2025
10a3c80
Fix for the tests.
MBARIMike Nov 19, 2025
b10a02a
Merge pull request #66 from MBARIMike/LRAUV
MBARIMike Nov 19, 2025
09f3a85
Remove coordinate standard_name attributes that don't belong in this …
MBARIMike Nov 19, 2025
eceaf3d
Miscellaneous fixes for LRAUV archive step.
MBARIMike Nov 19, 2025
8ec4f7f
Merge pull request #68 from MBARIMike/LRAUV
MBARIMike Nov 19, 2025
1e605a8
Replace "vehicle" with "auv_name" so that auv_name is used consistently.
MBARIMike Nov 19, 2025
a19a351
Factored all the options into _CONFIG_SCHEMA and use a config pattern…
MBARIMike Nov 20, 2025
50b46a9
Add common_args.py and use to reduce arguement parsing code replication.
MBARIMike Nov 21, 2025
8307840
Fix linting with exceptions for non-pep8 module names.
MBARIMike Nov 21, 2025
9ff09a4
Fix pytest: Add the current directory to Python path so modules can i…
MBARIMike Nov 21, 2025
15d93bb
Update values for CI to pass in Actions and act.
MBARIMike Nov 21, 2025
8b22fe2
One more update in value for Actions.
MBARIMike Nov 21, 2025
f90a056
Merge pull request #69 from MBARIMike/LRAUV
MBARIMike Nov 21, 2025
3b3b774
Add --start and --end options for lrauv log file processing.
MBARIMike Nov 22, 2025
5ffb2eb
Make INFO logs less verbose.
MBARIMike Nov 22, 2025
af8f01f
Fixup the --verbose option.
MBARIMike Nov 22, 2025
9fd0bbf
Pass log_file as arguement as --start & --end doesn't set --log_file.
MBARIMike Nov 22, 2025
e082d69
Pass in log_file and do plot before raising exception on error.
MBARIMike Nov 22, 2025
787fe44
Get the correct time coordinates for lat & lon as some log files have…
MBARIMike Nov 22, 2025
5084b5f
Testing --start and --end for lrauv processing.
MBARIMike Nov 22, 2025
8078ee8
Initialize error_message.
MBARIMike Nov 22, 2025
712dc3d
Reorder missions_to_check.
MBARIMike Nov 24, 2025
2a82b29
Add _initial_coordinate_qc() and fix the renaming of _qced variables.
MBARIMike Nov 24, 2025
e9cf8d9
Undo the shift of 1 of dead reckoned positions in relation to gps.
MBARIMike Nov 24, 2025
cb9d437
Implement constructor-based architecture.
MBARIMike Nov 24, 2025
e3140e6
Reformat lines.
MBARIMike Nov 24, 2025
d1bee8b
Merge pull request #70 from MBARIMike/LRAUV
MBARIMike Nov 24, 2025
4c8593b
Add _align_root_group_coordinates() and fix --plot_time.
MBARIMike Nov 25, 2025
2e0be4b
Add ctdneilbrown for early tethys log_files, other resample() fixes.
MBARIMike Nov 25, 2025
add6b51
Set args for running combine.py individually.
MBARIMike Nov 25, 2025
a3e3487
Metadata fixups: Add deployment name, specific summary info, processi…
MBARIMike Nov 25, 2025
6325a01
Skip writing dynamic metadata if running from pytest, add arguments n…
MBARIMike Nov 25, 2025
95133f7
Remove ending period from summary text.
MBARIMike Nov 25, 2025
060a8b3
Skip metadata if running from pytest, remove summary note about furth…
MBARIMike Nov 25, 2025
f65e6c3
Use seg_count rather than i for the segment numbers.
MBARIMike Nov 26, 2025
a9ccd0d
Remove trailing period from summary, which later gets a period.
MBARIMike Nov 26, 2025
a411bd3
Set instance attributes from parsed arguments, use OrderedDict for su…
MBARIMike Nov 26, 2025
9a42001
Remove summary notes not needed after align step.
MBARIMike Nov 26, 2025
445e144
Use (simply) the summary attribute from the align file.
MBARIMike Nov 26, 2025
e4309b0
Testing for metadata fixups.
MBARIMike Nov 26, 2025
9ecc3d8
Update EXPECTED_SIZE_s.
MBARIMike Nov 26, 2025
60f0afb
Merge pull request #71 from MBARIMike/LRAUV
MBARIMike Nov 26, 2025
3395e38
Test for LRAUV processing.
MBARIMike Nov 26, 2025
f123175
Refactor: Consolidate AUV utilities into utils.py
MBARIMike Nov 26, 2025
1fd7ffc
Ensure GPS fixes have monotonically increasing timestamps.
MBARIMike Nov 27, 2025
a5758f3
Check if GPS fix variables exist.
MBARIMike Nov 27, 2025
97cdb41
Skip over InvalidCombinedFile(), i.e. without nudged positions.
MBARIMike Nov 27, 2025
ad4299f
Update documentation to reflect the actual processing done by process…
MBARIMike Nov 27, 2025
13c86f9
Merge pull request #72 from MBARIMike/LRAUV
MBARIMike Nov 27, 2025
faeea85
Add _expand_ubat_to_60hz() to save raw ubat data in the combined.nc f…
MBARIMike Nov 28, 2025
d9438f3
Remove "rename" from _PARMS dictionaries
MBARIMike Dec 1, 2025
678bb42
Add add_wetlabsubat_proxies() to compute biolume proxies for lrauv data.
MBARIMike Dec 2, 2025
f2da1aa
Add add_wetlabsubat_proxies() to compute biolume proxies for lrauv data.
MBARIMike Dec 2, 2025
48c5436
Removed 'concentration_of_colored_dissolved_organic_matter_in_sea_wat…
MBARIMike Dec 2, 2025
86c402f
Ensure that only the variable 'depth' has that standard_name in the _…
MBARIMike Dec 2, 2025
640f0b7
Merge pull request #73 from MBARIMike/LRAUV
MBARIMike Dec 2, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 84 additions & 5 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
//"args": ["--auv_name", "i2map", "--mission", "2020.055.01", "--noinput", "--local", "-v", "2", "--clobber"]
//"args": ["--auv_name", "Dorado389", "--mission", "2020.245.00", "--noinput", "-v", "2", "--portal", "http://stoqs.mbari.org:8080/auvdata/v1", "--clobber"]
//"args": ["--auv_name", "Dorado389", "--mission", "2020.245.00", "--noinput", "-v"]
//"args": ["--auv_name", "Dorado389", "--mission", "2017.297.00", "--local", "-v", "2"]
//"args": ["--auv_name", "dorado", "--mission", "2017.297.00", "-v", "1", "--vehicle_dir", "/Volumes/AUVCTD/missionlogs"]
//"args": ["--auv_name", "Dorado389", "--start", "20190701", "--end", "20191230", "-v", "2"]
//"args": ["--auv_name", "i2map", "--mission", "2021.062.01", "--noinput", "-v", "1"]
//"args": ["--auv_name", "dorado", "--mission", "2021.109.00", "--noinput", "-v"]
Expand All @@ -41,13 +41,32 @@
"args": ["-v", "1", "-d", "0", "-i", "data/auv_data/dorado/missionlogs/2009.055.05/lopc.bin", "-n", "data/auv_data/dorado/missionnetcdfs/2009.055.05/lopc.nc", "-f", "--LargeCopepod_AIcrit", "0.3"]
},
{
"name": "1.1 - correct_log_times.py --mission 2017.284.00 --auv_name Dorado389",
"name": "1.2 - correct_log_times.py --mission 2017.284.00 --auv_name Dorado389",
"type": "debugpy",
"request": "launch",
"program": "${workspaceFolder}/src/data/correct_log_times.py",
"console": "integratedTerminal",
"args": ["--auv_name", "Dorado389", "--mission", "2017.284.00", "-v", "2"]
},
{
"name": "1.3 - nc42netcdfs",
"type": "debugpy",
"request": "launch",
"program": "${workspaceFolder}/src/data/nc42netcdfs.py",
"console": "integratedTerminal",
// A small log_file that has a reasonable amount of data, and known_hash to verify download
//"args": ["-v", "1", "--log_file", "ahi/missionlogs/2025/20250908_20250912/20250911T201546/202509112015_202509112115.nc4", "--known_hash", "d1235ead55023bea05e9841465d54a45dfab007a283320322e28b84438fb8a85"]
// brizo 20250914T080941 has bad latitude and longitude values and lots of bad Universal latitude_time and longitude_time values
//"args": ["-v", "2", "--log_file", "brizo/missionlogs/2025/20250909_20250915/20250914T080941/202509140809_202509150109.nc4"]
//"args": ["-v", "2", "--log_file", "brizo/missionlogs/2025/20250909_20250915/20250914T080941/202509140809_202509150109.nc4", "--plot_time", "/longitude_time"]
//"args": ["-v", "1", "--log_file", "brizo/missionlogs/2025/20250909_20250915/20250914T080941/202509140809_202509150109.nc4", "--plot_time", "/latitude_time"]
// brizo 20250916T230652 has several ESP Samples from stoqs_lrauv_sep2025
//"args": ["-v", "2", "--log_file", "brizo/missionlogs/2025/20250916_20250922/20250916T230652/202509162306_202509180305.nc4", "--plot_time", "/longitude_time"]
//"args": ["-v", "1", "--log_file", "brizo/missionlogs/2025/20250909_20250915/20250914T080941/202509140809_202509150109_cleaned_by_quinn.nc4", "--plot_time", "/longitude_time"]
//"args": ["-v", "1", "--log_file", "brizo/missionlogs/2025/20250909_20250915/20250914T080941/202509140809_202509150109_cleaned_by_quinn_latlon.nc4", "--plot_time", "/longitude_time"]
// Conflicting sizes for nudged_time and data - fixed by filtering GPS fixes to be monotonically increasing
"args": ["-v", "1", "--log_file", "tethys/missionlogs/2012/20120908_20120920/20120917T025522/201209170255_201209171110.nc4", "--plot_time", "/longitude_time"]
},
{
"name": "2.0 - calibrate.py",
"type": "debugpy",
Expand Down Expand Up @@ -85,7 +104,8 @@
//"args": ["--auv_name", "dorado", "--mission", "2018.079.00", "-v", "1"]
//"args": ["--auv_name", "i2map", "--mission", "2018.348.01", "-v", "2"]
//"args": ["--auv_name", "dorado", "--mission", "2023.324.00", "-v", "1", "--plot", "first10000"]
"args": ["--auv_name", "dorado", "--mission", "2022.201.00", "-v", "1", "--plot", "first10000"]
//"args": ["--auv_name", "dorado", "--mission", "2022.201.00", "-v", "1", "--plot", "first10000"]
"args": ["--auv_name", "dorado", "--mission", "2025.316.02", "-v", "1"]
},
{
"name": "2.1 - Test hs2_proc.py (its unit tests)",
Expand All @@ -94,6 +114,21 @@
"program": "${workspaceFolder}/src/data/hs2_proc.py",
"console": "integratedTerminal",
},

{
"name": "2.2 - combine.py",
"type": "debugpy",
"request": "launch",
"program": "${workspaceFolder}/src/data/combine.py",
"console": "integratedTerminal",
"justMyCode": false,
//"args": ["-v", "1", "--log_file", "brizo/missionlogs/2025/20250909_20250915/20250914T080941/202509140809_202509150109.nc4"]
//"args": ["-v", "1", "--log_file", "brizo/missionlogs/2025/20250916_20250922/20250916T230652/202509162306_202509180305.nc4", "--plot"]
//"args": ["-v", "1", "--log_file", "tethys/missionlogs/2012/20120908_20120920/20120909T010636/201209090106_201209091521.nc4", "--plot"]
// Conflicting sizes for nudged_time and data - fixed by filtering GPS fixes to be monotonically increasing
"args": ["-v", "1", "--log_file", "tethys/missionlogs/2012/20120908_20120920/20120917T025522/201209170255_201209171110.nc4", "--plot"]

},
{
"name": "3.0 - align.py",
"type": "debugpy",
Expand All @@ -113,7 +148,19 @@
//"args": ["-v", "1", "--auv_name", "dorado", "--mission", "2004.236.00"],
//"args": ["-v", "1", "--auv_name", "dorado", "--mission", "2008.289.03"],
//"args": ["-v", "1", "--auv_name", "dorado", "--mission", "2023.192.01"],
"args": ["-v", "1", "--auv_name", "dorado", "--mission", "2024.317.01"],
//"args": ["-v", "1", "--auv_name", "dorado", "--mission", "2024.317.01"],
//"args": ["-v", "1", "--log_file", "brizo/missionlogs/2025/20250916_20250922/20250916T230652/202509162306_202509180305.nc4"]
"args": ["-v", "1", "--auv_name", "dorado", "--mission", "2025.316.02"],
},
{
"name": "3.1 - align.py for LRAUV --log_file",
"type": "debugpy",
"request": "launch",
"program": "${workspaceFolder}/src/data/align.py",
"console": "integratedTerminal",
"justMyCode": false,
//"args": ["-v", "1", "--log_file", "brizo/missionlogs/2025/20250909_20250915/20250914T080941/202509140809_202509150109.nc4"],
"args": ["-v", "1", "--log_file", "brizo/missionlogs/2025/20250916_20250922/20250916T230652/202509162306_202509180305.nc4"]
},
{
"name": "4.0 - resample.py",
Expand All @@ -136,13 +183,17 @@
//"args": ["--auv_name", "dorado", "--mission", "2017.044.00", "-v", "1"]
//"args": ["--auv_name", "dorado", "--mission", "2021.102.02", "-v", "1"]
//"args": ["--auv_name", "dorado", "--mission", "2004.236.00", "-v", "1"]
"args": ["--auv_name", "dorado", "--mission", "2023.192.01", "-v", "1"]
//"args": ["--auv_name", "dorado", "--mission", "2023.192.01", "-v", "1"]
//"args": ["--auv_name", "i2map", "--mission", "2019.157.02", "-v", "2", "--plot", "--plot_seconds", "82000"],
//"args": ["--auv_name", "dorado", "--mission", "2021.102.02", "-v", "1", "--flash_threshold", "1.5e10"],
//"args": ["--auv_name", "dorado", "--mission", "2024.317.01", "-v", "1"],
//"args": ["--auv_name", "dorado", "--mission", "2010.341.00", "-v", "1", "--plot", "--plot_seconds", "82000"],
//"args": ["--auv_name", "dorado", "--mission", "2020.337.00", "-v", "1"],
//"args": ["--auv_name", "dorado", "--mission", "2023.123.00", "-v", "1"],
//"args": ["-v", "2", "--log_file", "brizo/missionlogs/2025/20250916_20250922/20250916T230652/202509162306_202509180305.nc4"]
//"args": ["--auv_name", "dorado", "--mission", "2025.316.02", "-v", "1"],
//"args": ["-v", "1", "--log_file", "pontus/missionlogs/2025/20250604_20250616/20250608T020852/202506080209_202506081934.nc4"],
"args": ["-v", "1", "--log_file", "ahi/missionlogs/2025/20250414_20250418/20250414T205440/202504142054_202504150400.nc4"],
},
{
"name": "5.0 - archive.py",
Expand Down Expand Up @@ -285,5 +336,33 @@
"console": "integratedTerminal",
"args": ["-v", "1", "--noinput", "--no_cleanup", "--download", "--mission", "2011.256.02"]
},
{
"name": "process_lrauv",
"type": "debugpy",
"request": "launch",
"program": "${workspaceFolder}/src/data/process_lrauv.py",
"console": "integratedTerminal",
// Lots bad time values in brizo 20250914T080941 due to memory corruption on the vehicle
//"args": ["-v", "1", "--log_file", "brizo/missionlogs/2025/20250909_20250915/20250914T080941/202509140809_202509150109.nc4"]
//"args": ["-v", "2", "--log_file", "brizo/missionlogs/2025/20250909_20250915/20250914T080941/202509140809_202509150109.nc4", "--clobber"]
//"args": ["-v", "2", "--log_file", "brizo/missionlogs/2025/20250909_20250915/20250914T080941/202509140809_202509150109.nc4", "--clobber", "--no_cleanup"]
//"args": ["-v", "1", "--log_file", "brizo/missionlogs/2025/20250916_20250922/20250916T230652/202509162306_202509180305.nc4", "--no_cleanup"]
//"args": ["-v", "1", "--log_file", "brizo/missionlogs/2025/20250916_20250922/20250916T230652/202509162306_202509180305.nc4", "--no_cleanup", "--clobber"]
// Has different universals time coodinates for longitude/latitude and depth
//"args": ["-v", "1", "--auv_name", "tethys", "--start", "20120901T000000", "--end", "20121101T000000", "--noinput", "--no_cleanup"]
// Conflicting sizes for nudged_time and data - fixed by filtering GPS fixes to be monotonically increasing
//"args": ["-v", "1", "--log_file", "tethys/missionlogs/2012/20120908_20120920/20120917T025522/201209170255_201209171110.nc4", "--no_cleanup"
//"args": ["-v", "1", "--auv_name", "brizo", "--start", "20250915T000000", "--end", "20250917T000000", "--noinput", "--num_cores", "1", "--no_cleanup"]
// No nudged latitude and longitude variables - fixed as of 26 Nov 2025
//"args": ["-v", "1", "--log_file", "brizo/missionlogs/2025/20250909_20250915/20250915T015535/202509150155_202509151602.nc4", "--no_cleanup"]
// Plankitvore deployment for CeNCOOS Syncro - whole month of April 2025
//"args": ["-v", "1", "--auv_name", "ahi", "--start", "20250401T000000", "--end", "20250502T000000", "--noinput", "--num_cores", "1", "--no_cleanup"]
// Fails with ValueError: different number of dimensions on data and dims: 2 vs 1 for wetlabsubat_digitized_raw_ad_counts variable
//"args": ["-v", "1", "--log_file", "pontus/missionlogs/2025/20250604_20250616/20250608T020852/202506080209_202506081934.nc4", "--no_cleanup"]
// Full month of June 2025 for Pontus with WetLabsUBAT Group data
//"args": ["-v", "1", "--auv_name", "pontus", "--start", "20250601T000000", "--end", "20250702T000000", "--noinput", "--num_cores", "1", "--no_cleanup"]
"args": ["-v", "1", "--auv_name", "pontus", "--start", "20250601T000000", "--end", "20250702T000000", "--noinput", "--num_cores", "1", "--no_cleanup", "--clobber"]
},

]
}
6 changes: 3 additions & 3 deletions WORKFLOW.md → DORADO_WORKFLOW.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
## Data Workflow
## Dorado Data Workflow

The sequence of steps to process data is as follows:
The sequence of steps to process Dorado data is as follows:

logs2netcdfs.py → calibrate.py → align.py → resample.py → archive.py → plot.py

Expand Down Expand Up @@ -70,6 +70,6 @@ on the local file system's work directory is as follows:

archive.py
Copy the netCDF files to the archive directory. The archive directory
is initally in the AUVCTD share on atlas which is shared with the
is initially in the AUVCTD share on atlas which is shared with the
data from the Dorado Gulper vehicle, but can also be on the M3 share
on thalassa near the original log data.
73 changes: 73 additions & 0 deletions LRAUV_WORKFLOW.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
## LRAUV Data Workflow

The sequence of steps to process LRAUV data is as follows:

nc42netcdfs.py → combine.py → align.py → resample.py → archive.py → plot.py

Details of each step are described in the respective scripts and in the
description of output netCDF files below. The output file directory structure
on the local file system's work directory is as follows:

├── data
│ ├── lrauv_data
│ │ ├── <auv_name> <- e.g.: ahi, brizo, pontus, tethys, ...
│ │ │ ├── missionlogs/year/dlist_dir
│ │ │ │ ├── <log_dir> <- e.g.: ahi/missionlogs/2025/20250908_20250912/20250911T201546/202509112015_202509112115.nc4
│ │ │ │ │ ├── <nc4> <- .nc4 file containing original data - created by unserialize
│ │ │ │ │ ├── <nc> <- .nc files, one for each group from the .nc4 file
| | | | | | data identical to original in NetCDF4 format,
| | | | | | but in more interoperable NetCDF3 format
| | | | | | - created by nc42netcdfs.py
│ │ │ │ │ ├── <_combined> <- A single NetCDF3 .nc file containing all the
| | | | | | varibles from the .nc files along with nudged
| | | | | | latitudes and longitudes - created by combine.py
│ │ │ │ │ ├── <_align> <- .nc file with all measurement variables
| | | | | | having associated coordinate variables
| | | | | | at original instrument sampling rate
| | | | | | - created by align.py
│ │ │ │ │ ├── <_nS> <- .nc file with all measurement variables
resampled to a common time grid at n
Second intervals - created by resample.py

nc42netcdfs.py
Extract the groups and the variables we want from the groups into
individual .nc files. These data are saved using NetCDF4 format as
there are many unlimited dimensions that are not allowed in NetCDF3.
The data in the .nc files are identical to what is in the .nc4 groups.

combine.py
Combine all group data into a single NetCDF file with consolidated
time coordinates. When GPS fix data is available, this step includes
nudging the underwater portions of the navigation positions to the
GPS fixes done at the surface. GPS fixes are filtered to ensure
monotonically increasing timestamps before nudging. Some minimal QC
is done in this step, namely removal of non-monotonic times. The
nudged coordinates are added as separate variables (nudged_longitude,
nudged_latitude) with their own time dimension. For missions without
GPS data, the combine step completes successfully but without nudged
coordinates.

align.py
Interpolate nudged lat/lon variables to the original sampling
intervals for each instrument's record variables. This step requires
nudged coordinates from combine.py and will fail with an informative
error if they are not present (as in missions without GPS data).
This format is analogous to the .nc4 files produced by the LRAUV
unserialize process. These are the best files to use for the highest
temporal resolution of the data. Unlike the .nc4 files, align.py's
output files use a naming convention rather than netCDF4 groups for
each instrument.

resample.py
Produce a netCDF file with all of the instrument's record variables
resampled to the same temporal interval. The coordinate variables are
also resampled to the same temporal interval and named with standard
depth, latitude, and longitude names. These are the best files to
use for loading data into STOQS and for analyses requiring all the
data to be on the same spatial temporal grid.

archive.py
Copy the netCDF files to the archive directory. The archive directory
is initially in the AUVCTD share on atlas which is shared with the
data from the Dorado Gulper vehicle, but can also be on the M3 share
on thalassa near the original log data.
17 changes: 11 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,9 @@ print out the usage information for each of the processing scripts:
uv run src/data/archive.py --help
uv run src/data/process_i2map.py --help
uv run src/data/process_dorado.py --help
uv run src/data/process_lrauv.py --help

See [WORKFLOW.md](WORKFLOW.md) for more details on the data processing workflow.
See [DORADO_WORKFLOW.md](DORADO_WORKFLOW.md) and [LRAUV_WORKFLOW.md](LRAUV_WORKFLOW.md) for more details on the data processing workflows.

### Jupyter Notebooks ###
To run the Jupyter Notebooks, start Jupyter Lab at the command line with:
Expand Down Expand Up @@ -103,11 +104,11 @@ First time use with Docker on a server using a service account:
* git clone git&#xFEFF;@github.com:mbari-org/auv-python.git
* cd auv-python
* Create a .env file in `/opt/auv-python` with the following contents:
`M3_VOL=<mount_location>`
`AUVCTD_VOL=<mount_location>`
`CALIBRATION_VOL=<mount_location>`
`WORK_VOL=<auv-python_home>/data`

`M3_VOL=<mount_location>`
`AUVCTD_VOL=<mount_location>`
`CALIBRATION_VOL=<mount_location>`
`WORK_VOL=<auv-python_home>/data`
`HOST_NAME=<name_of_host>`
After installation and when logging into the server again mission data can be processed thusly:
* Setting up environment and printing help message:
`sudo -u docker_user -i`
Expand All @@ -118,6 +119,10 @@ After installation and when logging into the server again mission data can be pr
`docker compose run --rm auvpython src/data/process_i2map.py --help`
* To actually process a mission and have the processed data copied to the archive use the `-v` and `--clobber` options, e.g.:
`docker compose run --rm auvpython src/data/process_dorado.py --mission 2025.139.04 -v --clobber --noinput`
* To process LRAUV data for a specific vehicle and time range:
`docker compose run --rm auvpython src/data/process_lrauv.py --auv_name tethys --start 20250401T000000 --end 20250502T000000 -v --noinput`
* To process a specific LRAUV log file:
`docker compose run --rm auvpython src/data/process_lrauv.py --log_file tethys/missionlogs/2012/20120908_20120920/20120917T025522/201209170255_201209171110.nc4 -v --noinput`


--
Expand Down
Loading