Acoustic inversion tab display results of the inversion computation for both, fine and sand sediments. The user can visualize the concentrations fields, plot vertical profiles of the concentrations and choose samples to compare measured SSC vs inverted SSC.

dev-brahim
brahim 2024-08-21 09:26:08 +02:00
parent d38a65f2c6
commit 66f62765a1
4 changed files with 2104 additions and 1443 deletions

View File

@ -2157,7 +2157,8 @@ class AcousticDataTab(QWidget):
stg.BS_raw_data.append(acoustic_data._BS_raw_data) stg.BS_raw_data.append(acoustic_data._BS_raw_data)
stg.BS_raw_data_reshape.append(acoustic_data.reshape_BS_raw_data()) stg.BS_raw_data_reshape.append(acoustic_data.reshape_BS_raw_data())
stg.depth.append(acoustic_data._r) stg.depth.append(acoustic_data._r)
stg.depth_2D.append(acoustic_data.compute_r_2D()) # stg.depth_2D.append(acoustic_data.compute_r_2D())
stg.depth_2D.append(np.array([]))
stg.depth_reshape.append(acoustic_data.reshape_r()) stg.depth_reshape.append(acoustic_data.reshape_r())
stg.time.append(acoustic_data._time) stg.time.append(acoustic_data._time)
stg.time_reshape.append(acoustic_data.reshape_t()) stg.time_reshape.append(acoustic_data.reshape_t())
@ -2225,6 +2226,16 @@ class AcousticDataTab(QWidget):
stg.BS_stream_bed_pre_process_average.append(np.array([])) stg.BS_stream_bed_pre_process_average.append(np.array([]))
stg.BS_stream_bed_pre_process_SNR_average.append(np.array([])) stg.BS_stream_bed_pre_process_SNR_average.append(np.array([]))
stg.frequencies_for_calibration.append([])
stg.frequency_for_inversion.append([])
stg.fine_sample_position.append([])
stg.sand_sample_position.append([])
stg.VBI_cross_section.append(np.array([]))
stg.SSC_fine.append(np.array([]))
stg.SSC_sand.append(np.array([]))
# if self.fileListWidget.count() == 0: # if self.fileListWidget.count() == 0:
# #
# stg.ABS_name = [self.combobox_ABS_system_choice.currentText()] # stg.ABS_name = [self.combobox_ABS_system_choice.currentText()]

File diff suppressed because it is too large Load Diff

View File

