Skip to content

Consolidate input argument combination checking for EK80 data #1745

Description

@leewujung

Right now we have 2 places that checks the combination of input argument for compute_Sv/Sp in terms of encode_mode and waveform_mode.

Here:

# TODO: consolidate the below block with simrad.py::check_input_args_combination()
# Check on waveform_mode, encode_mode inputs, and assumption on single filter time
if echodata.sonar_model == "EK80":
if waveform_mode is None or encode_mode is None:
raise ValueError("waveform_mode and encode_mode must be specified for EK80 calibration")
check_input_args_combination(waveform_mode=waveform_mode, encode_mode=encode_mode)
elif echodata.sonar_model in ("EK60", "AZFP", "AZFP6"):
if waveform_mode is not None and waveform_mode != "CW":
logger.warning(
"This sonar model transmits only narrowband signals (waveform_mode='CW'). "
"Calibration will be in CW mode",
)
if encode_mode is not None and encode_mode != "power":
logger.warning(
"This sonar model only record data as power or power/angle samples "
"(encode_mode='power'). Calibration will be done on the power samples.",
)

and in the function check_input_args_combination here:

def check_input_args_combination(
waveform_mode: str, encode_mode: str, pulse_compression: bool = None
) -> None:
"""
Checks that the ``waveform_mode`` and ``encode_mode`` have
the correct values and that the combination of input arguments are valid, without
considering the actual data.
Parameters
----------
waveform_mode: str
Type of transmit waveform
encode_mode: str
Type of encoded return echo data
pulse_compression: bool
States whether pulse compression should be used
"""
if waveform_mode not in ["CW", "BB"]:
raise ValueError("The input waveform_mode must be either 'CW' or 'BB'!")
if encode_mode not in ["complex", "power"]:
raise ValueError("The input encode_mode must be either 'complex' or 'power'!")
# BB has complex data only, but CW can have complex or power data
if (waveform_mode == "BB") and (encode_mode == "power"):
raise ValueError(
"Data from broadband ('BB') transmission must be recorded as complex samples"
)
# make sure that we have BB and complex inputs, if pulse compression is selected
if pulse_compression is not None:
if pulse_compression and ((waveform_mode != "BB") or (encode_mode != "complex")):
raise RuntimeError(
"Pulse compression can only be used with "
"waveform_mode='BB' and encode_mode='complex'"
)

The checks these code blocks perform are different, since one also deals with different sonar_models, but I think it would be cleaner to just have 1 function in the calibration subpackage to do this (check_input_args_combination shouldn't be in echodata/simrad.py).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions