All plots are drawn as soon as acoustic file is download. Bottom line river is plotted on acoustic profile.

dev-brahim
brahim 2024-01-29 14:04:33 +01:00
parent e701425e03
commit e204ddba0e
1 changed files with 112 additions and 38 deletions

View File

@ -183,11 +183,14 @@ class AcousticDataTab(QWidget):
self.horizontalLayout_radiobutton_gps.addWidget(self.radiobutton_file)
self.groupbox_gps_value = QGroupBox()
self.formLayout_gps_value = QFormLayout(self.groupbox_gps_value)
self.gridLayout_gps_value = QGridLayout(self.groupbox_gps_value)
self.label_distance_value = QLabel()
self.label_distance_value.setText("Distance : ")
self.gridLayout_gps_value.addWidget(self.label_distance_value, 0, 0, 1, 1)
self.lineEdit_gps_value = QLineEdit()
self.formLayout_gps_value.addRow(self.label_distance_value, self.lineEdit_gps_value)
self.gridLayout_gps_value.addWidget(self.lineEdit_gps_value, 0, 1, 1, 1)
self.label_m_per_record = QLabel("m / record")
self.gridLayout_gps_value.addWidget(self.label_m_per_record, 0, 2, 1, 1)
self.verticalLayout_gps_input_data.addWidget(self.groupbox_gps_value)
@ -198,17 +201,17 @@ class AcousticDataTab(QWidget):
self.combobox_gps_system_choice = QComboBox()
self.combobox_gps_system_choice.addItems([" ", "GPS1", "GPS2", "no GPS"])
self.gridLayout_groupbox_gps_file.addWidget(self.combobox_gps_system_choice, 0, 0, 1, 1)
self.gridLayout_groupbox_gps_file.addWidget(self.combobox_gps_system_choice, 0, 0, 1, 2)
self.pushbutton_gps_file = QPushButton()
self.pushbutton_gps_file.setIcon(self.icon_folder)
self.gridLayout_groupbox_gps_file.addWidget(self.pushbutton_gps_file, 0, 1, 1, 1)
self.gridLayout_groupbox_gps_file.addWidget(self.pushbutton_gps_file, 0, 2, 1, 1)
self.lineEdit_gps_file = QLineEdit()
self.gridLayout_groupbox_gps_file.addWidget(self.lineEdit_gps_file, 0, 2, 1, 1)
self.gridLayout_groupbox_gps_file.addWidget(self.lineEdit_gps_file, 0, 3, 1, 2)
self.label_date_groupbox_gps_file = QLabel()
self.gridLayout_groupbox_gps_file.addWidget(self.label_date_groupbox_gps_file, 1, 0, 1, 2)
self.label_hour_groupbox_gps_file = QLabel()
self.gridLayout_groupbox_gps_file.addWidget(self.label_hour_groupbox_gps_file, 1, 2, 1, 1)
self.gridLayout_groupbox_gps_file.addWidget(self.label_hour_groupbox_gps_file, 1, 2, 1, 2)
# Download Push Button event : connect button clicked signal to open file slot
# self.pushButton_gpsfile.clicked.connect(self.open_dialog_box)
@ -221,38 +224,51 @@ class AcousticDataTab(QWidget):
self.gridLayout_time_offset = QGridLayout()
self.label_time_offset = QLabel()
self.gridLayout_time_offset.addWidget(self.label_time_offset, 0, 0, 1, 1)
# self.gridLayout_time_offset.addWidget(self.label_time_offset, 0, 0, 1, 1)
self.gridLayout_groupbox_gps_file.addWidget(self.label_time_offset, 2, 0, 1, 1)
self.label_acoustic_gps_time = QLabel()
self.label_acoustic_gps_time.setText(
"T<span style= vertical-align:sub>acoustic</span> =" + " T<span style= vertical-align:sub>gps</span>")
self.gridLayout_time_offset.addWidget(self.label_acoustic_gps_time, 0, 1, 1, 1)
# self.gridLayout_time_offset.addWidget(self.label_acoustic_gps_time, 0, 1, 1, 1)
self.gridLayout_groupbox_gps_file.addWidget(self.label_acoustic_gps_time, 2, 1, 1, 1)
self.combobox_plus_minus = QComboBox()
self.combobox_plus_minus.addItem("+")
self.combobox_plus_minus.addItem("-")
self.gridLayout_time_offset.addWidget(self.combobox_plus_minus, 0, 2, 1, 1)
# self.gridLayout_time_offset.addWidget(self.combobox_plus_minus, 0, 2, 1, 1)
self.gridLayout_groupbox_gps_file.addWidget(self.combobox_plus_minus, 2, 2, 1, 1)
self.spinbox_time_offset_value = QSpinBox()
self.gridLayout_time_offset.addWidget(self.spinbox_time_offset_value, 0, 3, 1, 1)
# self.gridLayout_time_offset.addWidget(self.spinbox_time_offset_value, 0, 3, 1, 1)
self.gridLayout_groupbox_gps_file.addWidget(self.spinbox_time_offset_value, 2, 3, 1, 1)
self.label_seconds = QLabel()
self.label_seconds.setText("sec")
self.gridLayout_time_offset.addWidget(self.label_seconds, 0, 4, 1, 1)
# self.gridLayout_time_offset.addWidget(self.label_seconds, 0, 4, 1, 1)
self.gridLayout_groupbox_gps_file.addWidget(self.label_seconds, 2, 4, 1, 1)
self.verticalLayout_groupbox_download.addLayout(self.gridLayout_time_offset)
# ++++++++++++++++++++++++++++++++++++++
# | Group Box Measurements information |
# ++++++++++++++++++++++++++++++++++++++
self.verticalLayout_groupbox_info = QVBoxLayout(self.groupbox_info)
self.formLayout_temperature = QFormLayout()
self.label_temperature = QLabel("Temperature : ")
self.lineEdit_temperature = QLineEdit()
self.formLayout_temperature.addRow(self.label_temperature, self.lineEdit_temperature)
self.verticalLayout_groupbox_info.addLayout(self.formLayout_temperature)
self.gridLayout_goupbox_info = QGridLayout()
self.verticalLayout_groupbox_info.addLayout(self.gridLayout_goupbox_info)
# self.verticalLayout_groupbox_info = QVBoxLayout(self.groupbox_info)
#
# self.formLayout_temperature = QFormLayout()
# self.label_temperature = QLabel("Temperature : ")
# self.lineEdit_temperature = QLineEdit()
# self.formLayout_temperature.addRow(self.label_temperature, self.lineEdit_temperature)
# self.verticalLayout_groupbox_info.addLayout(self.formLayout_temperature)
#
# self.gridLayout_goupbox_info = QGridLayout()
# self.verticalLayout_groupbox_info.addLayout(self.gridLayout_goupbox_info)
# --- Information for Aquascat ---
self.gridLayout_goupbox_info = QGridLayout(self.groupbox_info)
self.label_temperature = QLabel("Temperature : ")
self.gridLayout_goupbox_info.addWidget(self.label_temperature, 0, 0, 1, 1)
self.lineEdit_temperature = QLineEdit()
self.gridLayout_goupbox_info.addWidget(self.lineEdit_temperature, 0, 1, 1, 1)
self.label_degreCelsius = QLabel("°C")
self.gridLayout_goupbox_info.addWidget(self.label_degreCelsius, 0, 2, 1, 1)
self.label_profiles = QLabel()
self.label_profiles_per_sec = QLabel()
@ -742,17 +758,17 @@ class AcousticDataTab(QWidget):
self.label_rx.show()
self.label_tx.show()
self.gridLayout_goupbox_info.addWidget(self.label_profiles, 0, 0, 1, 1)
self.gridLayout_goupbox_info.addWidget(self.label_profiles_per_sec, 0, 1, 1, 1)
self.gridLayout_goupbox_info.addWidget(self.label_cells, 1, 0, 1, 1)
self.gridLayout_goupbox_info.addWidget(self.label_cell_size, 1, 1, 1, 1)
self.gridLayout_goupbox_info.addWidget(self.label_pulse_length, 2, 0, 1, 1)
self.gridLayout_goupbox_info.addWidget(self.label_pings_per_sec, 3, 0, 1, 1)
self.gridLayout_goupbox_info.addWidget(self.label_pings_per_profile, 3, 1, 1, 1)
self.gridLayout_goupbox_info.addWidget(self.label_freq, 4, 0, 1, 2)
self.gridLayout_goupbox_info.addWidget(self.label_kt, 5, 0, 1, 2)
self.gridLayout_goupbox_info.addWidget(self.label_rx, 6, 0, 1, 2)
self.gridLayout_goupbox_info.addWidget(self.label_tx, 7, 0, 1, 2)
self.gridLayout_goupbox_info.addWidget(self.label_profiles, 1, 0, 1, 1)
self.gridLayout_goupbox_info.addWidget(self.label_profiles_per_sec, 1, 1, 1, 1)
self.gridLayout_goupbox_info.addWidget(self.label_cells, 2, 0, 1, 1)
self.gridLayout_goupbox_info.addWidget(self.label_cell_size, 2, 1, 1, 1)
self.gridLayout_goupbox_info.addWidget(self.label_pulse_length, 3, 0, 1, 1)
self.gridLayout_goupbox_info.addWidget(self.label_pings_per_sec, 4, 0, 1, 1)
self.gridLayout_goupbox_info.addWidget(self.label_pings_per_profile, 4, 1, 1, 1)
self.gridLayout_goupbox_info.addWidget(self.label_freq, 5, 0, 1, 2)
self.gridLayout_goupbox_info.addWidget(self.label_kt, 6, 0, 1, 2)
self.gridLayout_goupbox_info.addWidget(self.label_rx, 7, 0, 1, 2)
self.gridLayout_goupbox_info.addWidget(self.label_tx, 8, 0, 1, 2)
def groupbox_measurement_information_UBSediFlow(self):
# self.gridLayout_goupbox_info.itemAt(0).widget().deleteLater()
@ -838,6 +854,7 @@ class AcousticDataTab(QWidget):
self.label_hour_groupbox_acoustic_file.setText(
_translate("CONSTANT_STRING", cs.HOUR) + ": " + str(stg.hour))
self.fill_measurements_information_groupbox()
self.plot_transect_with_BS_raw_data()
self.combobox_freq_choice.addItems([f for f in stg.freq_text])
self.combobox_frequency_profile.addItems([f for f in stg.freq_text])
@ -1136,7 +1153,7 @@ class AcousticDataTab(QWidget):
self.fig_BS.supxlabel('Time (sec)', fontsize=10)
self.fig_BS.supylabel('Depth (m)', fontsize=10)
cbar = self.fig_BS.colorbar(pcm, ax=self.axis_BS[:], shrink=1, location='right')
cbar.set_label(label='Backscatter acoustic signal (V)', rotation=270, labelpad=10)
cbar.set_label(label='Acoustic backscatter signal (V)', rotation=270, labelpad=10)
self.fig_BS.canvas.draw_idle()
self.plot_profile()
@ -1259,6 +1276,12 @@ class AcousticDataTab(QWidget):
pcm = self.axis_BS[f].pcolormesh(stg.t[f, :], -stg.r[f, :], np.log(stg.BS_cross_section[f, :, :]),
cmap='Blues')
# --- Plot river bottom line ---
if stg.r_bottom.size != 0:
self.axis_BS[f].plot(stg.t[self.combobox_freq_choice.currentIndex(), :], -stg.r_bottom,
color='black', linewidth=1, linestyle="solid")
# --- Plot red solid line on transect to visualize position of plotted profile ---
self.axis_BS[self.combobox_frequency_profile.currentIndex()].plot(
stg.t[0, # self.combobox_frequency_profile.currentIndex(),
@ -1373,18 +1396,54 @@ class AcousticDataTab(QWidget):
self.slider.setMaximum(stg.t.shape[1])
slider_value = [self.slider.value() - 1 if self.slider.value() -1 <= stg.t.shape[1]-1 else np.max(stg.t.shape[1]-1)][0]
self.axis_profile.cla()
self.axis_profile.plot(stg.BS_cross_section[
self.combobox_frequency_profile.currentIndex(), :,
[self.slider.value() - 1 if self.slider.value() -1 <= stg.t.shape[1]-1 else np.max(stg.t.shape[1]-1)][0]],
# --- Profile plot ---
self.axis_profile.plot(stg.BS_cross_section[self.combobox_frequency_profile.currentIndex(), :, slider_value],
-stg.r[self.combobox_frequency_profile.currentIndex(), :],
linestyle='solid', color='k', linewidth=1)
self.axis_profile.text(.95, .05, stg.freq_text[self.combobox_frequency_profile.currentIndex()],
fontsize=10, fontweight='bold', fontname="Ubuntu",
# --- Plot upper limit line ---
# self.axis_profile.plot([0,
# stg.BS_cross_section[self.combobox_frequency_profile.currentIndex(),
# stg.ind_bottom[slider_value],
# slider_value]],
# -stg.
# )
# --- Plot lower limit line ---
# --- Write frequency on graph ---
self.axis_profile.text(.95, .90, stg.freq_text[self.combobox_frequency_profile.currentIndex()],
fontsize=14, fontweight='bold', fontname="Ubuntu",
fontstyle="normal", c="black", alpha=0.2,
horizontalalignment='right', verticalalignment='bottom',
transform=self.axis_profile.transAxes)
# --- Plot bottom line ---
if stg.r_bottom.size != 0:
self.axis_profile.plot([0,
np.nanmax(stg.BS_cross_section[self.combobox_frequency_profile.currentIndex(),
:, slider_value])],
-stg.r[self.combobox_frequency_profile.currentIndex(), stg.ind_bottom[slider_value]]*np.ones(2),
linestyle='solid', color='r', linewidth=1)
position_x = (stg.r[self.combobox_frequency_profile.currentIndex(), stg.ind_bottom[slider_value]] /
np.nanmax(stg.r[self.combobox_frequency_profile.currentIndex(), :]))
self.axis_profile.text(.95, 1-position_x + 0.05, "River bed",
fontsize=10, fontweight='normal', fontname="Times New Roman",
fontstyle="italic", c="red", alpha=0.2,
horizontalalignment='right', verticalalignment='bottom',
transform=self.axis_profile.transAxes)
self.fig_profile.supxlabel("Acoustic Backscatter Signal (V)")
self.fig_profile.supylabel("Depth (m)")
self.fig_profile.canvas.draw_idle()
@ -1813,7 +1872,18 @@ class AcousticDataTab(QWidget):
# int(stg.tmax[self.combobox_freq_choice.currentIndex()])]
stg.val_bottom = val_bottom#[int(stg.tmin[self.combobox_freq_choice.currentIndex()]):
# int(stg.tmax[self.combobox_freq_choice.currentIndex()])]
stg.ind_bottom = r_bottom_ind
print("stg.ind_bottom : ", stg.ind_bottom)
print("stg.val_bottom : ", stg.val_bottom)
stg.BS_stream_bed = deepcopy(stg.BS_cross_section)
for f, _ in enumerate(stg.freq):
for k, _ in enumerate(stg.r_bottom):
# print(k, np.where(stg.r >= stg.r_bottom[k])[0])
stg.BS_stream_bed[
f, np.where(stg.r[self.combobox_freq_choice.currentIndex(), :] >= stg.r_bottom[k])[
0], k] = np.nan
# --- Plot transect BS with bathymetry ---
@ -1858,6 +1928,10 @@ class AcousticDataTab(QWidget):
horizontalalignment='right', verticalalignment='bottom',
transform=self.axis_BS[f].transAxes)
# --- Update plot profile ---
self.update_plot_profile()
self.fig_BS.canvas.draw_idle()
# # --- Plot transect SNR with bathymetry ---