# Changes in recent versions

The underlying raw converted data structure used by echopype (the `EchoData` object) has undergone revisions over time. While in most echopype releases these changes are relatively small, versions 0.8.0 and 0.6.0 incorporated significant changes, with implications for backward compatibility. Here we describe the main changes in each of these major releases. Please refer to What’s new for more complete details on specific changes that impacted the data structure.

## v0.7.1 to v0.8.0 changes

Changes introduced in version 0.8.0 were carried out to incorporate missing variables that are mandated by SONAR-netCDF4 v1 and to implement adaptations to the convention in a more consistent fashion across variables and instrument types. Some of these changes modified or reverted decisions implemented in version 0.6.0 (below) that were later found to have large impacts on performance and usability.

Highlights include:

- Remove `beam` and `ping_time` dimensions from a whole netCDF4 group or individual variables when they were determined to be not required for specific instrument types. The `beam` dimension is now dropped from all `Sonar/Beam_groupX` groups except for EK80 complex samples, where both `backscatter_r` and `backscatter_i` exist and the `beam` dimension represents different sectors of split-beam transducers. The `ping_time` dimension is retained only with variables that are known to potentially vary with time in the instrument types supported by echopype.

- In `Sonar/Beam_groupX` groups: Standardize the use of `transmit_frequency_start` and `transmit_frequency_stop`, where they were previously missing or the names being used (`frequency_start` and `frequency_end`) were not the ones specified by the convention.

- In the `Platform` group: Implement variables absed on the convention more consistently across instrument types:

  Assign default values to variables when no such variables are found in the raw data file

- Revise the dimensions of each variable to be consistent across instrument types, with dimensions deemed unnecessary dropped from some variables.

- In the `Provenance` group: Add new attributes `combination_*` to the “combined” `EchoData` object, mirroring the convention-based attributes `conversion_*`.

- In the `Vendor_specific` group: Move filter coefficients and decimation factor from attributes to variables in EK80, to facilitate consistent provenance tracking during `combine_echodata` operations.

- Improve the presence and use of variable attributes throughout `EchoData` groups.

Version 0.8.0 does not incorporate the capability to read files converted by previous versions of echopype. We recommend using `open_raw` to re-convert the raw data files.

## v0.5.x to v0.6.0 changes

In order to enhance the compliance of echopype-generated datasets to the SONAR-netCDF4 version 1 convention, a number of changes were introduced in echopype v0.6.0 that create incompatibilities with the data structure used in previous versions.

To ease the transition, the `open_converted` function is able to open files previously converted using echopype v0.5.x (0.5.0 to 0.5.6) into the v0.6.0 data format, encapsulated in the `EchoData` object.

Key changes involved renaming and restructuring a couple of groups, and renaming some coordinates and data variables, as summarized below:

Type | v0.5.x | v0.6.0 | Rationale and notes
--- | --- | --- | ---
Group | `Beam` | `Sonar/Beam_group1` | Convention compliance
Group | `Beam_power` | `Sonar/Beam_group2` | Convention compliance
Group | `Vendor` | `Vendor_specific` | Convention compliance
Coordinate | `frequency` | `channel` | Accommodate channels with duplicated frequencies. The new variable `frequency_nominal` was introduced
Coordinate | `range_bin` | `range_sample` | Better intuitive understanding of data
Coordinate | `quadrant` | `beam` | Convention compliance. This `Beam_groupX` coordinate was added when it did not exist.
Coordinate | `location_time` | `time1` | Convention compliance. In `Platform` group
Coordinate | `mru_time` | `time2` | Convention compliance. In `Platform` group
Variable | `heave` | `vertical_offset` | Convention compliance. In `Platform` group
Variable | `src_filenames` | `source_filenames` | Convention compliance. In `Provenance` group. Also converted from global attribute to variable

Other changes included:

- Adding previously missing, mandatory convention variables. When no data are available to populate them, these are filled with null (`NaN`) values.

- Moving variables from one group to another, particularly from the Beam groups to `Platform` and `Vendor`. These variables were not typically not part of the convention.

- The Beam_groupX `beamwidth_receive_athwartship` and `beamwidth_transmit_athwartship` variables were consolidated into `beamwidth_twoway_athwartship` because the EK60 and EK80 echosounders do not store one-way transmit or receive beam widths. Likewise for `beamwidth_receive_alongship` and `beamwidth_transmit_alongship`.

More details, including Pull Requests and discussions related to these changes, can be found in the Release notes.

### v0.5.x data format

Below we provide a sample of the v0.5.x data format via a printout of the previous `EchoData` object.

Compare this with the v0.6.0 `EchoData` object to see the changes listed in the table above.

EchoData: standardized raw data from Internal Memory

