From bfa090bbcc79d7d3ad9d116f49092f74179a2ba0 Mon Sep 17 00:00:00 2001 From: brahim Date: Tue, 1 Oct 2024 18:00:21 +0200 Subject: [PATCH] A list of default value for the kt_corrected is created for Aqauscat and for all frequencies available in Aquascat. --- View/acoustic_data_tab.py | 124 ++++++++++++++++++------------- View/sediment_calibration_tab.py | 28 +++---- settings.py | 6 +- 3 files changed, 90 insertions(+), 68 deletions(-) diff --git a/View/acoustic_data_tab.py b/View/acoustic_data_tab.py index 581725d..4b11f24 100644 --- a/View/acoustic_data_tab.py +++ b/View/acoustic_data_tab.py @@ -2,10 +2,10 @@ import os.path import sys from PyQt5.QtWidgets import (QWidget, QVBoxLayout, QHBoxLayout, QGroupBox, QPushButton, QComboBox, QLineEdit, QLabel, - QGridLayout, QSpinBox, QDoubleSpinBox, QTableView, QTableWidget, QSpacerItem, QSizePolicy, - QAbstractScrollArea, QFileDialog, QTableWidgetItem, QMessageBox, QScrollBar, QScrollArea, + QGridLayout, QSpinBox, QDoubleSpinBox, QTableView, QTableWidget, QSpacerItem, QSizePolicy, + QAbstractScrollArea, QFileDialog, QTableWidgetItem, QMessageBox, QScrollBar, QScrollArea, QProgressBar, QRadioButton, QFormLayout, QSlider, QAbstractItemView, QMenu, QItemDelegate, - QCheckBox) + QCheckBox, QAbstractSpinBox) from PyQt5.QtGui import QPixmap, QIcon, QFont, QMouseEvent from PyQt5.QtCore import Qt, QCoreApplication, pyqtSignal, pyqtSlot, QEvent @@ -287,8 +287,11 @@ class AcousticDataTab(QWidget): self.label_kt = QLabel() self.spinbox_kt = QDoubleSpinBox() + self.spinbox_kt.setDecimals(2) self.spinbox_kt.setMaximum(1e6) + self.checkbox_kt = QCheckBox() + self.checkbox_kt.setChecked(True) self.label_rx = QLabel() # a0 in UBSediFlow parameters self.spinbox_rx = QDoubleSpinBox() @@ -1207,6 +1210,8 @@ class AcousticDataTab(QWidget): # self.fileListWidget.clicked.connect(self.rename_file_in_ListWidget) + self.checkbox_kt.stateChanged.connect(self.activate_unactivate_spinbox_kt) + self.radiobutton_value.toggled.connect(self.onClicked_radiobutton_gps) self.radiobutton_file.toggled.connect(self.onClicked_radiobutton_gps) @@ -1505,6 +1510,7 @@ class AcousticDataTab(QWidget): self.gridLayout_goupbox_info.addWidget(self.label_temperature, 2, 0, 1, 1) self.spinbox_temperature.show() self.gridLayout_goupbox_info.addWidget(self.spinbox_temperature, 2, 1, 1, 1) + self.temperature_value() self.label_speed_of_sound.show() self.gridLayout_goupbox_info.addWidget(self.label_speed_of_sound, 3, 0, 1, 1) @@ -1670,11 +1676,10 @@ class AcousticDataTab(QWidget): self.gridLayout_goupbox_info.addWidget(self.checkbox_tx, 15, 2, 1, 1) def temperature_value(self): - if self.fileListWidget.count() > 0: - stg.temperature[self.fileListWidget.currentRow()] = self.spinbox_temperature.value() - print(f"stg.temperature : {stg.temperature}") - self.water_velocity() - self.water_attenuation() + stg.temperature = self.spinbox_temperature.value() + print(f"stg.temperature : {stg.temperature}") + self.water_velocity() + self.water_attenuation() def water_velocity(self): """Computing sond speed from Bilaniuk and Wong 1993""" @@ -1684,8 +1689,8 @@ class AcousticDataTab(QWidget): 3.34638117 * 1e-4 * self.spinbox_temperature.value() ** 3 - 1.48259672 * 1e-6 * self.spinbox_temperature.value() ** 4 + 3.16585020 * 1e-9 * self.spinbox_temperature.value() ** 5) - stg.water_velocity[self.fileListWidget.currentRow()] = C - self.spinbox_speed_of_sound.setValue(stg.water_velocity[self.fileListWidget.currentRow()]) + stg.water_velocity = C + self.spinbox_speed_of_sound.setValue(stg.water_velocity) print("water velocity ", stg.water_velocity) @@ -1693,27 +1698,28 @@ class AcousticDataTab(QWidget): # -------- Computing water attenuation coefficient ----------- # def water_attenuation(self): """Computing attenuation from François and Garrison 1982""" - stg.water_attenuation[self.fileListWidget.currentRow()].clear() - for f in stg.freq[self.fileListWidget.currentRow()]: - if self.spinbox_temperature.value() > 20: - alpha = ((3.964 * 1e-4 - - 1.146 * 1e-5 * self.spinbox_temperature.value() + - 1.45 * 1e-7 * self.spinbox_temperature.value() ** 2 - - 6.5 * 1e-10 * self.spinbox_temperature.value() ** 3) * - 1e-3 * (np.log(10) / 20) * (f * 1e-3) ** 2) - else: - alpha = ((4.937 * 1e-4 - - 2.59 * 1e-5 * self.spinbox_temperature.value() + - 9.11 * 1e-7 * self.spinbox_temperature.value() ** 2 - - 1.5 * 1e-8 * self.spinbox_temperature.value() ** 3) * - 1e-3 * (np.log(10) / 20) * (f * 1e-3) ** 2) + if self.fileListWidget.count() > 0: + stg.water_attenuation[self.fileListWidget.currentRow()].clear() + for f in stg.freq[self.fileListWidget.currentRow()]: + if self.spinbox_temperature.value() > 20: + alpha = ((3.964 * 1e-4 - + 1.146 * 1e-5 * self.spinbox_temperature.value() + + 1.45 * 1e-7 * self.spinbox_temperature.value() ** 2 - + 6.5 * 1e-10 * self.spinbox_temperature.value() ** 3) * + 1e-3 * (np.log(10) / 20) * (f * 1e-3) ** 2) + else: + alpha = ((4.937 * 1e-4 - + 2.59 * 1e-5 * self.spinbox_temperature.value() + + 9.11 * 1e-7 * self.spinbox_temperature.value() ** 2 - + 1.5 * 1e-8 * self.spinbox_temperature.value() ** 3) * + 1e-3 * (np.log(10) / 20) * (f * 1e-3) ** 2) - stg.water_attenuation[self.fileListWidget.currentRow()].append(alpha) + stg.water_attenuation[self.fileListWidget.currentRow()].append(alpha) - self.spinbox_sound_attenuation.setValue(stg.water_attenuation[self.fileListWidget.currentRow()] - [self.combobox_frequency_information.currentIndex()]) + self.spinbox_sound_attenuation.setValue(stg.water_attenuation[self.fileListWidget.currentRow()] + [self.combobox_frequency_information.currentIndex()]) - print("water attenuation ", stg.water_attenuation) + print("water attenuation ", stg.water_attenuation) def clicked_pushbutton_noise_level(self): self.WindowNoiseLevelTailAveragedProfile().show() @@ -1799,6 +1805,7 @@ class AcousticDataTab(QWidget): self.fill_table() self.plot_backscattered_acoustic_signal_recording() self.update_frequency_combobox() + self.water_attenuation() stg.acoustic_data = list(range(self.fileListWidget.count())) @@ -2123,12 +2130,12 @@ class AcousticDataTab(QWidget): stg.pulse_length.append(acoustic_data._cell_size) stg.nb_pings_per_sec.append(acoustic_data._nb_pings_per_sec) stg.nb_pings_averaged_per_profile.append(acoustic_data._nb_pings_averaged_per_profile) - stg.kt_read.append(acoustic_data._kt) - stg.kt_corrected.append([0]*len(stg.kt_read[-1])) + stg.kt_read = acoustic_data._kt + # stg.kt_corrected.append([0]*len(stg.kt_read[-1])) stg.gain_rx.append(acoustic_data._gain_rx) stg.gain_tx.append(acoustic_data._gain_tx) - stg.temperature.append(0) - stg.water_velocity.append(0) + # stg.temperature.append(0) + # stg.water_velocity.append(0) stg.water_attenuation.append([]) # --- The other acoustic variables lists are filled with empty object. --- @@ -2271,16 +2278,32 @@ class AcousticDataTab(QWidget): [self.combobox_frequency_information.currentIndex()])) self.gridLayout_goupbox_info.addWidget(self.label_pings_per_profile_value, 13, 1, 1, 1) - stg.kt_corrected[self.fileListWidget.currentRow()] = stg.kt_read[self.fileListWidget.currentRow()] + if self.combobox_ABS_system_choice.currentText() == "Aquascat 1000R": + # stg.kt_corrected = stg.kt_read + stg.kt_corrected = {"0.3 MHz" : 0.78905595, + "0.5 MHz" : 0.36257121, + "1.0 MHz" : 0.64446145, + "2.5 MHz" : 0.31522785, + "4.0 MHz" : 0.30339201, + "5.0 MHz" : 0.27143525} + elif self.combobox_ABS_system_choice.currentText() == "UB-SediFlow": + # stg.kt_corrected = stg.kt_read + stg.kt_corrected = [0.79352001, 0.36462244, 0.64810746, 0.27297088] # if self.checkbox_kt.isChecked(): # self.spinbox_kt.setValue( # stg.kt_corrected[self.fileListWidget.currentRow()][self.combobox_frequency_information.currentIndex()]) # else: + + print(stg.ABS_name) + print(stg.kt_corrected) + print(self.combobox_frequency_information.currentText()) + print(stg.kt_corrected[self.combobox_frequency_information.currentText()]) + self.spinbox_kt.setValue( - stg.kt_read[self.fileListWidget.currentRow()][self.combobox_frequency_information.currentIndex()]) + stg.kt_corrected[self.combobox_frequency_information.currentText()]) self.spinbox_kt.setSuffix(f" V.m^{1.5}") - self.spinbox_kt.setEnabled(False) - self.checkbox_kt.stateChanged.connect(self.activate_unactivate_spinbox_kt) + self.spinbox_kt.setEnabled(True) + # self.checkbox_kt.stateChanged.connect(self.activate_unactivate_spinbox_kt) self.spinbox_kt.valueChanged.connect(self.kt_value) self.spinbox_rx.setValue(stg.gain_rx[self.fileListWidget.currentRow()][self.combobox_frequency_information.currentIndex()]) @@ -2431,15 +2454,16 @@ class AcousticDataTab(QWidget): self.gridLayout_goupbox_info.addWidget(self.label_pings_per_profile_value, 13, 1, 1, 1) print("stg.kt_corrected ", stg.kt_corrected) + print("self.combobox_frequency_information.currentText()", + self.combobox_frequency_information.count()) + print("self.combobox_frequency_information.currentText()", self.combobox_frequency_information.currentText()) self.spinbox_kt.clear() if self.checkbox_kt.isChecked(): - # print("combobox information update : checkbox checked") - self.spinbox_kt.setValue(stg.kt_corrected[self.fileListWidget.currentRow()] - [self.combobox_frequency_information.currentIndex()]) + if self.combobox_frequency_information.count() > 0: + self.spinbox_kt.setValue(stg.kt_corrected[self.combobox_frequency_information.currentText()]) else: # print("combobox information update : checkbox unchecked") - self.spinbox_kt.setValue(stg.kt_read[self.fileListWidget.currentRow()] - [self.combobox_frequency_information.currentIndex()]) + self.spinbox_kt.setValue(stg.kt_read[self.combobox_frequency_information.currentIndex()]) self.spinbox_kt.setSuffix(f" V.m^{1.5}") self.spinbox_rx.clear() @@ -2452,17 +2476,15 @@ class AcousticDataTab(QWidget): def activate_unactivate_spinbox_kt(self): if self.checkbox_kt.isChecked(): - # print(f"checkbox checked : kt corrected {stg.kt_corrected}") - self.spinbox_kt.setValue(stg.kt_corrected[self.fileListWidget.currentRow()] - [self.combobox_frequency_information.currentIndex()]) self.spinbox_kt.setEnabled(True) - + if stg.kt_corrected: + self.spinbox_kt.setValue(stg.kt_corrected[self.combobox_frequency_information.currentText()]) else: - # print(f"checkbox unchecked : kt read {stg.kt_read}") - self.spinbox_kt.setValue(stg.kt_read[self.fileListWidget.currentRow()] - [self.combobox_frequency_information.currentIndex()]) self.spinbox_kt.setDisabled(True) - + if stg.kt_read: + print(self.combobox_frequency_information.currentIndex()) + print(stg.kt_read) + self.spinbox_kt.setValue(stg.kt_read[self.combobox_frequency_information.currentIndex()]) def activate_unactivate_spinbox_rx(self): if self.checkbox_rx.isChecked(): @@ -2482,10 +2504,10 @@ class AcousticDataTab(QWidget): # print(f"0 stg.kt_corrected {stg.kt_corrected}") if self.fileListWidget.count() > 0: if self.checkbox_kt.isChecked(): - stg.kt_corrected[self.fileListWidget.currentRow()][self.combobox_frequency_information.currentIndex()] \ + stg.kt_corrected[self.combobox_frequency_information.currentText()] \ = self.spinbox_kt.value() # print(f"1 stg.kt_read : {stg.kt_read}") - # print(f"1 stg.kt_corrected {stg.kt_corrected}") + print(f"1 stg.kt_corrected {stg.kt_corrected}") def gain_rx_value(self): if self.fileListWidget.count() > 0: diff --git a/View/sediment_calibration_tab.py b/View/sediment_calibration_tab.py index cd145c2..552b13e 100644 --- a/View/sediment_calibration_tab.py +++ b/View/sediment_calibration_tab.py @@ -1301,12 +1301,12 @@ class SedimentCalibrationTab(QWidget): ks_freq1 = self.inv_hc.ks(proba_num=psd_number_of_particles, freq=stg.freq[self.combobox_acoustic_data_choice.currentIndex()][ self.combobox_freq1.currentIndex()], - C=stg.water_velocity[self.combobox_acoustic_data_choice.currentIndex()]) + C=stg.water_velocity) ks_freq2 = self.inv_hc.ks(proba_num=psd_number_of_particles, freq=stg.freq[self.combobox_acoustic_data_choice.currentIndex()][ self.combobox_freq2.currentIndex()], - C=stg.water_velocity[self.combobox_acoustic_data_choice.currentIndex()]) + C=stg.water_velocity) stg.ks = [ks_freq1, ks_freq2] @@ -1375,11 +1375,11 @@ class SedimentCalibrationTab(QWidget): # print("kt cor ", stg.kt_corrected) # print("kt read", stg.kt_read) - if (stg.kt_corrected[self.combobox_acoustic_data_choice.currentIndex()] != + if ([stg.kt_corrected[key] for key in stg.freq_text[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(), + np.array([[stg.kt_corrected[key] for key in stg.freq_text[self.combobox_acoustic_data_choice.currentIndex()]]]).transpose(), stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1], axis=1) kt3D = np.repeat( @@ -1422,11 +1422,11 @@ class SedimentCalibrationTab(QWidget): print("kt cor ", stg.kt_corrected) print("kt read", stg.kt_read) - if (stg.kt_corrected[self.combobox_acoustic_data_choice.currentIndex()] != + if ([stg.kt_corrected[key] for key in stg.freq_text[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(), + np.array([[stg.kt_corrected[key] for key in stg.freq_text[self.combobox_acoustic_data_choice.currentIndex()]]]).transpose(), stg.time[self.combobox_acoustic_data_choice.currentIndex()].shape[1], axis=1) kt3D = np.repeat( @@ -1471,11 +1471,11 @@ class SedimentCalibrationTab(QWidget): print("kt cor ", stg.kt_corrected) print("kt read", stg.kt_read) - if (stg.kt_corrected[self.combobox_acoustic_data_choice.currentIndex()] != + if ([stg.kt_corrected[key] for key in stg.freq_text[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(), + np.array([[stg.kt_corrected[key] for key in stg.freq_text[self.combobox_acoustic_data_choice.currentIndex()]]]).transpose(), stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape[1], axis=1) kt3D = np.repeat( @@ -1518,11 +1518,11 @@ class SedimentCalibrationTab(QWidget): print("kt cor ", stg.kt_corrected) print("kt read", stg.kt_read) - if (stg.kt_corrected[self.combobox_acoustic_data_choice.currentIndex()] != + if ([stg.kt_corrected[key] for key in stg.freq_text[self.combobox_acoustic_data_choice.currentIndex()]] != stg.kt_read[self.combobox_acoustic_data_choice.currentIndex()]): - + 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[self.combobox_acoustic_data_choice.currentIndex()]]).transpose(), + np.array([[stg.kt_corrected[key] for key in stg.freq_text[self.combobox_acoustic_data_choice.currentIndex()]]]).transpose(), stg.time[self.combobox_acoustic_data_choice.currentIndex()].shape[1], axis=1) kt3D = np.repeat( @@ -1928,10 +1928,10 @@ class SedimentCalibrationTab(QWidget): # Pulse duration tau.append(aquascat_cell_size[f] * 2 / 1500) # figure 2.9 1500 vitesse du son entrée pour le paramètrage des mesures aquascat - print(stg.water_velocity[self.combobox_acoustic_data_choice.currentIndex()]) + print(stg.water_velocity) print(tau) # Real cell size - real_cell_size.append(stg.water_velocity[self.combobox_acoustic_data_choice.currentIndex()] * tau[f] / 2) # voir fig 2.9 + real_cell_size.append(stg.water_velocity * tau[f] / 2) # voir fig 2.9 # Converting to real cell profile # stg.depth_real[self.combobox_acoustic_data_choice.currentIndex()][f, :] = \ @@ -1962,7 +1962,7 @@ class SedimentCalibrationTab(QWidget): tau.append(aquascat_cell_size[f] * 2 / 1500) # figure 2.9 1500 vitesse du son entrée pour le paramètrage des mesures aquascat # Real cell size - real_cell_size.append(stg.water_velocity[self.combobox_acoustic_data_choice.currentIndex()] * tau[f] / 2) # voir fig 2.9 + real_cell_size.append(stg.water_velocity * tau[f] / 2) # voir fig 2.9 # Converting to real cell profile # stg.depth_real[self.combobox_acoustic_data_choice.currentIndex()][f, :] = \ diff --git a/settings.py b/settings.py index 9c19dfc..43fef7f 100644 --- a/settings.py +++ b/settings.py @@ -40,7 +40,7 @@ pulse_length = [] nb_pings_per_sec = [] nb_pings_averaged_per_profile = [] kt_read = [] -kt_corrected = [] +kt_corrected = {} gain_rx = [] gain_tx = [] @@ -160,9 +160,9 @@ sand_sample_position = [] # --- Acoustic inversion method --- -temperature = [] +temperature = 0 water_attenuation = [] -water_velocity = [] +water_velocity = 0 # kt_corrected = np.array([]) # kt_corrected_2D = np.array([])