Signal processing: Some refactoring.

dev-brahim
Pierre-Antoine 2025-03-19 15:31:06 +01:00
parent ad865e2829
commit 8a39bba7b1
1 changed files with 191 additions and 245 deletions

View File

@ -20,6 +20,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import os
import logging import logging
from cProfile import label from cProfile import label
@ -54,6 +55,7 @@ import Translation.constant_string as cs
from Model.acoustic_data_loader import AcousticDataLoader from Model.acoustic_data_loader import AcousticDataLoader
import settings as stg import settings as stg
from tools import trace
_translate = QCoreApplication.translate _translate = QCoreApplication.translate
@ -69,15 +71,8 @@ class SignalProcessingTab(QWidget):
def __init__(self, widget_tab): def __init__(self, widget_tab):
super().__init__() super().__init__()
self.path_icon = "./icons/"
self.icon_folder = QIcon(self.path_icon + "folder.png") self._setup_icons()
self.icon_triangle_left = QIcon(self.path_icon + "triangle_left.png")
self.icon_triangle_right = QIcon(self.path_icon + "triangle_right.png")
self.icon_triangle_left_to_begin = QIcon(self.path_icon + "triangle_left_to_begin.png")
self.icon_triangle_right_to_end = QIcon(self.path_icon + "triangle_right_to_end.png")
self.icon_update = QIcon(self.path_icon + "update.png")
self.icon_clear = QIcon(self.path_icon + "clear.png")
self.icon_apply = QIcon(self.path_icon + "circle_green_arrow_right.png")
### --- General layout of widgets --- ### --- General layout of widgets ---
@ -493,6 +488,26 @@ class SignalProcessingTab(QWidget):
self.slider.valueChanged.connect(self.update_lineEdit_by_moving_slider) self.slider.valueChanged.connect(self.update_lineEdit_by_moving_slider)
self.slider.valueChanged.connect(self.update_plot_pre_processed_profile) self.slider.valueChanged.connect(self.update_plot_pre_processed_profile)
def _setup_icons(self):
def path_icon(icon):
return os.path.join(
"icons", icon
)
self.icon_folder = QIcon(path_icon("folder.png"))
self.icon_triangle_left = QIcon(path_icon("triangle_left.png"))
self.icon_triangle_right = QIcon(path_icon("triangle_right.png"))
self.icon_triangle_left_to_begin = QIcon(
path_icon("triangle_left_to_begin.png")
)
self.icon_triangle_right_to_end = QIcon(
path_icon("triangle_right_to_end.png")
)
self.icon_update = QIcon(path_icon("update.png"))
self.icon_clear = QIcon(path_icon("clear.png"))
self.icon_apply = QIcon(path_icon("circle_green_arrow_right.png"))
# -------------------------------------------------------------------------------------------------------------- # --------------------------------------------------------------------------------------------------------------
# -------------------------------------------------------------------------------------------------------------- # --------------------------------------------------------------------------------------------------------------
# +++++++++ FUNCTION +++++++++ # +++++++++ FUNCTION +++++++++
@ -516,6 +531,7 @@ class SignalProcessingTab(QWidget):
data_id = self.combobox_acoustic_data_choice.currentIndex() data_id = self.combobox_acoustic_data_choice.currentIndex()
self.combobox_acoustic_data_choice.blockSignals(True) self.combobox_acoustic_data_choice.blockSignals(True)
self.combobox_freq_noise_from_profile_tail.blockSignals(True)
logger.debug("Update the Signal preprocessing tab...") logger.debug("Update the Signal preprocessing tab...")
@ -541,6 +557,7 @@ class SignalProcessingTab(QWidget):
logger.debug("Update the Signal preprocessing tab... Done") logger.debug("Update the Signal preprocessing tab... Done")
self.combobox_freq_noise_from_profile_tail.blockSignals(False)
self.combobox_acoustic_data_choice.blockSignals(False) self.combobox_acoustic_data_choice.blockSignals(False)
def activate_list_of_pre_processed_data(self): def activate_list_of_pre_processed_data(self):
@ -607,71 +624,77 @@ class SignalProcessingTab(QWidget):
self.animation_groupbox_option_profile_tail.start() self.animation_groupbox_option_profile_tail.start()
# ------------------------------------------------------ # ------------------------------------------------------
def compute_average_profile_tail(self): @trace
def compute_average_profile_tail(self, *args):
data_id = self.combobox_acoustic_data_choice.currentIndex()
freq_noise_id = self.combobox_freq_noise_from_profile_tail.currentIndex()
if (float(self.lineEdit_val1.text()) == 0) and (float(self.lineEdit_val2.text()) == 0): if ((float(self.lineEdit_val1.text()) == 0)
if stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,): and (float(self.lineEdit_val2.text()) == 0)):
if stg.time_cross_section[data_id].shape != (0,):
self.lineEdit_val1.setText(str( self.lineEdit_val1.setText(str(
'%.3f' % np.nanmin(stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][ '%.3f' % np.nanmin(
self.combobox_freq_noise_from_profile_tail.currentIndex()]))) stg.time_cross_section[data_id][
freq_noise_id
]
)
))
self.lineEdit_val2.setText(str( self.lineEdit_val2.setText(str(
'%.3f' % np.nanmax(stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][ '%.3f' % np.nanmax(
self.combobox_freq_noise_from_profile_tail.currentIndex()]))) stg.time_cross_section[data_id][
freq_noise_id
elif stg.time[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,): ]
)
))
elif stg.time[data_id].shape != (0,):
self.lineEdit_val1.setText(str( self.lineEdit_val1.setText(str(
'%.3f' % np.nanmin(stg.time[self.combobox_acoustic_data_choice.currentIndex()][ '%.3f' % np.nanmin(stg.time[data_id][
self.combobox_freq_noise_from_profile_tail.currentIndex()]))) freq_noise_id])))
self.lineEdit_val2.setText(str( self.lineEdit_val2.setText(str(
'%.3f' % np.nanmax(stg.time[self.combobox_acoustic_data_choice.currentIndex()][ '%.3f' % np.nanmax(stg.time[data_id][
self.combobox_freq_noise_from_profile_tail.currentIndex()]))) freq_noise_id])))
# --- Find index of line edit value --- # --- Find index of line edit value ---
if stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,): if stg.time_cross_section[data_id].shape != (0,):
time_data = stg.time_cross_section
elif stg.time[data_id].shape != (0,):
time_data = stg.time
val1 = np.where(np.abs(stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][ val1 = np.where(
self.combobox_freq_noise_from_profile_tail.currentIndex()] - np.abs(
float(self.lineEdit_val1.text().replace(",", "."))) time_data[data_id][freq_noise_id]
== - float(self.lineEdit_val1.text().replace(",", "."))
np.nanmin(np.abs(stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][ ) == np.nanmin(
self.combobox_freq_noise_from_profile_tail.currentIndex()] - np.abs(
float(self.lineEdit_val1.text().replace(",", ".")))) time_data[data_id][freq_noise_id]
)[0][0] - float(self.lineEdit_val1.text().replace(",", "."))
val2 = np.where(np.abs(stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][ )
self.combobox_freq_noise_from_profile_tail.currentIndex()] - )
float(self.lineEdit_val2.text().replace(",", "."))) )[0][0]
== val2 = np.where(
np.nanmin(np.abs(stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][ np.abs(
self.combobox_freq_noise_from_profile_tail.currentIndex()] - time_data[data_id][freq_noise_id]
float(self.lineEdit_val2.text().replace(",", ".")))) - float(self.lineEdit_val2.text().replace(",", "."))
)[0][0] ) == np.nanmin(
np.abs(
time_data[data_id][freq_noise_id]
- float(self.lineEdit_val2.text().replace(",", "."))
)
)
)[0][0]
elif stg.time[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,): stg.BS_mean[data_id] = (
np.nanmean(
stg.BS_raw_data[data_id][:, :, val1:val2],
axis=2
)
)
val1 = np.where(np.abs(stg.time[self.combobox_acoustic_data_choice.currentIndex()][ if stg.BS_noise_raw_data[data_id].shape != (0,):
self.combobox_freq_noise_from_profile_tail.currentIndex()] -
float(self.lineEdit_val1.text().replace(",", ".")))
==
np.nanmin(np.abs(stg.time[self.combobox_acoustic_data_choice.currentIndex()][
self.combobox_freq_noise_from_profile_tail.currentIndex()] -
float(self.lineEdit_val1.text().replace(",", "."))))
)[0][0]
val2 = np.where(np.abs(stg.time[self.combobox_acoustic_data_choice.currentIndex()][
self.combobox_freq_noise_from_profile_tail.currentIndex()] -
float(self.lineEdit_val2.text().replace(",", ".")))
==
np.nanmin(np.abs(stg.time[self.combobox_acoustic_data_choice.currentIndex()][
self.combobox_freq_noise_from_profile_tail.currentIndex()] -
float(self.lineEdit_val2.text().replace(",", "."))))
)[0][0]
stg.BS_mean[self.combobox_acoustic_data_choice.currentIndex()] = (
np.nanmean(stg.BS_raw_data[self.combobox_acoustic_data_choice.currentIndex()][:, :, val1:val2], axis=2))
if stg.BS_noise_raw_data[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
self.compute_noise_from_profile_tail_value() self.compute_noise_from_profile_tail_value()
def plot_averaged_profile_tail(self): @trace
def plot_averaged_profile_tail(self, *args):
# --- Plot averaged signal --- # --- Plot averaged signal ---
@ -1043,7 +1066,8 @@ class SignalProcessingTab(QWidget):
# self.activate_list_of_pre_processed_data() # self.activate_list_of_pre_processed_data()
def plot_noise(self): @trace
def plot_noise(self, *args):
self.horizontalLayout_groupbox_plot_noise_data.removeWidget(self.canvas_noise) self.horizontalLayout_groupbox_plot_noise_data.removeWidget(self.canvas_noise)
self.fig_noise, self.axis_noise = plt.subplots(nrows=1, ncols=1, layout="constrained") self.fig_noise, self.axis_noise = plt.subplots(nrows=1, ncols=1, layout="constrained")
@ -1074,7 +1098,8 @@ class SignalProcessingTab(QWidget):
self.axis_noise.tick_params(axis='both', which='minor', labelsize=10) self.axis_noise.tick_params(axis='both', which='minor', labelsize=10)
def plot_transect_with_SNR_data(self): @trace
def plot_transect_with_SNR_data(self, *args):
# --- Condition if table is not filled --- # --- Condition if table is not filled ---
# if not self.lineEdit_noise_file.text(): # if not self.lineEdit_noise_file.text():
if len(stg.BS_noise_raw_data) == 0: if len(stg.BS_noise_raw_data) == 0:
@ -1330,218 +1355,138 @@ class SignalProcessingTab(QWidget):
self.compute_averaged_BS_data() self.compute_averaged_BS_data()
self.update_plot_pre_processed_profile() self.update_plot_pre_processed_profile()
def plot_pre_processed_BS_signal(self): @trace
def plot_pre_processed_BS_signal(self, *args):
data_id = self.combobox_acoustic_data_choice.currentIndex()
self.lineEdit_horizontal_average.setText(str(stg.Nb_cells_to_average_BS_signal[self.combobox_acoustic_data_choice.currentIndex()])) self.lineEdit_horizontal_average.setText(
str(stg.Nb_cells_to_average_BS_signal[data_id])
)
if ((self.combobox_acoustic_data_choice.currentIndex() != -1) if ((data_id != -1)
and (stg.BS_noise_raw_data[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,))): and (stg.BS_noise_raw_data[data_id].shape != (0,))):
self.verticalLayout_groupbox_plot_pre_processed_data_2D_field.removeWidget(self.toolbar_BS) self.verticalLayout_groupbox_plot_pre_processed_data_2D_field\
self.verticalLayout_groupbox_plot_pre_processed_data_2D_field.removeWidget(self.scroll_BS) .removeWidget(self.toolbar_BS)
self.verticalLayout_groupbox_plot_pre_processed_data_2D_field\
.removeWidget(self.scroll_BS)
self.fig_BS, self.axis_BS = plt.subplots(nrows=stg.freq[self.combobox_acoustic_data_choice.currentIndex()].shape[0], ncols=1, sharex=True, sharey=False, layout="constrained") self.fig_BS, self.axis_BS = plt.subplots(
nrows=stg.freq[data_id].shape[0], ncols=1,
sharex=True, sharey=False, layout="constrained"
)
self.canvas_BS = FigureCanvas(self.fig_BS) self.canvas_BS = FigureCanvas(self.fig_BS)
self.toolbar_BS = NavigationToolBar(self.canvas_BS, self) self.toolbar_BS = NavigationToolBar(self.canvas_BS, self)
self.scroll_BS.setWidget(self.canvas_BS) self.scroll_BS.setWidget(self.canvas_BS)
self.verticalLayout_groupbox_plot_pre_processed_data_2D_field.addWidget(self.toolbar_BS) self.verticalLayout_groupbox_plot_pre_processed_data_2D_field\
self.verticalLayout_groupbox_plot_pre_processed_data_2D_field.addWidget(self.scroll_BS) .addWidget(self.toolbar_BS)
self.verticalLayout_groupbox_plot_pre_processed_data_2D_field\
if stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,): .addWidget(self.scroll_BS)
if stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
x_time = stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()]
y_depth = stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()]
elif stg.depth[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
x_time = stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()]
y_depth = stg.depth[self.combobox_acoustic_data_choice.currentIndex()]
if stg.time_cross_section[data_id].shape != (0,):
if stg.depth_cross_section[data_id].shape != (0,):
x_time = stg.time_cross_section[data_id]
y_depth = stg.depth_cross_section[data_id]
elif stg.depth[data_id].shape != (0,):
x_time = stg.time_cross_section[data_id]
y_depth = stg.depth[data_id]
else: else:
if stg.depth_cross_section[data_id].shape != (0,):
x_time = stg.time[data_id]
y_depth = stg.depth_cross_section[data_id]
elif stg.depth[data_id].shape != (0,):
x_time = stg.time[data_id]
y_depth = stg.depth[data_id]
if stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,): for f, _ in enumerate(stg.freq[data_id]):
bed = False
x_time = stg.time[self.combobox_acoustic_data_choice.currentIndex()] if stg.BS_stream_bed_pre_process_average[data_id].shape != (0,):
y_depth = stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()] BS_data = stg.BS_stream_bed_pre_process_average
bed = True
elif stg.BS_cross_section_pre_process_average[data_id].shape != (0,):
BS_data = stg.BS_cross_section_pre_process_average
elif stg.BS_raw_data_pre_process_average[data_id].shape != (0,):
BS_data = stg.BS_raw_data_pre_process_average
elif stg.BS_stream_bed_pre_process_SNR[data_id].shape != (0,):
BS_data = stg.BS_stream_bed_pre_process_SNR
bed = True
elif stg.BS_cross_section_pre_process_SNR[data_id].shape != (0,):
BS_data = stg.BS_cross_section_pre_process_SNR
elif stg.BS_raw_data_pre_process_SNR[data_id].shape != (0,):
BS_data = stg.BS_raw_data_pre_process_SNR
elif stg.BS_stream_bed[data_id].shape != (0,):
BS_data = stg.BS_stream_bed
bed = True
elif stg.BS_cross_section[data_id].shape != (0,):
BS_data = stg.BS_cross_section
elif stg.BS_raw_data[data_id].shape != (0,):
BS_data = stg.BS_raw_data
elif stg.depth[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,): val_min = np.nanmin(
BS_data[data_id][f, :, :]
)
val_max = np.nanmax(
BS_data[data_id][f, :, :]
)
x_time = stg.time[self.combobox_acoustic_data_choice.currentIndex()] if val_min == 0:
y_depth = stg.depth[self.combobox_acoustic_data_choice.currentIndex()] val_min = 1e-5
pcm = self.axis_BS[f].pcolormesh(
x_time[f, :], -y_depth[f, :],
BS_data[data_id][f, :, :],
cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max)
)
for f, _ in enumerate(stg.freq[self.combobox_acoustic_data_choice.currentIndex()]): if bed:
self.axis_BS[f].plot(
x_time[f, :], -stg.depth_bottom[data_id],
color='black', linewidth=1, linestyle="solid"
)
if stg.BS_stream_bed_pre_process_average[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,): self.axis_BS[f].text(
1, .70, stg.freq_text[data_id][f],
val_min = np.nanmin(stg.BS_stream_bed_pre_process_average[self.combobox_acoustic_data_choice.currentIndex()][f, :, :]) fontsize=14, fontweight='bold', fontname="DejaVu Sans",
val_max = np.nanmax(stg.BS_stream_bed_pre_process_average[self.combobox_acoustic_data_choice.currentIndex()][f, :, :]) c="black", alpha=0.5,
horizontalalignment='right',
if val_min == 0: verticalalignment='bottom',
val_min = 1e-5 transform=self.axis_BS[f].transAxes
)
pcm = self.axis_BS[f].pcolormesh(x_time[f, :], -y_depth[f, :],
stg.BS_stream_bed_pre_process_average[self.combobox_acoustic_data_choice.currentIndex()][f, :, :],
cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
self.axis_BS[f].plot(x_time[f, :], -stg.depth_bottom[self.combobox_acoustic_data_choice.currentIndex()],
color='black', linewidth=1, linestyle="solid")
elif stg.BS_cross_section_pre_process_average[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
val_min = np.nanmin(
stg.BS_cross_section_pre_process_average[self.combobox_acoustic_data_choice.currentIndex()][f, :, :])
val_max = np.nanmax(
stg.BS_cross_section_pre_process_average[self.combobox_acoustic_data_choice.currentIndex()][f, :, :])
if val_min == 0:
val_min = 1e-5
pcm = self.axis_BS[f].pcolormesh(
x_time[f, :], -y_depth[f, :],
stg.BS_cross_section_pre_process_average[self.combobox_acoustic_data_choice.currentIndex()][f, :, :],
cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
elif stg.BS_raw_data_pre_process_average[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
val_min = np.nanmin(
stg.BS_raw_data_pre_process_average[self.combobox_acoustic_data_choice.currentIndex()][f, :, :])
val_max = np.nanmax(
stg.BS_raw_data_pre_process_average[self.combobox_acoustic_data_choice.currentIndex()][f, :, :])
if val_min == 0:
val_min = 1e-5
pcm = self.axis_BS[f].pcolormesh(x_time[f, :], -y_depth[f, :],
stg.BS_raw_data_pre_process_average[
self.combobox_acoustic_data_choice.currentIndex()][f, :, :],
cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
elif stg.BS_stream_bed_pre_process_SNR[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
val_min = np.nanmin(stg.BS_stream_bed_pre_process_SNR[self.combobox_acoustic_data_choice.currentIndex()][f, :, :])
val_max = np.nanmax(stg.BS_stream_bed_pre_process_SNR[self.combobox_acoustic_data_choice.currentIndex()][f, :, :])
if val_min == 0:
val_min = 1e-5
pcm = self.axis_BS[f].pcolormesh(x_time[f, :], -y_depth[f, :],
stg.BS_stream_bed_pre_process_SNR[self.combobox_acoustic_data_choice.currentIndex()][f, :, :],
cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
self.axis_BS[f].plot(x_time[f, :],
-stg.depth_bottom[self.combobox_acoustic_data_choice.currentIndex()],
color='black', linewidth=1, linestyle="solid")
elif stg.BS_cross_section_pre_process_SNR[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
val_min = np.nanmin(
stg.BS_cross_section_pre_process_SNR[self.combobox_acoustic_data_choice.currentIndex()][f, :, :])
val_max = np.nanmax(
stg.BS_cross_section_pre_process_SNR[self.combobox_acoustic_data_choice.currentIndex()][f, :, :])
if val_min == 0:
val_min = 1e-5
pcm = self.axis_BS[f].pcolormesh(
x_time[f, :], -y_depth[f, :],
stg.BS_cross_section_pre_process_SNR[self.combobox_acoustic_data_choice.currentIndex()][f, :, :],
cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
elif stg.BS_raw_data_pre_process_SNR[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
val_min = np.nanmin(
stg.BS_raw_data_pre_process_SNR[self.combobox_acoustic_data_choice.currentIndex()][f, :, :])
val_max = np.nanmax(
stg.BS_raw_data_pre_process_SNR[self.combobox_acoustic_data_choice.currentIndex()][f, :, :])
if val_min == 0:
val_min = 1e-5
pcm = self.axis_BS[f].pcolormesh(x_time[f, :], -y_depth[f, :],
stg.BS_raw_data_pre_process_SNR[
self.combobox_acoustic_data_choice.currentIndex()][f, :, :],
cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
elif stg.BS_stream_bed[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
val_min = np.nanmin(
stg.BS_stream_bed[self.combobox_acoustic_data_choice.currentIndex()][f, :, :])
val_max = np.nanmax(
stg.BS_stream_bed[self.combobox_acoustic_data_choice.currentIndex()][f, :, :])
if val_min == 0:
val_min = 1e-5
pcm = self.axis_BS[f].pcolormesh(x_time[f, :], -y_depth[f, :],
stg.BS_stream_bed[
self.combobox_acoustic_data_choice.currentIndex()][f, :, :],
cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
elif stg.BS_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
val_min = np.nanmin(
stg.BS_cross_section[self.combobox_acoustic_data_choice.currentIndex()][f, :, :])
val_max = np.nanmax(
stg.BS_cross_section[self.combobox_acoustic_data_choice.currentIndex()][f, :, :])
if val_min == 0:
val_min = 1e-5
pcm = self.axis_BS[f].pcolormesh(x_time[f, :], -y_depth[f, :],
stg.BS_cross_section[
self.combobox_acoustic_data_choice.currentIndex()][f, :, :],
cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
elif stg.BS_raw_data[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
val_min = np.nanmin(
stg.BS_raw_data[self.combobox_acoustic_data_choice.currentIndex()][f, :, :])
val_max = np.nanmax(
stg.BS_raw_data[self.combobox_acoustic_data_choice.currentIndex()][f, :, :])
if val_min == 0:
val_min = 1e-5
pcm = self.axis_BS[f].pcolormesh(x_time[f, :], -y_depth[f, :],
stg.BS_raw_data[
self.combobox_acoustic_data_choice.currentIndex()][f, :, :],
cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
self.axis_BS[f].text(1, .70, stg.freq_text[self.combobox_acoustic_data_choice.currentIndex()][f],
fontsize=14, fontweight='bold', fontname="DejaVu Sans", c="black", alpha=0.5,
horizontalalignment='right', verticalalignment='bottom',
transform=self.axis_BS[f].transAxes)
# --- Display red line on acoustic recording for profile position --- # --- Display red line on acoustic recording for profile position ---
freq_id = self.combobox_frequency_profile.currentIndex()
self.red_line_return, = self.axis_BS[self.combobox_frequency_profile.currentIndex()].plot( self.red_line_return, = self.axis_BS[freq_id].plot(
x_time[self.combobox_frequency_profile.currentIndex(), self.slider.value() - 1] * x_time[freq_id, self.slider.value() - 1] *
np.ones(y_depth.shape[1]), np.ones(y_depth.shape[1]),
-y_depth[self.combobox_frequency_profile.currentIndex(), :], -y_depth[freq_id, :],
linestyle="solid", linewidth=2, color="red") linestyle="solid", linewidth=2, color="red"
)
self.fig_BS.supxlabel('Time (sec)', fontsize=10) self.fig_BS.supxlabel('Time (sec)', fontsize=10)
self.fig_BS.supylabel('Depth (m)', fontsize=10) self.fig_BS.supylabel('Depth (m)', fontsize=10)
cbar = self.fig_BS.colorbar(pcm, ax=self.axis_BS[:], shrink=1, location='right') cbar = self.fig_BS.colorbar(pcm, ax=self.axis_BS[:],
cbar.set_label(label='Acoustic backscatter signal (V)', rotation=270, labelpad=10) shrink=1, location='right')
cbar.set_label(label='Acoustic backscatter signal (V)',
rotation=270, labelpad=10)
self.fig_BS.canvas.draw_idle() self.fig_BS.canvas.draw_idle()
else: else:
self.verticalLayout_groupbox_plot_pre_processed_data_2D_field\
self.verticalLayout_groupbox_plot_pre_processed_data_2D_field.removeWidget(self.toolbar_BS) .removeWidget(self.toolbar_BS)
self.verticalLayout_groupbox_plot_pre_processed_data_2D_field.removeWidget(self.scroll_BS) self.verticalLayout_groupbox_plot_pre_processed_data_2D_field\
.removeWidget(self.scroll_BS)
self.canvas_BS = FigureCanvas() self.canvas_BS = FigureCanvas()
self.toolbar_BS = NavigationToolBar(self.canvas_BS, self) self.toolbar_BS = NavigationToolBar(self.canvas_BS, self)
self.scroll_BS.setWidget(self.canvas_BS) self.scroll_BS.setWidget(self.canvas_BS)
self.verticalLayout_groupbox_plot_pre_processed_data_2D_field.addWidget(self.toolbar_BS) self.verticalLayout_groupbox_plot_pre_processed_data_2D_field\
self.verticalLayout_groupbox_plot_pre_processed_data_2D_field.addWidget(self.scroll_BS) .addWidget(self.toolbar_BS)
self.verticalLayout_groupbox_plot_pre_processed_data_2D_field\
.addWidget(self.scroll_BS)
def update_label_cells_sec(self): def update_label_cells_sec(self):
@ -1676,7 +1621,8 @@ class SignalProcessingTab(QWidget):
self.plot_pre_processed_BS_signal() self.plot_pre_processed_BS_signal()
self.update_plot_pre_processed_profile() self.update_plot_pre_processed_profile()
def plot_pre_processed_profile(self): @trace
def plot_pre_processed_profile(self, *args):
if ((self.combobox_acoustic_data_choice.currentIndex() != -1) and if ((self.combobox_acoustic_data_choice.currentIndex() != -1) and
(stg.BS_noise_raw_data[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,))): (stg.BS_noise_raw_data[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,))):