- top: (Top-level) contains metadata about the SONAR-netCDF4 file format.

      <xarray.Dataset>
      Dimensions:  ()
      Data variables:
          *empty*
      Attributes:
          conventions:                 CF-1.7, SONAR-netCDF4-1.0, ACDD-1.3
          keywords:                    EK60
          sonar_convention_authority:  ICES
          sonar_convention_name:       SONAR-netCDF4
          sonar_convention_version:    1.0
          summary:                     EK60 raw file s3://ncei-wcsd-archive/data/ra...
          title:                       2017 Pacific Hake Acoustic Trawl Survey
          date_created:                2017-07-28T18:16:19Z
          survey_name:

  xarray.Dataset
  - Dimensions:
  - Coordinates: (0)
  - Data variables: (0)
  - Attributes: (9)
    conventions :
      CF-1.7, SONAR-netCDF4-1.0, ACDD-1.3
    keywords :
      EK60
    sonar_convention_authority :
      ICES
    sonar_convention_name :
      SONAR-netCDF4
    sonar_convention_version :
      1.0
    summary :
      EK60 raw file s3://ncei-wcsd-archive/data/raw/Bell_M._Shimada/SH1707/EK60/Summer2017-D20170728-T181619.raw from the 2017 Pacific Hake Acoustic Trawl Survey, converted to a SONAR-netCDF4 file using echopype.
    title :
      2017 Pacific Hake Acoustic Trawl Survey
    date_created :
      2017-07-28T18:16:19Z
    survey_name :
- environment: (Environment) contains information relevant to acoustic propagation through water.

      <xarray.Dataset>
      Dimensions:                 (frequency: 3, ping_time: 529)
      Coordinates:
        * frequency               (frequency) float64 1.8e+04 3.8e+04 1.2e+05
        * ping_time               (ping_time) datetime64[ns] 2017-07-28T18:16:19.31...
      Data variables:
          absorption_indicative   (frequency, ping_time) float64 0.002822 ... 0.03259
          sound_speed_indicative  (frequency, ping_time) float64 1.481e+03 ... 1.48...

  xarray.Dataset
  - Dimensions:
    - frequency: 3
    - ping_time: 529
  - Coordinates: (2)
    - frequency
      (frequency)
      float64
      1.8e+04 3.8e+04 1.2e+05
      units :
        Hz
      long_name :
        Transducer frequency
      valid_min :
        0.0

          array([ 18000.,  38000., 120000.])

    - ping_time
      (ping_time)
      datetime64[ns]
      2017-07-28T18:16:19.313999872 .....
      axis :
        T
      long_name :
        Timestamps for NMEA position datagrams
      standard_name :
        time

          array(['2017-07-28T18:16:19.313999872', '2017-07-28T18:16:22.143000064',
                 '2017-07-28T18:16:24.962999808', ..., '2017-07-28T18:41:23.292000256',
                 '2017-07-28T18:41:25.949000192', '2017-07-28T18:41:28.597000192'],
                dtype='datetime64[ns]')

  - Data variables: (2)
    - absorption_indicative
      (frequency, ping_time)
      float64
      0.002822 0.002822 ... 0.03259
      long_name :
        Indicative acoustic absorption
      units :
        dB/m
      valid_min :
        0.0

          array([[0.00282171, 0.00282171, 0.00282171, ..., 0.00282171, 0.00282171,
                  0.00282171],
                 [0.00985526, 0.00985526, 0.00985526, ..., 0.00985526, 0.00985526,
                  0.00985526],
                 [0.03259379, 0.03259379, 0.03259379, ..., 0.03259379, 0.03259379,
                  0.03259379]])

    - sound_speed_indicative
      (frequency, ping_time)
      float64
      1.481e+03 1.481e+03 ... 1.481e+03
      long_name :
        Indicative sound speed
      standard_name :
        speed_of_sound_in_sea_water
      units :
        m/s
      valid_min :
        0.0

          array([[1480.62597656, 1480.62597656, 1480.62597656, ..., 1480.62597656,
                  1480.62597656, 1480.62597656],
                 [1480.62597656, 1480.62597656, 1480.62597656, ..., 1480.62597656,
                  1480.62597656, 1480.62597656],
                 [1480.62597656, 1480.62597656, 1480.62597656, ..., 1480.62597656,
                  1480.62597656, 1480.62597656]])

  - Attributes: (0)
