diff --git a/ABS_calibration_constant_kt.xlsx b/ABS_calibration_constant_kt.xlsx
new file mode 100644
index 0000000..577741f
Binary files /dev/null and b/ABS_calibration_constant_kt.xlsx differ
diff --git a/AcouSed_UserManual.pdf b/AcouSed_UserManual.pdf
new file mode 100644
index 0000000..9512bc0
Binary files /dev/null and b/AcouSed_UserManual.pdf differ
diff --git a/Acoustic_Inversion_theory.pdf b/Acoustic_Inversion_theory.pdf
new file mode 100644
index 0000000..d10560a
Binary files /dev/null and b/Acoustic_Inversion_theory.pdf differ
diff --git a/Model/acoustic_inversion_method_high_concentration.py b/Model/acoustic_inversion_method_high_concentration.py
index b7c943c..83482b3 100644
--- a/Model/acoustic_inversion_method_high_concentration.py
+++ b/Model/acoustic_inversion_method_high_concentration.py
@@ -1,3 +1,26 @@
+# ============================================================================== #
+ # mainwindow.py - AcouSed #
+ # Copyright (C) 2024 INRAE #
+ # #
+ # This program is free software: you can redistribute it and/or modify #
+ # it under the terms of the GNU General Public License as published by #
+ # the Free Software Foundation, either version 3 of the License, or #
+ # (at your option) any later version. #
+ # #
+ # This program is distributed in the hope that it will be useful, #
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of #
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+ # GNU General Public License for more details. #
+ # #
+ # You should have received a copy of the GNU General Public License #
+ # along with this program. If not, see . #
+
+ # by Brahim MOUDJED #
+# ============================================================================== #
+
+# -*- coding: utf-8 -*-
+
+
import matplotlib.pyplot as plt
import numpy as np
import settings as stg
@@ -277,6 +300,7 @@ class AcousticInversionMethodHighConcentration():
def M_profile_SCC_fine_interpolated(self, sample_depth, M_profile, range_cells, r_bottom):
res = np.zeros((len(range_cells),)) * np.nan
+ print("range_cells ", range_cells.shape)
l0 = sample_depth
print("l0 = ", l0)
l1 = [l0.index(x) for x in sorted(l0)]
@@ -322,6 +346,9 @@ class AcousticInversionMethodHighConcentration():
i += -1
if r_bottom.size != 0:
+ print("res ", res.shape)
+ print("range_cells ", len(range_cells))
+ # print("r_bottom ", len(r_bottom))
res[np.where(range_cells > r_bottom)] = np.nan
loc_point_lin_interp0 = range_cells[np.where((range_cells > l2[0]) & (range_cells < l2[-1]))]
diff --git a/Model/calibration_constant_kt.py b/Model/calibration_constant_kt.py
index c1743e1..e7301d3 100644
--- a/Model/calibration_constant_kt.py
+++ b/Model/calibration_constant_kt.py
@@ -1,68 +1,60 @@
-import sys
+# ============================================================================== #
+ # calibration_constant_kt.py - AcouSed #
+ # Copyright (C) 2024 INRAE #
+ # #
+ # This program is free software: you can redistribute it and/or modify #
+ # it under the terms of the GNU General Public License as published by #
+ # the Free Software Foundation, either version 3 of the License, or #
+ # (at your option) any later version. #
+ # #
+ # This program is distributed in the hope that it will be useful, #
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of #
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+ # GNU General Public License for more details. #
+ # #
+ # You should have received a copy of the GNU General Public License #
+ # along with this program. If not, see . #
-import os
-import pandas as pd
-from PyQt5.QtGui import QIcon, QPixmap
-from PyQt5.QtWidgets import (QWidget, QLabel, QHBoxLayout, QVBoxLayout, QApplication, QMainWindow, QGridLayout,
- QDialog, QDialogButtonBox, QPushButton, QTextEdit, QFrame, QTabWidget, QScrollArea,
- QLineEdit, QFileDialog)
-from PyQt5.QtCore import Qt
+ # by Brahim MOUDJED #
+# ============================================================================== #
-import numpy as np
from os import path
-
-import matplotlib.pyplot as plt
-from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
-from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolBar
-from matplotlib.colors import LogNorm, BoundaryNorm
-
-import datetime
-
-import settings as stg
-
-from Translation.constant_string import HORIZONTAL
-from settings import depth_cross_section
+import pandas as pd
+from PyQt5.QtWidgets import (QWidget, QVBoxLayout, QDialog, QTabWidget, QGridLayout, QScrollArea,
+ QFileDialog, QMessageBox, QLabel)
+from PyQt5.QtCore import Qt
class CalibrationConstantKt(QDialog):
- icon_folder = (
- "/home/bmoudjed/Documents/3 SSC acoustic meas project/Graphical interface project/acoused/icons/folder.png")
-
def __init__(self, parent=None):
super(CalibrationConstantKt, self).__init__(parent)
-
-
self.setGeometry(400, 200, 300, 400)
self.setWindowTitle("Calibration constant kt")
self.verticalLayout_Main = QVBoxLayout()
- self.setLayout(self.verticalLayout_Main)
-
- self.horizontalLayout_file = QHBoxLayout()
- self.verticalLayout_Main.addLayout(self.horizontalLayout_file)
-
- self.pushbutton_file = QPushButton()
- self.pushbutton_file.setIcon(QIcon(CalibrationConstantKt.icon_folder))
- self.horizontalLayout_file.addWidget(self.pushbutton_file)
- # self.pushbutton_file.clicked.connect(self.open_dialog_box)
-
- self.lineEdit_file = QLineEdit()
- self.horizontalLayout_file.addWidget(self.lineEdit_file)
self.tab = QTabWidget()
self.verticalLayout_Main.addWidget(self.tab)
- # "/home/bmoudjed/Documents/3 SSC acoustic meas project/Graphical interface project/acoused/
- self.data_ABS = pd.read_excel("ABS_calibration_constant_kt.xlsx", header=0, sheet_name=None)
- self.lineEdit_file.setText("ABS_calibration_constant_kt.xlsx")
+ try:
+ self.data_ABS = pd.read_excel("ABS_calibration_constant_kt.xlsx", header=0, sheet_name=None)
- print([*self.data_ABS.values()][0].columns[1])
+ except FileNotFoundError as e:
+ msgBox = QMessageBox()
+ msgBox.setWindowTitle("File Not Found Error")
+ msgBox.setIcon(QMessageBox.Warning)
+ msgBox.setText("Please check Excel file name for the calibration constant kt \n"
+ "It should be an excel file named : 'ABS_calibration_constant_kt.xlsx'")
+ msgBox.setStandardButtons(QMessageBox.Ok)
+ msgBox.exec()
+
+ self.setLayout(self.verticalLayout_Main)
self.load_freq_and_kt_values()
def open_dialog_box(self):
@@ -86,12 +78,12 @@ class CalibrationConstantKt(QDialog):
for t_index, t_value in enumerate(list(self.data_ABS.keys())):
- exec("self.tab_" + str(t_index) + "= QWidget()")
- eval("self.tab.addTab(self.tab_" + str(t_index) + ", '" + str(t_value) + "')")
+ exec("self.tab_calib_" + str(t_index) + "= QWidget()")
+ eval("self.tab.addTab(self.tab_calib_" + str(t_index) + ", '" + str(t_value) + "')")
- exec("self.verticalLayout_tab_" + str(t_index) + "= QVBoxLayout(self.tab_" + str(t_index) + ")")
+ exec("self.verticalLayout_tab_" + str(t_index) + "= QVBoxLayout(self.tab_calib_" + str(t_index) + ")")
- exec("self.scrollarea_tab_" + str(t_index) + " = QScrollArea(self.tab_" + str(t_index) + ")")
+ exec("self.scrollarea_tab_" + str(t_index) + " = QScrollArea(self.tab_calib_" + str(t_index) + ")")
eval("self.scrollarea_tab_" + str(t_index) + ".setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)")
eval("self.scrollarea_tab_" + str(t_index) + ".setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)")
eval("self.scrollarea_tab_" + str(t_index) + ".setWidgetResizable(True)")
@@ -122,10 +114,10 @@ class CalibrationConstantKt(QDialog):
", " + str(x+1) + ", 1, 1, 1, Qt.AlignCenter)")
-if __name__ == "__main__":
- app = QApplication(sys.argv)
- cal = CalibrationConstantKt()
- cal.show()
- # sys.exit(app.exec_())
- app.exec()
+# if __name__ == "__main__":
+# app = QApplication(sys.argv)
+# cal = CalibrationConstantKt()
+# cal.show()
+# # sys.exit(app.exec_())
+# app.exec()
diff --git a/Model/create_table_for_save_as.py b/Model/create_table_for_save_as.py
index cc721be..0a56f28 100644
--- a/Model/create_table_for_save_as.py
+++ b/Model/create_table_for_save_as.py
@@ -1,3 +1,26 @@
+# ============================================================================== #
+ # create_table_for_save_as.py - AcouSed #
+ # Copyright (C) 2024 INRAE #
+ # #
+ # This program is free software: you can redistribute it and/or modify #
+ # it under the terms of the GNU General Public License as published by #
+ # the Free Software Foundation, either version 3 of the License, or #
+ # (at your option) any later version. #
+ # #
+ # This program is distributed in the hope that it will be useful, #
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of #
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+ # GNU General Public License for more details. #
+ # #
+ # You should have received a copy of the GNU General Public License #
+ # along with this program. If not, see . #
+
+ # by Brahim MOUDJED #
+# ============================================================================== #
+
+# -*- coding: utf-8 -*-
+
+
import numpy as np
from PyQt5.QtWidgets import QFileDialog, QApplication, QMessageBox
import sqlite3
@@ -26,8 +49,11 @@ class CreateTableForSaveAs:
self.create_Measure = """ CREATE TABLE Measure(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
- acoustic_data INTEGER,
- frequency FLOAT,
+ acoustic_data INTEGER,
+ Date DATE,
+ Hour TIME,
+ frequency FLOAT,
+ sound_attenuation FLOAT,
kt_read FLOAT,
kt_corrected FLOAT,
NbProfiles FLOAT,
@@ -38,20 +64,23 @@ class CreateTableForSaveAs:
NbPingsPerSeconds FLOAT,
NbPingsAveragedPerProfile FLOAT,
GainRx FLOAT,
- GainTx FLOAT)
+ GainTx FLOAT
+ )
"""
self.create_BSRawData = '''CREATE TABLE BSRawData(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
acoustic_data INTEGER,
time BLOB, depth BLOB, BS_raw_data BLOB,
+ time_reshape BLOB, depth_reshape BLOB, BS_raw_data_reshape BLOB,
time_cross_section BLOB, depth_cross_section BLOB, BS_cross_section BLOB, BS_stream_bed BLOB,
depth_bottom, val_bottom, ind_bottom,
time_noise BLOB, depth_noise BLOB, BS_noise_raw_data BLOB,
SNR_raw_data BLOB, SNR_cross_section BLOB, SNR_stream_bed BLOB,
BS_raw_data_pre_process_SNR BLOB, BS_raw_data_pre_process_average BLOB,
BS_cross_section_pre_process_SNR BLOB, BS_cross_section_pre_process_average BLOB,
- BS_stream_bed_pre_process_SNR BLOB, BS_stream_bed_pre_process_average BLOB
+ BS_stream_bed_pre_process_SNR BLOB, BS_stream_bed_pre_process_average BLOB,
+ BS_mean BLOB
)'''
self.create_Settings = '''CREATE TABLE Settings(
@@ -60,16 +89,27 @@ class CreateTableForSaveAs:
temperature FLOAT,
tmin_index FLOAT, tmin_value FLOAT, tmax_index FLOAT, tmax_value FLOAT,
rmin_index FLOAT, rmin_value FLOAT, rmax_index FLOAT, rmax_value FLOAT,
- freq_bottom_detection, dept_bottom_detection_min, depth_bottom_detection_max, depth_bottom_detection_1st_int_area,
+ freq_bottom_detection_index FLOAT, freq_bottom_detection_value STRING,
SNR_filter_value FLOAT, Nb_cells_to_average_BS_signal FLOAT
)'''
self.create_SedimentsFile = """CREATE TABLE SedimentsFile(
- ID INTEGER PRIMARY KEY AUTOINCREMENT,
- path_fine STRING,
- filename_fine STRING
- )
- """
+ ID INTEGER PRIMARY KEY AUTOINCREMENT,
+ path_fine STRING,
+ filename_fine STRING,
+ radius_grain_fine BLOB,
+ path_sand STRING,
+ filename_sand STRING,
+ radius_grain_sand BLOB,
+ time_column_label STRING,
+ distance_from_bank_column_label STRING,
+ depth_column_label STRING,
+ Ctot_fine_column_label STRING,
+ D50_fine_column_label STRING,
+ Ctot_sand_column_label STRING,
+ D50_sand_column_label STRING
+ )
+ """
self.create_SedimentsData = """CREATE TABLE SedimentsData(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
@@ -82,7 +122,17 @@ class CreateTableForSaveAs:
Ctot_fine_per_cent FLOAT,
D50_fine FLOAT,
frac_vol_fine BLOB,
- frac_vol_fine_cumul BLOB
+ frac_vol_fine_cumul BLOB,
+ sample_sand_name STRING,
+ sample_sand_index INTEGER,
+ distance_from_bank_sand FLOAT,
+ depth_sand FLOAT,
+ time_sand FLOAT,
+ Ctot_sand FLOAT,
+ Ctot_sand_per_cent FLOAT,
+ D50_sand FLOAT,
+ frac_vol_sand BLOB,
+ frac_vol_sand_cumul BLOB
)
"""
@@ -148,9 +198,9 @@ class CreateTableForSaveAs:
cur = cnx.cursor()
# --------------------------------------------------------------------------------------------------------------
- # ++++++++++++++++++
- # --- Table File ---
- # ++++++++++++++++++
+ # +++++++++++++++++++++++++++
+ # --- Table Acoustic File ---
+ # +++++++++++++++++++++++++++
start_table_File = time.time()
@@ -188,17 +238,21 @@ class CreateTableForSaveAs:
# Execute the CREATE TABLE statement
cur.execute(self.create_Measure)
-
+ print("stg.date ", stg.date, "stg.hour ", stg.hour)
# Fill the table Measure
for i in stg.acoustic_data:
for j in range(stg.freq[i].shape[0]):
- cur.execute(''' INSERT into Measure(acoustic_data, frequency, kt_read, kt_corrected, NbProfiles,
- NbProfilesPerSeconds, NbCells, CellSize, PulseLength,
- NbPingsPerSeconds, NbPingsAveragedPerProfile, GainRx, GainTx)
- VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''',
- (stg.acoustic_data[i], stg.freq[i][j], stg.kt_read[j], stg.kt_corrected[j],
+ cur.execute(''' INSERT into Measure(acoustic_data, Date, Hour, frequency, sound_attenuation, kt_read, kt_corrected,
+ NbProfiles, NbProfilesPerSeconds, NbCells, CellSize, PulseLength,
+ NbPingsPerSeconds, NbPingsAveragedPerProfile, GainRx, GainTx
+ )
+ VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''',
+ (stg.acoustic_data[i], #stg.date[i], stg.hour[i],
+ str(stg.date[i].year) + str('-') + str(stg.date[i].month) + str('-') + str(stg.date[i].day),
+ str(stg.hour[i].hour) + str(':') + str(stg.hour[i].minute),
+ stg.freq[i][j], stg.water_attenuation[i][j], stg.kt_read[j], stg.kt_corrected[j],
stg.nb_profiles[i][j], stg.nb_profiles_per_sec[i][j], stg.nb_cells[i][j],
stg.cell_size[i][j], stg.pulse_length[i][j], stg.nb_pings_per_sec[i][j],
stg.nb_pings_averaged_per_profile[i][j], stg.gain_rx[i][j], stg.gain_tx[i][j]))
@@ -223,26 +277,34 @@ class CreateTableForSaveAs:
for i in stg.acoustic_data:
cur.execute(''' INSERT into BSRawData(acoustic_data, time, depth, BS_raw_data,
+ time_reshape, depth_reshape, BS_raw_data_reshape,
time_cross_section, depth_cross_section,
BS_cross_section, BS_stream_bed,
+ depth_bottom, val_bottom, ind_bottom,
time_noise, depth_noise, BS_noise_raw_data,
SNR_raw_data, SNR_cross_section, SNR_stream_bed,
BS_raw_data_pre_process_SNR, BS_raw_data_pre_process_average,
BS_cross_section_pre_process_SNR, BS_cross_section_pre_process_average,
- BS_stream_bed_pre_process_SNR, BS_stream_bed_pre_process_average)
- VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''',
+ BS_stream_bed_pre_process_SNR, BS_stream_bed_pre_process_average,
+ BS_mean)
+ VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''',
(stg.acoustic_data[i], stg.time[i].tobytes(),
stg.depth[i].tobytes(), stg.BS_raw_data[i].tobytes(),
+ stg.time_reshape[i].tobytes(), stg.depth_reshape[i].tobytes(), stg.BS_raw_data_reshape[i].tobytes(),
stg.time_cross_section[i].tobytes(), stg.depth_cross_section[i].tobytes(),
stg.BS_cross_section[i].tobytes(), stg.BS_stream_bed[i].tobytes(),
+ stg.depth_bottom[i].tobytes(), np.array(stg.val_bottom[i]).tobytes(), np.array(stg.ind_bottom[i]).tobytes(),
stg.time_noise[i].tobytes(), stg.depth_noise[i].tobytes(), stg.BS_noise_raw_data[i].tobytes(),
stg.SNR_raw_data[i].tobytes(), stg.SNR_cross_section[i].tobytes(), stg.SNR_stream_bed[i].tobytes(),
stg.BS_raw_data_pre_process_SNR[i].tobytes(), stg.BS_raw_data_pre_process_average[i].tobytes(),
stg.BS_cross_section_pre_process_SNR[i].tobytes(), stg.BS_cross_section_pre_process_average[i].tobytes(),
- stg.BS_stream_bed_pre_process_SNR[i].tobytes(), stg.BS_stream_bed_pre_process_average[i].tobytes()
+ stg.BS_stream_bed_pre_process_SNR[i].tobytes(), stg.BS_stream_bed_pre_process_average[i].tobytes(),
+ stg.BS_mean[i].tobytes()
)
)
+ print("stg.ind_bottom ", stg.ind_bottom[i])
+ print(np.array([stg.ind_bottom[i]]), np.array(stg.ind_bottom[i]).shape)
# Commit the transaction after executing INSERT.
cnx.commit()
@@ -265,12 +327,16 @@ class CreateTableForSaveAs:
cur.execute('''INSERT into Settings(acoustic_data, temperature,
tmin_index, tmin_value, tmax_index, tmax_value,
rmin_index, rmin_value, rmax_index, rmax_value,
- SNR_filter_value, Nb_cells_to_average_BS_signal)
- VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''',
+ freq_bottom_detection_index, freq_bottom_detection_value,
+ SNR_filter_value, Nb_cells_to_average_BS_signal
+ )
+ VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''',
(stg.acoustic_data[i], stg.temperature,
stg.tmin[i][0], stg.tmin[i][1], stg.tmax[i][0], stg.tmax[i][1],
stg.rmin[i][0], stg.rmin[i][1], stg.rmax[i][0], stg.rmax[i][1],
- stg.SNR_filter_value[i], stg.Nb_cells_to_average_BS_signal[i])
+ stg.freq_bottom_detection[i][0], stg.freq_bottom_detection[i][1],
+ stg.SNR_filter_value[i], stg.Nb_cells_to_average_BS_signal[i]
+ )
)
cnx.commit()
@@ -288,8 +354,16 @@ class CreateTableForSaveAs:
cur.execute(self.create_SedimentsFile)
- cur.execute('''INSERT into SedimentsFile(path_fine, filename_fine) VALUES(?, ?)''',
- (stg.path_fine, stg.filename_fine))
+ cur.execute('''INSERT into SedimentsFile(path_fine, filename_fine, radius_grain_fine,
+ path_sand, filename_sand, radius_grain_sand,
+ time_column_label, distance_from_bank_column_label,
+ depth_column_label, Ctot_fine_column_label, D50_fine_column_label,
+ Ctot_sand_column_label, D50_sand_column_label)
+ VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''',
+ (stg.path_fine, stg.filename_fine, stg.radius_grain_fine.tobytes(),
+ stg.path_sand, stg.filename_sand, stg.radius_grain_sand.tobytes(),
+ stg.columns_fine[0], stg.columns_fine[1], stg.columns_fine[2],
+ stg.columns_fine[3], stg.columns_fine[4], stg.columns_sand[3], stg.columns_sand[4]))
cnx.commit()
@@ -308,13 +382,21 @@ class CreateTableForSaveAs:
for f in range(len(stg.sample_fine)):
cur.execute('''INSERT into SedimentsData(sample_fine_name, sample_fine_index, distance_from_bank_fine,
- depth_fine, time_fine, Ctot_fine, Ctot_fine_per_cent, D50_fine, frac_vol_fine,
- frac_vol_fine_cumul)
- VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''',
+ depth_fine, time_fine, Ctot_fine, Ctot_fine_per_cent, D50_fine,
+ frac_vol_fine, frac_vol_fine_cumul,
+ sample_sand_name, sample_sand_index, distance_from_bank_sand,
+ depth_sand, time_sand, Ctot_sand, Ctot_sand_per_cent, D50_sand,
+ frac_vol_sand, frac_vol_sand_cumul
+ )
+ VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''',
(stg.sample_fine[f][0] , stg.sample_fine[f][1],
stg.distance_from_bank_fine[f], stg.depth_fine[f], stg.time_fine[f], stg.Ctot_fine[f],
stg.Ctot_fine_per_cent[f], stg.D50_fine[f],
- stg.frac_vol_fine[f].tobytes(), stg.frac_vol_fine_cumul[f].tobytes()))
+ stg.frac_vol_fine[f].tobytes(), stg.frac_vol_fine_cumul[f].tobytes(),
+ stg.sample_sand[f][0], stg.sample_sand[f][1],
+ stg.distance_from_bank_sand[f], stg.depth_sand[f], stg.time_sand[f], stg.Ctot_sand[f],
+ stg.Ctot_sand_per_cent[f], stg.D50_sand[f],
+ stg.frac_vol_sand[f].tobytes(), stg.frac_vol_sand_cumul[f].tobytes()))
cnx.commit()
diff --git a/Model/read_table_for_open.py b/Model/read_table_for_open.py
index d810365..7e5e075 100644
--- a/Model/read_table_for_open.py
+++ b/Model/read_table_for_open.py
@@ -1,112 +1,370 @@
+# ============================================================================== #
+ # read_table_for_open.py - AcouSed #
+ # Copyright (C) 2024 INRAE #
+ # #
+ # This program is free software: you can redistribute it and/or modify #
+ # it under the terms of the GNU General Public License as published by #
+ # the Free Software Foundation, either version 3 of the License, or #
+ # (at your option) any later version. #
+ # #
+ # This program is distributed in the hope that it will be useful, #
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of #
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+ # GNU General Public License for more details. #
+ # #
+ # You should have received a copy of the GNU General Public License #
+ # along with this program. If not, see . #
+
+ # by Brahim MOUDJED #
+# ============================================================================== #
+
+# -*- coding: utf-8 -*-
+
+
+import sys
import numpy as np
-from PyQt5.QtWidgets import QFileDialog, QApplication
+from PyQt5.QtWidgets import QFileDialog, QApplication, QWidget, QTabWidget
import sqlite3
from os import path, chdir
import settings as stg
+from settings import BS_raw_data, acoustic_data
+from View.acoustic_data_tab import AcousticDataTab
class ReadTableForOpen:
def __init__(self):
- self.open_file_dialog()
-
- chdir(stg.dirname_open)
- self.sql_file_to_open = open(stg.filename_open)
-
- self.read_table()
-
- # self.reshape_variables()
+ pass
def open_file_dialog(self):
- name = QFileDialog.getOpenFileName(caption="Open Acoused file", directory="", filter="Acoused file (*.acd)")
+ name = QFileDialog.getOpenFileName(caption="Open Acoused file", directory="", filter="Acoused file (*.acd)",
+ options=QFileDialog.DontUseNativeDialog)
if name:
stg.dirname_open = path.dirname(name[0])
stg.filename_open = path.basename(name[0])
+ chdir(stg.dirname_open)
+ self.sql_file_to_open = open(stg.filename_open)
+
+ self.read_table()
+
def read_table(self):
+ stg.read_table_trigger = 1
+
# connexion to File db
cnx = sqlite3.connect(stg.filename_open)
# Create database cursor to execute SQL statements and fetch results from SQL queries.
cur = cnx.cursor()
- query = '''SELECT acoustic_data, acoustic_file FROM File'''
- data = cur.execute(query).fetchall()
- stg.acoustic_data, stg.filename_BS_raw_data = [x[0] for x in data], [y[1] for y in data]
+ # --------------------------------------------------------------------------------------------------------------
+ # +++++++++++++++++++++++++++
+ # --- Table Acoustic File ---
+ # +++++++++++++++++++++++++++
- for i in stg.acoustic_data:
+ query0 = f'''SELECT acoustic_data FROM AcousticFile'''
+ data0 = cur.execute(query0).fetchall()
+ print("data0 ", data0)
- query1 = f'''SELECT frequency, kt, NbProfiles, NbProfilesPerSeconds, "
- f"NbCells, CellSize, PulseLength, NbPingsPerSeconds, "
- f"NbPingsAveragedPerProfile, GainRx, GainTx
- FROM Measure WHERE (acoustic_data = {i})'''
+ stg.acoustic_data = [x[0] for x in data0]
+ print("stg.acoustic_data ", stg.acoustic_data)
+
+ for k in range(len(stg.acoustic_data)):
+ print("hello")
+ query = f'''SELECT acoustic_data, acoustic_file, ABS_name, path_BS_noise_data, filename_BS_noise_data,
+ noise_method, noise_value, data_preprocessed FROM AcousticFile WHERE (acoustic_data = {k})'''
+ data = cur.execute(query).fetchall()
+ print("data acoustic file", data)
+
+ stg.filename_BS_raw_data.append([str(y[1]) + '.aqa' for y in data][0])
+ stg.ABS_name.append([z[2] for z in data][0])
+ stg.path_BS_noise_data.append([z[3] for z in data][0])
+ stg.filename_BS_noise_data.append([z[4] for z in data][0])
+ stg.noise_method.append([z[5] for z in data][0])
+ stg.noise_value.append([z[6] for z in data][0])
+ stg.data_preprocessed.append([z[7] for z in data][0])
+
+ print("data acoustic file ", stg.filename_BS_raw_data, stg.ABS_name, stg.path_BS_noise_data, stg.filename_BS_noise_data,
+ stg.noise_method, stg.noise_value, stg.data_preprocessed)
+
+ # --------------------------------------------------------------------------------------------------------------
+ # +++++++++++++++++++++
+ # --- Table Measure ---
+ # +++++++++++++++++++++
+
+ stg.date = [0]*len(stg.acoustic_data)
+ stg.hour = [0]*len(stg.acoustic_data)
+ for i in range(len(stg.acoustic_data)):
+ print("i = ", i)
+ query1 = f'''SELECT acoustic_data, Date, Hour, frequency, sound_attenuation, kt_read, kt_corrected, NbProfiles,
+ NbProfilesPerSeconds, NbCells, CellSize, PulseLength, NbPingsPerSeconds, NbPingsAveragedPerProfile,
+ GainRx, GainTx FROM Measure WHERE (acoustic_data = {i})'''
data1 = cur.execute(query1).fetchall()
- # print(data1)
- # print([x[0] for x in data1])
- stg.freq.append([x[0] for x in data1])
- stg.kt.append([x[1] for x in data1])
- stg.nb_profiles.append([x[2] for x in data1])
- stg.nb_profiles_per_sec.append([x[3] for x in data1])
- stg.nb_cells.append([x[4] for x in data1])
- stg.cell_size.append([x[5] for x in data1])
- stg.pulse_length.append([x[6] for x in data1])
- stg.nb_pings_per_sec.append([x[7] for x in data1])
- stg.nb_pings_averaged_per_profile.append([x[8] for x in data1])
- stg.gain_rx.append([x[9] for x in data1])
- stg.gain_tx.append([x[10] for x in data1])
- # for f_ind, f_val in enumerate(stg.freq[i]):
- #
- # exec("query2 = '''SELECT time_" + str(int(f_val)) + ", depth_" + str(int(f_val)) + ", BS_raw_data_" + str(int(f_val)) +
- # " FROM BSRawData_" + str(int(i)) + " WHERE (acoustic_data = " + str(i) + ") ''' ")
- # exec("data2 = cur.execute(query2).fetchall()")
- # # print(eval("data2"))
- #
- # if f_ind == 0:
- # time_reshape_temp = np.array([[x[0] for x in eval("data2")]])
- # # print("1 time_reshape_temp.shape ", time_reshape_temp.shape)
- # depth_reshape_temp = np.array([[x[1] for x in eval("data2")]])
- # BS_raw_data_reshape_temp = np.array([[x[2] for x in eval("data2")]])
- # else:
- # time_reshape_temp = np.insert(time_reshape_temp, f_ind, [x[0] for x in eval("data2")], axis=0)
- # # print("2 time_reshape_temp.shape ", time_reshape_temp.shape)
- # depth_reshape_temp = np.insert(depth_reshape_temp, f_ind, [x[1] for x in eval("data2")], axis=0)
- # BS_raw_data_reshape_temp = np.insert(BS_raw_data_reshape_temp, f_ind, [x[1] for x in eval("data2")], axis=0)
- #
- # stg.time_reshape.append(time_reshape_temp.transpose())
- # # print(len(stg.time_reshape))
- # # print(stg.time_reshape[i].shape)
- # stg.depth_reshape.append(depth_reshape_temp.transpose())
- # stg.BS_raw_data_reshape.append(BS_raw_data_reshape_temp.transpose())
+ print("--------------------------------------")
+ print("data1 ", data1)
- query2 = f'''SELECT acoustic_data, time, depth, BS_raw_data FROM BSRawData WHERE (acoustic_data = {i})'''
+ stg.date[i] = data1[0][1]
+ stg.hour[i] = data1[0][2]
+ stg.freq.append(np.array([x[3] for x in data1]))
+ stg.freq_text.append([str(x[3]*1e-6) + 'MHz' for x in data1])
+ stg.water_attenuation.append([x[4] for x in data1])
+ stg.kt_read.append([x[5] for x in data1])
+ stg.kt_corrected = [x[6] for x in data1]
+ stg.nb_profiles.append([x[7] for x in data1])
+ stg.nb_profiles_per_sec.append([x[8] for x in data1])
+ stg.nb_cells.append([x[9] for x in data1])
+ stg.cell_size.append([x[10] for x in data1])
+ stg.pulse_length.append([x[11] for x in data1])
+ stg.nb_pings_per_sec.append([x[12] for x in data1])
+ stg.nb_pings_averaged_per_profile.append([x[13] for x in data1])
+ stg.gain_rx.append([x[14] for x in data1])
+ stg.gain_tx.append([x[15] for x in data1])
+
+ print(stg.acoustic_data, stg.freq, stg.water_attenuation, stg.kt_read, stg.kt_corrected, stg.nb_profiles, stg.nb_profiles_per_sec,
+ stg.nb_cells, stg.cell_size, stg.pulse_length, stg.nb_pings_per_sec, stg.nb_pings_averaged_per_profile,
+ stg.gain_rx, stg.gain_tx)
+
+ print(stg.date)
+ print(stg.hour)
+
+ # --------------------------------------------------------------------------------------------------------------
+ # +++++++++++++++++++++++
+ # --- Table BSRawData ---
+ # ++++++++++++++++++++++
+ print("len stg.acoustic_data ", len(stg.acoustic_data))
+ for j in range(len(stg.acoustic_data)):
+ print(f"j = {j}")
+ query2 = f'''SELECT acoustic_data, time, depth, BS_raw_data,
+ time_reshape, depth_reshape, BS_raw_data_reshape,
+ time_cross_section, depth_cross_section,
+ BS_cross_section, BS_stream_bed,
+ depth_bottom, val_bottom, ind_bottom,
+ time_noise, depth_noise, BS_noise_raw_data,
+ SNR_raw_data, SNR_cross_section, SNR_stream_bed,
+ BS_raw_data_pre_process_SNR, BS_raw_data_pre_process_average,
+ BS_cross_section_pre_process_SNR, BS_cross_section_pre_process_average,
+ BS_stream_bed_pre_process_SNR, BS_stream_bed_pre_process_average, BS_mean
+ FROM BSRawData WHERE (acoustic_data = {j})'''
data2 = cur.execute(query2).fetchall()
- print("len(data2) ", len(data2[0]))
- # print("data2 : ", data2)
- # data2_retreived = np.frombuffer(data2[0][1], dtype=np.float64)
- # print("", data2_retreived)
+ print("len data2 ", len(data2))
- stg.time.append(np.frombuffer(data2[0][1], dtype=np.float64).reshape((len(stg.freq[i]), -1)))
- print(stg.time[0].shape)
+ stg.time.append(np.frombuffer(data2[0][1], dtype=np.float64).reshape((stg.freq[j].shape[0], -1)))
+ print("stg.time[0].shape ", stg.time[j].shape, np.frombuffer(data2[0][1], dtype=np.float64).shape)
print(stg.time)
- stg.depth.append(np.frombuffer(data2[0][2], dtype=np.float64).reshape(len(stg.freq[i]), -1))
- print(stg.depth[0].shape)
+ stg.depth.append(np.frombuffer(data2[0][2], dtype=np.float64).reshape((stg.freq[j].shape[0], -1)))
+ print("stg.depth[0].shape ", stg.depth[j].shape)
print(stg.depth)
- stg.BS_raw_data.append(np.frombuffer(data2[0][3], dtype=np.float64))
+ stg.BS_raw_data.append(np.frombuffer(data2[0][3], dtype=np.float64).reshape((stg.freq[j].shape[0], stg.depth[j].shape[1], stg.time[j].shape[1])))
+ print("BS_raw_data ", stg.BS_raw_data[j].shape)
+ stg.time_reshape.append(np.frombuffer(data2[0][4], dtype=np.float64).reshape((-1, stg.freq[j].shape[0])))
+ print("stg.time_reshape[0].shape ", stg.time_reshape[j].shape)
+ stg.depth_reshape.append(np.frombuffer(data2[0][5], dtype=np.float64).reshape((-1, stg.freq[j].shape[0])))
+ stg.BS_raw_data_reshape.append(np.frombuffer(data2[0][6], dtype=np.float64).reshape((-1, stg.freq[j].shape[0])))
+ print("time cross section ", stg.time_cross_section, stg.time_cross_section == [])
- # time_reshape_temp = np.insert(time_reshape_temp, time_reshape_temp.shape[0], [x[0] for x in eval("data2")], axis=0)
- # stg.depth_reshape.append([x[2] for x in data2])
- # stg.BS_raw_data_reshape.append([x[3] for x in data2])
+ print("np.frombuffer(data2[0][9], dtype=np.float64) ", np.frombuffer(data2[0][9], dtype=np.float64))
+ if len(np.frombuffer(data2[0][9], dtype=np.float64)) == 0:
+ print("Je suis là")
+ stg.time_cross_section.append(np.array([]))
+ stg.depth_cross_section.append(np.array([]))
+ stg.BS_cross_section.append(np.array([]))
+ else:
+ print("Je suis ici")
+ print(stg.freq[j].shape)
+ print(np.frombuffer(data2[0][7], dtype=np.float64).shape)
+ stg.time_cross_section.append(np.frombuffer(data2[0][7], dtype=np.float64).reshape((stg.freq[j].shape[0], -1)))
+ print("time cross section ", stg.time_cross_section, stg.time_cross_section[j].shape)
+ stg.depth_cross_section.append(np.frombuffer(data2[0][8], dtype=np.float64).reshape((stg.freq[j].shape[0], -1)))
+ print("depth cross section ", stg.depth_cross_section, stg.depth_cross_section[j].shape)
+ stg.BS_cross_section.append(np.frombuffer(data2[0][9], dtype=np.float64).reshape(
+ (stg.freq[j].shape[0], stg.depth_cross_section[j].shape[1], stg.time_cross_section[j].shape[1])))
+
+ if len(np.frombuffer(data2[0][10], dtype=np.float64)) == 0:
+ stg.BS_stream_bed.append(np.array([]))
+ else:
+ stg.BS_stream_bed.append(np.frombuffer(data2[0][10], dtype=np.float64).reshape(
+ (stg.freq[j].shape[0], stg.depth_cross_section[j].shape[1], stg.time_cross_section[j].shape[1])))
+
+ if len(np.frombuffer(data2[0][11], dtype=np.float64)) == 0:
+ stg.depth_bottom.append(np.array([]))
+ stg.val_bottom.append([])
+ stg.ind_bottom.append([])
+ else:
+ stg.depth_bottom.append(np.frombuffer(data2[0][11], dtype=np.float64))
+ stg.val_bottom.append(np.frombuffer(data2[0][12], dtype=np.float64).tolist())
+ stg.ind_bottom.append(np.frombuffer(data2[0][13], dtype=np.float64).tolist())
+ print("stg.depth_bottom ", stg.depth_bottom)
+ print("stg.val_bottom ", stg.val_bottom)
+ print("stg.ind_bottom ", stg.ind_bottom)
+
+ if len(np.frombuffer(data2[0][14], dtype=np.float64)) == 0:
+ stg.time_noise.append(np.array([]))
+ stg.depth_noise.append(np.array([]))
+ stg.BS_noise_raw_data.append(np.array([]))
+ else:
+ stg.time_noise.append(np.frombuffer(data2[0][14], dtype=np.float64).reshape((stg.freq[j].shape[0], -1)))
+ stg.depth_noise.append(np.frombuffer(data2[0][15], dtype=np.float64).reshape((stg.freq[j].shape[0], -1)))
+ stg.BS_noise_raw_data.append(np.frombuffer(data2[0][16], dtype=np.float64).reshape(
+ (stg.freq[j].shape[0], stg.depth_noise[j].shape[1], stg.time_noise[j].shape[1])))
+
+ if len(np.frombuffer(data2[0][17], dtype=np.float64)) == 0:
+ stg.SNR_raw_data.append(np.array([]))
+ else:
+ stg.SNR_raw_data.append(np.frombuffer(data2[0][17], dtype=np.float64).reshape(stg.BS_raw_data[j].shape))
+
+ if len(np.frombuffer(data2[0][18], dtype=np.float64)) == 0:
+ stg.SNR_cross_section.append(np.array([]))
+ else:
+ stg.SNR_cross_section.append(np.frombuffer(data2[0][18], dtype=np.float64).reshape(stg.BS_cross_section[j].shape))
+
+ if len(np.frombuffer(data2[0][19], dtype=np.float64)) == 0:
+ stg.SNR_stream_bed.append(np.array([]))
+ else:
+ stg.SNR_stream_bed.append(np.frombuffer(data2[0][19], dtype=np.float64).reshape(stg.BS_stream_bed[j].shape))
+
+ if len(np.frombuffer(data2[0][20], dtype=np.float64)) == 0:
+ stg.BS_raw_data_pre_process_SNR.append(np.array([]))
+ else:
+ stg.BS_raw_data_pre_process_SNR.append(np.frombuffer(data2[0][20], dtype=np.float64).reshape(stg.BS_raw_data[j].shape))
+
+ if len(np.frombuffer(data2[0][21], dtype=np.float64)) == 0:
+ stg.BS_raw_data_pre_process_average.append(np.array([]))
+ else:
+ stg.BS_raw_data_pre_process_average.append(np.frombuffer(data2[0][21], dtype=np.float64).reshape(stg.BS_raw_data[j].shape))
+
+ if len(np.frombuffer(data2[0][22], dtype=np.float64)) == 0:
+ stg.BS_cross_section_pre_process_SNR.append(np.array([]))
+ else:
+ stg.BS_cross_section_pre_process_SNR.append(np.frombuffer(data2[0][22], dtype=np.float64).reshape(stg.BS_cross_section[j].shape))
+
+ if len(np.frombuffer(data2[0][23], dtype=np.float64)) == 0:
+ stg.BS_cross_section_pre_process_average.append(np.array([]))
+ else:
+ stg.BS_cross_section_pre_process_average.append(np.frombuffer(data2[0][23], dtype=np.float64).reshape(stg.BS_cross_section[j].shape))
+
+ if len(np.frombuffer(data2[0][24], dtype=np.float64)) == 0:
+ stg.BS_stream_bed_pre_process_SNR.append(np.array([]))
+ else:
+ stg.BS_stream_bed_pre_process_SNR.append(np.frombuffer(data2[0][24], dtype=np.float64).reshape(stg.BS_stream_bed[j].shape))
+
+ if len(np.frombuffer(data2[0][25], dtype=np.float64)) == 0:
+ stg.BS_stream_bed_pre_process_average.append(np.array([]))
+ else:
+ stg.BS_stream_bed_pre_process_average.append(np.frombuffer(data2[0][25], dtype=np.float64).reshape(stg.BS_stream_bed[j].shape))
+
+ if len(np.frombuffer(data2[0][26], dtype=np.float64)) == 0:
+ stg.BS_mean.append(np.array([]))
+ else:
+ stg.BS_mean.append(np.frombuffer(data2[0][26], dtype=np.float64).reshape((stg.freq[j].shape[0], -1)))
+ print(stg.BS_mean[j].shape)
+ # --------------------------------------------------------------------------------------------------------------
+ # +++++++++++++++++++++++
+ # --- Table Settings ---
+ # +++++++++++++++++++++++
+
+ for s in range(len(stg.acoustic_data)):
+ query3 = f'''SELECT acoustic_data, temperature,
+ tmin_index, tmin_value, tmax_index, tmax_value,
+ rmin_index, rmin_value, rmax_index, rmax_value,
+ freq_bottom_detection_index, freq_bottom_detection_value,
+ SNR_filter_value, Nb_cells_to_average_BS_signal
+ FROM Settings WHERE (acoustic_data = {s})'''
+
+ data3 = cur.execute(query3).fetchall()
+
+ stg.temperature = [x[1] for x in data3][0]
+ stg.tmin.append([(x[2], x[3]) for x in data3])
+ stg.tmax.append([(x[4], x[5]) for x in data3])
+ stg.rmin.append([(x[6], x[7]) for x in data3])
+ stg.rmax.append([(x[8], x[9]) for x in data3])
+ stg.freq_bottom_detection.append([(x[10], x[11]) for x in data3])
+ stg.SNR_filter_value.append([x[12] for x in data3])
+ stg.Nb_cells_to_average_BS_signal.append([x[13] for x in data3])
+
+ # --------------------------------------------------------------------------------------------------------------
+ # +++++++++++++++++++++++++++
+ # --- Table Sediment File ---
+ # +++++++++++++++++++++++++++
+
+ query4 = f'''SELECT path_fine, filename_fine, radius_grain_fine, path_sand, filename_sand, radius_grain_sand,
+ time_column_label, distance_from_bank_column_label, depth_column_label,
+ Ctot_fine_column_label, D50_fine_column_label,
+ Ctot_sand_column_label, D50_sand_column_label
+ from SedimentsFile'''
+
+ data4 = cur.execute(query4).fetchall()
+
+ print("data4 ", data4)
+
+ stg.path_fine = data4[0][0]
+ stg.filename_fine = data4[0][1]
+ stg.radius_grain_fine = np.array(np.frombuffer(data4[0][2], dtype=np.float64))
+ stg.path_sand = data4[0][3]
+ stg.filename_sand = data4[0][4]
+ stg.radius_grain_sand = np.array(np.frombuffer(data4[0][5], dtype=np.float64))
+ stg.columns_fine = [data4[0][6], data4[0][7], data4[0][8], data4[0][9], data4[0][10]] + list(stg.radius_grain_fine)
+ stg.columns_sand = [data4[0][6], data4[0][7], data4[0][8], data4[0][11], data4[0][12]] + list(stg.radius_grain_sand)
+
+ print("sediment file : ", stg.path_fine, stg.filename_fine, stg.path_sand, stg.filename_sand)
+ print(stg.radius_grain_fine, stg.radius_grain_sand)
+ print('stg.columns_fine ', stg.columns_fine)
+
+ # --------------------------------------------------------------------------------------------------------------
+ # +++++++++++++++++++++++++++
+ # --- Table Sediment Data ---
+ # +++++++++++++++++++++++++++
+
+ query5 = f'''SELECT sample_fine_name, sample_fine_index, distance_from_bank_fine, depth_fine, time_fine,
+ Ctot_fine, Ctot_fine_per_cent, D50_fine, frac_vol_fine, frac_vol_fine_cumul,
+ sample_sand_name, sample_sand_index, distance_from_bank_sand, depth_sand, time_sand,
+ Ctot_sand, Ctot_sand_per_cent, D50_sand, frac_vol_sand, frac_vol_sand_cumul
+ from SedimentsData'''
+
+ data5 = cur.execute(query5).fetchall()
+
+ stg.frac_vol_fine = []
+ stg.frac_vol_fine_cumul = []
+ stg.frac_vol_sand = []
+ stg.frac_vol_sand_cumul = []
+
+ for f in range(len(data5)):
+ stg.sample_fine.append((data5[f][0], data5[f][1]))
+ stg.distance_from_bank_fine.append(data5[f][2])
+ stg.depth_fine.append(data5[f][3])
+ stg.time_fine.append(data5[f][4])
+ stg.Ctot_fine.append(data5[f][5])
+ stg.Ctot_fine_per_cent.append(data5[f][6])
+ stg.D50_fine.append(data5[f][7])
+ print("np.frombuffer(data4[f][8], dtype=np.float64) ", np.frombuffer(data5[f][8], dtype=np.float64))
+ stg.frac_vol_fine.append(np.frombuffer(data5[f][8], dtype=np.float64))
+ stg.frac_vol_fine_cumul.append(np.frombuffer(data5[f][9], dtype=np.float64))
+ stg.sample_sand.append((data5[f][10], data5[f][11]))
+ stg.distance_from_bank_sand.append(data5[f][12])
+ stg.depth_sand.append(data5[f][13])
+ stg.time_sand.append(data5[f][14])
+ stg.Ctot_sand.append(data5[f][15])
+ stg.Ctot_sand_per_cent.append(data5[f][16])
+ stg.D50_sand.append(data5[f][17])
+ stg.frac_vol_sand.append(np.frombuffer(data5[f][18], dtype=np.float64))
+ stg.frac_vol_sand_cumul.append(np.frombuffer(data5[f][19], dtype=np.float64))
+
+ stg.frac_vol_fine = np.array(stg.frac_vol_fine)
+ stg.frac_vol_fine_cumul = np.array(stg.frac_vol_fine_cumul)
+ stg.frac_vol_sand = np.array(stg.frac_vol_sand)
+ stg.frac_vol_sand_cumul = np.array(stg.frac_vol_sand_cumul)
+
+ # print("data 4 : ", len(data4), data4)
+ print('data 5 :')
+ print(stg.Ctot_fine, stg.sample_sand)
+ print(type(stg.frac_vol_fine_cumul), stg.frac_vol_fine_cumul)
- # query = '''SELECT acoustic_file FROM File'''
- # cur.execute(query)
- # stg.acoustic_data = cur.fetchall()
# Close database cursor
cur.close()
@@ -114,6 +372,27 @@ class ReadTableForOpen:
# Close database connection
cnx.close()
+ print("read table finished")
+
+ def fill_acoustic_data_tab(self):
+ print("start fill acoustic data tab")
+
+ # tab_adt = AcousticDataTab(self.master_widget)
+ print("1 AcousticDataTab ", id(AcousticDataTab))
+ print("tab_adt.combobox_ABS_system_choice ", self.tab.combobox_ABS_system_choice)
+ self.tab.combobox_ABS_system_choice.editTextChanged.connect(self.tab.ABS_system_choice)
+ if stg.ABS_name[0] == "AQUAscat":
+ self.tab.combobox_ABS_system_choice.setCurrentText(stg.ABS_name[0])
+ print("combobox_ABS_system_choice.setCurrentIndex(1)", self.tab.combobox_ABS_system_choice.itemText(1),
+ self.tab.combobox_ABS_system_choice.itemText(2))
+ else:
+ self.tab.combobox_ABS_system_choice.setCurrentText(stg.ABS_name[0])
+
+ self.tab.plot_backscattered_acoustic_signal_recording()
+ # app = QApplication(sys.argv)
+
+ # sys.exit(app.exec_())
+
def reshape_variables(self):
for i in stg.acoustic_data:
@@ -150,8 +429,3 @@ class ReadTableForOpen:
stg.BS_raw_data.append(np.reshape(stg.BS_raw_data_reshape[i],
(len(stg.freq[i]), stg.depth[i].shape[1], stg.time[i].shape[1])))
-
-
-
-
-
diff --git a/Model/udt_extract/convert_type.py b/Model/udt_extract/convert_type.py
index 0567958..1e1ed6d 100644
--- a/Model/udt_extract/convert_type.py
+++ b/Model/udt_extract/convert_type.py
@@ -161,7 +161,7 @@ def translate_key(raw_key, _type="data"):
#if translated_key == None:
# print("delete %s"%raw_key)
- print(f"translated_key : {translated_key}")
+ # print(f"translated_key : {translated_key}")
return translated_key
def translate_paramdict(param_dict):
diff --git a/Model/update_table_for_save.py b/Model/update_table_for_save.py
index b7fd911..d2060dc 100644
--- a/Model/update_table_for_save.py
+++ b/Model/update_table_for_save.py
@@ -1,3 +1,26 @@
+# ============================================================================== #
+ # update_table_for_save.py - AcouSed #
+ # Copyright (C) 2024 INRAE #
+ # #
+ # This program is free software: you can redistribute it and/or modify #
+ # it under the terms of the GNU General Public License as published by #
+ # the Free Software Foundation, either version 3 of the License, or #
+ # (at your option) any later version. #
+ # #
+ # This program is distributed in the hope that it will be useful, #
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of #
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+ # GNU General Public License for more details. #
+ # #
+ # You should have received a copy of the GNU General Public License #
+ # along with this program. If not, see . #
+
+ # by Brahim MOUDJED #
+# ============================================================================== #
+
+# -*- coding: utf-8 -*-
+
+
import numpy as np
from PyQt5.QtWidgets import QFileDialog, QApplication, QMessageBox
import sqlite3
@@ -82,8 +105,11 @@ class UpdateTableForSave:
cur.execute("DROP TABLE if exists Measure")
cur.execute("""CREATE TABLE Measure(ID INTEGER PRIMARY KEY AUTOINCREMENT,
- acoustic_data INTEGER,
- frequency FLOAT,
+ acoustic_data INTEGER,
+ Date STRING,
+ Hour STRING,
+ frequency FLOAT,
+ sound_attenuation FLOAT,
kt_read FLOAT,
kt_corrected FLOAT,
NbProfiles FLOAT,
@@ -94,21 +120,26 @@ class UpdateTableForSave:
NbPingsPerSeconds FLOAT,
NbPingsAveragedPerProfile FLOAT,
GainRx FLOAT,
- GainTx FLOAT)
+ GainTx FLOAT
+ )
""")
# Fill the table Measure
for i in stg.acoustic_data:
for j in range(stg.freq[i].shape[0]):
- cur.execute(''' INSERT into Measure(acoustic_data, frequency, kt_read, kt_corrected, NbProfiles,
+ cur.execute(''' INSERT into Measure(acoustic_data, Date, Hour, frequency, sound_attenuation, kt_read, kt_corrected, NbProfiles,
NbProfilesPerSeconds, NbCells, CellSize, PulseLength,
- NbPingsPerSeconds, NbPingsAveragedPerProfile, GainRx, GainTx)
- VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''',
- (stg.acoustic_data[i], stg.freq[i][j], stg.kt_read[j], stg.kt_corrected[j],
+ NbPingsPerSeconds, NbPingsAveragedPerProfile, GainRx, GainTx,
+ )
+ VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''',
+ (stg.acoustic_data[i], stg.freq[i][j], stg.water_attenuation[i][j], stg.kt_read[j], stg.kt_corrected[j],
stg.nb_profiles[i][j], stg.nb_profiles_per_sec[i][j], stg.nb_cells[i][j],
stg.cell_size[i][j], stg.pulse_length[i][j], stg.nb_pings_per_sec[i][j],
- stg.nb_pings_averaged_per_profile[i][j], stg.gain_rx[i][j], stg.gain_tx[i][j]))
+ stg.nb_pings_averaged_per_profile[i][j], stg.gain_rx[i][j], stg.gain_tx[i][j],
+ str(stg.date[i].year) + str('-') + str(stg.date[i].month) + str('-') + str(stg.date[i].day),
+ str(stg.hour[i].hour) + str(':') + str(stg.hour[i].minute)
+ ))
# Commit the transaction after executing INSERT.
cnx.commit()
@@ -126,30 +157,38 @@ class UpdateTableForSave:
cur.execute('''CREATE TABLE BSRawData(ID INTEGER PRIMARY KEY AUTOINCREMENT,
acoustic_data INTEGER,
- time BLOB, depth BLOB, BS_raw_data BLOB,
+ time BLOB, depth BLOB, BS_raw_data BLOB,
+ time_reshape BLOB, depth_reshape BLOB, BS_raw_data_reshape BLOB,
time_cross_section BLOB, depth_cross_section BLOB, BS_cross_section BLOB, BS_stream_bed BLOB,
depth_bottom, val_bottom, ind_bottom,
time_noise BLOB, depth_noise BLOB, BS_noise_raw_data BLOB,
SNR_raw_data BLOB, SNR_cross_section BLOB, SNR_stream_bed BLOB,
BS_raw_data_pre_process_SNR BLOB, BS_raw_data_pre_process_average BLOB,
BS_cross_section_pre_process_SNR BLOB, BS_cross_section_pre_process_average BLOB,
- BS_stream_bed_pre_process_SNR BLOB, BS_stream_bed_pre_process_average BLOB
+ BS_stream_bed_pre_process_SNR BLOB, BS_stream_bed_pre_process_average BLOB,
+ BS_mean BLOB
)''')
for i in stg.acoustic_data:
cur.execute(''' INSERT into BSRawData(acoustic_data, time, depth, BS_raw_data,
+ time_reshape, depth_reshape, BS_raw_data_reshape,
time_cross_section, depth_cross_section,
BS_cross_section, BS_stream_bed,
+ depth_bottom, val_bottom, ind_bottom,
time_noise, depth_noise, BS_noise_raw_data,
SNR_raw_data, SNR_cross_section, SNR_stream_bed,
BS_raw_data_pre_process_SNR, BS_raw_data_pre_process_average,
BS_cross_section_pre_process_SNR, BS_cross_section_pre_process_average,
- BS_stream_bed_pre_process_SNR, BS_stream_bed_pre_process_average)
- VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''',
+ BS_stream_bed_pre_process_SNR, BS_stream_bed_pre_process_average,
+ BS_mean)
+ VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''',
(stg.acoustic_data[i], stg.time[i].tobytes(), stg.depth[i].tobytes(), stg.BS_raw_data[i].tobytes(),
+ stg.time_reshape[i].tobytes(), stg.depth_reshape[i].tobytes(), stg.BS_raw_data_reshape[i].tobytes(),
stg.time_cross_section[i].tobytes(), stg.depth_cross_section[i].tobytes(), stg.BS_cross_section[i].tobytes(),
- stg.BS_stream_bed[i].tobytes(), stg.time_noise[i].tobytes(), stg.depth_noise[i].tobytes(),
+ stg.BS_stream_bed[i].tobytes(),
+ stg.depth_bottom[i].tobytes(), stg.val_bottom[i].tobytes(), np.array(stg.ind_bottom[i]).tobytes(),
+ stg.time_noise[i].tobytes(), stg.depth_noise[i].tobytes(),
stg.BS_noise_raw_data[i].tobytes(),
stg.SNR_raw_data[i].tobytes(), stg.SNR_cross_section[i].tobytes(),
stg.SNR_stream_bed[i].tobytes(),
@@ -158,7 +197,8 @@ class UpdateTableForSave:
stg.BS_cross_section_pre_process_SNR[i].tobytes(),
stg.BS_cross_section_pre_process_average[i].tobytes(),
stg.BS_stream_bed_pre_process_SNR[i].tobytes(),
- stg.BS_stream_bed_pre_process_average[i].tobytes()
+ stg.BS_stream_bed_pre_process_average[i].tobytes(),
+ stg.BS_mean[i].tobytes()
)
)
@@ -180,7 +220,7 @@ class UpdateTableForSave:
temperature FLOAT,
tmin_index FLOAT, tmin_value FLOAT, tmax_index FLOAT, tmax_value FLOAT,
rmin_index FLOAT, rmin_value FLOAT, rmax_index FLOAT, rmax_value FLOAT,
- freq_bottom_detection, dept_bottom_detection_min, depth_bottom_detection_max, depth_bottom_detection_1st_int_area,
+ freq_bottom_detection_index FLOAT, freq_bottom_detection_value STRING,
SNR_filter_value FLOAT, Nb_cells_to_average_BS_signal FLOAT
)'''
)
@@ -189,11 +229,13 @@ class UpdateTableForSave:
cur.execute('''INSERT into Settings(acoustic_data, temperature,
tmin_index, tmin_value, tmax_index, tmax_value,
rmin_index, rmin_value, rmax_index, rmax_value,
+ freq_bottom_detection_index, freq_bottom_detection_value,
SNR_filter_value, Nb_cells_to_average_BS_signal)
- VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''',
+ VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''',
(stg.acoustic_data[i], stg.temperature,
stg.tmin[i][0], stg.tmin[i][1], stg.tmax[i][0], stg.tmax[i][1],
stg.rmin[i][0], stg.rmin[i][1], stg.rmax[i][0], stg.rmax[i][1],
+ stg.freq_bottom_detection[i][0], stg.freq_bottom_detection[i][1],
stg.SNR_filter_value[i], stg.Nb_cells_to_average_BS_signal[i])
)
@@ -211,13 +253,33 @@ class UpdateTableForSave:
cur.execute("DROP TABLE if exists SedimentsFile")
cur.execute("""CREATE TABLE SedimentsFile(ID INTEGER PRIMARY KEY AUTOINCREMENT,
- path_fine STRING,
- filename_fine STRING
- )"""
+ path_fine STRING,
+ filename_fine STRING,
+ radius_grain_fine BLOB,
+ path_sand STRING,
+ filename_sand STRING,
+ radius_grain_sand BLOB,
+ time_column_label STRING,
+ distance_from_bank_column_label STRING,
+ depth_column_label STRING,
+ Ctot_fine_column_label STRING,
+ D50_fine_column_label STRING,
+ Ctot_sand_column_label STRING,
+ D50_sand_column_label STRING
+ )"""
)
- cur.execute('''INSERT into SedimentsFile(path_fine, filename_fine) VALUES(?, ?)''',
- (stg.path_fine, stg.filename_fine))
+ cur.execute('''INSERT into SedimentsFile(path_fine, filename_fine, radius_grain_fine,
+ path_sand, filename_sand, radius_grain_sand,
+ time_column_label, distance_from_bank_column_label,
+ depth_column_label, Ctot_fine_column_label,
+ D50_fine_column_label, Ctot_sand_column_label,
+ D50_sand_column_label)
+ VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''',
+ (stg.path_fine, stg.filename_fine, stg.radius_grain_fine.tobytes(),
+ stg.path_sand, stg.filename_sand, stg.radius_grain_sand.tobytes(),
+ stg.columns_fine[0], stg.columns_fine[1], stg.columns_fine[2],
+ stg.columns_fine[3], stg.columns_fine[4], stg.columns_sand[3], stg.columns_sand[4]))
cnx.commit()
@@ -242,19 +304,37 @@ class UpdateTableForSave:
Ctot_fine_per_cent FLOAT,
D50_fine FLOAT,
frac_vol_fine BLOB,
- frac_vol_fine_cumul BLOB
+ frac_vol_fine_cumul BLOB,
+ sample_sand_name STRING,
+ sample_sand_index INTEGER,
+ distance_from_bank_sand FLOAT,
+ depth_sand FLOAT,
+ time_sand FLOAT,
+ Ctot_sand FLOAT,
+ Ctot_sand_per_cent FLOAT,
+ D50_sand FLOAT,
+ frac_vol_sand BLOB,
+ frac_vol_sand_cumul BLOB
)"""
)
for f in range(len(stg.sample_fine)):
cur.execute('''INSERT into SedimentsData(sample_fine_name, sample_fine_index, distance_from_bank_fine,
depth_fine, time_fine, Ctot_fine, Ctot_fine_per_cent, D50_fine, frac_vol_fine,
- frac_vol_fine_cumul)
- VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''',
+ frac_vol_fine_cumul,
+ sample_sand_name, sample_sand_index, distance_from_bank_sand,
+ depth_sand, time_sand, Ctot_sand, Ctot_sand_per_cent, D50_sand, frac_vol_sand,
+ frac_vol_sand_cumul)
+ VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''',
(stg.sample_fine[f][0], stg.sample_fine[f][1],
stg.distance_from_bank_fine[f], stg.depth_fine[f], stg.time_fine[f], stg.Ctot_fine[f],
stg.Ctot_fine_per_cent[f], stg.D50_fine[f],
- stg.frac_vol_fine[f].tobytes(), stg.frac_vol_fine_cumul[f].tobytes()))
+ stg.frac_vol_fine[f].tobytes(), stg.frac_vol_fine_cumul[f].tobytes(),
+ stg.sample_sand[f][0], stg.sample_sand[f][1],
+ stg.distance_from_bank_sand[f], stg.depth_sand[f], stg.time_sand[f], stg.Ctot_sand[f],
+ stg.Ctot_sand_per_cent[f], stg.D50_sand[f],
+ stg.frac_vol_sand[f].tobytes(), stg.frac_vol_sand_cumul[f].tobytes()
+ ))
cnx.commit()
diff --git a/Tutorial_AQUAscat_software.pdf b/Tutorial_AQUAscat_software.pdf
new file mode 100644
index 0000000..5080134
Binary files /dev/null and b/Tutorial_AQUAscat_software.pdf differ
diff --git a/View/about_window.py b/View/about_window.py
index 8860ae9..4a914ca 100644
--- a/View/about_window.py
+++ b/View/about_window.py
@@ -1,12 +1,28 @@
-import sys
+# ============================================================================== #
+ # about_window.py - AcouSed #
+ # Copyright (C) 2024 INRAE #
+ # #
+ # This program is free software: you can redistribute it and/or modify #
+ # it under the terms of the GNU General Public License as published by #
+ # the Free Software Foundation, either version 3 of the License, or #
+ # (at your option) any later version. #
+ # #
+ # This program is distributed in the hope that it will be useful, #
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of #
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+ # GNU General Public License for more details. #
+ # #
+ # You should have received a copy of the GNU General Public License #
+ # along with this program. If not, see . #
+ # by Brahim MOUDJED #
+# ============================================================================== #
+
+import sys
from PyQt5.QtGui import QIcon, QPixmap, QFont
from PyQt5.QtWidgets import (QWidget, QLabel, QHBoxLayout, QVBoxLayout, QApplication, QMainWindow, QGridLayout,
- QDialog, QDialogButtonBox, QPushButton, QTextEdit, QFrame)
+ QDialog, QDialogButtonBox, QPushButton, QTextEdit, QFrame, QLineEdit)
from PyQt5.QtCore import Qt
-from datetime import date
-
-from Translation.constant_string import HORIZONTAL
class AboutWindow(QDialog):
@@ -15,7 +31,7 @@ class AboutWindow(QDialog):
super().__init__()
- self.logo_path = "/home/bmoudjed/Documents/3 SSC acoustic meas project/Graphical interface project/acoused/Logo/"
+ self.logo_path = "./Logo"
self.logo_AcouSed = QPixmap(self.logo_path + "/" + "Logo_AcouSed_AboutAcouSedWindow.png")
self.logo_AcouSed.scaled(16, 16, Qt.KeepAspectRatio, Qt.SmoothTransformation)
@@ -25,8 +41,6 @@ class AboutWindow(QDialog):
self.setWindowTitle("About AcouSed")
- # self.buttonBox = QDialogButtonBox.close
-
self.verticalLayout_Main = QVBoxLayout()
self.setLayout(self.verticalLayout_Main)
@@ -40,12 +54,12 @@ class AboutWindow(QDialog):
self.gridLayout.addWidget(self.label_logo_AcouSed, 0, 0, 3, 1, Qt.AlignCenter)
self.label_acoused = QLabel()
- self.label_acoused.setText("Acoused 1.15")
+ self.label_acoused.setText("Acoused 2.0")
self.label_acoused.setFont(QFont("Ubuntu", 14))
self.gridLayout.addWidget(self.label_acoused, 0, 1, 1, 1, Qt.AlignCenter)
self.label_date = QLabel()
- self.label_date.setText("2024.11.04")
+ self.label_date.setText("2025.01.01")
self.label_date.setFont(QFont("Ubuntu", 12))
self.gridLayout.addWidget(self.label_date, 1, 1, 1, 1, Qt.AlignCenter)
@@ -53,14 +67,10 @@ class AboutWindow(QDialog):
self.label_logo_INRAE.setPixmap(self.logo_INRAE.scaledToHeight(42, Qt.SmoothTransformation))
self.gridLayout.addWidget(self.label_logo_INRAE, 2, 1, 1, 1, Qt.AlignCenter)
- # self.label_date = QLabel()
- # self.label_date.setText(f"")
- # self.verticalLayout_AcouSed_info.addWidget(self.label_date)
- #
- # self.label_copyright = QLabel()
- # self.label_copyright.setText(f"")
- # self.verticalLayout_AcouSed_info.addWidget(self.label_copyright)
- # print("je suis la")
+ self.label_contact = QLabel()
+ self.label_contact.setText("Contact : celine.berni@inrae.fr \n"
+ " jerome.lecoz@inrae.fr")
+ self.gridLayout.addWidget(self.label_contact, 3, 1, 1, 1, Qt.AlignLeft)
# ----------------------------------------------------------
@@ -114,7 +124,7 @@ class Licence(QDialog):
self.setWindowTitle("Licence")
- self.setGeometry(500, 300, 400, 400)
+ self.setGeometry(500, 300, 450, 300)
self.verticalLayout = QVBoxLayout()
self.setLayout(self.verticalLayout)
@@ -122,11 +132,18 @@ class Licence(QDialog):
self.textEdit = QTextEdit()
self.verticalLayout.addWidget(self.textEdit)
- self.textEdit.setText("A. HISTORY OF THE SOFTWARE \n "
- "========================== \n\n "
- "B. TERMS AND CONDITIONS \n"
- "======================= \n\n"
- "Open source software .... ")
+ self.textEdit.setText("AcouSed \n"
+ "Copyright (C) 2024 - INRAE \n\n"
+ "This program is free software: you can redistribute it and/or modify \n"
+ "it under the terms of the GNU General Public License as published by \n"
+ "the Free Software Foundation, either version 3 of the License, or \n "
+ "(at your option) any later version. \n\n"
+ "This program is distributed in the hope that it will be useful, \n"
+ "but WITHOUT ANY WARRANTY; without even the implied warranty of \n"
+ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n"
+ "GNU General Public License for more details. \n\n"
+ "You should have received a copy of the GNU General Public License \n"
+ "along with this program. If not, see .")
class Copyright(QDialog):
@@ -135,19 +152,26 @@ class Copyright(QDialog):
super().__init__()
+ self.logo_path = "./Logo"
+ self.logo_INRAE = QPixmap(self.logo_path + "/" + "BlocMarque-INRAE-Inter.jpg")
+
self.setWindowTitle("Copyright")
- self.setGeometry(500, 300, 400, 400)
+ self.setGeometry(500, 300, 200, 200)
- self.verticalLayout = QVBoxLayout()
- self.setLayout(self.verticalLayout)
+ self.gridLayout = QGridLayout()
+ self.setLayout(self.gridLayout)
self.textEdit = QTextEdit()
- self.verticalLayout.addWidget(self.textEdit)
+ self.gridLayout.addWidget(self.textEdit, 0, 0, 1, 1)
- self.textEdit.setText("Copyright (c) 2024-2030. \n"
+ self.textEdit.setText("Copyright (c) 2024. INRAE \n"
"All Rights Reserved.")
+ self.label_INRAE = QLabel()
+ self.label_INRAE.setPixmap(self.logo_INRAE.scaledToHeight(64, Qt.SmoothTransformation))
+ self.gridLayout.addWidget(self.label_INRAE, 1, 0, 1, 1, Qt.AlignCenter)
+
class Support(QDialog):
@@ -155,149 +179,49 @@ class Support(QDialog):
super().__init__()
+ self.logo_path = "./Logo"
+
+ self.logo_OSR = QPixmap(self.logo_path + '/' + "OSR.png")
+ self.logo_CNR = QPixmap(self.logo_path + '/' + "CNR.png")
+ self.logo_EDF = QPixmap(self.logo_path + '/' + "EDF.png")
+ self.logo_Ubertone = QPixmap(self.logo_path + '/' + "Ubertone.jpeg")
+
self.setWindowTitle("Support")
- self.setGeometry(500, 300, 400, 400)
+ self.setGeometry(500, 300, 300, 300)
- self.verticalLayout = QVBoxLayout()
- self.setLayout(self.verticalLayout)
+ self.gridLayout = QGridLayout()
+ self.setLayout(self.gridLayout)
- self.textEdit = QTextEdit()
- self.verticalLayout.addWidget(self.textEdit)
+ self.label_support = QLabel()
+ self.label_support.setText("The development of AcouSed was supported by OSR6 and CNR Company.")
+ self.gridLayout.addWidget(self.label_support, 0, 0, 1, 2, Qt.AlignLeft)
- self.textEdit.setText("The development of AcouSed was supported by OSR6 and CNR. \n"
- "It was made in collaboration with Ubertone and EDF Companies.")
+ self.label_OSR = QLabel()
+ self.label_OSR.setPixmap(self.logo_OSR.scaledToHeight(96, Qt.SmoothTransformation))
+ self.gridLayout.addWidget(self.label_OSR, 1, 0, 1, 1, Qt.AlignCenter)
+
+ self.label_CNR = QLabel()
+ self.label_CNR.setPixmap(self.logo_CNR.scaledToHeight(32, Qt.SmoothTransformation))
+ self.gridLayout.addWidget(self.label_CNR, 1, 1, 1, 1, Qt.AlignCenter)
+
+ self.label_collaboration = QLabel()
+ self.label_collaboration.setText("It was made in collaboration with Ubertone and EDF Companies.")
+ self.gridLayout.addWidget(self.label_collaboration, 2, 0, 1, 2, Qt.AlignLeft)
+
+ self.label_Ubertone = QLabel()
+ self.label_Ubertone.setPixmap(self.logo_Ubertone.scaledToHeight(48, Qt.SmoothTransformation))
+ self.gridLayout.addWidget(self.label_Ubertone, 3, 0, 1, 1, Qt.AlignCenter)
+
+ self.label_EDF = QLabel()
+ self.label_EDF.setPixmap(self.logo_EDF.scaledToHeight(48, Qt.SmoothTransformation))
+ self.gridLayout.addWidget(self.label_EDF, 3, 1, 1, 1, Qt.AlignCenter)
-# app = QApplication(sys.argv)
-# w = AboutWindow()
-# sys.exit(app.exec_())
-
-if __name__ == "__main__":
- app = QApplication(sys.argv)
- # otherwindow = QMainWindow()
- # w = AboutWindow(otherwindow)
- w = AboutWindow()
- print(w)
- w.show()
- print("et ici")
- # otherwindow.show()
- # MainWindow = QMainWindow()
- # ui = Ui_MainWindow()
- # ui.setupUi(MainWindow)
- # MainWindow.show()
- sys.exit(app.exec_())
+# if __name__ == "__main__":
+# app = QApplication(sys.argv)
+# w = AboutWindow()
+# w.show()
+# sys.exit(app.exec_())
-
-# import sys
-# from PyQt5.QtWidgets import *
-# from PyQt5.QtGui import *
-# from PyQt5.QtCore import *
-#
-#
-# class AboutWindow(QWidget):
-#
-# def __init__(self):
-#
-# super().__init__()
-#
-# # self.centralwidget = QWidget(window)
-#
-# self.execute()
-#
-# def execute(self):
-#
-# self.resize(300, 500)
-# self.move(200, 200)
-# self.setWindowTitle("Ma première fenêtre simple")
-# # self.setWindowFlags(Qt.Popup)
-#
-# # QIcon
-# icone = QIcon("PyQt5_icone.jpeg")
-# self.setWindowIcon(icone)
-#
-# # QLabel
-# label1 = QLabel("PyQt", self)
-# label1.setText(label1.text() + "5")
-# label1.setMargin(5)
-# label1.setIndent(50)
-#
-# # QPixmap
-# pic = QPixmap("PyQt5_icone.jpeg")
-# label2 = QLabel(self)
-# label2.setPixmap(pic)
-# label2.setScaledContents(True)
-# label2.resize(50, 50)
-# label2.move(60, 50)
-#
-# # label3 = QLabel("Phrase test :", self)
-# label3 = QLabel(self)
-# label3.setText("Phrase test :")
-# label3.move(10, 125)
-#
-# # QLineEdit
-# line_edit = QLineEdit(self)
-# line_edit.move(100, 125)
-# line_edit.resize(150, 20)
-# line_edit.setText("Ma Valeur par défaut")
-#
-# # QPushButton
-# button = QPushButton(self)
-# button.setText('Cliquez')
-# button.move(30, 150)
-#
-# # QCheckBox
-# checkbox = QCheckBox(self)
-# checkbox.setText("Bouton Check Box")
-# checkbox.move(30, 200)
-# checkbox.setChecked(True)
-#
-# if checkbox.isChecked() == True:
-# label1.setText("La case est coché")
-# else:
-# label1.setText("la case n'est pas coché")
-#
-# # QRadioButton
-# radiobutton = QRadioButton(self)
-# radiobutton.setText('Bouton Radio')
-# radiobutton.move(30, 220)
-#
-# # QComboBox
-# combobox = QComboBox(self)
-# combobox.addItems(["France", "Espagne", "Italie", "Allemagne", "Royaume-Uni"])
-# combobox.move(100, 250)
-#
-# label4 = QLabel("Choix du pays", self)
-# label4.move(5, 250)
-#
-# # QSpinBox
-# spinbox = QSpinBox(self)
-# spinbox.move(75, 300)
-#
-# label5 = QLabel("Valeur :", self)
-# label5.move(5, 300)
-#
-# # QProgressBar
-# progressbar = QProgressBar(self)
-# progressbar.setGeometry(5, 350, 150, 30)
-# progressbar.setValue(0)
-#
-# # QTextEdit
-# textedit = QTextEdit(self)
-# textedit.move(20, 400)
-# textedit.resize(150, 40)
-# textedit.setText("azertyuiopqsdfghjklmwxcvbn azertyuiopqsdfghjklmwxcvbn")
-#
-# self.show()
-# print("coucou")
-#
-# # if __name__ == "__main__":
-# # application = QApplication(sys.argv)
-# #
-# # fenetre = AboutWindow()
-# #
-# # fenetre.show()
-# #
-# # sys.exit(application.exec_())
-#
diff --git a/View/acoustic_data_tab.py b/View/acoustic_data_tab.py
index 5d4c944..3c9b349 100644
--- a/View/acoustic_data_tab.py
+++ b/View/acoustic_data_tab.py
@@ -1,3 +1,26 @@
+# ============================================================================== #
+ # acoustic_data_tab.py - AcouSed #
+ # Copyright (C) 2024 INRAE #
+ # #
+ # This program is free software: you can redistribute it and/or modify #
+ # it under the terms of the GNU General Public License as published by #
+ # the Free Software Foundation, either version 3 of the License, or #
+ # (at your option) any later version. #
+ # #
+ # This program is distributed in the hope that it will be useful, #
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of #
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+ # GNU General Public License for more details. #
+ # #
+ # You should have received a copy of the GNU General Public License #
+ # along with this program. If not, see . #
+
+ # by Brahim MOUDJED #
+# ============================================================================== #
+
+# -*- coding: utf-8 -*-
+
+
import sys
from PyQt5.QtWidgets import (QWidget, QVBoxLayout, QHBoxLayout, QGroupBox, QPushButton, QComboBox, QLineEdit, QLabel,
@@ -47,7 +70,7 @@ _translate = QCoreApplication.translate
class AcousticDataTab(QWidget):
-
+ COMPTEUR = 1
"""
This class generates the Acoustic Data Tab
"""
@@ -61,7 +84,8 @@ class AcousticDataTab(QWidget):
def __init__(self, tab_widget):
super().__init__()
-
+ self.numero = AcousticDataTab.COMPTEUR
+ AcousticDataTab.COMPTEUR += 1
# Utiliser os.path.split() OU os.path.join()
# if name == 'posix':
@@ -83,12 +107,15 @@ class AcousticDataTab(QWidget):
self.icon_clear = QIcon(self.path_icon + "clear.png")
self.icon_between = QPixmap(self.path_icon + "between.png")
self.icon_refresh = QIcon(self.path_icon + "update.png")
-
+ print("CONSTRUCTEUR ", self.numero)
self.calib_kt = CalibrationConstantKt()
### --- General layout of widgets ---
self.verticalLayoutMain = QVBoxLayout(tab_widget)
+ # tab_widget = QTabWidget()
+ # self.verticalLayoutMain = QVBoxLayout()
+ # tab_widget.addLayout(self.verticalLayoutMain)
# self.setLayout(self.verticalLayoutMain)
self.horizontalLayoutTop = QHBoxLayout()
@@ -154,8 +181,6 @@ class AcousticDataTab(QWidget):
# | Group box Download file |
# +++++++++++++++++++++++++++
-
-
# --- Group box Download multiple file ---
# self.groupbox_multiple_acoustic_file = QGroupBox()
@@ -174,6 +199,7 @@ class AcousticDataTab(QWidget):
self.gridLayout_groupbox_acoustic_file = QGridLayout(self.groupbox_acoustic_file)
self.combobox_ABS_system_choice = QComboBox()
+ print("tab1 combobox_ABS_system_choice ", self.combobox_ABS_system_choice)
self.combobox_ABS_system_choice.addItems([" ", "AQUAscat", "UBSediFlow"])
self.gridLayout_groupbox_acoustic_file.addWidget(self.combobox_ABS_system_choice, 0, 0, 1, 1)
@@ -1313,6 +1339,7 @@ class AcousticDataTab(QWidget):
self.delBtn.clicked.connect(self.remove_file_from_ListWidget)
self.clearBtn.clicked.connect(self.clear_files_from_ListWidget)
+ # self.fileListWidget.itemSelectionChanged.connect(self.fileListWidget_function)
self.fileListWidget.itemSelectionChanged.connect(self.print_selected_file)
self.fileListWidget.itemSelectionChanged.connect(self.fill_measurements_information_groupbox)
self.fileListWidget.itemSelectionChanged.connect(self.fill_table)
@@ -1403,6 +1430,19 @@ class AcousticDataTab(QWidget):
def print_range_changed(self):
print(f"tmax = {self.doubleRangeSlider_depth.value()[1]}")
+ # def fileListWidget_function(self):
+ # self.print_selected_file()
+ # self.fill_measurements_information_groupbox()
+ # self.fill_table()
+ # self.compute_tmin_tmax()
+ # self.compute_rmin_rmax()
+ # self.update_frequency_combobox()
+ # self.plot_backscattered_acoustic_signal_recording()
+ # self.plot_profile()
+ # self.update_plot_backscattered_acoustic_signal_recording()
+ # self.update_plot_profile()
+ # self.set_range_for_spinboxes_bathymetry()
+
def retranslate_acoustic_data_tab(self):
# self.groupbox_download.setTitle(_translate("CONSTANT_STRING", cs.DOWNLOAD))
@@ -1530,11 +1570,14 @@ class AcousticDataTab(QWidget):
def ABS_system_choice(self):
if self.combobox_ABS_system_choice.currentText() == " ":
+ print("0 combobox_ABS_system_choice ", self.combobox_ABS_system_choice.currentText())
self.groupbox_measurement_information_no_ABS()
elif self.combobox_ABS_system_choice.currentText() == "AQUAscat":
+ print("1 combobox_ABS_system_choice ", self.combobox_ABS_system_choice.currentText())
self.groupbox_measurement_information_Aquascat()
# self.lineEdit_acoustic_file.clear()
elif self.combobox_ABS_system_choice.currentText() == "UBSediFlow":
+ print("2 combobox_ABS_system_choice ", self.combobox_ABS_system_choice.currentText())
self.groupbox_measurement_information_UBSediFlow()
# self.lineEdit_acoustic_file.clear()
# self.label_date_groupbox_acoustic_file.clear()
@@ -1653,7 +1696,7 @@ class AcousticDataTab(QWidget):
# self.spinbox_tx.hide()
self.lineEdit_tx.hide()
self.checkbox_tx.hide()
-
+ print("Coucou 0")
for i in reversed(range(self.gridLayout_groupbox_info.count())):
widgetToRemove = self.gridLayout_groupbox_info.itemAt(i).widget()
# remove it from the layout list
@@ -1700,6 +1743,7 @@ class AcousticDataTab(QWidget):
self.gridLayout_groupbox_info.addWidget(self.lineEdit_speed_of_sound, 4, 1, 1, 1, Qt.AlignLeft)
self.label_speed_of_sound_unit.show()
self.gridLayout_groupbox_info.addWidget(self.label_speed_of_sound_unit, 4, 2, 1, 1, Qt.AlignLeft)
+ print("Coucou 1.5")
self.label_freq.show()
self.gridLayout_groupbox_info.addWidget(self.label_freq, 5, 0, 1, 1, Qt.AlignLeft)
@@ -1754,6 +1798,7 @@ class AcousticDataTab(QWidget):
self.gridLayout_groupbox_info.addWidget(self.lineEdit_tx, 16, 1, 1, 1, Qt.AlignLeft)
self.checkbox_tx.show()
self.gridLayout_groupbox_info.addWidget(self.checkbox_tx, 16, 3, 1, 1, Qt.AlignLeft)
+ print("Coucou 2")
def groupbox_measurement_information_UBSediFlow(self):
# --- Hide Aquascat information ---
@@ -2099,7 +2144,7 @@ class AcousticDataTab(QWidget):
msgBox.setStandardButtons(QMessageBox.Ok)
msgBox.exec()
elif self.combobox_ABS_system_choice.currentIndex() == 1:
- print("hello ", [stg.path_BS_raw_data[-1] if self.fileListWidget.count() > 0 else ""][0])
+ # print("hello ", [stg.path_BS_raw_data[-1] if self.fileListWidget.count() > 0 else ""][0])
filename = QFileDialog.getOpenFileNames(self, "AQUAscat file",
[stg.path_BS_raw_data[-1] if self.fileListWidget.count() > 0 else ""][0],
"Aquascat file (*.aqa)",
@@ -2519,7 +2564,7 @@ class AcousticDataTab(QWidget):
stg.BS_raw_data.append(acoustic_data._BS_raw_data)
stg.BS_raw_data_reshape.append(acoustic_data.reshape_BS_raw_data())
stg.depth.append(acoustic_data._r)
- stg.depth_2D.append(acoustic_data.compute_r_2D())
+ stg.depth_2D.append(np.array([]))
print("stg.depth_2D ", len(stg.depth_2D), stg.depth_2D[0].shape)
# stg.depth_2D.append(np.array([]))
stg.depth_reshape.append(acoustic_data.reshape_r())
@@ -2531,6 +2576,7 @@ class AcousticDataTab(QWidget):
print("stg.freq text", stg.freq_text)
stg.date.append(acoustic_data._date)
stg.hour.append(acoustic_data._hour)
+ print("date ", stg.date, "hour ", stg.hour)
stg.distance_from_ABS_to_free_surface.append(0.00)
stg.nb_profiles.append(acoustic_data._nb_profiles)
stg.nb_profiles_per_sec.append(acoustic_data._nb_profiles_per_sec)
@@ -2557,16 +2603,16 @@ class AcousticDataTab(QWidget):
stg.depth_cross_section.append(np.array([]))
stg.time_cross_section.append(np.array([]))
- stg.tmin.append("")
- stg.tmax.append("")
- stg.rmin.append("")
- stg.rmax.append("")
+ stg.tmin.append((0, 0))
+ stg.tmax.append((0, 0))
+ stg.rmin.append((0, 0))
+ stg.rmax.append((0, 0))
stg.BS_stream_bed.append(np.array([]))
stg.depth_bottom.append(np.array([]))
stg.val_bottom.append([])
stg.ind_bottom.append([])
- stg.freq_bottom_detection.append(())
+ stg.freq_bottom_detection.append((0, 0))
# stg.depth_bottom_detection_1st_int_area.append([])
stg.BS_mean.append(np.array([]))
@@ -2603,6 +2649,8 @@ class AcousticDataTab(QWidget):
# stg.fine_sample_position.append([])
# stg.sand_sample_position.append([])
+ stg.kt2D.append(np.array([]))
+ stg.kt3D.append(np.array([]))
stg.J_cross_section.append([np.array([]), np.array([])])
stg.VBI_cross_section.append(np.array([]))
stg.SSC_fine.append(np.array([]))
@@ -2726,6 +2774,7 @@ class AcousticDataTab(QWidget):
# self.spinbox_tx.setValue(stg.gain_tx[self.fileListWidget.currentRow()][self.combobox_frequency_information.currentIndex()])
# self.spinbox_tx.setEnabled(False)
+ print("--gain tx-- ", self.fileListWidget.currentRow(), self.combobox_frequency_information.currentIndex(), stg.gain_tx)
self.lineEdit_tx.setText(str("%.2f" % stg.gain_tx[self.fileListWidget.currentRow()][self.combobox_frequency_information.currentIndex()]))
self.lineEdit_tx.setEnabled(False)
self.checkbox_tx.stateChanged.connect(self.activate_unactivate_spinbox_tx)
@@ -3360,14 +3409,16 @@ class AcousticDataTab(QWidget):
# self.verticalLayout_groupbox_transect_2Dplot_raw_BS_data.addWidget(self.scroll_BS)
# plt.close(self.fig_BS)
-
- if self.fileListWidget.currentRow() != -1:
+ print("On est là ")
+ print("fileList widget ", self.fileListWidget.count())
+ # if self.fileListWidget.currentRow() != -1:
+ if self.fileListWidget.count() > 0:
self.verticalLayout_groupbox_transect_2Dplot_raw_BS_data.removeWidget(self.toolbar_BS)
self.verticalLayout_groupbox_transect_2Dplot_raw_BS_data.removeWidget(self.scroll_BS)
self.fig_BS, self.axis_BS = plt.subplots(nrows=stg.freq[self.fileListWidget.currentRow()].shape[0], ncols=1,
- sharex=True, sharey=False, layout="constrained")
+ sharex=False, sharey=False, layout="constrained")
self.canvas_BS = FigureCanvas(self.fig_BS)
self.toolbar_BS = NavigationToolBar(self.canvas_BS, self)
# self.verticalLayout_groupbox_transect_2Dplot_raw_BS_data.addWidget(self.canvas_BS)
@@ -3392,11 +3443,14 @@ class AcousticDataTab(QWidget):
# print(f"freq = {f}")
if self.combobox_ABS_system_choice.currentIndex() == 1:
+ print("stg.time[self.fileListWidget.currentRow()][f, :]", stg.time[self.fileListWidget.currentRow()][f, :].shape)
+ print("stg.depth[self.fileListWidget.currentRow()][f, :]", stg.depth[self.fileListWidget.currentRow()][f, :].shape)
+ print("stg.BS_raw_data[self.fileListWidget.currentRow()][f, :, :]", stg.BS_raw_data[self.fileListWidget.currentRow()][f, :, :].shape)
pcm = self.axis_BS[f].pcolormesh(stg.time[self.fileListWidget.currentRow()][f, :],
- -stg.depth[self.fileListWidget.currentRow()][f, :],
- stg.BS_raw_data[self.fileListWidget.currentRow()][f, :, :],
- # stg.BS_raw_data[self.fileListWidget.currentRow()][f, :, int(stg.tmin[self.fileListWidget.currentRow()]):int(stg.tmax[self.fileListWidget.currentRow()])],
- cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
+ -stg.depth[self.fileListWidget.currentRow()][f, :],
+ stg.BS_raw_data[self.fileListWidget.currentRow()][f, :, :],
+ # stg.BS_raw_data[self.fileListWidget.currentRow()][f, :, int(stg.tmin[self.fileListWidget.currentRow()]):int(stg.tmax[self.fileListWidget.currentRow()])],
+ cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
elif self.combobox_ABS_system_choice.currentIndex() == 2:
pcm = self.axis_BS[f].pcolormesh(stg.time[self.fileListWidget.currentRow()][f, :],
@@ -3404,6 +3458,7 @@ class AcousticDataTab(QWidget):
np.log(stg.BS_raw_data[self.fileListWidget.currentRow()][f, :, :]),
# np.log(stg.BS_raw_data[self.fileListWidget.currentRow()][f, :, int(stg.tmin[self.fileListWidget.currentRow()]):int(stg.tmax[self.fileListWidget.currentRow()])]),
cmap='Blues')
+
self.axis_BS[f].text(1, .70, stg.freq_text[self.fileListWidget.currentRow()][f],
fontsize=14, fontweight='bold', fontname="Ubuntu", c="black", alpha=0.5,
horizontalalignment='right', verticalalignment='bottom',
@@ -3422,6 +3477,7 @@ class AcousticDataTab(QWidget):
cbar = self.fig_BS.colorbar(pcm, ax=self.axis_BS[:], shrink=1, location='right')
cbar.set_label(label='Acoustic backscatter signal (V)', rotation=270, labelpad=10)
self.fig_BS.canvas.draw_idle()
+ # plt.show()
# plt.close(self.fig_BS)
# self.plot_profile()
@@ -3446,7 +3502,7 @@ class AcousticDataTab(QWidget):
if len(self.axis_BS.tolist()) != stg.freq[self.fileListWidget.currentRow()].shape[0]:
self.fig_BS, self.axis_BS = plt.subplots(nrows=stg.freq[self.fileListWidget.currentRow()].shape[0],
ncols=1,
- sharex=True, sharey=False, layout="constrained")
+ sharex=False, sharey=False, layout="constrained")
for f, _ in enumerate(stg.freq[self.fileListWidget.currentRow()]):
self.axis_BS[f].cla()
@@ -3827,18 +3883,19 @@ class AcousticDataTab(QWidget):
# if (len(stg.depth_bottom) != 0) and (len(stg.depth_bottom) == self.fileListWidget.count()):
if len(stg.depth_bottom[self.fileListWidget.currentRow()]) != 0:
-
+ print("slider value : ", self.fileListWidget.currentRow(), self.combobox_frequency_profile.currentIndex(),
+ slider_value, stg.ind_bottom[self.fileListWidget.currentRow()][slider_value])
self.axis_profile.plot([0,
- np.nanmax(stg.BS_cross_section[self.fileListWidget.currentRow()][
+ np.nanmax(stg.BS_raw_data[self.fileListWidget.currentRow()][
self.combobox_frequency_profile.currentIndex(),
:, slider_value])],
-stg.depth[self.fileListWidget.currentRow()][
self.combobox_frequency_profile.currentIndex(),
- stg.ind_bottom[self.fileListWidget.currentRow()][slider_value]] * np.ones(2),
+ int(stg.ind_bottom[self.fileListWidget.currentRow()][slider_value])] * np.ones(2),
linestyle='solid', color='r', linewidth=1)
position_x = (stg.depth[self.fileListWidget.currentRow()][self.combobox_frequency_profile.currentIndex(),
- stg.ind_bottom[self.fileListWidget.currentRow()][slider_value]] /
+ int(stg.ind_bottom[self.fileListWidget.currentRow()][slider_value])] /
np.nanmax(
stg.depth[self.fileListWidget.currentRow()][self.combobox_frequency_profile.currentIndex(),
:]))
@@ -3900,13 +3957,13 @@ class AcousticDataTab(QWidget):
:, slider_value])],
-stg.depth[self.fileListWidget.currentRow()][
self.combobox_frequency_profile.currentIndex(),
- stg.ind_bottom[self.fileListWidget.currentRow()][
- slider_value]] * np.ones(2),
+ int(stg.ind_bottom[self.fileListWidget.currentRow()][
+ slider_value])] * np.ones(2),
linestyle='solid', color='r', linewidth=1)
position_x = (stg.depth[self.fileListWidget.currentRow()][
self.combobox_frequency_profile.currentIndex(),
- stg.ind_bottom[self.fileListWidget.currentRow()][slider_value]] /
+ int(stg.ind_bottom[self.fileListWidget.currentRow()][slider_value])] /
np.nanmax(stg.depth[self.fileListWidget.currentRow()][
self.combobox_frequency_profile.currentIndex(), :]))
@@ -3949,13 +4006,13 @@ class AcousticDataTab(QWidget):
:, slider_value])],
-stg.depth[self.fileListWidget.currentRow()][
self.combobox_frequency_profile.currentIndex(),
- stg.ind_bottom[self.fileListWidget.currentRow()][
- slider_value]] * np.ones(2),
+ int(stg.ind_bottom[self.fileListWidget.currentRow()][
+ slider_value])] * np.ones(2),
linestyle='solid', color='r', linewidth=1)
position_x = (stg.depth[self.fileListWidget.currentRow()][
self.combobox_frequency_profile.currentIndex(),
- stg.ind_bottom[self.fileListWidget.currentRow()][slider_value]] /
+ int(stg.ind_bottom[self.fileListWidget.currentRow()][slider_value])] /
np.nanmax(stg.depth[self.fileListWidget.currentRow()][
self.combobox_frequency_profile.currentIndex(), :]))
diff --git a/View/acoustic_inversion_tab.py b/View/acoustic_inversion_tab.py
index 2a69f26..5a04c6c 100644
--- a/View/acoustic_inversion_tab.py
+++ b/View/acoustic_inversion_tab.py
@@ -1,8 +1,9 @@
import sys
+import pandas as pd
from PyQt5.QtWidgets import (QWidget, QMainWindow, QApplication, QVBoxLayout, QHBoxLayout, QGroupBox, QComboBox,
QGridLayout, QLabel, QPushButton, QSpinBox, QDoubleSpinBox, QAbstractSpinBox, QSpacerItem,
- QSizePolicy, QSlider, QLineEdit, QMessageBox)
+ QSizePolicy, QSlider, QLineEdit, QMessageBox, QFileDialog)
from PyQt5.QtCore import QCoreApplication, Qt, pyqtSignal
from PyQt5.QtGui import QStandardItemModel, QIcon, QPixmap
@@ -17,6 +18,7 @@ from matplotlib.colors import LogNorm, BoundaryNorm, CSS4_COLORS
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolBar
+from os import path, chdir
import datetime
from scipy import stats
@@ -32,6 +34,7 @@ import settings as stg
from View.show_popup_combobox import ComboBoxShowPopUpWindow
from Model.acoustic_inversion_method_high_concentration import AcousticInversionMethodHighConcentration
+from settings import SSC_fine
_translate = QCoreApplication.translate
@@ -95,6 +98,11 @@ class AcousticInversionTab(QWidget):
self.spacerItem_RunInversion = QSpacerItem(1000, 10)#, QSizePolicy.Expanding, QSizePolicy.Minimum)
self.horizontalLayout_Run_Inversion.addSpacerItem(self.spacerItem_RunInversion)
+ self.pushbutton_save_result = QPushButton()
+ self.pushbutton_save_result.setText("Save Results")
+ self.pushbutton_save_result.setMaximumWidth(110)
+ self.horizontalLayout_Run_Inversion.addWidget(self.pushbutton_save_result)
+
### --- Layout of groupbox in the Top horizontal layout box
# Plot SSC 2D field | SSC vertical profile | Plot SSC graph sample vs inversion ===>>> FINE
@@ -343,6 +351,7 @@ class AcousticInversionTab(QWidget):
self.pushbutton_update_acoustic_data_choice.clicked.connect(self.update_acoustic_data_choice)
self.pushbutton_run_inversion.clicked.connect(self.function_run_inversion)
+ self.pushbutton_save_result.clicked.connect(self.save_result_in_excel_file)
self.pushbutton_left_to_begin_fine.clicked.connect(self.slider_profile_number_to_begin_fine)
self.pushbutton_left_fine.clicked.connect(self.slider_profile_number_to_left_fine)
@@ -476,6 +485,7 @@ class AcousticInversionTab(QWidget):
)
print("stg.SSC_fine ", stg.SSC_fine)
+ print("stg.SSC_fine shape ", stg.SSC_fine[self.combobox_acoustic_data_choice.currentIndex()].shape)
def compute_SSC_sand(self):
@@ -493,6 +503,7 @@ class AcousticInversionTab(QWidget):
ks=stg.ks[1])
print("stg.SSC_sand ", stg.SSC_sand)
+ print("stg.SSC_sand shape ", stg.SSC_sand[self.combobox_acoustic_data_choice.currentIndex()].shape)
def plot_SSC_fine(self):
@@ -748,6 +759,7 @@ class AcousticInversionTab(QWidget):
# self.axis_SSC_fine.plot([], [], )
+ self.axis_vertical_profile_SSC_fine.set_xlim(0, 10)
self.axis_vertical_profile_SSC_fine.set_xlabel("Inverted Fine SSC (g/L)")
self.axis_vertical_profile_SSC_fine.set_ylabel("Depth (m)")
self.figure_vertical_profile_SSC_fine.canvas.draw_idle()
@@ -852,6 +864,7 @@ class AcousticInversionTab(QWidget):
marker='*', s=48, c='r', edgecolors='r')
self.axis_vertical_profile_SSC_fine.text(stg.Ctot_fine[f[1]], stg.depth_fine[f[1]], f[0])
+ self.axis_vertical_profile_SSC_fine.set_xlim(0, 10)
self.axis_vertical_profile_SSC_fine.set_xlabel("Inverted Fine SSC (g/L)")
self.axis_vertical_profile_SSC_fine.set_ylabel("Depth (m)")
self.figure_vertical_profile_SSC_fine.canvas.draw_idle()
@@ -1445,6 +1458,7 @@ class AcousticInversionTab(QWidget):
# self.axis_SSC_fine.plot([], [], )
+ self.axis_vertical_profile_SSC_sand.set_xlim(0, 10)
self.axis_vertical_profile_SSC_sand.set_xlabel("Inverted Sand SSC (g/L)")
self.axis_vertical_profile_SSC_sand.set_ylabel("Depth (m)")
self.figure_vertical_profile_SSC_sand.canvas.draw_idle()
@@ -1553,6 +1567,7 @@ class AcousticInversionTab(QWidget):
stg.depth_fine[stg.sand_sample_target[0][1]],
stg.sand_sample_target[0][0])
+ self.axis_vertical_profile_SSC_sand.set_xlim(0, 10)
self.axis_vertical_profile_SSC_sand.set_xlabel("Inverted Sand SSC (g/L)")
self.axis_vertical_profile_SSC_sand.set_ylabel("Depth (m)")
self.figure_vertical_profile_SSC_sand.canvas.draw_idle()
@@ -1864,6 +1879,117 @@ 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)
+
+ if name[0]:
+ dirname = "/".join(name[0].split("/")[:-1]) + "/"
+ filename = name[0].split("/")[-1]
+ chdir(dirname)
+
+ 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])
+
+ else:
+
+ 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])
+
+
+ print("<<<<<<<<<<<<<<<<<<<<<<<<<")
+ print(t.shape, r.shape, stg.SSC_fine[k].shape, stg.SSC_sand[k].shape)
+ 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])})")
+
+
+
+ with pd.ExcelWriter(dirname + filename + '.xlsx') as writer:
+ print("writer ", 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) + "])")
+ # result.to_excel(excel_writer=filename + '.xlsx', index=False, engine='xlsxwriter', na_rep='NA',
+ # sheet_name=stg.data_preprocessed[k])
+
+ # except ValueError as e:
+ # print("error = ", e)
+ # msgBox = QMessageBox()
+ # msgBox.setWindowTitle("Save Inversion Result Error")
+ # msgBox.setIcon(QMessageBox.Warning)
+ # msgBox.setText("No saved file")
+ # msgBox.setStandardButtons(QMessageBox.Ok)
+ # msgBox.exec()
+
# --------------------------------------------------------------------------------------------------------------
# ______ _______
diff --git a/View/mainwindow.py b/View/mainwindow.py
index 3f6ea3d..3a9abe2 100644
--- a/View/mainwindow.py
+++ b/View/mainwindow.py
@@ -1,4 +1,25 @@
+# ============================================================================== #
+ # mainwindow.py - AcouSed #
+ # Copyright (C) 2024 INRAE #
+ # #
+ # This program is free software: you can redistribute it and/or modify #
+ # it under the terms of the GNU General Public License as published by #
+ # the Free Software Foundation, either version 3 of the License, or #
+ # (at your option) any later version. #
+ # #
+ # This program is distributed in the hope that it will be useful, #
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of #
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+ # GNU General Public License for more details. #
+ # #
+ # You should have received a copy of the GNU General Public License #
+ # along with this program. If not, see . #
+
+ # by Brahim MOUDJED #
+# ============================================================================== #
+
# -*- coding: utf-8 -*-
+
import os
# Form implementation generated from reading ui file 'mainwindow.ui'
@@ -21,7 +42,8 @@ import numpy as np
from subprocess import check_call, run
import time
-# from View.acoustic_data_tab import AcousticDataTab
+
+from View.acoustic_data_tab import AcousticDataTab
class Ui_MainWindow(object):
@@ -92,11 +114,11 @@ class Ui_MainWindow(object):
self.toolBar = QtWidgets.QToolBar(self.mainwindow)
self.toolBar.setObjectName("toolBar")
self.mainwindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
- self.actionNew = QtWidgets.QAction(self.mainwindow)
- icon = QtGui.QIcon()
- icon.addPixmap(QtGui.QPixmap("icons/new.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
- self.actionNew.setIcon(icon)
- self.actionNew.setObjectName("actionNew")
+ # self.actionNew = QtWidgets.QAction(self.mainwindow)
+ # icon = QtGui.QIcon()
+ # icon.addPixmap(QtGui.QPixmap("icons/new.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ # self.actionNew.setIcon(icon)
+ # self.actionNew.setObjectName("actionNew")
self.actionOpen = QtWidgets.QAction(self.mainwindow)
icon1 = QtGui.QIcon()
icon1.addPixmap(QtGui.QPixmap("icons/icon_folder.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
@@ -107,21 +129,21 @@ class Ui_MainWindow(object):
icon2.addPixmap(QtGui.QPixmap("icons/save.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.actionSave.setIcon(icon2)
self.actionSave.setObjectName("actionSave")
- self.actionCopy = QtWidgets.QAction(self.mainwindow)
- icon3 = QtGui.QIcon()
- icon3.addPixmap(QtGui.QPixmap("icons/copy.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
- self.actionCopy.setIcon(icon3)
- self.actionCopy.setObjectName("actionCopy")
- self.actionCut = QtWidgets.QAction(self.mainwindow)
- icon4 = QtGui.QIcon()
- icon4.addPixmap(QtGui.QPixmap("icons/cut.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
- self.actionCut.setIcon(icon4)
- self.actionCut.setObjectName("actionCut")
- self.actionPaste = QtWidgets.QAction(self.mainwindow)
- icon5 = QtGui.QIcon()
- icon5.addPixmap(QtGui.QPixmap("icons/paste.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
- self.actionPaste.setIcon(icon5)
- self.actionPaste.setObjectName("actionPaste")
+ # self.actionCopy = QtWidgets.QAction(self.mainwindow)
+ # icon3 = QtGui.QIcon()
+ # icon3.addPixmap(QtGui.QPixmap("icons/copy.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ # self.actionCopy.setIcon(icon3)
+ # self.actionCopy.setObjectName("actionCopy")
+ # self.actionCut = QtWidgets.QAction(self.mainwindow)
+ # icon4 = QtGui.QIcon()
+ # icon4.addPixmap(QtGui.QPixmap("icons/cut.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ # self.actionCut.setIcon(icon4)
+ # self.actionCut.setObjectName("actionCut")
+ # self.actionPaste = QtWidgets.QAction(self.mainwindow)
+ # icon5 = QtGui.QIcon()
+ # icon5.addPixmap(QtGui.QPixmap("icons/paste.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ # self.actionPaste.setIcon(icon5)
+ # self.actionPaste.setObjectName("actionPaste")
self.actionEnglish = QtWidgets.QAction(self.mainwindow)
icon6 = QtGui.QIcon()
icon6.addPixmap(QtGui.QPixmap("icons/en.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
@@ -142,6 +164,10 @@ class Ui_MainWindow(object):
self.actionAbout.setObjectName("actionAbout")
self.actionUserManual = QtWidgets.QAction(self.mainwindow)
self.actionUserManual.setText("User Manual")
+ self.action_AcousticInversionTheory = QtWidgets.QAction(self.mainwindow)
+ self.action_AcousticInversionTheory.setText("Acoustic inversion theory")
+ self.action_AQUAscatUserManual = QtWidgets.QAction(self.mainwindow)
+ self.action_AQUAscatUserManual.setText("Tutorial AQUAscat software")
self.actionDB_Browser_for_SQLite = QtWidgets.QAction(self.mainwindow)
self.actionDB_Browser_for_SQLite.setObjectName("actionDB_Browser_for_SQLite")
self.menuLanguage.addAction(self.actionEnglish)
@@ -159,16 +185,18 @@ class Ui_MainWindow(object):
self.menuTools.addAction(self.actionDB_Browser_for_SQLite)
self.menuHelp.addAction(self.actionAbout)
self.menuHelp.addAction(self.actionUserManual)
+ self.menuHelp.addAction(self.action_AcousticInversionTheory)
+ self.menuHelp.addAction(self.action_AQUAscatUserManual)
self.menubar.addAction(self.menuFile.menuAction())
self.menubar.addAction(self.menuTools.menuAction())
self.menubar.addAction(self.menuHelp.menuAction())
- self.toolBar.addAction(self.actionNew)
+ # self.toolBar.addAction(self.actionNew)
self.toolBar.addAction(self.actionOpen)
self.toolBar.addAction(self.actionSave)
self.toolBar.addSeparator()
- self.toolBar.addAction(self.actionCopy)
- self.toolBar.addAction(self.actionCut)
- self.toolBar.addAction(self.actionPaste)
+ # self.toolBar.addAction(self.actionCopy)
+ # self.toolBar.addAction(self.actionCut)
+ # self.toolBar.addAction(self.actionPaste)
self.toolBar.addSeparator()
self.toolBar.addAction(self.actionEnglish)
self.toolBar.addAction(self.actionFrench)
@@ -188,7 +216,7 @@ class Ui_MainWindow(object):
# --- Connect Action Open ---
self.actionOpen.triggered.connect(self.open)
- self.actionOpen.triggered.connect(lambda: print('tott'))
+ # self.actionOpen.triggered.connect(lambda: print('tott'))
# --- Connect Action ABS calibration constant kt ---
self.action_ABSCalibrationConstant.triggered.connect(self.load_calibration_constant_values)
@@ -205,6 +233,8 @@ class Ui_MainWindow(object):
# --- Connect Action User Manual ---
self.actionUserManual.triggered.connect(self.user_manual)
+ self.action_AcousticInversionTheory.triggered.connect(self.inversion_acoustic_theory)
+ self.action_AQUAscatUserManual.triggered.connect(self.tutorial_AQUAscat_software)
def createContextMenu(self):
@@ -227,7 +257,8 @@ class Ui_MainWindow(object):
UpdateTableForSave()
def open(self):
- ReadTableForOpen()
+ pass
+ # ReadTableForOpen()
# acoustic_data_tab = AcousticDataTab()
#
@@ -246,10 +277,16 @@ class Ui_MainWindow(object):
aw.exec()
def user_manual(self):
- print(os.getcwd())
- print(check_call("ls"))
- open('User_manual_0.pdf')
- run(["open", 'User_manual_0.pdf'])
+ open('AcouSed_UserManual.pdf')
+ run(["open", 'AcouSed_UserManual.pdf'])
+
+ def inversion_acoustic_theory(self):
+ open('Acoustic_Inversion_theory.pdf')
+ run(["open", 'Acoustic_Inversion_theory.pdf'])
+
+ def tutorial_AQUAscat_software(self):
+ open('Tutorial_AQUAscat_software.pdf')
+ run(["open", 'Tutorial_AQUAscat_software.pdf'])
def export_table_of_acoustic_BS_values_to_excel_or_libreOfficeCalc_file(self):
@@ -328,12 +365,12 @@ class Ui_MainWindow(object):
self.menuTools.setTitle(_translate("MainWindow", "Tools"))
self.menuHelp.setTitle(_translate("MainWindow", "Help"))
self.toolBar.setWindowTitle(_translate("MainWindow", "toolBar"))
- self.actionNew.setText(_translate("MainWindow", "New"))
+ # self.actionNew.setText(_translate("MainWindow", "New"))
self.actionOpen.setText(_translate("MainWindow", "Open ..."))
self.actionSave.setText(_translate("MainWindow", "Save"))
- self.actionCopy.setText(_translate("MainWindow", "Copy"))
- self.actionCut.setText(_translate("MainWindow", "Cut"))
- self.actionPaste.setText(_translate("MainWindow", "Paste"))
+ # self.actionCopy.setText(_translate("MainWindow", "Copy"))
+ # self.actionCut.setText(_translate("MainWindow", "Cut"))
+ # self.actionPaste.setText(_translate("MainWindow", "Paste"))
self.actionEnglish.setText(_translate("MainWindow", "English"))
self.actionFrench.setText(_translate("MainWindow", "French"))
self.actionTable_of_Backscatter_values.setText(_translate("MainWindow", "Table of Backscatter values"))
@@ -342,11 +379,11 @@ class Ui_MainWindow(object):
self.actionDB_Browser_for_SQLite.setText(_translate("MainWindow", "DB Browser for SQLite"))
-# if __name__ == "__main__":
-# import sys
-# app = QtWidgets.QApplication(sys.argv)
-# MainWindow = QtWidgets.QMainWindow()
-# ui = Ui_MainWindow()
-# ui.setupUi(MainWindow)
-# MainWindow.show()
-# sys.exit(app.exec_())
+if __name__ == "__main__":
+ import sys
+ app = QtWidgets.QApplication(sys.argv)
+ MainWindow = QtWidgets.QMainWindow()
+ ui = Ui_MainWindow()
+ ui.setupUi(MainWindow)
+ MainWindow.show()
+ sys.exit(app.exec_())
diff --git a/View/sample_data_tab.py b/View/sample_data_tab.py
index 83bee82..eeca14a 100644
--- a/View/sample_data_tab.py
+++ b/View/sample_data_tab.py
@@ -1,3 +1,26 @@
+# ============================================================================== #
+ # mainwindow.py - AcouSed #
+ # Copyright (C) 2024 INRAE #
+ # #
+ # This program is free software: you can redistribute it and/or modify #
+ # it under the terms of the GNU General Public License as published by #
+ # the Free Software Foundation, either version 3 of the License, or #
+ # (at your option) any later version. #
+ # #
+ # This program is distributed in the hope that it will be useful, #
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of #
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+ # GNU General Public License for more details. #
+ # #
+ # You should have received a copy of the GNU General Public License #
+ # along with this program. If not, see . #
+
+# by Brahim MOUDJED #
+# ============================================================================== #
+
+# -*- coding: utf-8 -*-
+
+
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QGroupBox, QLabel, QSpinBox, QSpacerItem, QSizePolicy, \
QTabWidget, QTableWidget, QPushButton, QLineEdit, QTableView, QCheckBox, \
QAbstractScrollArea, QTableWidgetItem, QComboBox, QFileDialog, QGridLayout, QMessageBox, \
@@ -18,7 +41,7 @@ from copy import deepcopy
from os import path
import csv
-from View.show_popup_combobox import ComboBoxShowPopUpWindow
+# from View.show_popup_combobox import ComboBoxShowPopUpWindow
from Model.granulo_loader import GranuloLoader
@@ -685,6 +708,7 @@ class SampleDataTab(QWidget):
# --- Set horizontal header ---
# horizontal_header = list(map(str, ["Color", "Sample"] + stg.fine_sediment_columns +
# stg.sand_sediment_columns[2:]))
+ print("stg.columns_fine ", stg.columns_fine)
horizontal_header = list(itertools.chain(["Color", "Sample"],
list(map(str, stg.columns_fine[[0, 2]])),
list(map(str, stg.columns_fine[3:]))))
@@ -1330,7 +1354,7 @@ class SampleDataTab(QWidget):
self.axis_plot_sample_position_on_transect.scatter(
stg.time_fine, stg.depth_fine,
- linestyle='None', marker="x", s=15, c=color_list_fine)
+ linestyle='None', marker="x", s=15, c=color_list_fine, label='fine')
for i in range(len(stg.time_fine)):
self.axis_plot_sample_position_on_transect.text(
@@ -1342,7 +1366,7 @@ class SampleDataTab(QWidget):
self.axis_plot_sample_position_on_transect.scatter(
stg.time_sand, stg.depth_sand,
- linestyle='None', marker="o", s=60, facecolors='None', edgecolors=color_list_sand)
+ linestyle='None', marker="o", s=60, facecolors='None', edgecolors=color_list_sand, label='sand')
for i in range(len(stg.time_sand)):
self.axis_plot_sample_position_on_transect.text(
@@ -1540,7 +1564,7 @@ class SampleDataTab(QWidget):
self.axis_plot_sample_position_on_transect.scatter(
stg.time_fine, stg.depth_fine,
- linestyle='None', marker="x", s=15, c=color_list_fine)
+ linestyle='None', marker="x", s=15, c=color_list_fine, label='fine')
for i in range(len(stg.time_fine)):
self.axis_plot_sample_position_on_transect.text(
@@ -1552,7 +1576,7 @@ class SampleDataTab(QWidget):
self.axis_plot_sample_position_on_transect.scatter(
stg.time_sand, stg.depth_sand,
- linestyle='None', marker="o", s=60, facecolors='None', edgecolors=color_list_sand)
+ linestyle='None', marker="o", s=60, facecolors='None', edgecolors=color_list_sand, label='sand')
for i in range(len(stg.time_sand)):
self.axis_plot_sample_position_on_transect.text(
@@ -1568,15 +1592,16 @@ class SampleDataTab(QWidget):
self.axis_plot_sample_position_on_transect.tick_params(axis='y', labelrotation=90)
self.axis_plot_sample_position_on_transect.tick_params(axis='both', labelsize=8)
- self.axis_plot_sample_position_on_transect.text(.98, .03, "Time",
+ self.axis_plot_sample_position_on_transect.text(.98, .03, "Time (sec)",
fontsize=10, fontweight='bold', fontname="Ubuntu", c="black", alpha=0.9,
horizontalalignment='right', verticalalignment='bottom', rotation='horizontal',
transform=self.axis_plot_sample_position_on_transect.transAxes)
- self.axis_plot_sample_position_on_transect.text(.04, .65, "Depth",
+ self.axis_plot_sample_position_on_transect.text(.04, .53, "Depth (m)",
fontsize=10, fontweight='bold', fontname="Ubuntu", c="black", alpha=0.9,
horizontalalignment='right', verticalalignment='bottom', rotation='vertical',
transform=self.axis_plot_sample_position_on_transect.transAxes)
+ self.axis_plot_sample_position_on_transect.legend(loc="lower left")
self.figure_plot_sample_position_on_transect.canvas.draw_idle()
def update_plot_sample_position_on_transect(self):
@@ -1598,7 +1623,7 @@ class SampleDataTab(QWidget):
self.axis_plot_sample_position_on_transect.scatter(
time_fine_to_plot, depth_fine_to_plot,
- linestyle='None', marker="x", s=15, c=color_list_fine)
+ linestyle='None', marker="x", s=15, c=color_list_fine, label='fine')
for i in range(len(time_fine_to_plot)):
self.axis_plot_sample_position_on_transect.text(
@@ -1618,7 +1643,7 @@ class SampleDataTab(QWidget):
self.axis_plot_sample_position_on_transect.scatter(
time_sand_to_plot, depth_sand_to_plot,
- linestyle='None', marker="o", s=60, facecolors='None', edgecolors=color_list_sand)
+ linestyle='None', marker="o", s=60, facecolors='None', edgecolors=color_list_sand, label='sand')
for i in range(len(time_sand_to_plot)):
self.axis_plot_sample_position_on_transect.text(
@@ -1855,7 +1880,7 @@ class SampleDataTab(QWidget):
self.axis_plot_sample_position_on_transect.scatter(
time_fine_to_plot, depth_fine_to_plot,
- linestyle='None', marker="x", s=15, c=color_list_fine)
+ linestyle='None', marker="x", s=15, c=color_list_fine, label='fine')
for i in range(len(time_fine_to_plot)):
self.axis_plot_sample_position_on_transect.text(
@@ -1877,7 +1902,7 @@ class SampleDataTab(QWidget):
self.axis_plot_sample_position_on_transect.scatter(
time_sand_to_plot, depth_sand_to_plot,
- linestyle='None', marker="o", s=60, facecolors='None', edgecolors=color_list_sand)
+ linestyle='None', marker="o", s=60, facecolors='None', edgecolors=color_list_sand, label='sand')
for i in range(len(time_sand_to_plot)):
self.axis_plot_sample_position_on_transect.text(
@@ -1893,19 +1918,20 @@ class SampleDataTab(QWidget):
self.axis_plot_sample_position_on_transect.tick_params(axis='y', labelrotation=90)
self.axis_plot_sample_position_on_transect.tick_params(axis='both', labelsize=8)
- self.axis_plot_sample_position_on_transect.text(.98, .03, "Time",
+ self.axis_plot_sample_position_on_transect.text(.98, .03, "Time (sec)",
fontsize=10, fontweight='bold', fontname="Ubuntu", c="black",
alpha=0.9,
horizontalalignment='right', verticalalignment='bottom',
rotation='horizontal',
transform=self.axis_plot_sample_position_on_transect.transAxes)
- self.axis_plot_sample_position_on_transect.text(.04, .65, "Depth",
+ self.axis_plot_sample_position_on_transect.text(.04, .53, "Depth (m)",
fontsize=10, fontweight='bold', fontname="Ubuntu", c="black",
alpha=0.9,
horizontalalignment='right', verticalalignment='bottom',
rotation='vertical',
transform=self.axis_plot_sample_position_on_transect.transAxes)
+ self.axis_plot_sample_position_on_transect.legend(loc="lower right")
self.figure_plot_sample_position_on_transect.canvas.draw_idle()
# if stg.BS_raw_data.size == 0:
@@ -2030,7 +2056,7 @@ class SampleDataTab(QWidget):
self.axis_total_concentration.cla()
self.axis_total_concentration.scatter(Ctot_fine_to_plot,
sample_depth_to_plot_fine,
- s=100, facecolor=color_list_fine, edgecolor="None", alpha=0.5)
+ s=100, facecolor=color_list_fine, edgecolor="None", alpha=0.5, label='fine')
self.axis_total_concentration.set_xlabel(self.combobox_x_axis.currentText())
self.axis_total_concentration.set_ylabel(self.combobox_y_axis.currentText())
@@ -2038,7 +2064,7 @@ class SampleDataTab(QWidget):
elif (self.combobox_x_axis.currentIndex() == 1) and (self.combobox_y_axis.currentIndex() == 0):
self.axis_total_concentration.cla()
self.axis_total_concentration.scatter(Ctot_fine_percent_to_plot, sample_depth_to_plot_fine,
- s=100, facecolor=color_list_fine, edgecolor="None", alpha=0.5)
+ s=100, facecolor=color_list_fine, edgecolor="None", alpha=0.5, label='fine')
self.axis_total_concentration.set_xlim(0, 100)
self.axis_total_concentration.set_xlabel(self.combobox_x_axis.currentText())
self.axis_total_concentration.set_ylabel(self.combobox_y_axis.currentText())
@@ -2051,7 +2077,7 @@ class SampleDataTab(QWidget):
self.axis_total_concentration.scatter(
Ctot_fine_to_plot,
[x / y for x, y in zip(sample_depth_to_plot_fine, depth_bottom_to_plot_fine)],
- s=100, facecolor=color_list_fine, edgecolor="None", alpha=0.5)
+ s=100, facecolor=color_list_fine, edgecolor="None", alpha=0.5, label='fine')
else:
@@ -2074,7 +2100,7 @@ class SampleDataTab(QWidget):
self.axis_total_concentration.scatter(
Ctot_fine_percent_to_plot,
[x / y for x, y in zip(sample_depth_to_plot_fine, depth_bottom_to_plot_fine)],
- s=100, facecolor=color_list_fine, edgecolor="None", alpha=0.5)
+ s=100, facecolor=color_list_fine, edgecolor="None", alpha=0.5, label='fine')
else:
@@ -2090,7 +2116,7 @@ class SampleDataTab(QWidget):
self.axis_total_concentration.set_xlabel(self.combobox_x_axis.currentText())
self.axis_total_concentration.set_ylabel(self.combobox_y_axis.currentText())
- self.figure_total_concentration.canvas.draw_idle()
+ # self.figure_total_concentration.canvas.draw_idle()
# ===================================================
# --- FINE file NOT uploaded / SAND file uploaded ---
@@ -2112,7 +2138,7 @@ class SampleDataTab(QWidget):
self.axis_total_concentration.scatter(Ctot_sand_to_plot,
sample_depth_to_plot_sand,
s=300, facecolor="None", edgecolor=color_list_sand,
- alpha=0.5)
+ alpha=0.5, label='sand')
self.axis_total_concentration.set_xlabel(self.combobox_x_axis.currentText())
self.axis_total_concentration.set_ylabel(self.combobox_y_axis.currentText())
@@ -2123,7 +2149,7 @@ class SampleDataTab(QWidget):
print("Ctot_sand_percent_to_plot ", Ctot_sand_percent_to_plot)
self.axis_total_concentration.scatter(Ctot_sand_percent_to_plot, sample_depth_to_plot_sand,
s=300, facecolor="None", edgecolor=color_list_sand,
- alpha=0.5)
+ alpha=0.5, label='sand')
self.axis_total_concentration.set_xlim(0, 100)
self.axis_total_concentration.set_xlabel(self.combobox_x_axis.currentText())
self.axis_total_concentration.set_ylabel(self.combobox_y_axis.currentText())
@@ -2138,7 +2164,7 @@ class SampleDataTab(QWidget):
Ctot_sand_to_plot,
[x / y for x, y in zip(sample_depth_to_plot_sand, depth_bottom_to_plot_sand)],
# stg.depth_bottom[self.combobox_acoustic_data.currentIndex()][indices_bottom_sand],
- s=300, facecolor="None", edgecolor=color_list_sand, alpha=0.5)
+ s=300, facecolor="None", edgecolor=color_list_sand, alpha=0.5, label='sand')
else:
@@ -2163,7 +2189,7 @@ class SampleDataTab(QWidget):
Ctot_sand_percent_to_plot,
[x / y for x, y in zip(sample_depth_to_plot_sand, depth_bottom_to_plot_sand)],
# stg.depth_bottom[self.combobox_acoustic_data.currentIndex()][indices_bottom_sand],
- s=300, facecolor="None", edgecolor=color_list_sand, alpha=0.5)
+ s=300, facecolor="None", edgecolor=color_list_sand, alpha=0.5, label='sand')
else:
@@ -2179,7 +2205,7 @@ class SampleDataTab(QWidget):
self.axis_total_concentration.set_xlabel(self.combobox_x_axis.currentText())
self.axis_total_concentration.set_ylabel(self.combobox_y_axis.currentText())
- self.figure_total_concentration.canvas.draw_idle()
+ # self.figure_total_concentration.canvas.draw_idle()
# ===============================================
# --- FINE file uploaded / SAND file uploaded ---
@@ -2201,11 +2227,11 @@ class SampleDataTab(QWidget):
self.axis_total_concentration.scatter(Ctot_fine_to_plot,
sample_depth_to_plot_fine,
s=100, facecolor=color_list_fine, edgecolor="None",
- alpha=0.5)
+ alpha=0.5, label='fine')
self.axis_total_concentration.scatter(Ctot_sand_to_plot,
sample_depth_to_plot_sand,
s=300, facecolor="None", edgecolor=color_list_sand,
- alpha=0.5)
+ alpha=0.5, label='sand')
self.axis_total_concentration.set_xlabel(self.combobox_x_axis.currentText())
self.axis_total_concentration.set_ylabel(self.combobox_y_axis.currentText())
@@ -2216,10 +2242,10 @@ class SampleDataTab(QWidget):
print("sample_depth_to_plot_fine", sample_depth_to_plot_fine)
self.axis_total_concentration.scatter(Ctot_fine_percent_to_plot, sample_depth_to_plot_fine,
s=100, facecolor=color_list_fine, edgecolor="None",
- alpha=0.5)
+ alpha=0.5, label='fine')
self.axis_total_concentration.scatter(Ctot_sand_percent_to_plot, sample_depth_to_plot_sand,
s=300, facecolor="None", edgecolor=color_list_sand,
- alpha=0.5)
+ alpha=0.5, label='sand')
self.axis_total_concentration.set_xlim(0, 100)
self.axis_total_concentration.set_xlabel(self.combobox_x_axis.currentText())
self.axis_total_concentration.set_ylabel(self.combobox_y_axis.currentText())
@@ -2232,11 +2258,11 @@ class SampleDataTab(QWidget):
self.axis_total_concentration.scatter(
Ctot_fine_to_plot,
[x / y for x, y in zip(sample_depth_to_plot_fine, depth_bottom_to_plot_fine)],
- s=100, facecolor=color_list_fine, edgecolor="None", alpha=0.5)
+ s=100, facecolor=color_list_fine, edgecolor="None", alpha=0.5, label='fine')
self.axis_total_concentration.scatter(
Ctot_sand_to_plot,
[x / y for x, y in zip(sample_depth_to_plot_sand, depth_bottom_to_plot_sand)],
- s=300, facecolor="None", edgecolor=color_list_sand, alpha=0.5)
+ s=300, facecolor="None", edgecolor=color_list_sand, alpha=0.5, label='sand')
else:
@@ -2259,12 +2285,12 @@ class SampleDataTab(QWidget):
self.axis_total_concentration.scatter(
Ctot_fine_percent_to_plot,
[x / y for x, y in zip(sample_depth_to_plot_fine, depth_bottom_to_plot_fine)],
- s=100, facecolor=color_list_fine, edgecolor="None", alpha=0.5)
+ s=100, facecolor=color_list_fine, edgecolor="None", alpha=0.5, label='fine')
self.axis_total_concentration.scatter(
Ctot_sand_percent_to_plot,
[x / y for x, y in zip(sample_depth_to_plot_sand, depth_bottom_to_plot_sand)],
- s=300, facecolor="None", edgecolor=color_list_sand, alpha=0.5)
+ s=300, facecolor="None", edgecolor=color_list_sand, alpha=0.5, label='sand')
else:
@@ -2280,9 +2306,8 @@ class SampleDataTab(QWidget):
self.axis_total_concentration.set_xlabel(self.combobox_x_axis.currentText())
self.axis_total_concentration.set_ylabel(self.combobox_y_axis.currentText())
- self.figure_total_concentration.canvas.draw_idle()
-
-
+ self.axis_total_concentration.legend(loc="upper right")
+ self.figure_total_concentration.canvas.draw_idle()
# ------------------------------------------------------------------------------------------------------------------
diff --git a/View/sediment_calibration_tab.py b/View/sediment_calibration_tab.py
index 3ae7261..b46168b 100644
--- a/View/sediment_calibration_tab.py
+++ b/View/sediment_calibration_tab.py
@@ -304,7 +304,7 @@ class SedimentCalibrationTab(QWidget):
Qt.AlignLeft)
self.label_kt_freq2 = QLabel()
- self.label_kt_freq2.setText("0.00 V.m1.5")
+ self.label_kt_freq2.setText("0.00")
self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.label_kt_freq2, 2, 3, 1, 1, Qt.AlignRight)
self.label_kt_freq2_unit = QLabel()
@@ -333,7 +333,7 @@ class SedimentCalibrationTab(QWidget):
self.label_ks_freq1_unit = QLabel()
self.label_ks_freq1_unit.setText("m.kg-0.5")
- self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.label_ks_freq1_unit, 5, 2, 1, 1,
+ self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.label_ks_freq1_unit, 4, 2, 1, 1,
Qt.AlignLeft)
# self.spinbox_ks_freq2 = QDoubleSpinBox()
@@ -342,16 +342,16 @@ class SedimentCalibrationTab(QWidget):
self.lineEdit_ks_freq2 = QLineEdit()
self.lineEdit_ks_freq2.setMaximumWidth(100)
self.lineEdit_ks_freq2.setText("0.00")
- self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.lineEdit_ks_freq2, 5, 3, 1, 1)
+ self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.lineEdit_ks_freq2, 4, 3, 1, 1)
self.label_ks_freq2_unit = QLabel()
self.label_ks_freq2_unit.setText("m.kg-0.5")
- self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.label_ks_freq2_unit, 5, 4, 1, 1,
+ self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.label_ks_freq2_unit, 4, 4, 1, 1,
Qt.AlignLeft)
self.label_sv = QLabel()
self.label_sv.setText("sv")
- self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.label_sv, 6, 0, 1, 1, Qt.AlignCenter)
+ self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.label_sv, 5, 0, 1, 1, Qt.AlignCenter)
# self.spinbox_sv_freq1 = QDoubleSpinBox()
# self.spinbox_sv_freq1.setDecimals(8)
@@ -359,11 +359,11 @@ class SedimentCalibrationTab(QWidget):
self.lineEdit_sv_freq1 = QLineEdit()
self.lineEdit_sv_freq1.setMaximumWidth(100)
self.lineEdit_sv_freq1.setText("0.00")
- self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.lineEdit_sv_freq1, 6, 1, 1, 1)
+ self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.lineEdit_sv_freq1, 5, 1, 1, 1)
self.label_sv_freq1_unit = QLabel()
self.label_sv_freq1_unit.setText("m-1")
- self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.label_sv_freq1_unit, 6, 2, 1, 1)
+ self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.label_sv_freq1_unit, 5, 2, 1, 1)
# self.spinbox_sv_freq2 = QDoubleSpinBox()
# self.spinbox_sv_freq2.setDecimals(8)
@@ -371,26 +371,26 @@ class SedimentCalibrationTab(QWidget):
self.lineEdit_sv_freq2 = QLineEdit()
self.lineEdit_sv_freq2.setMaximumWidth(100)
self.lineEdit_sv_freq2.setText("0.00")
- self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.lineEdit_sv_freq2, 6, 3, 1, 1)
+ self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.lineEdit_sv_freq2, 5, 3, 1, 1)
self.label_sv_freq2_unit = QLabel()
self.label_sv_freq2_unit.setText("m-1")
- self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.label_sv_freq2_unit, 6, 4, 1, 1)
+ self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.label_sv_freq2_unit, 5, 4, 1, 1)
self.label_X = QLabel()
self.label_X.setText("X")
- self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.label_X, 7, 0, 1, 1, Qt.AlignCenter)
+ self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.label_X, 6, 0, 1, 1, Qt.AlignCenter)
# self.spinbox_X = QDoubleSpinBox()
# self.spinbox_X.setDecimals(2)
self.lineEdit_X = QLineEdit()
self.lineEdit_X.setMaximumWidth(100)
self.lineEdit_X.setText("0.00")
- self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.lineEdit_X, 7, 2, 1, 1, Qt.AlignCenter)
+ self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.lineEdit_X, 6, 2, 1, 1, Qt.AlignCenter)
self.label_alphas = QLabel()
self.label_alphas.setText("\u03B1s")
- self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.label_alphas, 8, 0, 1, 1, Qt.AlignCenter)
+ self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.label_alphas, 7, 0, 1, 1, Qt.AlignCenter)
# self.spinbox_alphas_freq1 = QDoubleSpinBox()
# self.spinbox_alphas_freq1.setDecimals(4)
@@ -398,11 +398,11 @@ class SedimentCalibrationTab(QWidget):
self.lineEdit_alphas_freq1 = QLineEdit()
self.lineEdit_alphas_freq1.setMaximumWidth(100)
self.lineEdit_alphas_freq1.setText("0.00")
- self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.lineEdit_alphas_freq1, 8, 1, 1, 1)
+ self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.lineEdit_alphas_freq1, 7, 1, 1, 1)
self.label_alphas_freq1_unit = QLabel()
self.label_alphas_freq1_unit.setText("m-1")
- self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.label_alphas_freq1_unit, 8, 2, 1, 1, Qt.AlignLeft)
+ self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.label_alphas_freq1_unit, 7, 2, 1, 1, Qt.AlignLeft)
# self.spinbox_alphas_freq2 = QDoubleSpinBox()
# self.spinbox_alphas_freq2.setDecimals(4)
@@ -410,15 +410,15 @@ class SedimentCalibrationTab(QWidget):
self.lineEdit_alphas_freq2 = QLineEdit()
self.lineEdit_alphas_freq2.setMaximumWidth(100)
self.lineEdit_alphas_freq2.setText("0.00")
- self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.lineEdit_alphas_freq2, 8, 3, 1, 1)
+ self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.lineEdit_alphas_freq2, 7, 3, 1, 1)
self.label_alphas_freq2_unit = QLabel()
self.label_alphas_freq2_unit.setText("m-1")
- self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.label_alphas_freq2_unit, 8, 4, 1, 1, Qt.AlignLeft)
+ self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.label_alphas_freq2_unit, 7, 4, 1, 1, Qt.AlignLeft)
self.label_zeta = QLabel()
self.label_zeta.setText("\u03B6")
- self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.label_zeta, 9, 0, 1, 1, Qt.AlignCenter)
+ self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.label_zeta, 8, 0, 1, 1, Qt.AlignCenter)
# self.spinbox_zeta_freq1 = QDoubleSpinBox()
# self.spinbox_zeta_freq1.setDecimals(4)
@@ -426,11 +426,11 @@ class SedimentCalibrationTab(QWidget):
self.lineEdit_zeta_freq1 = QLineEdit()
self.lineEdit_zeta_freq1.setMaximumWidth(100)
self.lineEdit_zeta_freq1.setText("0.00")
- self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.lineEdit_zeta_freq1, 9, 1, 1, 1)
+ self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.lineEdit_zeta_freq1, 8, 1, 1, 1)
self.label_zeta_freq1_unit = QLabel()
self.label_zeta_freq1_unit.setText("m-1")
- self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.label_zeta_freq1_unit, 9, 2, 1, 1,
+ self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.label_zeta_freq1_unit, 8, 2, 1, 1,
Qt.AlignLeft)
# self.spinbox_zeta_freq2 = QDoubleSpinBox()
@@ -439,16 +439,16 @@ class SedimentCalibrationTab(QWidget):
self.lineEdit_zeta_freq2 = QLineEdit()
self.lineEdit_zeta_freq2.setMaximumWidth(100)
self.lineEdit_zeta_freq2.setText("0.00")
- self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.lineEdit_zeta_freq2, 9, 3, 1, 1)
+ self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.lineEdit_zeta_freq2, 8, 3, 1, 1)
self.label_zeta_freq2_unit = QLabel()
self.label_zeta_freq2_unit.setText("m-1")
- self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.label_zeta_freq2_unit, 9, 4, 1, 1,
+ self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.label_zeta_freq2_unit, 8, 4, 1, 1,
Qt.AlignLeft)
self.pushbutton_save_calibration = QPushButton()
self.pushbutton_save_calibration.setText("Save calibration")
- self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.pushbutton_save_calibration,10, 5, 1, 1)
+ self.gridLayout_groupbox_sediment_calibration_parameter.addWidget(self.pushbutton_save_calibration,9, 5, 1, 1)
# self.groupbox_calibration_compute_size_change()
@@ -721,14 +721,46 @@ class SedimentCalibrationTab(QWidget):
if val_min == 0:
val_min = 1e-5
- self.axis_BS.pcolormesh(
- stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
- self.combobox_freq2.currentIndex(), :],
- -stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
- self.combobox_freq2.currentIndex(), :],
- stg.BS_stream_bed_pre_process_average[self.combobox_acoustic_data_choice.currentIndex()][
- self.combobox_freq2.currentIndex(), :, :],
- cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
+ if stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ if stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ self.axis_BS.pcolormesh(
+ stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ -stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ stg.BS_stream_bed_pre_process_average[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :, :],
+ cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
+ else:
+ self.axis_BS.pcolormesh(
+ stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ -stg.depth[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ stg.BS_stream_bed_pre_process_average[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :, :],
+ cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
+ else:
+ if stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ self.axis_BS.pcolormesh(
+ stg.time[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ -stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ stg.BS_stream_bed_pre_process_average[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :, :],
+ cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
+ else:
+ self.axis_BS.pcolormesh(
+ stg.time[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ -stg.depth[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ stg.BS_stream_bed_pre_process_average[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :, :],
+ 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,):
@@ -741,14 +773,44 @@ class SedimentCalibrationTab(QWidget):
if val_min == 0:
val_min = 1e-5
- self.axis_BS.pcolormesh(
- stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
- self.combobox_freq2.currentIndex(), :],
- -stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
- self.combobox_freq2.currentIndex(), :],
- stg.BS_stream_bed_pre_process_SNR[self.combobox_acoustic_data_choice.currentIndex()][
- self.combobox_freq2.currentIndex(), :, :],
- cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
+ if stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ if stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ self.axis_BS.pcolormesh(
+ stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ -stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ stg.BS_stream_bed_pre_process_SNR[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :, :],
+ cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
+ else:
+ self.axis_BS.pcolormesh(
+ stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ -stg.depth[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ stg.BS_stream_bed_pre_process_SNR[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :, :],
+ cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
+ else:
+ if stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ self.axis_BS.pcolormesh(
+ stg.time[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ -stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ stg.BS_stream_bed_pre_process_SNR[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :, :],
+ cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
+ else:
+ self.axis_BS.pcolormesh(
+ stg.time[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ -stg.depth[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ stg.BS_stream_bed_pre_process_SNR[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :, :],
+ cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
elif stg.BS_stream_bed[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
@@ -762,14 +824,45 @@ class SedimentCalibrationTab(QWidget):
if val_min == 0:
val_min = 1e-5
- self.axis_BS.pcolormesh(
- stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
- self.combobox_freq2.currentIndex(), :],
- -stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
- self.combobox_freq2.currentIndex(), :],
- stg.BS_stream_bed[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq2.currentIndex(),
- :, :],
- cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
+ if stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ if stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ self.axis_BS.pcolormesh(
+ stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ -stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ stg.BS_stream_bed[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq2.currentIndex(),
+ :, :],
+ cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
+ else:
+ self.axis_BS.pcolormesh(
+ stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ -stg.depth[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ stg.BS_stream_bed[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq2.currentIndex(),
+ :, :],
+ cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
+
+ else:
+ if stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ self.axis_BS.pcolormesh(
+ stg.time[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ -stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ stg.BS_stream_bed[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq2.currentIndex(),
+ :, :],
+ cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
+ else:
+ self.axis_BS.pcolormesh(
+ stg.time[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ -stg.depth[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ stg.BS_stream_bed[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq2.currentIndex(),
+ :, :],
+ cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
elif stg.BS_cross_section_pre_process_average[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
@@ -782,14 +875,44 @@ class SedimentCalibrationTab(QWidget):
if val_min == 0:
val_min = 1e-5
- self.axis_BS.pcolormesh(
- stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
- self.combobox_freq2.currentIndex(), :],
- -stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
- self.combobox_freq2.currentIndex(), :],
- stg.BS_cross_section_pre_process_average[self.combobox_acoustic_data_choice.currentIndex()][
- self.combobox_freq2.currentIndex(), :, :],
- cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
+ if stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ if stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ self.axis_BS.pcolormesh(
+ stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ -stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ stg.BS_cross_section_pre_process_average[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :, :],
+ cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
+ else:
+ self.axis_BS.pcolormesh(
+ stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ -stg.depth[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ stg.BS_cross_section_pre_process_average[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :, :],
+ cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
+ else:
+ if stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ self.axis_BS.pcolormesh(
+ stg.time[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ -stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ stg.BS_cross_section_pre_process_average[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :, :],
+ cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
+ else:
+ self.axis_BS.pcolormesh(
+ stg.time[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ -stg.depth[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ stg.BS_cross_section_pre_process_average[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :, :],
+ cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
elif stg.BS_cross_section_pre_process_SNR[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
@@ -802,14 +925,44 @@ class SedimentCalibrationTab(QWidget):
if val_min == 0:
val_min = 1e-5
- self.axis_BS.pcolormesh(
- stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
- self.combobox_freq2.currentIndex(), :],
- -stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
- self.combobox_freq2.currentIndex(), :],
- stg.BS_cross_section_pre_process_SNR[self.combobox_acoustic_data_choice.currentIndex()][
- self.combobox_freq2.currentIndex(), :, :],
- cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
+ if stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ if stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0):
+ self.axis_BS.pcolormesh(
+ stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ -stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ stg.BS_cross_section_pre_process_SNR[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :, :],
+ cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
+ else:
+ self.axis_BS.pcolormesh(
+ stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ -stg.depth[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ stg.BS_cross_section_pre_process_SNR[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :, :],
+ cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
+ else:
+ if stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0):
+ self.axis_BS.pcolormesh(
+ stg.time[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ -stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ stg.BS_cross_section_pre_process_SNR[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :, :],
+ cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
+ else:
+ self.axis_BS.pcolormesh(
+ stg.time[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ -stg.depth[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ stg.BS_cross_section_pre_process_SNR[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :, :],
+ cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
elif stg.BS_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
@@ -822,14 +975,45 @@ class SedimentCalibrationTab(QWidget):
if val_min == 0:
val_min = 1e-5
- self.axis_BS.pcolormesh(
- stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
- self.combobox_freq2.currentIndex(), :],
- -stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
- self.combobox_freq2.currentIndex(), :],
- stg.BS_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
- self.combobox_freq2.currentIndex(), :, :],
- cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
+ if stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ if stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ self.axis_BS.pcolormesh(
+ stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ -stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ stg.BS_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :, :],
+ cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
+ else:
+ self.axis_BS.pcolormesh(
+ stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ -stg.depth[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ stg.BS_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :, :],
+ cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
+ else:
+ if stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ self.axis_BS.pcolormesh(
+ stg.time[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ -stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ stg.BS_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :, :],
+ cmap='viridis', norm=LogNorm(vmin=val_min, vmax=val_max))
+ else:
+ self.axis_BS.pcolormesh(
+ stg.time[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ -stg.depth[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :],
+ stg.BS_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :, :],
+ 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,):
@@ -847,6 +1031,8 @@ class SedimentCalibrationTab(QWidget):
self.combobox_freq2.currentIndex(), :, :],
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()][
@@ -1143,29 +1329,82 @@ class SedimentCalibrationTab(QWidget):
print(stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq2.currentIndex(), :])
print(stg.time_fine[stg.fine_sample_profile[-1][1]])
- stg.range_lin_interp, stg.M_profile_fine = (
- self.inv_hc.M_profile_SCC_fine_interpolated(
- sample_depth=[-stg.depth_fine[k[1]] for k in stg.fine_sample_profile],
- M_profile=[stg.Ctot_fine[k[1]] for k in stg.fine_sample_profile],
- range_cells=stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq2.currentIndex(), :],
- r_bottom=stg.depth_bottom[self.combobox_acoustic_data_choice.currentIndex()]
- [
- np.where( np.abs(stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq2.currentIndex(), :]
- - stg.time_fine[stg.fine_sample_profile[-1][1]]) ==
- np.nanmin(np.abs(stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq2.currentIndex(), :]
- - stg.time_fine[stg.fine_sample_profile[-1][1]])) )[0][0]
- ]
- )
- )
+ if stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+
+ stg.range_lin_interp, stg.M_profile_fine = (
+ self.inv_hc.M_profile_SCC_fine_interpolated(
+ sample_depth=[-stg.depth_fine[k[1]] for k in stg.fine_sample_profile],
+ M_profile=[stg.Ctot_fine[k[1]] for k in stg.fine_sample_profile],
+ range_cells=stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq2.currentIndex(), :],
+ r_bottom=stg.depth_bottom[self.combobox_acoustic_data_choice.currentIndex()]
+ [
+ np.where( np.abs(stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq2.currentIndex(), :]
+ - stg.time_fine[stg.fine_sample_profile[-1][1]]) ==
+ np.nanmin(np.abs(stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq2.currentIndex(), :]
+ - stg.time_fine[stg.fine_sample_profile[-1][1]])) )[0][0]
+ ]
+ )
+ )
+
+ else:
+
+ stg.range_lin_interp, stg.M_profile_fine = (
+ self.inv_hc.M_profile_SCC_fine_interpolated(
+ sample_depth=[-stg.depth_fine[k[1]] for k in stg.fine_sample_profile],
+ M_profile=[stg.Ctot_fine[k[1]] for k in stg.fine_sample_profile],
+ range_cells=stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq2.currentIndex(), :],
+ r_bottom=stg.depth_bottom[self.combobox_acoustic_data_choice.currentIndex()]
+ [
+ np.where( np.abs(stg.time[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq2.currentIndex(), :]
+ - stg.time_fine[stg.fine_sample_profile[-1][1]]) ==
+ np.nanmin(np.abs(stg.time[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq2.currentIndex(), :]
+ - stg.time_fine[stg.fine_sample_profile[-1][1]])) )[0][0]
+ ]
+ )
+ )
+
# print(f"range_lin_interp : {range_lin_interp}")
# print(f"M_profile_fine : {M_profile_fine}")
else:
- stg.range_lin_interp, stg.M_profile_fine = (
- self.inv_hc.M_profile_SCC_fine_interpolated(
- sample_depth=[-stg.depth_fine[k[1]] for k in stg.fine_sample_profile],
- M_profile=[stg.Ctot_fine[k[1]] for k in stg.fine_sample_profile],
- range_cells=stg.depth[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq2.currentIndex(), :],
- r_bottom=stg.depth_bottom[self.combobox_acoustic_data_choice.currentIndex()]))
+
+ if stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+
+ stg.range_lin_interp, stg.M_profile_fine = (
+ self.inv_hc.M_profile_SCC_fine_interpolated(
+ sample_depth=[-stg.depth_fine[k[1]] for k in stg.fine_sample_profile],
+ M_profile=[stg.Ctot_fine[k[1]] for k in stg.fine_sample_profile],
+ range_cells=stg.depth[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq2.currentIndex(), :],
+ r_bottom=stg.depth_bottom[self.combobox_acoustic_data_choice.currentIndex()]
+ [
+ np.where(np.abs(stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :]
+ - stg.time_fine[stg.fine_sample_profile[-1][1]]) ==
+ np.nanmin(np.abs(
+ stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :]
+ - stg.time_fine[stg.fine_sample_profile[-1][1]])))[0][0]
+ ]
+ ))
+
+ else:
+
+ stg.range_lin_interp, stg.M_profile_fine = (
+ self.inv_hc.M_profile_SCC_fine_interpolated(
+ sample_depth=[-stg.depth_fine[k[1]] for k in stg.fine_sample_profile],
+ M_profile=[stg.Ctot_fine[k[1]] for k in stg.fine_sample_profile],
+ range_cells=stg.depth[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq2.currentIndex(), :],
+ r_bottom=stg.depth_bottom[self.combobox_acoustic_data_choice.currentIndex()]
+ [
+ np.where(np.abs(stg.time[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :]
+ - stg.time_fine[stg.fine_sample_profile[-1][1]]) ==
+ np.nanmin(np.abs(
+ stg.time[self.combobox_acoustic_data_choice.currentIndex()][
+ self.combobox_freq2.currentIndex(), :]
+ - stg.time_fine[stg.fine_sample_profile[-1][1]])))[0][0]
+ ]
+ ))
+
print(f"1 M_profile_fine : {stg.M_profile_fine}")
stg.range_lin_interp = stg.range_lin_interp
stg.M_profile_fine = stg.M_profile_fine
@@ -1574,9 +1813,11 @@ class SedimentCalibrationTab(QWidget):
self.label_temperature.clear()
self.label_temperature.setText("T = " + str(stg.temperature) + " °C")
+ self.compute_depth_2D()
self.compute_ks()
self.compute_sv()
self.compute_X()
+ self.compute_kt2D_kt3D()
self.compute_J_cross_section()
self.compute_alpha_s()
self.compute_zeta()
@@ -1656,220 +1897,98 @@ class SedimentCalibrationTab(QWidget):
# --- Compute kt2D, kt3D and depth_2D ---
- if stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ for i in range(self.combobox_acoustic_data_choice.count()):
- if stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ if stg.depth_cross_section[i].shape != (0,):
- # stg.depth_2D[self.combobox_acoustic_data_choice.currentIndex()] = (
- # np.zeros((stg.freq[self.combobox_acoustic_data_choice.currentIndex()].shape[0],
- # stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- # stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1])))
- #
- # for f, _ in enumerate(stg.freq[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],
- # stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- # axis=1))
- #
- # print("kt cor ", stg.kt_corrected)
- # print("kt read", stg.kt_read)
+ if stg.time_cross_section[i].shape != (0,):
- if stg.kt_corrected != stg.kt_read:
+ if stg.kt_corrected != stg.kt_read:
- kt2D = np.repeat(
- np.array([stg.kt_corrected]).transpose(),
- stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- axis=1)
- kt3D = np.repeat(
- kt2D[:, np.newaxis, :],
- stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- axis=1)
+ stg.kt2D[i] = np.repeat(np.array([stg.kt_corrected]).transpose(),
+ stg.time_cross_section[i].shape[1], axis=1)
+ stg.kt3D[i] = np.repeat(stg.kt2D[i][:, np.newaxis, :], stg.depth_cross_section[i].shape[1], axis=1)
- else:
+ else:
- kt2D = np.repeat(
- np.array([stg.kt_read]).transpose(),
- stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- axis=1)
- print(stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape)
- print("kt2D shape ", kt2D.shape)
- print("kt2D ", kt2D)
- kt3D = np.repeat(
- kt2D[:, np.newaxis, :],
- stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- axis=1)
+ stg.kt2D[i] = np.repeat(np.array([stg.kt_read]).transpose(),
+ stg.time_cross_section[i].shape[1], axis=1)
+ stg.kt3D[i] = np.repeat(stg.kt2D[i][:, np.newaxis, :], stg.depth_cross_section[i].shape[1], axis=1)
- print("kt3D shape ", kt3D.shape)
- print("kt3D ", kt3D)
+ elif stg.time[i].shape != (0,):
- elif stg.time[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ if (stg.kt_corrected != stg.kt_read):
- # stg.depth_2D[self.combobox_acoustic_data_choice.currentIndex()] = (
- # np.zeros((stg.freq[self.combobox_acoustic_data_choice.currentIndex()].shape[0],
- # stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- # stg.time[self.combobox_acoustic_data_choice.currentIndex()].shape[1])))
- #
- # for f, _ in enumerate(stg.freq[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],
- # stg.time[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- # axis=1))
+ stg.kt2D[i] = np.repeat(np.array([stg.kt_corrected]).transpose(), stg.time[i].shape[1], axis=1)
+ stg.kt3D[i] = np.repeat(stg.kt2D[i][:, np.newaxis, :], stg.depth_cross_section[i].shape[1], axis=1)
- print("kt cor ", stg.kt_corrected)
- print("kt read", stg.kt_read)
+ else:
- if (stg.kt_corrected != stg.kt_read):
+ stg.kt2D[i] = np.repeat(np.array([stg.kt_read]).transpose(), stg.time[i].shape[1], axis=1)
+ stg.kt3D[i] = np.repeat(stg.kt2D[i][:, np.newaxis, :], stg.depth_cross_section[i].shape[1], axis=1)
- kt2D = np.repeat(
- np.array([stg.kt_corrected]).transpose(),
- stg.time[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- axis=1)
- kt3D = np.repeat(
- kt2D[:, np.newaxis, :],
- stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- axis=1)
+ elif stg.depth[i].shape != (0,):
- else:
+ if stg.time_cross_section[i].shape != (0,):
- kt2D = np.repeat(
- np.array([stg.kt_read]).transpose(),
- stg.time[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- axis=1)
- print(stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape)
- print("kt2D shape ", kt2D.shape)
- print("kt2D ", kt2D)
- kt3D = np.repeat(
- kt2D[:, np.newaxis, :],
- stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- axis=1)
+ if (stg.kt_corrected != stg.kt_read):
- print("kt3D shape ", kt3D.shape)
- print("kt3D ", kt3D)
+ stg.kt2D[i] = np.repeat(np.array([stg.kt_corrected]).transpose(),
+ stg.time_cross_section[i].shape[1], axis=1)
+ stg.kt3D[i] = np.repeat(stg.kt2D[i][:, np.newaxis, :], stg.depth[i].shape[1], axis=1)
- elif stg.depth[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ else:
- if stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ stg.kt2D[i] = np.repeat(np.array([stg.kt_read]).transpose(),
+ stg.time_cross_section[i].shape[1], axis=1)
+ stg.kt3D[i] = np.repeat(stg.kt2D[i][:, np.newaxis, :], stg.depth[i].shape[1], axis=1)
- # stg.depth_2D[self.combobox_acoustic_data_choice.currentIndex()] = (
- # np.zeros((stg.freq[self.combobox_acoustic_data_choice.currentIndex()].shape[0],
- # stg.depth[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- # stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1])))
- #
- # for f, _ in enumerate(stg.freq[self.combobox_acoustic_data_choice.currentIndex()]):
- # stg.depth_2D[self.combobox_acoustic_data_choice.currentIndex()][f, :, :] = (
- # np.repeat(
- # np.transpose(stg.depth[self.combobox_acoustic_data_choice.currentIndex()]
- # [self.combobox_freq1.currentIndex()])[:, np.newaxis],
- # stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- # axis=1))
+ elif stg.time[i].shape != (0,):
- print("kt cor ", stg.kt_corrected)
- print("kt read", stg.kt_read)
+ if (stg.kt_corrected != stg.kt_read):
- if (stg.kt_corrected != stg.kt_read):
+ stg.kt2D[i] = np.repeat(np.array([stg.kt_corrected]).transpose(), stg.time[i].shape[1], axis=1)
+ stg.kt3D[i] = np.repeat(stg.kt2D[i][:, np.newaxis, :],
+ stg.depth[i].shape[1],
+ axis=1)
- kt2D = np.repeat(
- np.array([stg.kt_corrected]).transpose(),
- stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- axis=1)
- kt3D = np.repeat(
- kt2D[:, np.newaxis, :],
- stg.depth[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- axis=1)
+ else:
- else:
+ stg.kt2D[i] = np.repeat(np.array([stg.kt_read]).transpose(), stg.time[i].shape[1], axis=1)
+ stg.kt3D[i] = np.repeat(stg.kt2D[i][:, np.newaxis, :], stg.depth[i].shape[1], axis=1)
- kt2D = np.repeat(
- np.array([stg.kt_read]).transpose(),
- stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- axis=1)
- print(stg.depth[self.combobox_acoustic_data_choice.currentIndex()].shape)
- print("kt2D shape ", kt2D.shape)
- print("kt2D ", kt2D)
- kt3D = np.repeat(
- kt2D[:, np.newaxis, :],
- stg.depth[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- axis=1)
-
- print("kt3D shape ", kt3D.shape)
- print("kt3D ", kt3D)
-
- elif stg.time[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
-
- # stg.depth_2D[self.combobox_acoustic_data_choice.currentIndex()] = (
- # np.zeros((stg.freq[self.combobox_acoustic_data_choice.currentIndex()].shape[0],
- # stg.depth[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- # stg.time[self.combobox_acoustic_data_choice.currentIndex()].shape[1])))
- #
- # for f, _ in enumerate(stg.freq[self.combobox_acoustic_data_choice.currentIndex()]):
- # stg.depth_2D[self.combobox_acoustic_data_choice.currentIndex()][f, :, :] = (
- # np.repeat(
- # np.transpose(stg.depth[self.combobox_acoustic_data_choice.currentIndex()]
- # [self.combobox_freq1.currentIndex()])[:, np.newaxis],
- # stg.time[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- # axis=1))
-
- print("kt cor ", stg.kt_corrected)
- print("kt read", stg.kt_read)
-
- if (stg.kt_corrected != stg.kt_read):
- # print([stg.kt_corrected[key] for key in stg.freq_text[self.combobox_acoustic_data_choice.currentIndex()]])
- kt2D = np.repeat(
- np.array([stg.kt_corrected]).transpose(),
- stg.time[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- axis=1)
- kt3D = np.repeat(
- kt2D[:, np.newaxis, :],
- stg.depth[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- axis=1)
-
- else:
-
- kt2D = np.repeat(
- np.array([stg.kt_read]).transpose(),
- stg.time[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- axis=1)
- print(stg.depth[self.combobox_acoustic_data_choice.currentIndex()].shape)
- print("kt2D shape ", kt2D.shape)
- print("kt2D ", kt2D)
- kt3D = np.repeat(
- kt2D[:, np.newaxis, :],
- stg.depth[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- axis=1)
-
- print("kt3D shape ", kt3D.shape)
- print("kt3D ", kt3D)
-
- return kt2D, kt3D
+ print('kt2D ', stg.kt2D)
+ print('kt3D ', stg.kt3D)
def compute_J_cross_section(self):
for i in range(self.combobox_acoustic_data_choice.count()):
- kt2D, kt3D = self.compute_kt2D_kt3D()
+ print('kt2D shape ', stg.kt2D[i].shape)
+ print('kt3D shape ', stg.kt3D[i].shape)
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,):
-
+ print("000000000000000000000000000000000")
+ print(stg.BS_stream_bed_pre_process_average[i][stg.frequencies_for_calibration[0][1], :, :].shape,
+ stg.depth_2D[i][stg.frequencies_for_calibration[0][1], :, :].shape,
+ stg.kt3D[i][stg.frequencies_for_calibration[0][1], :, :].shape)
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=kt3D[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_average[i][
stg.frequencies_for_calibration[1][1], :, :],
r2D=stg.depth_2D[i][stg.frequencies_for_calibration[1][1],
:, :],
- kt=kt3D[stg.frequencies_for_calibration[1][1], :, :])
+ kt=stg.kt3D[i][stg.frequencies_for_calibration[1][1], :, :])
elif stg.BS_stream_bed_pre_process_SNR[i].shape != (0,):
@@ -1878,58 +1997,27 @@ class SedimentCalibrationTab(QWidget):
stg.frequencies_for_calibration[0][1], :, :],
r2D=stg.depth_2D[i][stg.frequencies_for_calibration[0][1],
:, :],
- kt=kt3D[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=kt3D[stg.frequencies_for_calibration[1][1], :, :])
+ kt=stg.kt3D[i][stg.frequencies_for_calibration[1][1], :, :])
elif stg.BS_stream_bed[i].shape != (0,):
- # 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()]):
- # 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],
- # stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- # axis=1))
- #
- # print("kt cor ", stg.kt_corrected)
- # print("kt read", stg.kt_read)
- #
- # if (stg.kt_corrected[self.combobox_acoustic_data_choice.currentIndex()] !=
- # stg.kt_read[self.combobox_acoustic_data_choice.currentIndex()]):
- # kt2D = np.repeat(np.array([stg.kt_corrected[self.combobox_acoustic_data_choice.currentIndex()]]).transpose(),
- # stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- # axis=1)
- # kt3D = np.repeat(kt2D[:, np.newaxis, :],
- # stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1], axis=1)
- # else:
- # kt2D = np.repeat(np.array([stg.kt_read[self.combobox_acoustic_data_choice.currentIndex()]]).transpose(),
- # stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- # axis=1)
- # print(stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape)
- # print("kt2D shape ", kt2D.shape)
- # print("kt2D ", kt2D)
- # kt3D = np.repeat(kt2D[:, np.newaxis, :],
- # stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1], axis=1)
- # print("kt3D shape ", kt3D.shape)
- # print("kt3D ", kt3D)
-
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=kt3D[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=kt3D[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,):
@@ -1938,14 +2026,14 @@ class SedimentCalibrationTab(QWidget):
stg.frequencies_for_calibration[0][1], :, :],
r2D=stg.depth_2D[i][stg.frequencies_for_calibration[0][1],
:, :],
- kt=kt3D[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=kt3D[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,):
@@ -1954,49 +2042,28 @@ class SedimentCalibrationTab(QWidget):
stg.frequencies_for_calibration[0][1], :, :],
r2D=stg.depth_2D[i][stg.frequencies_for_calibration[0][1],
:, :],
- kt=kt3D[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=kt3D[stg.frequencies_for_calibration[1][1], :, :])
+ kt=stg.kt3D[i][stg.frequencies_for_calibration[1][1], :, :])
elif stg.BS_cross_section[i].shape != (0,):
- # 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()]):
- # 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],
- # stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- # axis=1)
- #
- # if stg.kt_corrected[self.combobox_acoustic_data_choice.currentIndex()]:
- # kt2D = np.repeat(np.array(stg.kt_corrected[self.combobox_acoustic_data_choice.currentIndex()]),
- # stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- # axis=1)
- # kt3D = np.repeat(kt2D[:, :, np.newaxis],
- # stg.freq[self.combobox_acoustic_data_choice.currentIndex()].shape[0], axis=2)
- # else:
- # kt2D = np.repeat(np.array(stg.kt_read[self.combobox_acoustic_data_choice.currentIndex()]),
- # stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- # axis=1)
- # kt3D = np.repeat(kt2D[:, :, np.newaxis],
- # stg.freq[self.combobox_acoustic_data_choice.currentIndex()].shape[0], axis=2)
-
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=kt3D[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=kt3D[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,):
@@ -2004,13 +2071,13 @@ class SedimentCalibrationTab(QWidget):
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=kt3D[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=kt3D[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,):
@@ -2018,51 +2085,30 @@ class SedimentCalibrationTab(QWidget):
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=kt3D[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=kt3D[stg.frequencies_for_calibration[1][1], :, :])
+ kt=stg.kt3D[i][stg.frequencies_for_calibration[1][1], :, :])
elif stg.BS_raw_data:
- # 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()]):
- # stg.depth_2D[f, :, :] = np.repeat(
- # np.transpose(stg.depth[self.combobox_acoustic_data_choice.currentIndex()]
- # [self.combobox_freq1.currentIndex()])[:, np.newaxis],
- # stg.time[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- # axis=1)
- #
- # if stg.kt_corrected[self.combobox_acoustic_data_choice.currentIndex()]:
- # kt2D = np.repeat(np.array(stg.kt_corrected[self.combobox_acoustic_data_choice.currentIndex()]),
- # stg.depth[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- # axis=1)
- # kt3D = np.repeat(kt2D[:, :, np.newaxis],
- # stg.freq[self.combobox_acoustic_data_choice.currentIndex()].shape[0], axis=2)
- # else:
- # kt2D = np.repeat(np.array(stg.kt_read[self.combobox_acoustic_data_choice.currentIndex()]),
- # stg.depth[self.combobox_acoustic_data_choice.currentIndex()].shape[1],
- # axis=1)
- # kt3D = np.repeat(kt2D[:, :, np.newaxis],
- # stg.freq[self.combobox_acoustic_data_choice.currentIndex()].shape[0], axis=2)
-
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=kt3D[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=kt3D[stg.frequencies_for_calibration[1][1], :, :])
+ kt=stg.kt3D[i][stg.frequencies_for_calibration[1][1], :, :])
- stg.J_cross_section[i].append(J_cross_section_freq1)
- stg.J_cross_section[i].append(J_cross_section_freq2)
+ stg.J_cross_section[i][0] = J_cross_section_freq1
+ stg.J_cross_section[i][1] = J_cross_section_freq2
print(f"J_cross_section {str(i)} freq1 shape ", J_cross_section_freq1.shape, J_cross_section[i][0].shape)
print(f"J_cross_section {str(i)} freq2 shape ", J_cross_section_freq2.shape, J_cross_section[i][1].shape)
diff --git a/View/show_popup_combobox.py b/View/show_popup_combobox.py
new file mode 100644
index 0000000..96e6bb9
--- /dev/null
+++ b/View/show_popup_combobox.py
@@ -0,0 +1,9 @@
+from PyQt5.QtWidgets import QComboBox
+from PyQt5.QtCore import pyqtSignal
+
+class ComboBoxShowPopUpWindow(QComboBox):
+ ShowPopUpWindowSignal = pyqtSignal()
+
+ def showPopup(self):
+ self.ShowPopUpWindowSignal.emit()
+ super(ComboBoxShowPopUpWindow, self).showPopup()
diff --git a/View/signal_processing_tab.py b/View/signal_processing_tab.py
index 7ec2cbd..a09add4 100644
--- a/View/signal_processing_tab.py
+++ b/View/signal_processing_tab.py
@@ -1,3 +1,27 @@
+# ============================================================================== #
+ # mainwindow.py - AcouSed #
+ # Copyright (C) 2024 INRAE #
+ # #
+ # This program is free software: you can redistribute it and/or modify #
+ # it under the terms of the GNU General Public License as published by #
+ # the Free Software Foundation, either version 3 of the License, or #
+ # (at your option) any later version. #
+ # #
+ # This program is distributed in the hope that it will be useful, #
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of #
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+ # GNU General Public License for more details. #
+ # #
+ # You should have received a copy of the GNU General Public License #
+ # along with this program. If not, see . #
+from cProfile import label
+
+# by Brahim MOUDJED #
+# ============================================================================== #
+
+# -*- coding: utf-8 -*-
+
+
import sys
from PyQt5.QtWidgets import (QWidget, QHBoxLayout, QVBoxLayout, QPushButton, QGroupBox, QLabel, QCheckBox,
@@ -26,6 +50,7 @@ import Translation.constant_string as cs
from Model.acoustic_data_loader import AcousticDataLoader
import settings as stg
+from settings import depth_cross_section
_translate = QCoreApplication.translate
@@ -716,14 +741,17 @@ class SignalProcessingTab(QWidget):
print("val2 ", val2)
# --- Compute averaged signal ---
- if stg.BS_stream_bed[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
- stg.BS_mean[self.combobox_acoustic_data_choice.currentIndex()] = (
- np.nanmean(stg.BS_stream_bed[self.combobox_acoustic_data_choice.currentIndex()][:, :, val1:val2], axis=2))
- elif stg.BS_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
- stg.BS_mean[self.combobox_acoustic_data_choice.currentIndex()] = (
- np.nanmean(stg.BS_cross_section[self.combobox_acoustic_data_choice.currentIndex()][:, :, val1:val2], axis=2))
- elif stg.BS_raw_data[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
- stg.BS_mean[self.combobox_acoustic_data_choice.currentIndex()] = (
+ # if stg.BS_stream_bed[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ # stg.BS_mean[self.combobox_acoustic_data_choice.currentIndex()] = (
+ # np.nanmean(stg.BS_stream_bed[self.combobox_acoustic_data_choice.currentIndex()][:, :, val1:val2], axis=2))
+ # elif stg.BS_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ # stg.BS_mean[self.combobox_acoustic_data_choice.currentIndex()] = (
+ # np.nanmean(stg.BS_cross_section[self.combobox_acoustic_data_choice.currentIndex()][:, :, val1:val2], axis=2))
+ # elif stg.BS_raw_data[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ print("self.combobox_acoustic_data_choice.currentIndex() ", self.combobox_acoustic_data_choice.currentIndex(),
+ self.combobox_acoustic_data_choice.currentText(), val1, val2,
+ stg.BS_raw_data[self.combobox_acoustic_data_choice.currentIndex()].shape)
+ 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))
# for i in range(self.combobox_freq_noise_from_profile_tail.count()):
@@ -743,29 +771,29 @@ class SignalProcessingTab(QWidget):
self.verticalLayout_groupbox_plot_profile_tail.addWidget(self.canvas_profile_tail)
- if stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
-
- self.axis_profile_tail.plot(
- -stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq_noise_from_profile_tail.currentIndex()],
- stg.BS_mean[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq_noise_from_profile_tail.currentIndex()],
- color="blue", linewidth=1)
- self.axis_profile_tail.plot(
- -stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
- self.combobox_freq_noise_from_profile_tail.currentIndex()],
- float(self.lineEdit_profile_tail_value.text().replace(",", ".")) *
- np.ones(stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
- self.combobox_freq_noise_from_profile_tail.currentIndex()].shape[0]),
- linestyle='dashed', linewidth=2, color='red')
-
- elif stg.depth[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
-
- print(stg.depth[self.combobox_acoustic_data_choice.currentIndex()][
- self.combobox_freq_noise_from_profile_tail.currentIndex()].shape)
- self.axis_profile_tail.plot(
+ # if stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ #
+ # self.axis_profile_tail.plot(
+ # -stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq_noise_from_profile_tail.currentIndex()],
+ # stg.BS_mean[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq_noise_from_profile_tail.currentIndex()],
+ # color="blue", linewidth=1)
+ # self.axis_profile_tail.plot(
+ # -stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ # self.combobox_freq_noise_from_profile_tail.currentIndex()],
+ # float(self.lineEdit_profile_tail_value.text().replace(",", ".")) *
+ # np.ones(stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][
+ # self.combobox_freq_noise_from_profile_tail.currentIndex()].shape[0]),
+ # linestyle='dashed', linewidth=2, color='red')
+ #
+ # elif stg.depth[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ #
+ # print(stg.depth[self.combobox_acoustic_data_choice.currentIndex()][
+ # self.combobox_freq_noise_from_profile_tail.currentIndex()].shape)
+ self.axis_profile_tail.plot(
-stg.depth[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq_noise_from_profile_tail.currentIndex()],
stg.BS_mean[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq_noise_from_profile_tail.currentIndex()],
color="blue", linewidth=1)
- self.axis_profile_tail.plot(
+ self.axis_profile_tail.plot(
-stg.depth[self.combobox_acoustic_data_choice.currentIndex()][
self.combobox_freq_noise_from_profile_tail.currentIndex()],
float(self.lineEdit_profile_tail_value.text().replace(",", ".")) *
@@ -776,11 +804,11 @@ class SignalProcessingTab(QWidget):
self.axis_profile_tail.set_yscale('log')
self.axis_profile_tail.tick_params(axis='both', labelsize=8)
# self.axis_profile_tail.set_yticklabels(fontsize=8)
- self.axis_profile_tail.text(.98, .03, "Depth",
+ self.axis_profile_tail.text(.98, .03, "Depth (m)",
fontsize=8, fontweight='bold', fontname="Ubuntu", c="black", alpha=0.9,
horizontalalignment='right', verticalalignment='bottom', rotation='horizontal',
transform=self.axis_profile_tail.transAxes)
- self.axis_profile_tail.text(.1, .50, "BS signal",
+ self.axis_profile_tail.text(.1, .45, "BS signal (v)",
fontsize=8, fontweight='bold', fontname="Ubuntu", c="black", alpha=0.9,
horizontalalignment='right', verticalalignment='bottom', rotation='vertical',
transform=self.axis_profile_tail.transAxes)
@@ -1138,6 +1166,19 @@ class SignalProcessingTab(QWidget):
# np.full(stg.BS_raw_data[self.combobox_acoustic_data_choice.currentIndex()].shape,
# self.spinbox_compute_noise_from_value.value()))
+ if stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ stg.time_noise[self.combobox_acoustic_data_choice.currentIndex()] = (
+ stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()])
+ else:
+ stg.time_noise[self.combobox_acoustic_data_choice.currentIndex()] = (
+ stg.time[self.combobox_acoustic_data_choice.currentIndex()])
+ if stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
+ stg.depth_noise[self.combobox_acoustic_data_choice.currentIndex()] = (
+ stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()])
+ else:
+ stg.depth_noise[self.combobox_acoustic_data_choice.currentIndex()] = (
+ stg.depth[self.combobox_acoustic_data_choice.currentIndex()])
+
# --- Compute noise from value and compute SNR ---
if stg.BS_stream_bed[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
@@ -1154,9 +1195,6 @@ class SignalProcessingTab(QWidget):
- stg.BS_noise_raw_data[self.combobox_acoustic_data_choice.currentIndex()]) ** 2,
stg.BS_noise_raw_data[self.combobox_acoustic_data_choice.currentIndex()] ** 2))
- stg.time_noise[self.combobox_acoustic_data_choice.currentIndex()] = (
- stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()])
-
elif stg.BS_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
stg.BS_noise_raw_data[self.combobox_acoustic_data_choice.currentIndex()] = (
@@ -1171,9 +1209,6 @@ class SignalProcessingTab(QWidget):
- stg.BS_noise_raw_data[self.combobox_acoustic_data_choice.currentIndex()]) ** 2,
stg.BS_noise_raw_data[self.combobox_acoustic_data_choice.currentIndex()] ** 2))
- stg.time_noise[self.combobox_acoustic_data_choice.currentIndex()] = (
- stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()])
-
else:
stg.BS_noise_raw_data[self.combobox_acoustic_data_choice.currentIndex()] = (
@@ -1187,8 +1222,6 @@ class SignalProcessingTab(QWidget):
- stg.BS_noise_raw_data[self.combobox_acoustic_data_choice.currentIndex()]) ** 2,
stg.BS_noise_raw_data[self.combobox_acoustic_data_choice.currentIndex()] ** 2))
- stg.time_noise[self.combobox_acoustic_data_choice.currentIndex()] = (
- stg.time[self.combobox_acoustic_data_choice.currentIndex()])
# print("stg.BS_noise_averaged_data ", stg.BS_noise_averaged_data)
diff --git a/icons/add.png b/icons/add.png
new file mode 100755
index 0000000..4ac1baf
Binary files /dev/null and b/icons/add.png differ
diff --git a/icons/add0.png b/icons/add0.png
new file mode 100644
index 0000000..b2d0155
Binary files /dev/null and b/icons/add0.png differ
diff --git a/icons/approved.png b/icons/approved.png
new file mode 100644
index 0000000..8e5702d
Binary files /dev/null and b/icons/approved.png differ
diff --git a/icons/between.png b/icons/between.png
new file mode 100644
index 0000000..154d248
Binary files /dev/null and b/icons/between.png differ
diff --git a/icons/circle_green_arrow_right.png b/icons/circle_green_arrow_right.png
new file mode 100644
index 0000000..f99d34b
Binary files /dev/null and b/icons/circle_green_arrow_right.png differ
diff --git a/icons/clear.png b/icons/clear.png
new file mode 100755
index 0000000..6b9fa6d
Binary files /dev/null and b/icons/clear.png differ
diff --git a/icons/clear0.png b/icons/clear0.png
new file mode 100644
index 0000000..ba56419
Binary files /dev/null and b/icons/clear0.png differ
diff --git a/icons/delete.png b/icons/delete.png
new file mode 100755
index 0000000..f953427
Binary files /dev/null and b/icons/delete.png differ
diff --git a/icons/delete0.png b/icons/delete0.png
new file mode 100644
index 0000000..88d4d0e
Binary files /dev/null and b/icons/delete0.png differ
diff --git a/icons/navigation.png b/icons/navigation.png
new file mode 100755
index 0000000..d6c5261
Binary files /dev/null and b/icons/navigation.png differ
diff --git a/icons/no_approved.png b/icons/no_approved.png
new file mode 100644
index 0000000..017036c
Binary files /dev/null and b/icons/no_approved.png differ
diff --git a/icons/no_entry.png b/icons/no_entry.png
new file mode 100644
index 0000000..4565fbe
Binary files /dev/null and b/icons/no_entry.png differ
diff --git a/icons/red_record.png b/icons/red_record.png
new file mode 100755
index 0000000..5cd9ea9
Binary files /dev/null and b/icons/red_record.png differ
diff --git a/icons/triangle_left.png b/icons/triangle_left.png
index 599d548..6dad108 100644
Binary files a/icons/triangle_left.png and b/icons/triangle_left.png differ
diff --git a/icons/triangle_left_old.png b/icons/triangle_left_old.png
new file mode 100644
index 0000000..599d548
Binary files /dev/null and b/icons/triangle_left_old.png differ
diff --git a/icons/triangle_left_to_begin.png b/icons/triangle_left_to_begin.png
new file mode 100755
index 0000000..08813d6
Binary files /dev/null and b/icons/triangle_left_to_begin.png differ
diff --git a/icons/triangle_left_to_begin_old.png b/icons/triangle_left_to_begin_old.png
new file mode 100755
index 0000000..62daa7a
Binary files /dev/null and b/icons/triangle_left_to_begin_old.png differ
diff --git a/icons/triangle_right.png b/icons/triangle_right.png
index 87d5f83..2dfaef5 100644
Binary files a/icons/triangle_right.png and b/icons/triangle_right.png differ
diff --git a/icons/triangle_right_old.png b/icons/triangle_right_old.png
new file mode 100644
index 0000000..87d5f83
Binary files /dev/null and b/icons/triangle_right_old.png differ
diff --git a/icons/triangle_right_to_end.png b/icons/triangle_right_to_end.png
new file mode 100755
index 0000000..f36454d
Binary files /dev/null and b/icons/triangle_right_to_end.png differ
diff --git a/icons/triangle_right_to_end_old.png b/icons/triangle_right_to_end_old.png
new file mode 100755
index 0000000..e4a4930
Binary files /dev/null and b/icons/triangle_right_to_end_old.png differ
diff --git a/icons/update.png b/icons/update.png
new file mode 100755
index 0000000..2900e9d
Binary files /dev/null and b/icons/update.png differ
diff --git a/icons/warning.png b/icons/warning.png
new file mode 100644
index 0000000..f971d40
Binary files /dev/null and b/icons/warning.png differ
diff --git a/icons/yellow_push.png b/icons/yellow_push.png
new file mode 100755
index 0000000..730a2c4
Binary files /dev/null and b/icons/yellow_push.png differ
diff --git a/main.py b/main.py
index 5fb3ed4..0972456 100644
--- a/main.py
+++ b/main.py
@@ -12,6 +12,8 @@ from View.sediment_calibration_tab import SedimentCalibrationTab
from View.acoustic_inversion_tab import AcousticInversionTab
from View.note_tab import NoteTab
from View.user_manual_tab import UserManualTab
+import settings as stg
+from Model.read_table_for_open import ReadTableForOpen
import matplotlib.pyplot as plt
# plt.close("all")
@@ -39,19 +41,24 @@ class MainApplication(QMainWindow):
height = size.height()
self.resize(int(PERCENT_SCREEN_SIZE*width), int(PERCENT_SCREEN_SIZE*height))
try:
-
+ self.read_table_open = ReadTableForOpen()
# **************************************************
# -------------- Acoustic data tab ---------------
self.acoustic_data_tab = AcousticDataTab(self.ui_mainwindow.tab1)
+ print("0 AcousticDataTab ", id(AcousticDataTab))
- # Connect push buttons to download data files22
+ self.acoustic_data_tab.combobox_ABS_system_choice.editTextChanged.connect(
+ self.acoustic_data_tab.ABS_system_choice)
# **************************************************
# --------- Signal pre-processing data tab ----------
self.signal_processing_tab = SignalProcessingTab(self.ui_mainwindow.tab2)
+ self.signal_processing_tab.combobox_acoustic_data_choice.editTextChanged.connect(
+ self.signal_processing_tab.combobox_acoustic_data_choice_change_index)
+
# **************************************************.
# --------------- Sample data tab ----------------
@@ -77,6 +84,8 @@ class MainApplication(QMainWindow):
# self.user_manual_tab = UserManualTab(self.ui_mainwindow.tab7)
+ self.ui_mainwindow.actionOpen.triggered.connect(self.trig_open)
+
# **************************************************
# ---------------- Text File Error -----------------
@@ -86,6 +95,19 @@ class MainApplication(QMainWindow):
sortie.write(traceback.format_exc())
# traceback.TracebackException.from_exception(e).print(file=sortie)
+ def trig_open(self):
+ self.read_table_open.open_file_dialog()
+
+ self.acoustic_data_tab.combobox_ABS_system_choice.setCurrentText(stg.ABS_name[0])
+ self.acoustic_data_tab.fileListWidget.addFilenames(stg.filename_BS_raw_data)
+
+ self.signal_processing_tab.combobox_acoustic_data_choice.addItems(stg.filename_BS_raw_data)
+
+ self.sample_data_tab.fill_comboboxes_and_plot_transect()
+ self.sample_data_tab.lineEdit_fine_sediment.setText(stg.filename_fine)
+ self.sample_data_tab.lineEdit_fine_sediment.setToolTip(stg.path_fine)
+ # self.sample_data_tab.fill_table_fine()
+
if __name__ == '__main__':
# print("sys.argv:", [arg for arg in sys.argv])
diff --git a/settings.py b/settings.py
index 1936669..16cc40d 100644
--- a/settings.py
+++ b/settings.py
@@ -1,3 +1,26 @@
+# ============================================================================== #
+ # settings .py - AcouSed #
+ # Copyright (C) 2024 INRAE #
+ # #
+ # This program is free software: you can redistribute it and/or modify #
+ # it under the terms of the GNU General Public License as published by #
+ # the Free Software Foundation, either version 3 of the License, or #
+ # (at your option) any later version. #
+ # #
+ # This program is distributed in the hope that it will be useful, #
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of #
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+ # GNU General Public License for more details. #
+ # #
+ # You should have received a copy of the GNU General Public License #
+ # along with this program. If not, see . #
+
+ # by Brahim MOUDJED #
+# ============================================================================== #
+
+# -*- coding: utf-8 -*-
+
+
""" this file includs global variables shared between tab """
import numpy as np
@@ -216,6 +239,8 @@ X_exponent = [] # List of one value [X_exponent]
alpha_s = [] # List [alphas_freq1, alphas_freq2] # List of floats
zeta = [] # List [zeta_freq1, zeta_freq2] # List of floats
+kt2D = [] # List of kt2D, computed from kt_corrected or kt_read # List of 2D arrays
+kt3D = [] # List of kt3D, computed from kt2D # List of 3D arrays
J_cross_section = [] # List of J_cross_section compute for all acoustic data recording # List of lists of 3D arrays
# [[J_cross_section_freq1, J_cross_section_freq2], [], []]
FCB = [] # 3D array