Aquascat data are averaged with new shape of array (freq shape, r shape, t shape)

dev-brahim
brahim 2023-10-13 15:25:09 +02:00
parent bdf900a9bb
commit 1bda848671
1 changed files with 84 additions and 55 deletions

View File

@ -637,10 +637,10 @@ class SignalProcessingTab(QWidget):
stg.BS_data_section = deepcopy(stg.BS_data) stg.BS_data_section = deepcopy(stg.BS_data)
elif stg.r_bottom.size != 0: elif stg.r_bottom.size != 0:
stg.BS_data_section = deepcopy(stg.BS_data) stg.BS_data_section = deepcopy(stg.BS_data)
for f in range(stg.freq.shape[0]): for f, _ in enumerate(stg.freq):
for k in range(stg.r_bottom.shape[0]): for k, _ in enumerate(stg.r_bottom):
# print(k, np.where(stg.r >= stg.r_bottom[k])[0]) # print(k, np.where(stg.r >= stg.r_bottom[k])[0])
stg.BS_data_section[np.where(stg.r >= stg.r_bottom[k])[0], f, k] = np.nan stg.BS_data_section[f, np.where(stg.r[self.combobox_frequency.currentIndex(), :] >= stg.r_bottom[k])[0], k] = np.nan
# --- Choose frequency (Combo box) to plot transect with profile position --- # --- Choose frequency (Combo box) to plot transect with profile position ---
self.combobox_frequency.addItems(stg.freq_text) self.combobox_frequency.addItems(stg.freq_text)
@ -653,7 +653,7 @@ class SignalProcessingTab(QWidget):
self.combobox_frequency_compute_alphaS.addItems(stg.freq_text) self.combobox_frequency_compute_alphaS.addItems(stg.freq_text)
# --- Fix maximum value of slider + Edit Label Profile number --- # --- Fix maximum value of slider + Edit Label Profile number ---
self.slider.setMaximum(stg.t.shape[0]) self.slider.setMaximum(stg.t.shape[1])
self.label_profile_number.clear() self.label_profile_number.clear()
self.label_profile_number.setText("Profile " + str(self.slider.value()) + " / " + str(self.slider.maximum())) self.label_profile_number.setText("Profile " + str(self.slider.value()) + " / " + str(self.slider.maximum()))
@ -680,13 +680,17 @@ class SignalProcessingTab(QWidget):
msgBox.setStandardButtons(QMessageBox.Ok) msgBox.setStandardButtons(QMessageBox.Ok)
msgBox.exec() msgBox.exec()
else: else:
filter_convolve = np.ones(self.spinbox_average_horizontal.value()) filter_convolve = np.ones( self.spinbox_average_horizontal.value())
print(filter_convolve)
stg.BS_data_section_averaged = np.zeros((stg.r.shape[0], stg.freq.shape[0], stg.t.shape[0])) # stg.BS_data_section_averaged = np.zeros((stg.r.shape[0], stg.freq.shape[0], stg.t.shape[0]))
for f in range(stg.freq.shape[0]): # stg.BS_data_section_averaged = np.zeros((stg.freq.shape[0], stg.r.shape[1], stg.t.shape[1]))
for i in range(stg.r.shape[0]): stg.BS_data_section_averaged = deepcopy(stg.BS_data_section)
stg.BS_data_section_averaged[i, f, :] \ for f, _ in enumerate(stg.freq):
= convolve1d(stg.BS_data_section[i, f, :], weights=filter_convolve) / filter_convolve.shape[0] for i in range(stg.r.shape[1]):
stg.BS_data_section_averaged[f, i, :] \
= convolve1d(stg.BS_data_section[f, i, :], weights=filter_convolve) / filter_convolve.shape[0]
# stg.BS_data_section_averaged[i, f, :] \
# = convolve1d(stg.BS_data_section[i, f, :], weights=filter_convolve) / filter_convolve.shape[0]
self.label_cells_horizontal.clear() self.label_cells_horizontal.clear()
self.label_cells_horizontal.setText( self.label_cells_horizontal.setText(
@ -699,6 +703,19 @@ class SignalProcessingTab(QWidget):
self.plot_averaged_profile() self.plot_averaged_profile()
self.update_plot_profile_position_on_transect() self.update_plot_profile_position_on_transect()
# fig, ax = plt.subplots(nrows=1, ncols=1)
# val_min = np.nanmin(stg.BS_data_section_averaged[self.combobox_frequency.currentIndex(), :, :])
# val_max = np.nanmax(stg.BS_data_section_averaged[self.combobox_frequency.currentIndex(), :, :])
# if val_min == 0:
# val_min = 1e-5
#
# ax.pcolormesh(stg.t[self.combobox_frequency.currentIndex(), :],
# -stg.r[self.combobox_frequency.currentIndex(), :],
# stg.BS_data_section_averaged[self.combobox_frequency.currentIndex(), :, :],
# cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
#
# plt.show()
# ---------------------------------------- Connect Groupbox filter with SNR ---------------------------------------- # ---------------------------------------- Connect Groupbox filter with SNR ----------------------------------------
def remove_point_with_snr_filter(self): def remove_point_with_snr_filter(self):
@ -716,26 +733,26 @@ class SignalProcessingTab(QWidget):
if stg.BS_data_section_averaged.size == 0: if stg.BS_data_section_averaged.size == 0:
stg.BS_data_section_SNR_filter = deepcopy(stg.BS_data_section) stg.BS_data_section_SNR_filter = deepcopy(stg.BS_data_section)
stg.SNR_data_average = np.divide( stg.SNR_data_average = np.divide(
(stg.BS_data_section_SNR_filter - stg.Noise_data[:, :, :stg.t.shape[0]])**2, (stg.BS_data_section_SNR_filter - stg.Noise_data[:, :, :stg.t.shape[1]])**2,
stg.Noise_data[:, :, :stg.t.shape[0]]**2) stg.Noise_data[:, :, :stg.t.shape[1]]**2)
for f in range(stg.freq.shape[0]): for f, _ in enumerate(stg.freq):
stg.BS_data_section_SNR_filter[np.where(stg.SNR_data_average[:, f, :] < self.spinbox_SNR_criterion.value())[0], stg.BS_data_section_SNR_filter[f,
f, np.where(stg.SNR_data_average[f, :, :] < self.spinbox_SNR_criterion.value())[0],
np.where(stg.SNR_data_average[:, f, :] < self.spinbox_SNR_criterion.value())[1]] \ np.where(stg.SNR_data_average[f, :, :] < self.spinbox_SNR_criterion.value())[1]] \
= np.nan = np.nan
elif stg.BS_data_section_averaged.size != 0: elif stg.BS_data_section_averaged.size != 0:
stg.BS_data_section_SNR_filter = deepcopy(stg.BS_data_section_averaged) stg.BS_data_section_SNR_filter = deepcopy(stg.BS_data_section_averaged)
stg.SNR_data_average = np.divide( stg.SNR_data_average = np.divide(
(stg.BS_data_section_SNR_filter - stg.Noise_data[:, :, :stg.t.shape[0]]) ** 2, (stg.BS_data_section_SNR_filter - stg.Noise_data[:, :, :stg.t.shape[1]]) ** 2,
stg.Noise_data[:, :, :stg.t.shape[0]] ** 2) stg.Noise_data[:, :, :stg.t.shape[1]] ** 2)
for f in range(stg.freq.shape[0]): for f in enumerate(stg.freq):
stg.BS_data_section_SNR_filter[ stg.BS_data_section_SNR_filter[
np.where(stg.SNR_data_average[:, f, :] < self.spinbox_SNR_criterion.value())[0], np.where(stg.SNR_data_average[f, :, :] < self.spinbox_SNR_criterion.value())[0],
f, f,
np.where(stg.SNR_data_average[:, f, :] < self.spinbox_SNR_criterion.value())[1]] \ np.where(stg.SNR_data_average[f, :, :] < self.spinbox_SNR_criterion.value())[1]] \
= np.nan = np.nan
self.update_plot_profile_position_on_transect() self.update_plot_profile_position_on_transect()
@ -895,21 +912,22 @@ class SignalProcessingTab(QWidget):
self.verticalLayout_groupbox_display_profile_position.addWidget(self.canvas_plot_profile_position_on_transect) self.verticalLayout_groupbox_display_profile_position.addWidget(self.canvas_plot_profile_position_on_transect)
# --- Plot transect with profile position --- # --- Plot transect with profile position ---
val_min = np.nanmin(stg.BS_data_section[:, stg.freq_bottom_detection, :]) val_min = np.nanmin(stg.BS_data_section[stg.freq_bottom_detection, :, :])
val_max = np.nanmax(stg.BS_data_section[:, stg.freq_bottom_detection, :]) val_max = np.nanmax(stg.BS_data_section[stg.freq_bottom_detection, :, :])
if val_min == 0: if val_min == 0:
val_min = 1e-5 val_min = 1e-5
self.axis_plot_profile_position_on_transect.pcolormesh( self.axis_plot_profile_position_on_transect.pcolormesh(
stg.t, -stg.r, stg.BS_data_section[:, stg.freq_bottom_detection, :], stg.t[stg.freq_bottom_detection, :], -stg.r[stg.freq_bottom_detection, :],
stg.BS_data_section[stg.freq_bottom_detection, :, :],
cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max)) cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
if stg.r_bottom.size != 0: if stg.r_bottom.size != 0:
self.axis_plot_profile_position_on_transect.plot( self.axis_plot_profile_position_on_transect.plot(
stg.t, -stg.r_bottom, color='black', linewidth=1, linestyle="solid") stg.t[stg.freq_bottom_detection, :], -stg.r_bottom, color='black', linewidth=1, linestyle="solid")
self.axis_plot_profile_position_on_transect.plot( self.axis_plot_profile_position_on_transect.plot(
stg.t[self.slider.value() - 1] * np.ones(stg.r.shape[0]), -stg.r, stg.t[stg.freq_bottom_detection, self.slider.value() - 1] * np.ones(stg.r.shape[1]), -stg.r[stg.freq_bottom_detection, :],
color='red', linestyle="solid", linewidth=2) color='red', linestyle="solid", linewidth=2)
self.axis_plot_profile_position_on_transect.set_xticks([]) self.axis_plot_profile_position_on_transect.set_xticks([])
@ -939,21 +957,24 @@ class SignalProcessingTab(QWidget):
self.axis_plot_profile_position_on_transect.cla() self.axis_plot_profile_position_on_transect.cla()
val_min = np.nanmin(stg.BS_data_section[:, self.combobox_frequency.currentIndex(), :]) val_min = np.nanmin(stg.BS_data_section[self.combobox_frequency.currentIndex(), :, :])
val_max = np.nanmax(stg.BS_data_section[:, self.combobox_frequency.currentIndex(), :]) val_max = np.nanmax(stg.BS_data_section[self.combobox_frequency.currentIndex(), :, :])
if val_min == 0: if val_min == 0:
val_min = 1e-5 val_min = 1e-5
self.axis_plot_profile_position_on_transect.pcolormesh( self.axis_plot_profile_position_on_transect.pcolormesh(
stg.t, -stg.r, stg.BS_data_section[:, self.combobox_frequency.currentIndex(), :], stg.t[self.combobox_frequency.currentIndex(), :], -stg.r[self.combobox_frequency.currentIndex(), :],
stg.BS_data_section[self.combobox_frequency.currentIndex(), :, :],
cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max)) cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
if stg.r_bottom.size != 0: if stg.r_bottom.size != 0:
self.axis_plot_profile_position_on_transect.plot(stg.t, -stg.r_bottom, self.axis_plot_profile_position_on_transect.plot(stg.t[self.combobox_frequency.currentIndex(), :],
-stg.r_bottom,
color='black', linewidth=1, linestyle="solid") color='black', linewidth=1, linestyle="solid")
self.axis_plot_profile_position_on_transect.plot( self.axis_plot_profile_position_on_transect.plot(
stg.t[self.slider.value()-1] * np.ones(stg.r.shape[0]), -stg.r, stg.t[self.combobox_frequency.currentIndex(), self.slider.value()-1] * np.ones(stg.r.shape[1]),
-stg.r[self.combobox_frequency.currentIndex(), :],
color='red', linestyle="solid", linewidth=2) color='red', linestyle="solid", linewidth=2)
self.axis_plot_profile_position_on_transect.set_xticks([]) self.axis_plot_profile_position_on_transect.set_xticks([])
@ -965,21 +986,24 @@ class SignalProcessingTab(QWidget):
self.axis_plot_profile_position_on_transect.cla() self.axis_plot_profile_position_on_transect.cla()
val_min = np.nanmin(stg.BS_data_section_averaged[:, self.combobox_frequency.currentIndex(), :]) val_min = np.nanmin(stg.BS_data_section_averaged[self.combobox_frequency.currentIndex(), :, :])
val_max = np.nanmax(stg.BS_data_section_averaged[:, self.combobox_frequency.currentIndex(), :]) val_max = np.nanmax(stg.BS_data_section_averaged[self.combobox_frequency.currentIndex(), :, :])
if val_min == 0: if val_min == 0:
val_min = 1e-5 val_min = 1e-5
self.axis_plot_profile_position_on_transect.pcolormesh( self.axis_plot_profile_position_on_transect.pcolormesh(
stg.t, -stg.r, stg.BS_data_section_averaged[:, self.combobox_frequency.currentIndex(), :], stg.t[self.combobox_frequency.currentIndex(), :], -stg.r[self.combobox_frequency.currentIndex(), :],
stg.BS_data_section_averaged[self.combobox_frequency.currentIndex(), :, :],
cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max)) cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
if stg.r_bottom.size != 0: if stg.r_bottom.size != 0:
self.axis_plot_profile_position_on_transect.plot(stg.t, -stg.r_bottom, self.axis_plot_profile_position_on_transect.plot(stg.t[self.combobox_frequency.currentIndex(), :],
-stg.r_bottom,
color='black', linewidth=1, linestyle="solid") color='black', linewidth=1, linestyle="solid")
self.axis_plot_profile_position_on_transect.plot( self.axis_plot_profile_position_on_transect.plot(
stg.t[self.slider.value() - 1] * np.ones(stg.r.shape[0]), -stg.r, stg.t[self.combobox_frequency.currentIndex(), self.slider.value() - 1] * np.ones(stg.r.shape[1]),
-stg.r[self.combobox_frequency.currentIndex(), :],
color='red', linestyle="solid", linewidth=2) color='red', linestyle="solid", linewidth=2)
self.axis_plot_profile_position_on_transect.set_xticks([]) self.axis_plot_profile_position_on_transect.set_xticks([])
@ -991,21 +1015,24 @@ class SignalProcessingTab(QWidget):
self.axis_plot_profile_position_on_transect.cla() self.axis_plot_profile_position_on_transect.cla()
val_min = np.nanmin(stg.BS_data_section_SNR_filter[:, self.combobox_frequency.currentIndex(), :]) val_min = np.nanmin(stg.BS_data_section_SNR_filter[self.combobox_frequency.currentIndex(), :, :])
val_max = np.nanmax(stg.BS_data_section_SNR_filter[:, self.combobox_frequency.currentIndex(), :]) val_max = np.nanmax(stg.BS_data_section_SNR_filter[self.combobox_frequency.currentIndex(), :, :])
if val_min == 0: if val_min == 0:
val_min = 1e-5 val_min = 1e-5
self.axis_plot_profile_position_on_transect.pcolormesh( self.axis_plot_profile_position_on_transect.pcolormesh(
stg.t, -stg.r, stg.BS_data_section_SNR_filter[:, self.combobox_frequency.currentIndex(), :], stg.t[self.combobox_frequency.currentIndex(), :], -stg.r[self.combobox_frequency.currentIndex(), :],
stg.BS_data_section_SNR_filter[self.combobox_frequency.currentIndex(), :, :],
cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max)) cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
if stg.r_bottom.size != 0: if stg.r_bottom.size != 0:
self.axis_plot_profile_position_on_transect.plot(stg.t, -stg.r_bottom, self.axis_plot_profile_position_on_transect.plot(stg.t[self.combobox_frequency.currentIndex(), :],
-stg.r_bottom,
color='black', linewidth=1, linestyle="solid") color='black', linewidth=1, linestyle="solid")
self.axis_plot_profile_position_on_transect.plot( self.axis_plot_profile_position_on_transect.plot(
stg.t[self.slider.value() - 1] * np.ones(stg.r.shape[0]), -stg.r, stg.t[self.combobox_frequency.currentIndex(), self.slider.value() - 1] * np.ones(stg.r.shape[1]),
-stg.r[self.combobox_frequency.currentIndex(), :],
color='red', linestyle="solid", linewidth=2) color='red', linestyle="solid", linewidth=2)
self.axis_plot_profile_position_on_transect.set_xticks([]) self.axis_plot_profile_position_on_transect.set_xticks([])
@ -1030,9 +1057,9 @@ class SignalProcessingTab(QWidget):
# self.scroll_profile.setAlignment(Qt.AlignCenter) # self.scroll_profile.setAlignment(Qt.AlignCenter)
# self.verticalLayout_groupbox_plot_profile.addWidget(self.scroll_profile) # self.verticalLayout_groupbox_plot_profile.addWidget(self.scroll_profile)
for f in range(stg.freq.shape[0]): for f, _ in enumerate(stg.freq):
self.axis_profile[f].cla() self.axis_profile[f].cla()
self.axis_profile[f].plot(stg.BS_data_section[:, f, self.slider.value() - 1], -stg.r, self.axis_profile[f].plot(stg.BS_data_section[f, :, self.slider.value() - 1], -stg.r[f, :],
linestyle='solid', color='k', linewidth=1) linestyle='solid', color='k', linewidth=1)
self.axis_profile[f].text(.95, .05, stg.freq_text[f], self.axis_profile[f].text(.95, .05, stg.freq_text[f],
fontsize=10, fontweight='bold', fontname="Ubuntu", fontsize=10, fontweight='bold', fontname="Ubuntu",
@ -1091,9 +1118,9 @@ class SignalProcessingTab(QWidget):
msgBox.exec() msgBox.exec()
else: else:
for f in range(stg.freq.shape[0]): for f, _ in enumerate(stg.freq):
self.axis_profile[f].cla() self.axis_profile[f].cla()
self.axis_profile[f].plot(stg.BS_data_section[:, f, self.slider.value() - 1], -stg.r, self.axis_profile[f].plot(stg.BS_data_section[f, :, self.slider.value() - 1], -stg.r[f, :],
linestyle='solid', color='k', linewidth=1) linestyle='solid', color='k', linewidth=1)
self.axis_profile[f].text(.95, .05, stg.freq_text[f], self.axis_profile[f].text(.95, .05, stg.freq_text[f],
fontsize=10, fontweight='bold', fontname="Ubuntu", fontsize=10, fontweight='bold', fontname="Ubuntu",
@ -1109,11 +1136,11 @@ class SignalProcessingTab(QWidget):
def plot_averaged_profile(self): def plot_averaged_profile(self):
for f in range(stg.freq.shape[0]): for f, _ in enumerate(stg.freq):
self.axis_averaged_profile[f].cla() self.axis_averaged_profile[f].cla()
self.axis_averaged_profile[f].plot(stg.BS_data_section_averaged[:, f, self.slider.value()-1], -stg.r, self.axis_averaged_profile[f].plot(stg.BS_data_section_averaged[f, :, self.slider.value()-1], -stg.r[f, :],
linestyle='solid', color='k', linewidth=1) linestyle='solid', color='k', linewidth=1)
self.axis_averaged_profile[f].set_ylim(-np.max(stg.r), np.min(stg.r)) self.axis_averaged_profile[f].set_ylim(-np.max(stg.r[f, :]), np.min(stg.r[f, :]))
self.axis_averaged_profile[f].text(.95, .05, stg.freq_text[f], self.axis_averaged_profile[f].text(.95, .05, stg.freq_text[f],
fontsize=10, fontweight='bold', fontname="Ubuntu", fontsize=10, fontweight='bold', fontname="Ubuntu",
fontstyle="normal", c="black", alpha=0.2, fontstyle="normal", c="black", alpha=0.2,
@ -1139,11 +1166,12 @@ class SignalProcessingTab(QWidget):
else: else:
if stg.BS_data_section_SNR_filter.size == 0: if stg.BS_data_section_SNR_filter.size == 0:
for f in range(stg.freq.shape[0]): for f, _ in enumerate(stg.freq):
self.axis_averaged_profile[f].cla() self.axis_averaged_profile[f].cla()
self.axis_averaged_profile[f].plot(stg.BS_data_section_averaged[:, f, self.slider.value() - 1], -stg.r, self.axis_averaged_profile[f].plot(stg.BS_data_section_averaged[f, :, self.slider.value() - 1],
linestyle='solid', color='k', linewidth=1) -stg.r[f, :],
self.axis_averaged_profile[f].set_ylim(-np.max(stg.r), np.min(stg.r)) linestyle='solid', color='k', linewidth=1)
self.axis_averaged_profile[f].set_ylim(-np.max(stg.r[f, :]), np.min(stg.r[f, :]))
self.axis_averaged_profile[f].text(.95, .05, stg.freq_text[f], self.axis_averaged_profile[f].text(.95, .05, stg.freq_text[f],
fontsize=10, fontweight='bold', fontname="Ubuntu", fontsize=10, fontweight='bold', fontname="Ubuntu",
fontstyle="normal", c="black", alpha=0.2, fontstyle="normal", c="black", alpha=0.2,
@ -1158,9 +1186,10 @@ class SignalProcessingTab(QWidget):
for f in range(stg.freq.shape[0]): for f in range(stg.freq.shape[0]):
self.axis_averaged_profile[f].cla() self.axis_averaged_profile[f].cla()
self.axis_averaged_profile[f].plot(stg.BS_data_section_SNR_filter[:, f, self.slider.value() - 1], -stg.r, self.axis_averaged_profile[f].plot(stg.BS_data_section_SNR_filter[f, :, self.slider.value() - 1],
-stg.r[f, :],
linestyle='solid', color='k', linewidth=1) linestyle='solid', color='k', linewidth=1)
self.axis_averaged_profile[f].set_ylim(-np.max(stg.r), np.min(stg.r)) self.axis_averaged_profile[f].set_ylim(-np.max(stg.r[f, :]), np.min(stg.r[f, :]))
self.axis_averaged_profile[f].text(.95, .05, stg.freq_text[f], self.axis_averaged_profile[f].text(.95, .05, stg.freq_text[f],
fontsize=10, fontweight='bold', fontname="Ubuntu", fontsize=10, fontweight='bold', fontname="Ubuntu",
fontstyle="normal", c="black", alpha=0.2, fontstyle="normal", c="black", alpha=0.2,