- platform: (Platform) contains information about the platform on which the sonar is installed.

      <xarray.Dataset>
      Dimensions:        (location_time: 2165, frequency: 3, ping_time: 529)
      Coordinates:
        * location_time  (location_time) datetime64[ns] 2017-07-28T18:16:21.4759997...
        * frequency      (frequency) float64 1.8e+04 3.8e+04 1.2e+05
        * ping_time      (ping_time) datetime64[ns] 2017-07-28T18:16:19.313999872 ....
      Data variables:
          latitude       (location_time) float64 dask.array<chunksize=(2165,), meta=np.ndarray>
          longitude      (location_time) float64 dask.array<chunksize=(2165,), meta=np.ndarray>
          sentence_type  (location_time) <U3 dask.array<chunksize=(2165,), meta=np.ndarray>
          pitch          (frequency, ping_time) float64 dask.array<chunksize=(3, 529), meta=np.ndarray>
          roll           (frequency, ping_time) float64 dask.array<chunksize=(3, 529), meta=np.ndarray>
          heave          (frequency, ping_time) float64 dask.array<chunksize=(3, 529), meta=np.ndarray>
          water_level    (frequency, ping_time) float64 dask.array<chunksize=(3, 529), meta=np.ndarray>
      Attributes:
          platform_type:       Research vessel
          platform_name:       Bell M. Shimada
          platform_code_ICES:  315

  xarray.Dataset
  - Dimensions:
    - location_time: 2165
    - frequency: 3
    - ping_time: 529
  - Coordinates: (3)
    - location_time
      (location_time)
      datetime64[ns]
      2017-07-28T18:16:21.475999744 .....
      axis :
        T
      long_name :
        Timestamps for NMEA datagrams
      standard_name :
        time

          array(['2017-07-28T18:16:21.475999744', '2017-07-28T18:16:21.635000320',
                 '2017-07-28T18:16:22.168999936', ..., '2017-07-28T18:41:29.893000192',
                 '2017-07-28T18:41:31.143000064', '2017-07-28T18:41:31.301000192'],
                dtype='datetime64[ns]')

    - frequency
      (frequency)
      float64
      1.8e+04 3.8e+04 1.2e+05
      units :
        Hz
      long_name :
        Transducer frequency
      valid_min :
        0.0

          array([ 18000.,  38000., 120000.])

    - ping_time
      (ping_time)
      datetime64[ns]
      2017-07-28T18:16:19.313999872 .....
      axis :
        T
      long_name :
        Timestamps for position datagrams
      standard_name :
        time

          array(['2017-07-28T18:16:19.313999872', '2017-07-28T18:16:22.143000064',
                 '2017-07-28T18:16:24.962999808', ..., '2017-07-28T18:41:23.292000256',
                 '2017-07-28T18:41:25.949000192', '2017-07-28T18:41:28.597000192'],
                dtype='datetime64[ns]')

  - Data variables: (7)
    - latitude
      (location_time)
      float64
      dask.array<chunksize=(2165,), meta=np.ndarray>
      long_name :
        Platform latitude
      standard_name :
        latitude
      units :
        degrees_north
      valid_range :
        (-90.0, 90.0)

      | Array | Chunk
      Bytes | 16.91 kiB | 16.91 kiB
      Shape | (2165,) | (2165,)
      Count | 2 Tasks | 1 Chunks
      Type | float64 | numpy.ndarray

    - longitude
      (location_time)
      float64
      dask.array<chunksize=(2165,), meta=np.ndarray>
      long_name :
        Platform longitude
      standard_name :
        longitude
      units :
        degrees_east
      valid_range :
        (-180.0, 180.0)

      | Array | Chunk
      Bytes | 16.91 kiB | 16.91 kiB
      Shape | (2165,) | (2165,)
      Count | 2 Tasks | 1 Chunks
      Type | float64 | numpy.ndarray

    - sentence_type
      (location_time)
      <U3
      dask.array<chunksize=(2165,), meta=np.ndarray>

      | Array | Chunk
      Bytes | 25.37 kiB | 25.37 kiB
      Shape | (2165,) | (2165,)
      Count | 2 Tasks | 1 Chunks
      Type |  | numpy.ndarray

    - pitch
      (frequency, ping_time)
      float64
      dask.array<chunksize=(3, 529), meta=np.ndarray>
      long_name :
        Platform pitch
      standard_name :
        platform_pitch_angle
      units :
        arc_degree
      valid_range :
        (-90.0, 90.0)

      | Array | Chunk
      Bytes | 12.40 kiB | 12.40 kiB
      Shape | (3, 529) | (3, 529)
      Count | 2 Tasks | 1 Chunks
      Type | float64 | numpy.ndarray

    - roll
      (frequency, ping_time)
      float64
      dask.array<chunksize=(3, 529), meta=np.ndarray>
      long_name :
        Platform roll
      standard_name :
        platform_roll_angle
      units :
        arc_degree
      valid_range :
        (-90.0, 90.0)

      | Array | Chunk
      Bytes | 12.40 kiB | 12.40 kiB
      Shape | (3, 529) | (3, 529)
      Count | 2 Tasks | 1 Chunks
      Type | float64 | numpy.ndarray

    - heave
      (frequency, ping_time)
      float64
      dask.array<chunksize=(3, 529), meta=np.ndarray>
      long_name :
        Platform heave
      standard_name :
        platform_heave_angle
      units :
        arc_degree
      valid_range :
        (-90.0, 90.0)

      | Array | Chunk
      Bytes | 12.40 kiB | 12.40 kiB
      Shape | (3, 529) | (3, 529)
      Count | 2 Tasks | 1 Chunks
      Type | float64 | numpy.ndarray

    - water_level
      (frequency, ping_time)
      float64
      dask.array<chunksize=(3, 529), meta=np.ndarray>
      long_name :
        z-axis distance from the platform coordinate system origin to the sonar transducer
      units :
        m

      | Array | Chunk
      Bytes | 12.40 kiB | 12.40 kiB
      Shape | (3, 529) | (3, 529)
      Count | 2 Tasks | 1 Chunks
      Type | float64 | numpy.ndarray

  - Attributes: (3)
    platform_type :
      Research vessel
    platform_name :
      Bell M. Shimada
    platform_code_ICES :
      315