@ -277,12 +277,18 @@ class SedimentCalibrationTab(QWidget):
def plot_acoustic_recording(self): def plot_acoustic_recording(self):
# --- Record frequencies for calibration --- # --- Record frequencies for calibration ---
stg.frequencies_for_calibration.append((stg.freq[self.combobox_acoustic_data_choice.currentIndex()][ stg.frequencies_for_calibration[self.combobox_acoustic_data_choice.currentIndex()].clear()
self.combobox_freq1.currentIndex()], (stg.frequencies_for_calibration[self.combobox_acoustic_data_choice.currentIndex()].
self.combobox_freq1.currentIndex())) append((stg.freq[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq1.currentIndex()],
stg.frequencies_for_calibration.append((stg.freq[self.combobox_acoustic_data_choice.currentIndex()][ self.combobox_freq1.currentIndex())))
self.combobox_freq2.currentIndex()], (stg.frequencies_for_calibration[self.combobox_acoustic_data_choice.currentIndex()].
self.combobox_freq2.currentIndex())) append((stg.freq[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq2.currentIndex()],
self.combobox_freq2.currentIndex())))
stg.frequency_for_inversion[self.combobox_acoustic_data_choice.currentIndex()].clear()
stg.frequency_for_inversion[self.combobox_acoustic_data_choice.currentIndex()].append((
stg.freq[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq2.currentIndex()],
self.combobox_freq2.currentIndex()))
# --- Plot acoustic data recording --- # --- Plot acoustic data recording ---
self.verticalLayout_groupbox_acoustic_data.removeWidget(self.canvas_BS) self.verticalLayout_groupbox_acoustic_data.removeWidget(self.canvas_BS)
@ -705,12 +711,14 @@ class SedimentCalibrationTab(QWidget):
# --- Compute J --- # --- Compute J ---
if stg.BS_stream_bed[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,): if stg.BS_stream_bed[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
depth_2D = np.zeros(stg.BS_stream_bed[self.combobox_acoustic_data_choice.currentIndex()].shape) stg.depth_2D[self.combobox_acoustic_data_choice.currentIndex()] = (
np.zeros(stg.BS_stream_bed[self.combobox_acoustic_data_choice.currentIndex()].shape))
for f, _ in enumerate(stg.freq[self.combobox_acoustic_data_choice.currentIndex()]): for f, _ in enumerate(stg.freq[self.combobox_acoustic_data_choice.currentIndex()]):
depth_2D[f, :, :] = np.repeat(np.transpose(stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()] stg.depth_2D[self.combobox_acoustic_data_choice.currentIndex()][f, :, :] = (
np.repeat(np.transpose(stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()]
[self.combobox_freq1.currentIndex()])[:, np.newaxis], [self.combobox_freq1.currentIndex()])[:, np.newaxis],
stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1], stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
axis=1) axis=1))
print("kt cor ", stg.kt_corrected) print("kt cor ", stg.kt_corrected)
print("kt read", stg.kt_read) print("kt read", stg.kt_read)
@ -736,20 +744,20 @@ class SedimentCalibrationTab(QWidget):
J_cross_section_freq1 = self.inv_hc.j_cross_section( J_cross_section_freq1 = self.inv_hc.j_cross_section(
BS=stg.BS_stream_bed[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq1.currentIndex(), :, :], BS=stg.BS_stream_bed[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq1.currentIndex(), :, :],
r2D=depth_2D[self.combobox_freq1.currentIndex(), :, :], r2D=stg.depth_2D[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq1.currentIndex(), :, :],
kt=kt3D[self.combobox_freq1.currentIndex(), :, :]) kt=kt3D[self.combobox_freq1.currentIndex(), :, :])
J_cross_section_freq2 = self.inv_hc.j_cross_section( J_cross_section_freq2 = self.inv_hc.j_cross_section(
BS=stg.BS_stream_bed[self.combobox_acoustic_data_choice.currentIndex()][ BS=stg.BS_stream_bed[self.combobox_acoustic_data_choice.currentIndex()][
self.combobox_freq2.currentIndex(), :, :], self.combobox_freq2.currentIndex(), :, :],
r2D=depth_2D[self.combobox_freq2.currentIndex(), :, :], r2D=stg.depth_2D[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq2.currentIndex(), :, :],
kt=kt3D[self.combobox_freq2.currentIndex(), :, :]) kt=kt3D[self.combobox_freq2.currentIndex(), :, :])
elif stg.BS_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,): elif stg.BS_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
depth_2D = np.zeros(stg.BS_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape) stg.depth_2D[self.combobox_acoustic_data_choice.currentIndex()] = np.zeros(stg.BS_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape)
for f, _ in enumerate(stg.freq[self.combobox_acoustic_data_choice.currentIndex()]): for f, _ in enumerate(stg.freq[self.combobox_acoustic_data_choice.currentIndex()]):
depth_2D[f, :, :] = np.repeat( stg.depth_2D[self.combobox_acoustic_data_choice.currentIndex()][f, :, :] = np.repeat(
np.transpose(stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()] np.transpose(stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()]
[self.combobox_freq1.currentIndex()])[:, np.newaxis], [self.combobox_freq1.currentIndex()])[:, np.newaxis],
stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1], stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
@ -771,20 +779,20 @@ class SedimentCalibrationTab(QWidget):
J_cross_section_freq1 = self.inv_hc.j_cross_section( J_cross_section_freq1 = self.inv_hc.j_cross_section(
BS=stg.BS_cross_section[self.combobox_acoustic_data_choice.currentIndex()][ BS=stg.BS_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
self.combobox_freq1.currentIndex(), :, :], self.combobox_freq1.currentIndex(), :, :],
r2D=depth_2D[self.combobox_freq1.currentIndex(), :, :], r2D=stg.depth_2D[self.combobox_freq1.currentIndex(), :, :][self.combobox_freq1.currentIndex(), :, :],
kt=kt3D[self.combobox_freq1.currentIndex(), :, :]) kt=kt3D[self.combobox_freq1.currentIndex(), :, :])
J_cross_section_freq2 = self.inv_hc.j_cross_section( J_cross_section_freq2 = self.inv_hc.j_cross_section(
BS=stg.BS_cross_section[self.combobox_acoustic_data_choice.currentIndex()][ BS=stg.BS_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
self.combobox_freq2.currentIndex(), :, :], self.combobox_freq2.currentIndex(), :, :],
r2D=depth_2D[self.combobox_freq2.currentIndex(), :, :], r2D=stg.depth_2D[self.combobox_freq2.currentIndex(), :, :][self.combobox_freq2.currentIndex(), :, :],
kt=kt3D[self.combobox_freq2.currentIndex(), :, :]) kt=kt3D[self.combobox_freq2.currentIndex(), :, :])
else: else:
depth_2D = np.zeros(stg.BS_raw_data[self.combobox_acoustic_data_choice.currentIndex()].shape) stg.depth_2D = np.zeros(stg.BS_raw_data[self.combobox_acoustic_data_choice.currentIndex()].shape)
for f, _ in enumerate(stg.freq[self.combobox_acoustic_data_choice.currentIndex()]): for f, _ in enumerate(stg.freq[self.combobox_acoustic_data_choice.currentIndex()]):
depth_2D[f, :, :] = np.repeat( stg.depth_2D[f, :, :] = np.repeat(
np.transpose(stg.depth[self.combobox_acoustic_data_choice.currentIndex()] np.transpose(stg.depth[self.combobox_acoustic_data_choice.currentIndex()]
[self.combobox_freq1.currentIndex()])[:, np.newaxis], [self.combobox_freq1.currentIndex()])[:, np.newaxis],
stg.time[self.combobox_acoustic_data_choice.currentIndex()].shape[1], stg.time[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
@ -806,17 +814,15 @@ class SedimentCalibrationTab(QWidget):
J_cross_section_freq1 = self.inv_hc.j_cross_section( J_cross_section_freq1 = self.inv_hc.j_cross_section(
BS=stg.BS_raw_data[self.combobox_acoustic_data_choice.currentIndex()][ BS=stg.BS_raw_data[self.combobox_acoustic_data_choice.currentIndex()][
self.combobox_freq1.currentIndex(), :, :], self.combobox_freq1.currentIndex(), :, :],
r2D=depth_2D[self.combobox_freq1.currentIndex(), :, :], r2D=stg.depth_2D[self.combobox_freq1.currentIndex(), :, :],
kt=kt3D[self.combobox_freq1.currentIndex(), :, :]) kt=kt3D[self.combobox_freq1.currentIndex(), :, :])
J_cross_section_freq2 = self.inv_hc.j_cross_section( J_cross_section_freq2 = self.inv_hc.j_cross_section(
BS=stg.BS_raw_data[self.combobox_acoustic_data_choice.currentIndex()][ BS=stg.BS_raw_data[self.combobox_acoustic_data_choice.currentIndex()][
self.combobox_freq2.currentIndex(), :, :], self.combobox_freq2.currentIndex(), :, :],
r2D=depth_2D[self.combobox_freq2.currentIndex(), :, :], r2D=stg.depth_2D[self.combobox_freq2.currentIndex(), :, :],
kt=kt3D[self.combobox_freq2.currentIndex(), :, :]) kt=kt3D[self.combobox_freq2.currentIndex(), :, :])
stg.depth_2D = depth_2D
stg.J_cross_section.append(J_cross_section_freq1) stg.J_cross_section.append(J_cross_section_freq1)
stg.J_cross_section.append(J_cross_section_freq2) stg.J_cross_section.append(J_cross_section_freq2)
@ -909,3 +915,5 @@ class SedimentCalibrationTab(QWidget):
self.spinbox_zeta_freq2.clear() self.spinbox_zeta_freq2.clear()
self.spinbox_zeta_freq2.setValue(zeta_freq2) self.spinbox_zeta_freq2.setValue(zeta_freq2)

View File

@ -153,6 +153,9 @@ sand_sample_target_indice = []
Ctot_fine_per_cent = [] Ctot_fine_per_cent = []
Ctot_sand_per_cent = [] Ctot_sand_per_cent = []
fine_sample_position = []
sand_sample_position = []
# --- Acoustic inversion method --- # --- Acoustic inversion method ---
temperature = [] temperature = []
@ -164,8 +167,8 @@ water_velocity = []
# kt_corrected_3D = np.array([]) # kt_corrected_3D = np.array([])
frequencies_to_compute_VBI = np.array([]) frequencies_to_compute_VBI = np.array([])
VBI_cross_section = np.array([]) VBI_cross_section = []
VBI_stream_bed = np.array([[[]]]) # VBI_stream_bed = np.array([[[]]])
# --- Sediment Calibration # --- Sediment Calibration
frequencies_for_calibration = [] frequencies_for_calibration = []
@ -183,8 +186,8 @@ J_cross_section = []
frequency_for_inversion = [] frequency_for_inversion = []
SSC_fine = np.array([[]]) SSC_fine = []
SSC_sand = np.array([[]]) SSC_sand = []
# --- Save study --- # --- Save study ---