diff --git a/.gitignore b/.gitignore index d32ae4e..9bf58c0 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,9 @@ __pycache__/ # C extensions *.so +# Example datasetss +notebooks/example_data/ts_spectrum_example_data/ + # Distribution / packaging .Python build/ diff --git a/conda/environment-ep-main.yml b/conda/environment-ep-main.yml index ff8889a..63902aa 100644 --- a/conda/environment-ep-main.yml +++ b/conda/environment-ep-main.yml @@ -12,6 +12,7 @@ dependencies: - numba # Helps ensure a recent version is installed - numpy<2 - pip + - pooch # -- holoviz -- - jupyter_bokeh - datashader diff --git a/conda/environment.yml b/conda/environment.yml index 7d86500..6bd6644 100644 --- a/conda/environment.yml +++ b/conda/environment.yml @@ -10,6 +10,7 @@ dependencies: - cartopy - scipy - numba # Helps ensure a recent version is installed + - pooch # -- holoviz -- - jupyter_bokeh - datashader diff --git a/notebooks/_templates/gallery-cards.jinja b/notebooks/_templates/gallery-cards.jinja index 33d8ac6..544f86f 100644 --- a/notebooks/_templates/gallery-cards.jinja +++ b/notebooks/_templates/gallery-cards.jinja @@ -1,7 +1,12 @@ +{% for section in data %} + +## {{ section["section"] }} + ::::{grid} 1 2 2 3 :gutter: 2 +:class-container: gallery-grid -{% for item in data %} +{% for item in section["items"] %} :::{card} :link: {{ item.website or item.notebook }} {% if item.image %}:img-top: {{ item.image }}{% endif %} @@ -13,4 +18,6 @@ ::: {% endfor %} -:::: +:::: + +{% endfor %} \ No newline at end of file diff --git a/notebooks/_toc.yml b/notebooks/_toc.yml index d5e7237..d4ce5f0 100644 --- a/notebooks/_toc.yml +++ b/notebooks/_toc.yml @@ -1,17 +1,28 @@ -# Table of contents -# Learn more at https://jupyterbook.org/customize/toc.html - format: jb-book root: index parts: - - caption: Demonstrations - numbered: True + - caption: Getting started + numbered: False + chapters: + - file: getting_started + - file: getting_started_FM_TS + + - caption: Data processing + numbered: False + chapters: + - file: OOI_eclipse + - file: seafloor_detection + - file: transient_noise + + - caption: Analysis workflows + numbered: False + chapters: + - file: ship_tracks + - file: krill_freq_diff + - file: hake_mask + - file: glider_AZFP + + - caption: Community showcase + numbered: False chapters: - - file: getting_started - - file: OOI_eclipse - - file: ship_tracks - - file: krill_freq_diff - - file: hake_mask - - file: glider_AZFP - - file: seafloor_detection - - file: transient_noise + - file: community_showcase \ No newline at end of file diff --git a/notebooks/community_showcase.md b/notebooks/community_showcase.md new file mode 100644 index 0000000..90c90f0 --- /dev/null +++ b/notebooks/community_showcase.md @@ -0,0 +1,6 @@ +# Community showcase + +Examples from the echopype community will be highlighted here. +If you are using echopype in your own workflows, feel free to open an issue or pull request to suggest an example notebook! + +(Temporary file to remove) \ No newline at end of file diff --git a/notebooks/gallery.yml b/notebooks/gallery.yml index 03012c9..f152871 100644 --- a/notebooks/gallery.yml +++ b/notebooks/gallery.yml @@ -1,55 +1,71 @@ -- name: Getting Started with Echopype - website: https://echopype-examples.readthedocs.io/en/latest/getting_started.html - repository: https://github.com/OSOceanAcoustics/echopype-examples/blob/main/notebooks/getting_started.ipynb - notebook: getting_started.ipynb - summary: A minimum example to get started on Echopype functions. - image: images/gallery/01_getting_started.png - -- name: Watching Eclipse from a Moored Echosounder - website: https://echopype-examples.readthedocs.io/en/latest/OOI_eclipse.html - repository: https://github.com/OSOceanAcoustics/echopype-examples/blob/main/notebooks/OOI_eclipse.ipynb - notebook: OOI_eclipse.ipynb - summary: Pairing acoustic data from an upward-looking echosounder and shortwave irradiance measured by a pyrometer on a surface mooring to observe the movement response of zooplankton to a solar eclipse. (Not binder friendly.) - image: images/gallery/02_OOI_eclipse.png - -- name: Ship Tracks Visualisation - website: https://echopype-examples.readthedocs.io/en/latest/ship_tracks.html - repository: https://github.com/OSOceanAcoustics/echopype-examples/blob/main/notebooks/ship_tracks.ipynb - notebook: ship_tracks.ipynb - summary: Subselect sections of echo data based on ship GPS data embedded in the echosounder raw files to demonstrate the power of label-aware data processing based on standardized netCDF data model. (Not binder friendly.) - image: images/gallery/03_subselection.png - -- name: Krill Frequency Differencing - website: https://echopype-examples.readthedocs.io/en/latest/krill_freq_diff.html - repository: https://github.com/OSOceanAcoustics/echopype-examples/blob/main/notebooks/krill_freq_diff.ipynb - notebook: krill_freq_diff.ipynb - summary: Perform frequency-differencing analysis to identify fluid-like zooplankton scatterers (likely krill) in ship echosounder data, and compute nautical acoustic scattering coefficient (NASC) based on the classification. (Not binder friendly.) - image: images/gallery/04_krill.png - -- name: Masking Echogram and Computing NASC - website: https://echopype-examples.readthedocs.io/en/latest/hake_mask.html - repository: https://github.com/OSOceanAcoustics/echopype-examples/blob/main/notebooks/hake_mask.ipynb - notebook: hake_mask.ipynb - summary: Incorporate an externally generated mask that identify the occurrence of Pacific hake in ship echosounder data, and compute NASC based on the masked outputs. - image: images/gallery/05_NASC.png - -- name: Glider AZFP Processing - website: https://echopype-examples.readthedocs.io/en/latest/glider_AZFP.html - repository: https://github.com/OSOceanAcoustics/echopype-examples/blob/main/notebooks/glider_AZFP.ipynb - notebook: glider_AZFP.ipynb - summary: Process acoustic data from a Slocum glider by incorporating external position, motion, and environmental data and identify zooplankton shoals. - image: images/gallery/06_glider.png - -- name: Seafloor Detection - website: https://echopype-examples.readthedocs.io/en/latest/seafloor_detection.html - repository: https://github.com/OSOceanAcoustics/echopype-examples/blob/main/notebooks/seafloor_detection.ipynb - notebook: seafloor_detection.ipynb - summary: Seafloor detection with echopype (two algorithms) and use of echoregions; compute a bottom line and mask below-bottom data. - image: images/gallery/07_seafloor.png - -- name: Transient Noise Removal - website: https://echopype-examples.readthedocs.io/en/latest/transient_noise.html - repository: https://github.com/OSOceanAcoustics/echopype-examples/blob/main/notebooks/transient_noise.ipynb - notebook: transient_noise.ipynb - summary: Transient noise removal with echopype (two algorithms) and exploring the effects on Sv profiles. - image: images/gallery/08_transient_noise.png \ No newline at end of file +- section: Getting started + items: + - name: Getting Started with Echopype + website: https://echopype-examples.readthedocs.io/en/latest/getting_started.html + repository: https://github.com/echostack-org/echopype-examples/blob/main/notebooks/getting_started.ipynb + notebook: getting_started.ipynb + summary: A minimum example to get started on Echopype functions. + image: images/gallery/01_getting_started.png + + - name: Getting Started with Echopype for broadband TS + website: https://echopype-examples.readthedocs.io/en/latest/getting_started_FM_TS.html + repository: https://github.com/echostack-org/echopype-examples/blob/main/notebooks/getting_started_FM_TS.ipynb + notebook: getting_started_FM_TS.ipynb + summary: A minimum example to get started on Echopype functions for broadband target strength (TS) estimation. + image: images/gallery/11_getting_started_FM_TS.png + +- section: Data processing + items: + - name: Watching Eclipse from a Moored Echosounder + website: https://echopype-examples.readthedocs.io/en/latest/OOI_eclipse.html + repository: https://github.com/echostack-org/echopype-examples/blob/main/notebooks/OOI_eclipse.ipynb + notebook: OOI_eclipse.ipynb + summary: Pairing acoustic data from an upward-looking echosounder and shortwave irradiance measured by a pyrometer on a surface mooring to observe the movement response of zooplankton to a solar eclipse. (Not binder friendly.) + image: images/gallery/02_OOI_eclipse.png + + - name: Seafloor Detection + website: https://echopype-examples.readthedocs.io/en/latest/seafloor_detection.html + repository: https://github.com/echostack-org/echopype-examples/blob/main/notebooks/seafloor_detection.ipynb + notebook: seafloor_detection.ipynb + summary: Seafloor detection with echopype (two algorithms) and use of echoregions; compute a bottom line and mask below-bottom data. + image: images/gallery/07_seafloor.png + + - name: Transient Noise Removal + website: https://echopype-examples.readthedocs.io/en/latest/transient_noise.html + repository: https://github.com/echostack-org/echopype-examples/blob/main/notebooks/transient_noise.ipynb + notebook: transient_noise.ipynb + summary: Transient noise removal with echopype (two algorithms) and exploring the effects on Sv profiles. + image: images/gallery/08_transient_noise.png + +- section: Analysis workflows + items: + - name: Ship Tracks Visualisation + website: https://echopype-examples.readthedocs.io/en/latest/ship_tracks.html + repository: https://github.com/echostack-org/echopype-examples/blob/main/notebooks/ship_tracks.ipynb + notebook: ship_tracks.ipynb + summary: Subselect sections of echo data based on ship GPS data embedded in the echosounder raw files to demonstrate the power of label-aware data processing based on standardized netCDF data model. (Not binder friendly.) + image: images/gallery/03_subselection.png + + - name: Krill Frequency Differencing + website: https://echopype-examples.readthedocs.io/en/latest/krill_freq_diff.html + repository: https://github.com/echostack-org/echopype-examples/blob/main/notebooks/krill_freq_diff.ipynb + notebook: krill_freq_diff.ipynb + summary: Perform frequency-differencing analysis to identify fluid-like zooplankton scatterers (likely krill) in ship echosounder data, and compute nautical acoustic scattering coefficient (NASC) based on the classification. (Not binder friendly.) + image: images/gallery/04_krill.png + + - name: Masking Echogram and Computing NASC + website: https://echopype-examples.readthedocs.io/en/latest/hake_mask.html + repository: https://github.com/echostack-org/echopype-examples/blob/main/notebooks/hake_mask.ipynb + notebook: hake_mask.ipynb + summary: Incorporate an externally generated mask that identify the occurrence of Pacific hake in ship echosounder data, and compute NASC based on the masked outputs. + image: images/gallery/05_NASC.png + + - name: Glider AZFP Processing + website: https://echopype-examples.readthedocs.io/en/latest/glider_AZFP.html + repository: https://github.com/echostack-org/echopype-examples/blob/main/notebooks/glider_AZFP.ipynb + notebook: glider_AZFP.ipynb + summary: Process acoustic data from a Slocum glider by incorporating external position, motion, and environmental data and identify zooplankton shoals. + image: images/gallery/06_glider.png + +- section: Community showcase + items: [] \ No newline at end of file diff --git a/notebooks/getting_started_FM_TS.ipynb b/notebooks/getting_started_FM_TS.ipynb new file mode 100644 index 0000000..388ccfd --- /dev/null +++ b/notebooks/getting_started_FM_TS.ipynb @@ -0,0 +1,11348 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "64087514", + "metadata": {}, + "source": [ + "## Broadband TS spectrum validation against CRIMAC\n", + "\n", + "This notebook demonstrates a minimal workflow for computing broadband target-strength spectra (`TS_spectrum`) with echopype from EK80 FM data.\n", + "\n", + "The results are compared against the CRIMAC reference implementation described in Andersen et al. (2024). The comparison examines intermediate processing steps as well as the final TS spectrum estimates.\n", + "\n", + "Reference implementation:\n", + "- Andersen, L. N. et al. (2024). *Quantitative processing of broadband data as implemented in a scientific split-beam echosounder*. Methods in Ecology and Evolution, 15(2), 317–328. https://doi.org/10.1111/2041-210X.14261\n", + "- CRIMAC repository: https://github.com/CRIMAC-WP4-Machine-learning/CRIMAC-Raw-To-Svf-TSf\n", + "\n", + "Reference case:\n", + "\n", + "- Raw file: `IMR-D20211215-T143432-TSf.raw`\n", + "- Channel: `WBT 747022-15 ES120-7CD_ES`\n", + "- CRIMAC ping number: 510\n", + "- Python ping index: 509" + ] + }, + { + "cell_type": "markdown", + "id": "869dd6a1", + "metadata": {}, + "source": [ + "The notebook follows the processing chain step by step:\n", + "\n", + "- Open the raw EK80 file\n", + "- Load the exported CRIMAC reference outputs\n", + "- Initialise the EK80 calibration object\n", + "- Rebuild the transmit signal and matched filter\n", + "- Pulse-compress the complex samples\n", + "- Convert pulse-compressed signals to received power\n", + "- Reproduce broadband point scattering strength, `Sp`\n", + "- Compute split-beam angles\n", + "- Identify the calibration sphere target\n", + "- Align the matched-filter autocorrelation with the target echo\n", + "- Compute the target and matched-filter spectra\n", + "- Compute the beam-compensated gain\n", + "- Compute the final calibrated `TS(f)`\n", + "- Validate the result against the public `compute_TS_spectrum()` API" + ] + }, + { + "cell_type": "markdown", + "id": "6525b719", + "metadata": {}, + "source": [ + "We start by importing the necessary libraries." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "a253416f", + "metadata": {}, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "\n", + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import xarray as xr\n", + "\n", + "import echopype as ep\n", + "\n", + "from echopype.calibrate.calibrate_ek import CalibrateEK80\n", + "from echopype.calibrate.ek80_complex import (\n", + " get_filter_coeff,\n", + " get_transmit_signal,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "2e299118", + "metadata": {}, + "source": [ + "If the example data are not already available locally, they will be downloaded from the GitHub release asset, verified with a SHA256 checksum, and extracted into the local `example_data/` folder." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "c0fefef8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Using local dataset: example_data\\ts_spectrum_example_data\n" + ] + } + ], + "source": [ + "from utils.data import fetch_dataset\n", + "data_dir = fetch_dataset(\"ts_spectrum_example_data\")\n", + "\n", + "raw_file_TS = data_dir / \"IMR-D20211215-T143432-TSf.raw\"\n", + "ref_file_TS = data_dir / \"crimac_tsf_reference_outputs.npz\"" + ] + }, + { + "cell_type": "markdown", + "id": "662202fc", + "metadata": {}, + "source": [ + "We convert the raw data to echodata object." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "cdedca3c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
<xarray.DatasetView> Size: 0B\n", + "Dimensions: ()\n", + "Data variables:\n", + " *empty*\n", + "Attributes:\n", + " conventions: CF-1.7, SONAR-netCDF4-1.0, ACDD-1.3\n", + " keywords: EK80\n", + " sonar_convention_authority: ICES\n", + " sonar_convention_name: SONAR-netCDF4\n", + " sonar_convention_version: 1.0\n", + " summary: \n", + " title: \n", + " date_created: 2021-12-15T14:34:32Z
<xarray.DatasetView> Size: 140B\n", + "Dimensions: (time1: 1, sound_velocity_profile_depth: 2)\n", + "Coordinates:\n", + " * time1 (time1) datetime64[ns] 8B 2021-12-15T14:34:...\n", + " * sound_velocity_profile_depth (sound_velocity_profile_depth) float64 16B ...\n", + "Data variables:\n", + " depth (time1) float64 8B 5.0\n", + " acidity (time1) float64 8B 8.0\n", + " salinity (time1) float64 8B 32.0\n", + " temperature (time1) float64 8B 9.7\n", + " sound_speed_indicative (time1) float64 8B 1.485e+03\n", + " sound_velocity_profile (time1, sound_velocity_profile_depth) float64 16B ...\n", + " sound_velocity_source (time1) <U6 24B 'Manual'\n", + " transducer_name (time1) <U7 28B 'Unknown'\n", + " transducer_sound_speed (time1) float64 8B 1.5e+03
<xarray.DatasetView> Size: 51kB\n", + "Dimensions: (time1: 1, time2: 1266, channel: 4, time3: 1)\n", + "Coordinates:\n", + " * time1 (time1) datetime64[ns] 8B 2021-12-15T14:34:3...\n", + " * time2 (time2) datetime64[ns] 10kB 2021-12-15T14:34...\n", + " * channel (channel) <U26 416B 'WBT 747008-15 ES333-7CD...\n", + " * time3 (time3) datetime64[ns] 8B 2021-12-15T14:34:3...\n", + "Data variables: (12/26)\n", + " latitude (time1) float64 8B nan\n", + " longitude (time1) float64 8B nan\n", + " sentence_type (time1) float64 8B nan\n", + " pitch (time2) float64 10kB 0.34 0.34 ... -2.02 -2.02\n", + " roll (time2) float64 10kB 1.73 1.73 ... -2.93 -2.93\n", + " vertical_offset (time2) float64 10kB 0.0 0.0 0.0 ... 0.0 0.0\n", + " ... ...\n", + " position_offset_y float64 8B nan\n", + " position_offset_z float64 8B nan\n", + " frequency_nominal (channel) float64 32B 3.33e+05 ... 1.2e+05\n", + " heading (time2) float64 10kB 1.46 1.46 ... 0.04 0.04\n", + " latitude_mru1 (time3) float64 8B nan\n", + " longitude_mru1 (time3) float64 8B nan\n", + "Attributes:\n", + " platform_name: \n", + " platform_type: \n", + " platform_code_ICES:
<xarray.DatasetView> Size: 498kB\n", + "Dimensions: (nmea_time: 4351, channel: 4, time1: 1, time2: 1266, time3: 1)\n", + "Coordinates:\n", + " * nmea_time (nmea_time) datetime64[ns] 35kB 2021-12-15T14:34:32.661453...\n", + " * channel (channel) <U26 416B 'WBT 747008-15 ES333-7CD_ES' ... 'WBT ...\n", + " * time1 (time1) datetime64[ns] 8B 2021-12-15T14:34:32.661453\n", + " * time2 (time2) datetime64[ns] 10kB 2021-12-15T14:34:32.661453 ......\n", + " * time3 (time3) datetime64[ns] 8B 2021-12-15T14:34:32.661453\n", + "Data variables:\n", + " NMEA_datagram (nmea_time) <U26 453kB '$SDVLW,630.103,N,630.103,N' ... '$...\n", + "Attributes:\n", + " description: All NMEA sensor datagrams
<xarray.DatasetView> Size: 276B\n", + "Dimensions: (filenames: 1)\n", + "Coordinates:\n", + " * filenames (filenames) int64 8B 0\n", + "Data variables:\n", + " source_filenames (filenames) <U67 268B 'example_data\\\\ts_spectrum_exampl...\n", + "Attributes:\n", + " conversion_software_name: echopype\n", + " conversion_software_version: 0.11.2.dev22+gc1a2a5660\n", + " conversion_time: 2026-06-07T01:36:12+00:00
<xarray.DatasetView> Size: 1kB\n", + "Dimensions: (channel_all: 4, beam_group: 1,\n", + " beam_group_index: 1)\n", + "Coordinates:\n", + " * channel_all (channel_all) <U26 416B 'WBT 747008-15 ES333-7...\n", + " * beam_group (beam_group) <U11 44B 'Beam_group1'\n", + " * beam_group_index (beam_group_index) int64 8B 1\n", + "Data variables:\n", + " frequency_nominal (channel_all) float64 32B 3.33e+05 ... 1.2e+05\n", + " transceiver_serial_number (channel_all) <U6 96B '747008' ... '747022'\n", + " transducer_name (channel_all) <U9 144B 'ES333-7CD' ... 'ES120-...\n", + " transducer_serial_number (channel_all) <U3 48B '220' '134' '166' '146'\n", + " beam_group_descr (beam_group) <U93 372B 'contains FM-only or CW...\n", + " waveform_encode_descr (beam_group_index) <U10 40B 'complex_FM'\n", + "Attributes:\n", + " sonar_manufacturer: Simrad\n", + " sonar_model: EK80\n", + " sonar_serial_number: \n", + " sonar_software_name: \n", + " sonar_software_version: 21.15.0.0\n", + " sonar_type: echosounder
<xarray.DatasetView> Size: 1GB\n", + "Dimensions: (channel: 4, ping_time: 1266,\n", + " range_sample: 3534, beam: 4,\n", + " channel_all: 4, beam_group_index: 1,\n", + " beam_group: 1)\n", + "Coordinates:\n", + " * channel (channel) <U26 416B 'WBT 747008-15 ES333-7...\n", + " * ping_time (ping_time) datetime64[ns] 10kB 2021-12-15...\n", + " * range_sample (range_sample) int64 28kB 0 1 2 ... 3532 3533\n", + " * beam (beam) <U21 336B '1' '2' '3' '4'\n", + " * channel_all (channel_all) <U26 416B 'WBT 747008-15 ES3...\n", + " * beam_group_index (beam_group_index) int64 8B 1\n", + " * beam_group (beam_group) <U11 44B 'Beam_group1'\n", + "Data variables: (12/26)\n", + " frequency_nominal (channel) float64 32B 3.33e+05 ... 1.2e+05\n", + " beam_type (channel) int64 32B 1 1 1 1\n", + " beamwidth_twoway_alongship (channel) float64 32B 6.73 6.96 6.79 7.26\n", + " beamwidth_twoway_athwartship (channel) float64 32B 6.77 6.87 6.85 7.28\n", + " beam_direction_x (channel) float64 32B nan nan nan nan\n", + " beam_direction_y (channel) float64 32B nan nan nan nan\n", + " ... ...\n", + " slope (channel, ping_time) float64 41kB 0.003488...\n", + " channel_mode (channel, ping_time) float32 20kB 1.0 ... nan\n", + " transmit_type (channel, ping_time) object 41kB 'LFM' ......\n", + " sample_time_offset (channel, ping_time) float64 41kB 0.0 ... nan\n", + " transmit_frequency_start (channel, ping_time) float64 41kB 2.8e+05 ...\n", + " transmit_frequency_stop (channel, ping_time) float64 41kB 3.8e+05 ...\n", + "Attributes:\n", + " beam_mode: vertical\n", + " conversion_equation_t: type_3
<xarray.DatasetView> Size: 531kB\n", + "Dimensions: (channel: 4, pulse_length_bin: 5,\n", + " cal_channel_id: 4, cal_frequency: 413,\n", + " filter_time: 1, WBT_filter_n: 119,\n", + " PC_filter_n: 391)\n", + "Coordinates:\n", + " * channel (channel) <U26 416B 'WBT 747008-15 ES333-7CD...\n", + " * pulse_length_bin (pulse_length_bin) int64 40B 0 1 2 3 4\n", + " * cal_channel_id (cal_channel_id) object 32B 'WBT 747008-15 E...\n", + " * cal_frequency (cal_frequency) int64 3kB 55000 ... 380000\n", + " * filter_time (filter_time) datetime64[ns] 8B 2021-12-15T1...\n", + "Dimensions without coordinates: WBT_filter_n, PC_filter_n\n", + "Data variables: (12/21)\n", + " frequency_nominal (channel) float64 32B 3.33e+05 ... 1.2e+05\n", + " sa_correction (channel, pulse_length_bin) float64 160B 0.0...\n", + " gain_correction (channel, pulse_length_bin) float64 160B 25....\n", + " pulse_length (channel, pulse_length_bin) float64 160B 6.4...\n", + " impedance_transceiver (channel) int64 32B 5400 5400 5400 5400\n", + " receiver_sampling_frequency (channel) float64 32B 1.5e+06 ... 1.5e+06\n", + " ... ...\n", + " WBT_coeffs_imag (channel, filter_time, WBT_filter_n) float64 4kB ...\n", + " PC_coeffs_real (channel, filter_time, PC_filter_n) float64 13kB ...\n", + " PC_coeffs_imag (channel, filter_time, PC_filter_n) float64 13kB ...\n", + " WBT_deci_fac (channel, filter_time) float64 32B 8.0 ... 12.0\n", + " PC_deci_fac (channel, filter_time) float64 32B 1.0 ... 1.0\n", + " config_xml <U100225 401kB '<?xml version="1.0" encoding...
| \n", + " | variable | \n", + "n | \n", + "CRIMAC mean | \n", + "echopype mean | \n", + "mean diff | \n", + "median diff | \n", + "RMSE | \n", + "max abs diff | \n", + "
|---|---|---|---|---|---|---|---|---|
| 0 | \n", + "y_mf_n abs | \n", + "516 | \n", + "0.509469 | \n", + "0.509642 | \n", + "1.729508e-04 | \n", + "1.301043e-17 | \n", + "0.001248 | \n", + "0.021871 | \n", + "
| 1 | \n", + "y_mf_auto_n abs | \n", + "1031 | \n", + "0.004699 | \n", + "0.004695 | \n", + "-3.954363e-06 | \n", + "-6.732322e-15 | \n", + "0.000098 | \n", + "0.000350 | \n", + "
| 2 | \n", + "y_pc_n abs | \n", + "2356 | \n", + "0.079082 | \n", + "0.079071 | \n", + "-1.070651e-05 | \n", + "-1.008762e-08 | \n", + "0.000203 | \n", + "0.006627 | \n", + "
| 3 | \n", + "p_rx_e_n dB | \n", + "2356 | \n", + "-106.347106 | \n", + "-106.345857 | \n", + "1.248776e-03 | \n", + "-2.469640e-03 | \n", + "0.387861 | \n", + "8.330394 | \n", + "
| 4 | \n", + "Sp_full_n dB | \n", + "2356 | \n", + "-92.918309 | \n", + "-92.919339 | \n", + "-1.029862e-03 | \n", + "-4.748281e-03 | \n", + "0.387860 | \n", + "8.332673 | \n", + "
| 5 | \n", + "Sp_target_n dB | \n", + "167 | \n", + "-82.034552 | \n", + "-82.069809 | \n", + "-3.525722e-02 | \n", + "-5.111712e-03 | \n", + "0.307320 | \n", + "1.852714 | \n", + "
| 6 | \n", + "y_pc_t_n abs | \n", + "168 | \n", + "0.000436 | \n", + "0.000436 | \n", + "-1.777090e-07 | \n", + "-7.647879e-08 | \n", + "0.000002 | \n", + "0.000005 | \n", + "
| 7 | \n", + "y_mf_auto_red_n abs | \n", + "168 | \n", + "0.027249 | \n", + "0.027238 | \n", + "-1.024769e-05 | \n", + "-1.586508e-05 | \n", + "0.000211 | \n", + "0.000350 | \n", + "
| 8 | \n", + "Y_pc_t_m dB | \n", + "1000 | \n", + "-35.450622 | \n", + "-35.448239 | \n", + "2.382618e-03 | \n", + "-2.111098e-03 | \n", + "0.288531 | \n", + "5.399668 | \n", + "
| 9 | \n", + "Y_mf_auto_red_m dB | \n", + "1000 | \n", + "3.567061 | \n", + "3.570432 | \n", + "3.371336e-03 | \n", + "-1.389353e-03 | \n", + "0.095777 | \n", + "0.455695 | \n", + "
| 10 | \n", + "Y_tilde_pc_t_m dB | \n", + "1000 | \n", + "-39.017683 | \n", + "-39.018672 | \n", + "-9.887186e-04 | \n", + "-3.215677e-04 | \n", + "0.267273 | \n", + "5.134121 | \n", + "
| 11 | \n", + "P_rx_e_t_m dB | \n", + "1000 | \n", + "-60.658788 | \n", + "-60.659777 | \n", + "-9.887186e-04 | \n", + "-3.215677e-04 | \n", + "0.267273 | \n", + "5.134121 | \n", + "
| 12 | \n", + "g_theta_phi_m dB | \n", + "1000 | \n", + "52.590609 | \n", + "52.590553 | \n", + "-5.644019e-05 | \n", + "-5.325710e-05 | \n", + "0.000060 | \n", + "0.000097 | \n", + "
| 13 | \n", + "TS_m dB | \n", + "1000 | \n", + "-41.615550 | \n", + "-41.616483 | \n", + "-9.322373e-04 | \n", + "-2.770378e-04 | \n", + "0.267273 | \n", + "5.134085 | \n", + "
<xarray.Dataset> Size: 287MB\n", + "Dimensions: (channel: 4, ping_time: 1266,\n", + " range_sample: 3534, filenames: 1)\n", + "Coordinates:\n", + " * channel (channel) object 32B 'WBT 747008-15 ES333-...\n", + " * ping_time (ping_time) datetime64[ns] 10kB 2021-12-15...\n", + " * range_sample (range_sample) int64 28kB 0 1 2 ... 3532 3533\n", + " * filenames (filenames) int64 8B 0\n", + "Data variables: (12/24)\n", + " Sp (channel, ping_time, range_sample) float64 143MB ...\n", + " echo_range (channel, ping_time, range_sample) float64 143MB ...\n", + " frequency_nominal (channel) float64 32B 3.33e+05 ... 1.2e+05\n", + " sound_speed float64 8B 1.485e+03\n", + " sound_absorption (channel, ping_time) float64 41kB 0.07527 ...\n", + " temperature float64 8B 9.7\n", + " ... ...\n", + " beamwidth_athwartship (channel, ping_time) float64 41kB 7.132 .....\n", + " impedance_transducer (channel, ping_time) float64 41kB 75.0 ......\n", + " impedance_transceiver (channel) int64 32B 5400 5400 5400 5400\n", + " receiver_sampling_frequency (channel) float64 32B 1.5e+06 ... 1.5e+06\n", + " source_filenames (filenames) <U67 268B 'example_data\\\\ts_sp...\n", + " water_level float64 8B 0.0\n", + "Attributes:\n", + " processing_software_name: echopype\n", + " processing_software_version: 0.11.2.dev22+gc1a2a5660\n", + " processing_time: 2026-06-07T01:47:33+00:00\n", + " processing_function: calibrate.compute_Sp
<xarray.Dataset> Size: 213kB\n", + "Dimensions: (target_id: 1265)\n", + "Coordinates:\n", + " * target_id (target_id) int64 10kB 0 1 2 3 4 ... 1261 1262 1263 1264\n", + " channel (target_id) <U26 132kB 'WBT 747022-15 ES120-7CD_ES' .....\n", + " ping_time (target_id) datetime64[ns] 10kB 2021-12-15T14:34:32.66...\n", + "Data variables:\n", + " target_range (target_id) float64 10kB 5.805 5.805 ... 5.781 5.781\n", + " angle_alongship (target_id) float64 10kB 1.852 2.139 ... -0.00917 0.153\n", + " angle_athwartship (target_id) float64 10kB 4.524 4.304 ... -0.02378 -0.1533\n", + " target_range_min (target_id) float64 10kB 5.306 5.306 ... 5.306 5.306\n", + " target_range_max (target_id) float64 10kB 6.298 6.298 ... 6.298 6.298\n", + " raw_ping_index (target_id) int64 10kB 0 1 2 3 4 ... 1261 1262 1263 1264" + ], + "text/plain": [ + "
<xarray.Dataset> Size: 10MB\n", + "Dimensions: (channel: 1, target_id: 1265, frequency: 1000,\n", + " filenames: 1)\n", + "Coordinates:\n", + " * channel (channel) <U26 104B 'WBT 747022-15 ES120-7CD_ES'\n", + " * target_id (target_id) int64 10kB 0 1 2 3 4 ... 1261 1262 1263 1264\n", + " * frequency (frequency) float64 8kB 9e+04 9.008e+04 ... 1.7e+05\n", + " * filenames (filenames) int64 8B 0\n", + "Data variables:\n", + " TS_spectrum (channel, target_id, frequency) float64 10MB -44.54 .....\n", + " target_range (channel, target_id) float64 10kB 5.805 5.805 ... 5.781\n", + " angle_alongship (channel, target_id) float64 10kB 1.852 2.139 ... 0.153\n", + " angle_athwartship (channel, target_id) float64 10kB 4.524 4.304 ... -0.1533\n", + " ping_time (channel, target_id) datetime64[ns] 10kB 2021-12-15T14...\n", + " source_filenames (filenames) <U67 268B 'example_data\\\\ts_spectrum_examp...\n", + " water_level float64 8B 0.0\n", + "Attributes:\n", + " processing_software_name: echopype\n", + " processing_software_version: 0.11.2.dev22+gc1a2a5660\n", + " processing_time: 2026-06-07T01:48:22+00:00\n", + " processing_function: calibrate.compute_TS_spectrum" + ], + "text/plain": [ + "
<xarray.Dataset> Size: 10MB\n", + "Dimensions: (channel: 1, target_id: 1265, frequency: 1000,\n", + " filenames: 1)\n", + "Coordinates:\n", + " * channel (channel) <U26 104B 'WBT 747022-15 ES120-7CD_ES'\n", + " * target_id (target_id) int64 10kB 0 1 2 3 4 ... 1261 1262 1263 1264\n", + " * frequency (frequency) float64 8kB 9e+04 9.008e+04 ... 1.7e+05\n", + " * filenames (filenames) int64 8B 0\n", + "Data variables:\n", + " TS_spectrum (channel, target_id, frequency) float64 10MB -44.54 .....\n", + " target_range (channel, target_id) float64 10kB 5.805 5.805 ... 5.781\n", + " angle_alongship (channel, target_id) float64 10kB 1.852 2.139 ... 0.153\n", + " angle_athwartship (channel, target_id) float64 10kB 4.524 4.304 ... -0.1533\n", + " ping_time (channel, target_id) datetime64[ns] 10kB 2021-12-15T14...\n", + " source_filenames (filenames) <U67 268B 'example_data\\\\ts_spectrum_examp...\n", + " water_level float64 8B 0.0\n", + "Attributes:\n", + " processing_software_name: echopype\n", + " processing_software_version: 0.11.2.dev22+gc1a2a5660\n", + " processing_time: 2026-06-07T01:48:48+00:00\n", + " processing_function: calibrate.compute_TS_spectrum" + ], + "text/plain": [ + "
| \n", + " | variable | \n", + "n | \n", + "CRIMAC mean | \n", + "echopype mean | \n", + "mean diff | \n", + "median diff | \n", + "RMSE | \n", + "max abs diff | \n", + "
|---|---|---|---|---|---|---|---|---|
| 0 | \n", + "TS_m dB: CRIMAC vs manual | \n", + "1000 | \n", + "-41.615550 | \n", + "-41.616483 | \n", + "-0.000932 | \n", + "-0.000277 | \n", + "0.267273 | \n", + "5.134085 | \n", + "
| 1 | \n", + "TS_m dB: CRIMAC vs API | \n", + "1000 | \n", + "-41.615550 | \n", + "-41.617754 | \n", + "-0.002203 | \n", + "-0.000048 | \n", + "0.016260 | \n", + "0.071437 | \n", + "
| 2 | \n", + "TS_m dB: manual vs API | \n", + "1000 | \n", + "-41.616483 | \n", + "-41.617754 | \n", + "-0.001271 | \n", + "0.000360 | \n", + "0.265814 | \n", + "5.135526 | \n", + "
| 3 | \n", + "Y_pc_t_m dB: CRIMAC vs manual | \n", + "1000 | \n", + "-35.450622 | \n", + "-35.448239 | \n", + "0.002383 | \n", + "-0.002111 | \n", + "0.288531 | \n", + "5.399668 | \n", + "
| 4 | \n", + "Y_pc_t_m dB: CRIMAC vs API | \n", + "1000 | \n", + "-35.450622 | \n", + "-35.448239 | \n", + "0.002383 | \n", + "-0.002111 | \n", + "0.288531 | \n", + "5.399668 | \n", + "
| 5 | \n", + "Y_pc_t_m dB: manual vs API | \n", + "1000 | \n", + "-35.448239 | \n", + "-35.448239 | \n", + "0.000000 | \n", + "0.000000 | \n", + "0.000000 | \n", + "0.000000 | \n", + "