- nmea: (Platform/NMEA) contains information specific to the NMEA protocol.

      <xarray.Dataset>
      Dimensions:        (location_time: 22037)
      Coordinates:
        * location_time  (location_time) datetime64[ns] 2017-07-28T18:16:19.3140003...
      Data variables:
          NMEA_datagram  (location_time) <U73 '$SDVLW,5050.149,N,5050.149,N' ... '$...
      Attributes:
          description:  All NMEA sensor datagrams

  xarray.Dataset
  - Dimensions:
    - location_time: 22037
  - Coordinates: (1)
    - location_time
      (location_time)
      datetime64[ns]
      2017-07-28T18:16:19.314000384 .....
      axis :
        T
      long_name :
        Timestamps for NMEA datagrams
      standard_name :
        time

          array(['2017-07-28T18:16:19.314000384', '2017-07-28T18:16:20.896000000',
                 '2017-07-28T18:16:20.995999744', ..., '2017-07-28T18:41:32.515999744',
                 '2017-07-28T18:41:32.616000000', '2017-07-28T18:41:32.401999872'],
                dtype='datetime64[ns]')

  - Data variables: (1)
    - NMEA_datagram
      (location_time)
      <U73
      '$SDVLW,5050.149,N,5050.149,N' ....
      long_name :
        NMEA datagram

          array(['$SDVLW,5050.149,N,5050.149,N', '$INHDT,268.8,T', '$INHDT,268.8,T',
                 ..., '$INHDT,270.9,T', '$INHDT,270.9,T',
                 '$GPDTM,W84,,0000.0000,N,00000.0000,E,,W84'], dtype='<U73')

  - Attributes: (1)
    description :
      All NMEA sensor datagrams
- provenance: (Provenance) contains metadata about how the SONAR-netCDF4 version of the data were obtained.

      <xarray.Dataset>
      Dimensions:  ()
      Data variables:
          *empty*
      Attributes:
          conversion_software_name:     echopype
          conversion_software_version:  0.5.6
          conversion_time:              2022-05-26T18:01:56Z
          src_filenames:                s3://ncei-wcsd-archive/data/raw/Bell_M._Shi...
          duplicate_ping_times:         0

  xarray.Dataset
  - Dimensions:
  - Coordinates: (0)
  - Data variables: (0)
  - Attributes: (5)
    conversion_software_name :
      echopype
    conversion_software_version :
      0.5.6
    conversion_time :
      2022-05-26T18:01:56Z
    src_filenames :
      s3://ncei-wcsd-archive/data/raw/Bell_M._Shimada/SH1707/EK60/Summer2017-D20170728-T181619.raw
    duplicate_ping_times :
      0
- sonar: (Sonar) contains specific metadata for the sonar system.

      <xarray.Dataset>
      Dimensions:  ()
      Data variables:
          *empty*
      Attributes:
          sonar_manufacturer:      Simrad
          sonar_model:             ER60
          sonar_serial_number:
          sonar_software_name:
          sonar_software_version:  2.4.3
          sonar_type:              echosounder

  xarray.Dataset
  - Dimensions:
  - Coordinates: (0)
  - Data variables: (0)
  - Attributes: (6)
    sonar_manufacturer :
      Simrad
    sonar_model :
      ER60
    sonar_serial_number :
    sonar_software_name :
    sonar_software_version :
      2.4.3
    sonar_type :
      echosounder
