diff --git a/Model/create_table_for_save_as.py b/Model/create_table_for_save_as.py index eeedb82..e7e8168 100644 --- a/Model/create_table_for_save_as.py +++ b/Model/create_table_for_save_as.py @@ -389,10 +389,6 @@ class CreateTableForSaveAs: ) ) - logger.debug(f"stg.ind_bottom: {stg.ind_bottom[i]}") - logger.debug(np.array([stg.ind_bottom[i]]), - np.array(stg.ind_bottom[i]).shape) - # Commit the transaction after executing INSERT. cnx.commit() @@ -446,7 +442,7 @@ class CreateTableForSaveAs: cur.execute(self.create_SedimentsFile) - if stg.path_fine != "" and path_sand != "": + if stg.path_fine != "" and stg.path_sand != "": cur.execute( """ INSERT into SedimentsFile( diff --git a/View/acoustic_inversion_tab.py b/View/acoustic_inversion_tab.py index 38bc3e5..f702ede 100644 --- a/View/acoustic_inversion_tab.py +++ b/View/acoustic_inversion_tab.py @@ -20,16 +20,11 @@ # -*- coding: utf-8 -*- - -import pandas as pd -from PyQt5.QtWidgets import (QWidget, QVBoxLayout, QHBoxLayout, QGroupBox, QComboBox, - QLabel, QPushButton, QSpacerItem, - QSlider, QLineEdit, QMessageBox, QFileDialog) - -from PyQt5.QtCore import QCoreApplication, Qt -from PyQt5.QtGui import QIcon, QPixmap - +import os import numpy as np +import pandas as pd + +from copy import deepcopy import matplotlib.pyplot as plt @@ -37,9 +32,14 @@ from matplotlib.colors import LogNorm from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolBar -from os import chdir +from PyQt5.QtWidgets import ( + QWidget, QVBoxLayout, QHBoxLayout, QGroupBox, QComboBox, + QLabel, QPushButton, QSpacerItem, QSlider, QLineEdit, + QMessageBox, QFileDialog +) -from copy import deepcopy +from PyQt5.QtCore import QCoreApplication, Qt +from PyQt5.QtGui import QIcon, QPixmap from View.checkable_combobox import CheckableComboBox @@ -1671,96 +1671,81 @@ class AcousticInversionTab(QWidget): self.figure_measured_vs_inverted_sand.canvas.draw_idle() def save_result_in_excel_file(self): - if self.combobox_acoustic_data_choice.count() > 0: - name = QFileDialog.getSaveFileName( - caption="Save As - Inversion results", directory="", filter="Excel Files (*.xlsx)", - options=QFileDialog.DontUseNativeDialog) + caption="Save As - Inversion results", + directory="", + filter="Excel Files (*.xlsx)", + options=QFileDialog.DontUseNativeDialog + ) if name[0]: - dirname = "/".join(name[0].split("/")[:-1]) + "/" - filename = name[0].split("/")[-1] - chdir(dirname) + dirname = os.path.dirname(name[0]) + filename = os.path.basename(name[0]) + os.chdir(dirname) + + results = [] for k in range(self.combobox_acoustic_data_choice.count()): - if stg.time_cross_section[k].shape != (0,): - - if stg.depth_cross_section[k].shape != (0,): - - t = np.repeat(stg.time_cross_section[k][stg.frequency_for_inversion[1]], - stg.depth_cross_section[k].shape[1]) - - r = np.zeros((stg.depth_cross_section[k].shape[1] *stg.time_cross_section[k].shape[1],1)) - - for i in range(stg.time_cross_section[k].shape[1]): - for j in range(stg.depth_cross_section[k].shape[1]): - r[i * stg.depth_cross_section[k].shape[1] + j] = ( - stg.depth_cross_section[k][int(stg.frequency_for_inversion[1]), j]) - - if stg.SSC_fine[k].shape == (0,): - stg.SSC_fine[k] = np.zeros(r.shape[0]) - if stg.SSC_sand[k].shape == (0,): - stg.SSC_sand[k] = np.zeros(r.shape[0]) - - else: - - t = np.repeat(stg.time_cross_section[k][stg.frequency_for_inversion[1]], stg.depth[k].shape[1]) - - r = np.zeros((stg.depth[k].shape[1] * stg.time_cross_section[k].shape[1], 1)) - for i in range(stg.time_cross_section[k].shape[1]): - for j in range(stg.depth[k].shape[1]): - r[i * stg.depth[k].shape[1] + j] = ( - stg.depth[k][int(stg.frequency_for_inversion[1]), j]) - - if stg.SSC_fine[k].shape == (0,): - stg.SSC_fine[k] = np.zeros(r.shape[0]) - if stg.SSC_sand[k].shape == (0,): - stg.SSC_sand[k] = np.zeros(r.shape[0]) - + time_data = stg.time_cross_section else: + time_data = stg.time - if stg.depth_cross_section[k].shape != (0,): - - t = np.repeat(stg.time[k][stg.frequency_for_inversion[1]], stg.depth_cross_section[k].shape[1]) - - r = np.zeros((stg.depth_cross_section[k].shape[1] * stg.time[k].shape[1], 1)) - for i in range(stg.time[k].shape[1]): - for j in range(stg.depth_cross_section[k].shape[1]): - r[i * stg.depth_cross_section[k].shape[1] + j] = ( - stg.depth_cross_section[k][int(stg.frequency_for_inversion[1]), j]) - - if stg.SSC_fine[k].shape == (0,): - stg.SSC_fine[k] = np.zeros(r.shape[0]) - if stg.SSC_sand[k].shape == (0,): - stg.SSC_sand[k] = np.zeros(r.shape[0]) - - else: - - t = np.repeat(stg.time[k][stg.frequency_for_inversion[1]], stg.depth[k].shape[1]) - - r = np.zeros(stg.depth[k].shape[1] * stg.time[k].shape[1]) - - for i in range(stg.time[k].shape[1]): - for j in range(stg.depth[k].shape[1]): - r[i * stg.depth[k].shape[1] + j] = ( - stg.depth[k][int(stg.frequency_for_inversion[1]), j]) - - if stg.SSC_fine[k].shape == (0,): - stg.SSC_fine[k] = np.zeros(r.shape[0]) - if stg.SSC_sand[k].shape == (0,): - stg.SSC_sand[k] = np.zeros(r.shape[0]) - - exec("result_" + str(k) + "= pd.DataFrame({'Time (sec)': t," + - "'Depth (m)': r," + - "'SSC_fine (g/L)': stg.SSC_fine[" + str(k) + "].reshape(t.shape[0])," + - "'SSC_sand (g/L)': stg.SSC_sand[" + str(k) + "].reshape(t.shape[0])})") + if stg.depth_cross_section[k].shape != (0,): + depth_data = stg.depth_cross_section + else: + depth_data = stg.depth + t = np.repeat( + time_data[k][stg.frequency_for_inversion[1]], + depth_data[k].shape[1] + ) - with pd.ExcelWriter(dirname + filename + '.xlsx') as writer: + r = np.zeros( + depth_data[k].shape[1] * time_data[k].shape[1] + ) + + for i in range(time_data[k].shape[1]): + for j in range(depth_data[k].shape[1]): + r_id = i * depth_data[k].shape[1] + j + + r[r_id] = ( + depth_data[k][ + int(stg.frequency_for_inversion[1]), j + ] + ) + + if stg.SSC_fine[k].shape == (0,): + stg.SSC_fine[k] = np.zeros(r.shape[0]) + if stg.SSC_sand[k].shape == (0,): + stg.SSC_sand[k] = np.zeros(r.shape[0]) + + results.append( + pd.DataFrame( + { + 'Time (sec)': list(t), + 'Depth (m)': list(r), + 'SSC_fine (g/L)': list( + stg.SSC_fine[k].reshape(t.shape[0]) + ), + 'SSC_sand (g/L)': list( + stg.SSC_sand[k].reshape(t.shape[0]) + ), + } + ) + ) + + if os.path.splitext(filename)[1] != ".xlsx": + filename += ".xlsx" + + with pd.ExcelWriter( + os.path.join(dirname, filename) + ) as writer: for k in range(self.combobox_acoustic_data_choice.count()): - eval("result_" + str(k) + ".to_excel(writer, index=False, " + - "engine='xlsxwriter', na_rep='NA', " + - "sheet_name=stg.data_preprocessed[" + str(k) + "])") + results[k].to_excel( + writer, index=False, + engine='xlsxwriter', na_rep='NA', + sheet_name=stg.data_preprocessed[k], + ) diff --git a/View/mainwindow.py b/View/mainwindow.py index d6b7c38..209bc3c 100644 --- a/View/mainwindow.py +++ b/View/mainwindow.py @@ -268,7 +268,10 @@ class Ui_MainWindow(object): ) def save(self): - UpdateTableForSave() + if stg.dirname_save_as: + UpdateTableForSave() + else: + self.save_as() def open(self): reader = ReadTableForOpen() diff --git a/View/sediment_calibration_tab.py b/View/sediment_calibration_tab.py index f6bea34..be3c96a 100644 --- a/View/sediment_calibration_tab.py +++ b/View/sediment_calibration_tab.py @@ -1716,14 +1716,18 @@ class SedimentCalibrationTab(QWidget): self.animaiton_groupbox_compute.start() def import_calibration_file(self): - filename = QFileDialog.getOpenFileName( self, "Open calibration", - [stg.path_calibration_file if stg.path_calibration_file else - stg.path_BS_raw_data[ - -1] if self.combobox_acoustic_data_choice.count() > 0 else ""][0], + [ + stg.path_calibration_file + if stg.path_calibration_file + else stg.path_BS_raw_data[-1] + if self.combobox_acoustic_data_choice.count() > 0 + else "" + ][0], "Calibration file (*.xls, *.ods, *csv)", - options=QFileDialog.DontUseNativeDialog) + options=QFileDialog.DontUseNativeDialog + ) dir_name = os.path.dirname(filename[0]) name = os.path.basename(filename[0]) @@ -1736,114 +1740,189 @@ class SedimentCalibrationTab(QWidget): self.lineEdit_import_calibration.setToolTip(dir_name) + self.compute_depth_2D() self.read_calibration_file_and_fill_parameter() def update_label_freq1_for_calibration(self): self.label_freq1.clear() - self.label_freq1.setText(str(self.combobox_freq1.currentText())) + self.label_freq1.setText( + str(self.combobox_freq1.currentText()) + ) def update_label_freq2_for_calibration(self): self.label_freq2.clear() - self.label_freq2.setText(self.combobox_freq2.currentText()) + self.label_freq2.setText( + self.combobox_freq2.currentText() + ) def update_label_kt_value_for_calibration(self): + print("self.combobox_freq1.currentIndex() ", + self.combobox_freq1.currentIndex(), + self.combobox_freq1.currentText()) + + freq_1 = self.combobox_freq1.currentIndex() + freq_2 = self.combobox_freq2.currentIndex() + self.label_kt_freq1.clear() - print("self.combobox_freq1.currentIndex() ", self.combobox_freq1.currentIndex(), self.combobox_freq1.currentText()) - if stg.kt_corrected[self.combobox_freq1.currentIndex()] != stg.kt_read[self.combobox_freq1.currentIndex()]: - self.label_kt_freq1.setText(str('%.4f' % stg.kt_corrected[self.combobox_freq1.currentIndex()])) + if stg.kt_corrected[freq_1] != stg.kt_read[freq_1]: + self.label_kt_freq1.setText( + str('%.4f' % stg.kt_corrected[freq_1]) + ) else: - self.label_kt_freq1.setText(str('%.4f' % stg.kt_read[self.combobox_freq1.currentIndex()])) + self.label_kt_freq1.setText( + str('%.4f' % stg.kt_read[freq_1]) + ) self.label_kt_freq2.clear() - if stg.kt_corrected[self.combobox_freq2.currentIndex()] != stg.kt_read[self.combobox_freq2.currentIndex()]: - self.label_kt_freq2.setText(str('%.4f' % stg.kt_corrected[self.combobox_freq2.currentIndex()])) + if stg.kt_corrected[freq_2] != stg.kt_read[freq_2]: + self.label_kt_freq2.setText( + str('%.4f' % stg.kt_corrected[freq_2]) + ) else: - self.label_kt_freq2.setText(str('%.4f' % stg.kt_read[self.combobox_freq2.currentIndex()])) + self.label_kt_freq2.setText( + str('%.4f' % stg.kt_read[freq_2]) + ) def read_calibration_file_and_fill_parameter(self): if self.combobox_acoustic_data_choice.count() == 0: - msgBox = QMessageBox() msgBox.setWindowTitle("Calibration import error") msgBox.setIconPixmap( - QPixmap(self._path_icon("no_approved.png")).scaledToHeight(32, Qt.SmoothTransformation)) + QPixmap( + self._path_icon("no_approved.png") + ).scaledToHeight(32, Qt.SmoothTransformation) + ) msgBox.setText("Update data before importing calibration") msgBox.setStandardButtons(QMessageBox.Ok) msgBox.exec() - else: - # --- Read calibration file --- - data = pd.read_csv(stg.path_calibration_file + "/" + stg.filename_calibration_file, header=0, index_col=0) + data = pd.read_csv( + os.path.join( + stg.path_calibration_file, + stg.filename_calibration_file + ), + header=0, index_col=0 + ) # --- Fill spinboxes of calibration parameter --- self.label_temperature.clear() - self.label_temperature.setText("T = " + str(stg.temperature) + " °C") + self.label_temperature.setText( + "T = " + str(stg.temperature) + " °C" + ) self.label_freq1.clear() self.label_freq1.setText(data.columns[0]) - index_freq1 = np.where(np.asarray(stg.freq_text[self.combobox_acoustic_data_choice.currentIndex()]) == - data.columns[0])[0][0] + data_id = self.combobox_acoustic_data_choice.currentIndex() + + index_freq1 = np.where( + np.asarray( + stg.freq_text[data_id] + ) == data.columns[0] + )[0][0] + stg.frequencies_for_calibration.clear() - stg.frequencies_for_calibration.append((stg.freq[self.combobox_acoustic_data_choice.currentIndex()][ - index_freq1], - index_freq1)) + stg.frequencies_for_calibration.append( + ( + stg.freq[data_id][index_freq1], + index_freq1 + ) + ) self.label_freq2.clear() self.label_freq2.setText(data.columns[1]) - index_freq2 = np.where(np.asarray(stg.freq_text[self.combobox_acoustic_data_choice.currentIndex()]) == - data.columns[1])[0][0] - stg.frequencies_for_calibration.append((stg.freq[self.combobox_acoustic_data_choice.currentIndex()][ - index_freq2], - index_freq2)) + index_freq2 = np.where( + np.asarray( + stg.freq_text[data_id] + ) == data.columns[1] + )[0][0] + + stg.frequencies_for_calibration.append( + ( + stg.freq[data_id][index_freq2], + index_freq2 + ) + ) stg.frequency_for_inversion = tuple() - stg.frequency_for_inversion = (stg.freq[self.combobox_acoustic_data_choice.currentIndex()][index_freq2], - index_freq2) + stg.frequency_for_inversion = ( + stg.freq[data_id][index_freq2], + index_freq2 + ) self.lineEdit_ks_freq1.clear() - self.lineEdit_ks_freq1.setText(str("%.5f" % float(data.iloc[0][0]))) + self.lineEdit_ks_freq1.setText( + str("%.5f" % float(data.iloc[0][0])) + ) self.lineEdit_ks_freq2.clear() - self.lineEdit_ks_freq2.setText(str("%.5f" % float(data.iloc[0][1]))) + self.lineEdit_ks_freq2.setText( + str("%.5f" % float(data.iloc[0][1])) + ) stg.ks.clear() - stg.ks = [float(self.lineEdit_ks_freq1.text()), float(self.lineEdit_ks_freq2.text())] + stg.ks = [ + float(self.lineEdit_ks_freq1.text()), + float(self.lineEdit_ks_freq2.text()) + ] self.lineEdit_sv_freq1.clear() - self.lineEdit_sv_freq1.setText(str("%.5f" % float(data.iloc[1][0]))) + self.lineEdit_sv_freq1.setText( + str("%.5f" % float(data.iloc[1][0])) + ) self.lineEdit_sv_freq2.clear() - self.lineEdit_sv_freq2.setText(str("%.5f" % float(data.iloc[1][1]))) + self.lineEdit_sv_freq2.setText( + str("%.5f" % float(data.iloc[1][1])) + ) stg.sv.clear() - stg.sv = [float(self.lineEdit_sv_freq1.text()), float(self.lineEdit_sv_freq2.text())] + stg.sv = [ + float(self.lineEdit_sv_freq1.text()), + float(self.lineEdit_sv_freq2.text()) + ] self.lineEdit_X.clear() - self.lineEdit_X.setText(str("%.2f" % float(data.iloc[2][0]))) + self.lineEdit_X.setText( + str("%.2f" % float(data.iloc[2][0])) + ) stg.X_exponent.clear() stg.X_exponent.append(float(self.lineEdit_X.text())) self.lineEdit_alphas_freq1.clear() - self.lineEdit_alphas_freq1.setText(str("%.5f" % float(data.iloc[3][0]))) + self.lineEdit_alphas_freq1.setText( + str("%.5f" % float(data.iloc[3][0])) + ) self.lineEdit_alphas_freq2.clear() - self.lineEdit_alphas_freq2.setText(str("%.5f" % float(data.iloc[3][1]))) + self.lineEdit_alphas_freq2.setText( + str("%.5f" % float(data.iloc[3][1])) + ) stg.alpha_s.clear() - stg.alpha_s = [float(self.lineEdit_alphas_freq1.text()), float(self.lineEdit_alphas_freq2.text())] + stg.alpha_s = [ + float(self.lineEdit_alphas_freq1.text()), + float(self.lineEdit_alphas_freq2.text()) + ] self.lineEdit_zeta_freq1.clear() - self.lineEdit_zeta_freq1.setText(str("%.5f" % float(data.iloc[4][0]))) + self.lineEdit_zeta_freq1.setText( + str("%.5f" % float(data.iloc[4][0])) + ) self.lineEdit_zeta_freq2.clear() - self.lineEdit_zeta_freq2.setText(str("%.5f" % float(data.iloc[4][1]))) + self.lineEdit_zeta_freq2.setText( + str("%.5f" % float(data.iloc[4][1])) + ) stg.zeta.clear() - stg.zeta = [float(self.lineEdit_zeta_freq1.text()), float(self.lineEdit_zeta_freq2.text())] + stg.zeta = [ + float(self.lineEdit_zeta_freq1.text()), + float(self.lineEdit_zeta_freq2.text()) + ] self.compute_kt2D_kt3D() self.compute_J_cross_section() @@ -1931,8 +2010,8 @@ class SedimentCalibrationTab(QWidget): self.compute_zeta() def compute_ks(self): + data_id = self.combobox_acoustic_data_choice.currentIndex() - # --- Compute ks --- psd_number_of_particles = ( self.inv_hc.compute_particle_size_distribution_in_number_of_particles( num_sample=stg.sand_sample_target[0][1], @@ -1943,17 +2022,13 @@ class SedimentCalibrationTab(QWidget): ks_freq1 = self.inv_hc.ks( proba_num=psd_number_of_particles, - freq=stg.freq[self.combobox_acoustic_data_choice.currentIndex()][ - self.combobox_freq1.currentIndex() - ], + freq=stg.freq[data_id][self.combobox_freq1.currentIndex()], C=stg.water_velocity ) ks_freq2 = self.inv_hc.ks( proba_num=psd_number_of_particles, - freq=stg.freq[self.combobox_acoustic_data_choice.currentIndex()][ - self.combobox_freq2.currentIndex() - ], + freq=stg.freq[data_id][self.combobox_freq2.currentIndex()], C=stg.water_velocity ) @@ -1961,12 +2036,12 @@ class SedimentCalibrationTab(QWidget): logger.debug( "ks for frequency of " - + f"{stg.freq[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq1.currentIndex()]} : " + + f"{stg.freq[data_id][self.combobox_freq1.currentIndex()]} : " + f"{ks_freq1} m/kg^0.5 \n" ) logger.debug( "ks for frequency of " - + f"{stg.freq[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq2.currentIndex()]} : " + + + f"{stg.freq[data_id][self.combobox_freq2.currentIndex()]} : " + f"{ks_freq2} m/kg^0.5" ) @@ -1977,13 +2052,21 @@ class SedimentCalibrationTab(QWidget): self.lineEdit_ks_freq2.setText(str("%.5f" % ks_freq2)) def compute_sv(self): + data_id = self.combobox_acoustic_data_choice.currentIndex() + sv_freq1 = self.inv_hc.sv(ks=stg.ks[0], M_sand=stg.Ctot_sand[stg.sand_sample_target[0][1]]) sv_freq2 = self.inv_hc.sv(ks=stg.ks[1], M_sand=stg.Ctot_sand[stg.sand_sample_target[0][1]]) stg.sv = [sv_freq1, sv_freq2] - print(f"sv for frequency of {stg.freq[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq1.currentIndex()]} : {sv_freq1:.8f} /m \n") - print(f"sv for frequency of {stg.freq[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq2.currentIndex()]} : {sv_freq2:.8f} /m") + print( + f"sv for frequency of {stg.freq[data_id][self.combobox_freq1.currentIndex()]}" + + f" : {sv_freq1:.8f} /m \n" + ) + print( + f"sv for frequency of {stg.freq[data_id][self.combobox_freq2.currentIndex()]}" + + f" : {sv_freq2:.8f} /m" + ) self.lineEdit_sv_freq1.clear() self.lineEdit_sv_freq1.setText(str("%.5f" % sv_freq1)) @@ -1992,9 +2075,13 @@ class SedimentCalibrationTab(QWidget): self.lineEdit_sv_freq2.setText(str("%.5f" % sv_freq2)) def compute_X(self): - X_exponent = self.inv_hc.X_exponent(freq1=stg.freq[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq1.currentIndex()], - freq2=stg.freq[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq2.currentIndex()], - sv_freq1=stg.sv[0], sv_freq2=stg.sv[1]) + data_id = self.combobox_acoustic_data_choice.currentIndex() + + X_exponent = self.inv_hc.X_exponent( + freq1=stg.freq[data_id][self.combobox_freq1.currentIndex()], + freq2=stg.freq[data_id][self.combobox_freq2.currentIndex()], + sv_freq1=stg.sv[0], sv_freq2=stg.sv[1] + ) stg.X_exponent.clear() stg.X_exponent.append(X_exponent) @@ -2037,190 +2124,89 @@ class SedimentCalibrationTab(QWidget): ) def compute_J_cross_section(self): - for i in range(self.combobox_acoustic_data_choice.count()): + lst_bs_data = [ + stg.BS_stream_bed_pre_process_average, + stg.BS_stream_bed_pre_process_SNR, + stg.BS_stream_bed, + stg.BS_cross_section_pre_process_average, + stg.BS_cross_section_pre_process_SNR, + stg.BS_cross_section, + stg.BS_raw_data_pre_process_average, + stg.BS_raw_data_pre_process_SNR, + stg.BS_raw_data + ] + for i in range(self.combobox_acoustic_data_choice.count()): J_cross_section_freq1 = np.array([]) J_cross_section_freq2 = np.array([]) - # --- Compute J --- - if stg.BS_stream_bed_pre_process_average[i].shape != (0,): + for data in lst_bs_data: + if data[i].shape != (0,): + bs_data = data + break - J_cross_section_freq1 = self.inv_hc.j_cross_section( - BS=stg.BS_stream_bed_pre_process_average[i][ - stg.frequencies_for_calibration[0][1], :, :], - r2D=stg.depth_2D[i][stg.frequencies_for_calibration[0][1], - :, :], - kt=stg.kt3D[i][stg.frequencies_for_calibration[0][1], :, :]) + print(f"{stg.depth_2D[i].shape}") + print(f"{stg.depth_2D[i]}") - J_cross_section_freq2 = self.inv_hc.j_cross_section( - BS=stg.BS_stream_bed_pre_process_average[i][ - stg.frequencies_for_calibration[1][1], :, :], - r2D=stg.depth_2D[i][stg.frequencies_for_calibration[1][1], - :, :], - kt=stg.kt3D[i][stg.frequencies_for_calibration[1][1], :, :]) + J_cross_section_freq1 = self.inv_hc.j_cross_section( + BS = bs_data[i][ + stg.frequencies_for_calibration[0][1], :, : + ], + r2D = stg.depth_2D[i][ + stg.frequencies_for_calibration[0][1], :, : + ], + kt = stg.kt3D[i][ + stg.frequencies_for_calibration[0][1], :, : + ] + ) - elif stg.BS_stream_bed_pre_process_SNR[i].shape != (0,): - - J_cross_section_freq1 = self.inv_hc.j_cross_section( - BS=stg.BS_stream_bed_pre_process_SNR[i][ - stg.frequencies_for_calibration[0][1], :, :], - r2D=stg.depth_2D[i][stg.frequencies_for_calibration[0][1], - :, :], - kt=stg.kt3D[i][stg.frequencies_for_calibration[0][1], :, :]) - - J_cross_section_freq2 = self.inv_hc.j_cross_section( - BS=stg.BS_stream_bed_pre_process_SNR[i][ - stg.frequencies_for_calibration[1][1], :, :], - r2D=stg.depth_2D[i][stg.frequencies_for_calibration[1][1], - :, :], - kt=stg.kt3D[i][stg.frequencies_for_calibration[1][1], :, :]) - - elif stg.BS_stream_bed[i].shape != (0,): - - J_cross_section_freq1 = self.inv_hc.j_cross_section( - BS=stg.BS_stream_bed[i][stg.frequencies_for_calibration[0][1], :, :], - r2D=stg.depth_2D[i][stg.frequencies_for_calibration[0][1], :, :], - kt=stg.kt3D[i][stg.frequencies_for_calibration[0][1], :, :]) - - J_cross_section_freq2 = self.inv_hc.j_cross_section( - BS=stg.BS_stream_bed[i][ - stg.frequencies_for_calibration[1][1], :, :], - r2D=stg.depth_2D[i][stg.frequencies_for_calibration[1][1], :, :], - kt=stg.kt3D[i][stg.frequencies_for_calibration[1][1], :, :]) - - elif stg.BS_cross_section_pre_process_average[i].shape != (0,): - - J_cross_section_freq1 = self.inv_hc.j_cross_section( - BS=stg.BS_cross_section_pre_process_average[i][ - stg.frequencies_for_calibration[0][1], :, :], - r2D=stg.depth_2D[i][stg.frequencies_for_calibration[0][1], - :, :], - kt=stg.kt3D[i][stg.frequencies_for_calibration[0][1], :, :]) - - J_cross_section_freq2 = self.inv_hc.j_cross_section( - BS=stg.BS_cross_section_pre_process_average[i][ - stg.frequencies_for_calibration[1][1], :, :], - r2D=stg.depth_2D[i][stg.frequencies_for_calibration[1][1], - :, :], - kt=stg.kt3D[i][stg.frequencies_for_calibration[1][1], :, :]) - - elif stg.BS_cross_section_pre_process_SNR[i].shape != (0,): - - J_cross_section_freq1 = self.inv_hc.j_cross_section( - BS=stg.BS_cross_section_pre_process_SNR[i][ - stg.frequencies_for_calibration[0][1], :, :], - r2D=stg.depth_2D[i][stg.frequencies_for_calibration[0][1], - :, :], - kt=stg.kt3D[i][stg.frequencies_for_calibration[0][1], :, :]) - - J_cross_section_freq2 = self.inv_hc.j_cross_section( - BS=stg.BS_cross_section_pre_process_SNR[i][ - stg.frequencies_for_calibration[1][1], :, :], - r2D=stg.depth_2D[i][stg.frequencies_for_calibration[1][1], - :, :], - kt=stg.kt3D[i][stg.frequencies_for_calibration[1][1], :, :]) - - elif stg.BS_cross_section[i].shape != (0,): - - J_cross_section_freq1 = self.inv_hc.j_cross_section( - BS=stg.BS_cross_section[i][ - stg.frequencies_for_calibration[0][1], :, :], - r2D=stg.depth_2D[i, :, :][stg.frequencies_for_calibration[0][1], :, :], - kt=stg.kt3D[i][stg.frequencies_for_calibration[0][1], :, :]) - - J_cross_section_freq2 = self.inv_hc.j_cross_section( - BS=stg.BS_cross_section[i][ - stg.frequencies_for_calibration[1][1], :, :], - r2D=stg.depth_2D[i, :, :][stg.frequencies_for_calibration[1][1], :, :], - kt=stg.kt3D[i][stg.frequencies_for_calibration[1][1], :, :]) - - elif stg.BS_raw_data_pre_process_average[i].shape != (0,): - - J_cross_section_freq1 = self.inv_hc.j_cross_section( - BS=stg.BS_raw_data_pre_process_average[i][ - stg.frequencies_for_calibration[0][1], :, :], - r2D=stg.depth_2D[i][stg.frequencies_for_calibration[0][1], :, :], - kt=stg.kt3D[i][stg.frequencies_for_calibration[0][1], :, :]) - - J_cross_section_freq2 = self.inv_hc.j_cross_section( - BS=stg.BS_raw_data_pre_process_average[i][ - stg.frequencies_for_calibration[1][1], :, :], - r2D=stg.depth_2D[i][stg.frequencies_for_calibration[1][1], :, :], - kt=stg.kt3D[i][stg.frequencies_for_calibration[1][1], :, :]) - - elif stg.BS_raw_data_pre_process_SNR[i].shape != (0,): - - J_cross_section_freq1 = self.inv_hc.j_cross_section( - BS=stg.BS_raw_data_pre_process_SNR[i][ - stg.frequencies_for_calibration[0][1], :, :], - r2D=stg.depth_2D[i][stg.frequencies_for_calibration[0][1], :, :], - kt=stg.kt3D[i][stg.frequencies_for_calibration[0][1], :, :]) - - J_cross_section_freq2 = self.inv_hc.j_cross_section( - BS=stg.BS_raw_data_pre_process_SNR[i][ - stg.frequencies_for_calibration[1][1], :, :], - r2D=stg.depth_2D[i][stg.frequencies_for_calibration[1][1], :, :], - kt=stg.kt3D[i][stg.frequencies_for_calibration[1][1], :, :]) - - elif stg.BS_raw_data: - - J_cross_section_freq1 = self.inv_hc.j_cross_section( - BS=stg.BS_raw_data[i][ - stg.frequencies_for_calibration[0][1], :, :], - r2D=stg.depth_2D[i][stg.frequencies_for_calibration[0][1], :, :], - kt=stg.kt3D[i][stg.frequencies_for_calibration[0][1], :, :]) - - J_cross_section_freq2 = self.inv_hc.j_cross_section( - BS=stg.BS_raw_data[i][ - stg.frequencies_for_calibration[1][1], :, :], - r2D=stg.depth_2D[i][stg.frequencies_for_calibration[1][1], :, :], - kt=stg.kt3D[i][stg.frequencies_for_calibration[1][1], :, :]) + J_cross_section_freq2 = self.inv_hc.j_cross_section( + BS = bs_data[i][ + stg.frequencies_for_calibration[1][1], :, : + ], + r2D = stg.depth_2D[i][ + stg.frequencies_for_calibration[1][1], :, : + ], + kt = stg.kt3D[i][ + stg.frequencies_for_calibration[1][1], :, : + ] + ) stg.J_cross_section[i][0] = J_cross_section_freq1 stg.J_cross_section[i][1] = J_cross_section_freq2 def compute_alpha_s(self): + data_id = self.combobox_acoustic_data_choice.currentIndex() + freq_1 = self.combobox_freq1.currentIndex() + freq_2 = self.combobox_freq2.currentIndex() - # --- Compute alpha_s --- - if stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,): + depth_data = stg.depth + if stg.depth_cross_section[data_id].shape != (0,): + depth_data = stg.depth_cross_section - alpha_s_freq1 = self.inv_hc.alpha_s( - sv=stg.sv[0], - j_cross_section=stg.J_cross_section[self.combobox_acoustic_data_choice.currentIndex()][0][ - stg.sand_sample_target_indice[0][0], stg.sand_sample_target_indice[0][1]], - depth=stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][ - self.combobox_freq1.currentIndex(), stg.sand_sample_target_indice[0][0]], - alpha_w=stg.water_attenuation[self.combobox_acoustic_data_choice.currentIndex()][ - self.combobox_freq1.currentIndex()]) + alpha_s_freq1 = self.inv_hc.alpha_s( + sv=stg.sv[0], + j_cross_section=stg.J_cross_section[data_id][0][ + stg.sand_sample_target_indice[0][0], + stg.sand_sample_target_indice[0][1] + ], + depth=depth_data[data_id][ + freq_1, stg.sand_sample_target_indice[0][0] + ], + alpha_w=stg.water_attenuation[data_id][freq_1] + ) - alpha_s_freq2 = self.inv_hc.alpha_s( - sv=stg.sv[1], - j_cross_section=stg.J_cross_section[self.combobox_acoustic_data_choice.currentIndex()][1][ - stg.sand_sample_target_indice[1][0], stg.sand_sample_target_indice[1][1]], - depth=stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][ - self.combobox_freq2.currentIndex(), stg.sand_sample_target_indice[1][0]], - alpha_w=stg.water_attenuation[self.combobox_acoustic_data_choice.currentIndex()][ - self.combobox_freq2.currentIndex()]) - - else: - - alpha_s_freq1 = self.inv_hc.alpha_s( - sv=stg.sv[0], - j_cross_section=stg.J_cross_section[self.combobox_acoustic_data_choice.currentIndex()][0][ - stg.sand_sample_target_indice[0][0], stg.sand_sample_target_indice[0][1]], - depth=stg.depth[self.combobox_acoustic_data_choice.currentIndex()][ - self.combobox_freq1.currentIndex(), stg.sand_sample_target_indice[0][0]], - alpha_w=stg.water_attenuation[self.combobox_acoustic_data_choice.currentIndex()][ - self.combobox_freq1.currentIndex()]) - - alpha_s_freq2 = self.inv_hc.alpha_s( - sv=stg.sv[1], - j_cross_section=stg.J_cross_section[self.combobox_acoustic_data_choice.currentIndex()][1][ - stg.sand_sample_target_indice[1][0], stg.sand_sample_target_indice[1][1]], - depth=stg.depth[self.combobox_acoustic_data_choice.currentIndex()][ - self.combobox_freq2.currentIndex(), stg.sand_sample_target_indice[1][0]], - alpha_w=stg.water_attenuation[self.combobox_acoustic_data_choice.currentIndex()][ - self.combobox_freq2.currentIndex()]) + alpha_s_freq2 = self.inv_hc.alpha_s( + sv=stg.sv[1], + j_cross_section=stg.J_cross_section[data_id][1][ + stg.sand_sample_target_indice[1][0], + stg.sand_sample_target_indice[1][1] + ], + depth=depth_data[data_id][ + freq_2, stg.sand_sample_target_indice[1][0] + ], + alpha_w=stg.water_attenuation[data_id][freq_2] + ) stg.alpha_s = [alpha_s_freq1, alpha_s_freq2] @@ -2234,19 +2220,25 @@ class SedimentCalibrationTab(QWidget): self.lineEdit_alphas_freq2.setText(str("%.5f" % alpha_s_freq2)) if (alpha_s_freq1 < 0) or (alpha_s_freq2 < 0): - msgBox = QMessageBox() msgBox.setWindowTitle("Alpha computation error") - msgBox.setIconPixmap(QPixmap(self._path_icon("no_approved.png")).scaledToHeight(32, Qt.SmoothTransformation)) + msgBox.setIconPixmap( + QPixmap( + self._path_icon("no_approved.png") + ).scaledToHeight(32, Qt.SmoothTransformation) + ) msgBox.setText("Sediment sound attenuation is negative !") msgBox.setStandardButtons(QMessageBox.Ok) msgBox.exec() else: - msgBox = QMessageBox() msgBox.setWindowTitle("Alpha computation validation") - msgBox.setIconPixmap(QPixmap(self._path_icon("approved.png")).scaledToHeight(32, Qt.SmoothTransformation)) + msgBox.setIconPixmap( + QPixmap( + self._path_icon("approved.png") + ).scaledToHeight(32, Qt.SmoothTransformation) + ) msgBox.setText("Sediment sound attenuation is positive.") msgBox.setStandardButtons(QMessageBox.Ok) msgBox.exec() @@ -2747,4 +2739,3 @@ class SedimentCalibrationTab(QWidget): self.lineEdit_slider_FCB.setText( str(stg.time[self.combobox_acoustic_data_choice.currentIndex()][ self.combobox_frequency_FCB.currentIndex(), self.slider_FCB.value()-1])) -