- beam: (Beam) contains backscatter data and other beam or channel-specific data.

      <xarray.Dataset>
      Dimensions:                         (frequency: 3, ping_time: 529,
                                           range_bin: 3957)
      Coordinates:
        * frequency                       (frequency) float64 1.8e+04 3.8e+04 1.2e+05
        * ping_time                       (ping_time) datetime64[ns] 2017-07-28T18:...
        * range_bin                       (range_bin) int64 0 1 2 3 ... 3954 3955 3956
      Data variables: (12/30)
          channel_id                      (frequency) <U37 'GPT  18 kHz 009072058c8...
          beam_type                       (frequency) int64 1 1 1
          beamwidth_receive_alongship     (frequency) float64 10.9 6.81 6.58
          beamwidth_receive_athwartship   (frequency) float64 10.82 6.85 6.52
          beamwidth_transmit_alongship    (frequency) float64 10.9 6.81 6.58
          beamwidth_transmit_athwartship  (frequency) float64 10.82 6.85 6.52
          ...                              ...
          data_type                       (frequency, ping_time) float64 3.0 ... 3.0
          count                           (frequency, ping_time) float64 3.957e+03 ...
          offset                          (frequency, ping_time) float64 0.0 ... 0.0
          transmit_mode                   (frequency, ping_time) float64 0.0 ... 0.0
          angle_athwartship               (frequency, ping_time, range_bin) float64 ...
          angle_alongship                 (frequency, ping_time, range_bin) float64 ...
      Attributes:
          beam_mode:              vertical
          conversion_equation_t:  type_3

  xarray.Dataset
  - Dimensions:
    - frequency: 3
    - ping_time: 529
    - range_bin: 3957
  - Coordinates: (3)
    - frequency
      (frequency)
      float64
      1.8e+04 3.8e+04 1.2e+05
      long_name :
        Transducer frequency
      standard_name :
        sound_frequency
      units :
        Hz
      valid_min :
        0.0

          array([ 18000.,  38000., 120000.])

    - ping_time
      (ping_time)
      datetime64[ns]
      2017-07-28T18:16:19.313999872 .....
      long_name :
        Timestamp of each ping
      standard_name :
        time
      axis :
        T

          array(['2017-07-28T18:16:19.313999872', '2017-07-28T18:16:22.143000064',
                 '2017-07-28T18:16:24.962999808', ..., '2017-07-28T18:41:23.292000256',
                 '2017-07-28T18:41:25.949000192', '2017-07-28T18:41:28.597000192'],
                dtype='datetime64[ns]')

    - range_bin
      (range_bin)
      int64
      0 1 2 3 4 ... 3953 3954 3955 3956
      long_name :
        Along-range bin (sample) number, base 0

          array([   0,    1,    2, ..., 3954, 3955, 3956])

  - Data variables: (30)
    - channel_id
      (frequency)
      <U37
      'GPT 18 kHz 009072058c8d 1-1 ES...

          array(['GPT  18 kHz 009072058c8d 1-1 ES18-11',
                 'GPT  38 kHz 009072058146 2-1 ES38B',
                 'GPT 120 kHz 00907205a6d0 4-1 ES120-7C'], dtype='<U37')

    - beam_type
      (frequency)
      int64
      1 1 1
      long_name :
        type of transducer (0-single, 1-split)

          array([1, 1, 1])

    - beamwidth_receive_alongship
      (frequency)
      float64
      10.9 6.81 6.58
      long_name :
        Half power one-way receive beam width along alongship axis of beam
      units :
        arc_degree
      valid_range :
        (0.0, 360.0)

          array([10.89999962,  6.80999994,  6.57999992])

    - beamwidth_receive_athwartship
      (frequency)
      float64
      10.82 6.85 6.52
      long_name :
        Half power one-way receive beam width along athwartship axis of beam
      units :
        arc_degree
      valid_range :
        (0.0, 360.0)

          array([10.81999969,  6.8499999 ,  6.51999998])

    - beamwidth_transmit_alongship
      (frequency)
      float64
      10.9 6.81 6.58
      long_name :
        Half power one-way transmit beam width along alongship axis of beam
      units :
        arc_degree
      valid_range :
        (0.0, 360.0)

          array([10.89999962,  6.80999994,  6.57999992])

    - beamwidth_transmit_athwartship
      (frequency)
      float64
      10.82 6.85 6.52
      long_name :
        Half power one-way transmit beam width along athwartship axis of beam
      units :
        arc_degree
      valid_range :
        (0.0, 360.0)

          array([10.81999969,  6.8499999 ,  6.51999998])

    - beam_direction_x
      (frequency)
      float64
      0.0 0.0 0.0
      long_name :
        x-component of the vector that gives the pointing direction of the beam, in sonar beam coordinate system
      units :
        1
      valid_range :
        (-1.0, 1.0)

          array([0., 0., 0.])

    - beam_direction_y
      (frequency)
      float64
      0.0 0.0 0.0
      long_name :
        y-component of the vector that gives the pointing direction of the beam, in sonar beam coordinate system
      units :
        1
      valid_range :
        (-1.0, 1.0)

          array([0., 0., 0.])

    - beam_direction_z
      (frequency)
      float64
      0.0 0.0 0.0
      long_name :
        z-component of the vector that gives the pointing direction of the beam, in sonar beam coordinate system
      units :
        1
      valid_range :
        (-1.0, 1.0)

          array([0., 0., 0.])

    - angle_offset_alongship
      (frequency)
      float64
      -0.18 -0.08 -0.05
      long_name :
        electrical alongship angle of the transducer

          array([-0.18000001, -0.08      , -0.05      ])

    - angle_offset_athwartship
      (frequency)
      float64
      0.25 0.0 0.37
      long_name :
        electrical athwartship angle of the transducer

          array([0.25, 0.  , 0.37])

    - angle_sensitivity_alongship
      (frequency)
      float64
      13.89 21.97 23.12
      long_name :
        alongship sensitivity of the transducer

          array([13.89000034, 21.96999931, 23.12000084])

    - angle_sensitivity_athwartship
      (frequency)
      float64
      13.89 21.97 23.12
      long_name :
        athwartship sensitivity of the transducer

          array([13.89000034, 21.96999931, 23.12000084])

    - equivalent_beam_angle
      (frequency)
      float64
      -17.37 -21.01 -20.47
      long_name :
        Equivalent beam angle
      units :
        sr
      valid_range :
        (0.0, 12.566370614359172)

          array([-17.37000084, -21.01000023, -20.46999931])

    - transducer_offset_x
      (frequency)
      float64
      0.0 0.0 0.0
      long_name :
        x-axis distance from the platform coordinate system origin to the sonar transducer
      units :
        m

          array([0., 0., 0.])

    - transducer_offset_y
      (frequency)
      float64
      0.0 0.0 0.0
      long_name :
        y-axis distance from the platform coordinate system origin to the sonar transducer
      units :
        m

          array([0., 0., 0.])

    - transducer_offset_z
      (frequency)
      float64
      0.0 0.0 0.0
      long_name :
        z-axis distance from the platform coordinate system origin to the sonar transducer
      units :
        m

          array([0., 0., 0.])

    - gain_correction
      (frequency)
      float64
      22.95 26.07 26.55
      long_name :
        Gain correction
      units :
        dB

          array([22.95000076, 26.06999969, 26.54999924])

    - gpt_software_version
      (frequency)
      <U6
      '070413' '070413' '070413'

          array(['070413', '070413', '070413'], dtype='<U6')

    - backscatter_r
      (frequency, ping_time, range_bin)
      float32
      15.79 26.34 26.27 ... -159.5 -158.4
      long_name :
        Backscatter power
      units :
        dB

          array([[[  15.7923155,   26.340124 ,   26.269571 , ..., -145.34105  ,
                   -146.65805  , -139.60266  ],
                  [  15.7923155,   26.340124 ,   26.269571 , ..., -145.08235  ,
                   -146.19945  , -134.15825  ],
                  [  15.7923155,   26.340124 ,   26.269571 , ..., -141.47234  ,
                   -142.30722  , -146.36407  ],
                  ...,
                  [  15.7923155,   26.340124 ,   26.269571 , ..., -158.02899  ,
                   -148.25728  , -143.49489  ],
                  [  15.7923155,   26.340124 ,   26.269571 , ..., -135.67516  ,
                   -145.0941   , -131.0186   ],
                  [  15.7923155,   26.340124 ,   26.269571 , ..., -134.85204  ,
                   -136.62764  , -132.78246  ]],

                 [[  17.379778 ,   26.72817  ,   27.175013 , ..., -151.70265  ,
                   -155.86534  , -161.45085  ],
                  [  17.379778 ,   26.72817  ,   27.175013 , ..., -163.59099  ,
                   -162.27399  , -161.35678  ],
                  [  17.379778 ,   26.72817  ,   27.175013 , ..., -155.99469  ,
                   -147.63405  , -154.08972  ],
          ...
                  [  17.379778 ,   26.72817  ,   27.175013 , ..., -145.42336  ,
                   -144.48264  , -146.96378  ],
                  [  17.379778 ,   26.72817  ,   27.175013 , ..., -145.67029  ,
                   -149.93881  , -147.42238  ],
                  [  17.379778 ,   26.72817  ,   27.175013 , ..., -150.23277  ,
                   -150.35037  , -152.79623  ]],

                 [[  12.417487 ,   18.073559 ,   18.050041 , ..., -180.3593   ,
                   -160.2632   , -163.3558   ],
                  [  12.417487 ,   18.073559 ,   18.0618   , ..., -183.04034  ,
                   -162.48564  , -157.74677  ],
                  [  12.417487 ,   18.073559 ,   18.050041 , ..., -166.00157  ,
                   -167.4009   , -170.03491  ],
                  ...,
                  [  12.417487 ,   18.073559 ,   18.0618   , ..., -169.77621  ,
                   -155.05397  , -162.21518  ],
                  [  12.417487 ,   18.073559 ,   18.0618   , ..., -157.81732  ,
                   -167.87126  , -162.45036  ],
                  [  12.417487 ,   18.073559 ,   18.050041 , ..., -158.89915  ,
                   -159.53413  , -158.37     ]]], dtype=float32)

    - sample_interval
      (frequency, ping_time)
      float64
      0.000256 0.000256 ... 0.000256
      long_name :
        Interval between recorded raw data samples
      units :
        s
      valid_min :
        0.0

          array([[0.000256, 0.000256, 0.000256, ..., 0.000256, 0.000256, 0.000256],
                 [0.000256, 0.000256, 0.000256, ..., 0.000256, 0.000256, 0.000256],
                 [0.000256, 0.000256, 0.000256, ..., 0.000256, 0.000256, 0.000256]])

    - transmit_bandwidth
      (frequency, ping_time)
      float64
      1.574e+03 1.574e+03 ... 3.026e+03
      long_name :
        Nominal bandwidth of transmitted pulse
      units :
        Hz
      valid_min :
        0.0

          array([[1573.66552734, 1573.66552734, 1573.66552734, ..., 1573.66552734,
                  1573.66552734, 1573.66552734],
                 [2425.1496582 , 2425.1496582 , 2425.1496582 , ..., 2425.1496582 ,
                  2425.1496582 , 2425.1496582 ],
                 [3026.39160156, 3026.39160156, 3026.39160156, ..., 3026.39160156,
                  3026.39160156, 3026.39160156]])

    - transmit_duration_nominal
      (frequency, ping_time)
      float64
      0.001024 0.001024 ... 0.001024
      long_name :
        Nominal bandwidth of transmitted pulse
      units :
        s
      valid_min :
        0.0

          array([[0.001024, 0.001024, 0.001024, ..., 0.001024, 0.001024, 0.001024],
                 [0.001024, 0.001024, 0.001024, ..., 0.001024, 0.001024, 0.001024],
                 [0.001024, 0.001024, 0.001024, ..., 0.001024, 0.001024, 0.001024]])

    - transmit_power
      (frequency, ping_time)
      float64
      2e+03 2e+03 2e+03 ... 250.0 250.0
      long_name :
        Nominal transmit power
      units :
        W
      valid_min :
        0.0

          array([[2000., 2000., 2000., ..., 2000., 2000., 2000.],
                 [2000., 2000., 2000., ..., 2000., 2000., 2000.],
                 [ 250.,  250.,  250., ...,  250.,  250.,  250.]])

    - data_type
      (frequency, ping_time)
      float64
      3.0 3.0 3.0 3.0 ... 3.0 3.0 3.0 3.0
      long_name :
        recorded data type (1-power only, 2-angle only 3-power and angle)

          array([[3., 3., 3., ..., 3., 3., 3.],
                 [3., 3., 3., ..., 3., 3., 3.],
                 [3., 3., 3., ..., 3., 3., 3.]])

    - count
      (frequency, ping_time)
      float64
      3.957e+03 3.957e+03 ... 3.957e+03
      long_name :
        Number of samples

          array([[3957., 3957., 3957., ..., 3957., 3957., 3957.],
                 [3957., 3957., 3957., ..., 3957., 3957., 3957.],
                 [3957., 3957., 3957., ..., 3957., 3957., 3957.]])

    - offset
      (frequency, ping_time)
      float64
      0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0
      long_name :
        Offset of first sample

          array([[0., 0., 0., ..., 0., 0., 0.],
                 [0., 0., 0., ..., 0., 0., 0.],
                 [0., 0., 0., ..., 0., 0., 0.]])

    - transmit_mode
      (frequency, ping_time)
      float64
      0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0
      long_name :
        0 = Active, 1 = Passive, 2 = Test, -1 = Unknown

          array([[0., 0., 0., ..., 0., 0., 0.],
                 [0., 0., 0., ..., 0., 0., 0.],
                 [0., 0., 0., ..., 0., 0., 0.]])

    - angle_athwartship
      (frequency, ping_time, range_bin)
      float64
      -3.0 -3.0 -4.0 ... 19.0 54.0 33.0
      long_name :
        electrical athwartship angle

          array([[[  -3.,   -3.,   -4., ...,   46., -103.,  -18.],
                  [  -3.,   -3.,   -4., ...,  -13., -126.,   -2.],
                  [  -3.,   -3.,   -4., ...,    6.,   17.,  -61.],
                  ...,
                  [  -3.,   -3.,   -4., ...,  107., -103.,  112.],
                  [  -3.,   -3.,   -4., ...,   30.,  123.,   33.],
                  [  -3.,   -3.,   -4., ...,   -9.,  -15.,   15.]],

                 [[  -1.,   -2.,   -2., ...,  -37.,  -65., -117.],
                  [  -1.,   -2.,   -2., ...,  -38.,   47., -100.],
                  [  -1.,   -2.,   -2., ...,   11.,   23.,   32.],
                  ...,
                  [  -1.,   -2.,   -2., ...,   13.,   13.,   32.],
                  [  -1.,   -2.,   -2., ...,    4.,   31.,   24.],
                  [  -1.,   -2.,   -2., ...,  -11.,  -42., -104.]],

                 [[  -2.,   -3.,   -3., ...,  122.,  -30.,   -7.],
                  [  -2.,   -3.,   -3., ..., -120.,   81.,    9.],
                  [  -2.,   -3.,   -3., ...,   -2.,   51., -105.],
                  ...,
                  [  -2.,   -3.,   -3., ...,  107.,  -32.,  -20.],
                  [  -2.,   -3.,   -3., ...,  -13.,  -99.,  -39.],
                  [  -2.,   -3.,   -3., ...,   19.,   54.,   33.]]])

    - angle_alongship
      (frequency, ping_time, range_bin)
      float64
      3.0 2.0 3.0 3.0 ... 51.0 93.0 -27.0
      long_name :
        electrical alongship angle

          array([[[   3.,    2.,    3., ...,  -90.,  -78.,  -29.],
                  [   3.,    2.,    3., ...,   90., -101.,  -70.],
                  [   3.,    2.,    3., ...,   49.,   75.,  105.],
                  ...,
                  [   3.,    2.,    3., ...,  118.,   77.,  -63.],
                  [   3.,    2.,    3., ...,  -55.,  116.,   18.],
                  [   3.,    2.,    3., ...,   -1.,  -46.,  -42.]],

                 [[   0.,    0.,   -1., ...,  -42.,    7., -103.],
                  [   0.,    0.,   -1., ...,   93.,  -76.,   86.],
                  [   0.,   -1.,   -1., ...,  -60.,    9.,   33.],
                  ...,
                  [   0.,   -1.,   -1., ...,   19.,   47.,   64.],
                  [   0.,    0.,   -1., ...,   25.,   -2.,    4.],
                  [   0.,   -1.,   -1., ...,   63.,  -10.,  -14.]],

                 [[  -1.,   -1.,   -1., ..., -122.,  -30., -100.],
                  [  -1.,   -1.,   -1., ...,  118.,   61.,    9.],
                  [  -1.,   -1.,   -1., ...,  109.,   42.,  120.],
                  ...,
                  [  -1.,   -1.,   -1., ...,   88.,    3.,  -71.],
                  [  -1.,   -1.,   -1., ...,   47.,  109.,   70.],
                  [  -1.,   -1.,   -1., ...,   51.,   93.,  -27.]]])

  - Attributes: (2)
    beam_mode :
      vertical
    conversion_equation_t :
      type_3
- vendor: (Vendor specific) contains vendor-specific information about the sonar and the data.

      <xarray.Dataset>
      Dimensions:           (frequency: 3, pulse_length_bin: 5)
      Coordinates:
        * frequency         (frequency) float64 1.8e+04 3.8e+04 1.2e+05
        * pulse_length_bin  (pulse_length_bin) int64 0 1 2 3 4
      Data variables:
          sa_correction     (frequency, pulse_length_bin) float64 0.0 -0.7 ... -0.3
          gain_correction   (frequency, pulse_length_bin) float64 20.3 22.95 ... 26.55
          pulse_length      (frequency, pulse_length_bin) float64 0.000512 ... 0.00...

  xarray.Dataset
  - Dimensions:
    - frequency: 3
    - pulse_length_bin: 5
  - Coordinates: (2)
    - frequency
      (frequency)
      float64
      1.8e+04 3.8e+04 1.2e+05
      units :
        Hz
      long_name :
        Transducer frequency
      valid_min :
        0.0

          array([ 18000.,  38000., 120000.])

    - pulse_length_bin
      (pulse_length_bin)
      int64
      0 1 2 3 4

          array([0, 1, 2, 3, 4])

  - Data variables: (3)
    - sa_correction
      (frequency, pulse_length_bin)
      float64
      0.0 -0.7 0.0 0.0 ... 0.0 0.0 -0.3

          array([[ 0.  , -0.7 ,  0.  ,  0.  ,  0.  ],
                 [ 0.  ,  0.  , -0.52,  0.  ,  0.  ],
                 [ 0.  ,  0.  ,  0.  ,  0.  , -0.3 ]])

    - gain_correction
      (frequency, pulse_length_bin)
      float64
      20.3 22.95 22.9 ... 27.0 27.0 26.55

          array([[20.299999, 22.950001, 22.9     , 23.      , 23.      ],
                 [24.      , 26.      , 26.07    , 26.5     , 26.5     ],
                 [25.5     , 26.799999, 27.      , 27.      , 26.549999]])

    - pulse_length
      (frequency, pulse_length_bin)
      float64
      0.000512 0.001024 ... 0.001024

          array([[5.120e-04, 1.024e-03, 2.048e-03, 4.096e-03, 8.192e-03],
                 [2.560e-04, 5.120e-04, 1.024e-03, 2.048e-03, 4.096e-03],
                 [6.400e-05, 1.280e-04, 2.560e-04, 5.120e-04, 1.024e-03]])

  - Attributes: (0)