correction merge and correction interpolate fine profile
parent
baebe2e8cc
commit
b28978311c
|
|
@ -19,32 +19,35 @@
|
||||||
# ============================================================================== #
|
# ============================================================================== #
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
import os
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from scipy.stats import linregress
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
import pandas as pd
|
||||||
|
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
import pandas as pd
|
from matplotlib.colors import LogNorm
|
||||||
from PyQt5.QtWidgets import (QWidget, QVBoxLayout, QHBoxLayout, QGroupBox, QComboBox,
|
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
|
||||||
QGridLayout, QLabel, QPushButton, QSlider, QLineEdit, QFileDialog, QMessageBox, QFrame)
|
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolBar
|
||||||
|
|
||||||
|
from PyQt5.QtWidgets import (
|
||||||
|
QWidget, QVBoxLayout, QHBoxLayout, QGroupBox, QComboBox,
|
||||||
|
QGridLayout, QLabel, QPushButton, QSlider, QLineEdit,
|
||||||
|
QFileDialog, QMessageBox, QFrame
|
||||||
|
)
|
||||||
|
|
||||||
from PyQt5.QtCore import Qt, QPropertyAnimation, QSize
|
from PyQt5.QtCore import Qt, QPropertyAnimation, QSize
|
||||||
from PyQt5.QtGui import QIcon, QPixmap, QFont
|
from PyQt5.QtGui import QIcon, QPixmap, QFont
|
||||||
|
|
||||||
import settings as stg
|
import settings as stg
|
||||||
|
|
||||||
import numpy as np
|
|
||||||
|
|
||||||
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
|
|
||||||
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolBar
|
|
||||||
from matplotlib.colors import LogNorm
|
|
||||||
|
|
||||||
from scipy.stats import linregress
|
|
||||||
|
|
||||||
from os import path
|
|
||||||
|
|
||||||
from View.checkable_combobox import CheckableComboBox
|
from View.checkable_combobox import CheckableComboBox
|
||||||
|
|
||||||
from Model.acoustic_inversion_method_high_concentration import AcousticInversionMethodHighConcentration
|
from Model.acoustic_inversion_method_high_concentration import AcousticInversionMethodHighConcentration
|
||||||
|
|
||||||
|
logger = logging.getLogger()
|
||||||
|
|
||||||
|
|
||||||
class SedimentCalibrationTab(QWidget):
|
class SedimentCalibrationTab(QWidget):
|
||||||
|
|
||||||
|
|
@ -1273,89 +1276,108 @@ class SedimentCalibrationTab(QWidget):
|
||||||
marker="*", mfc="b", mec="b", ms=8, ls="None")
|
marker="*", mfc="b", mec="b", ms=8, ls="None")
|
||||||
|
|
||||||
def interpolate_Mfine_profile(self):
|
def interpolate_Mfine_profile(self):
|
||||||
|
# Variable 'stg.sand_sample_target_indice' is set only at
|
||||||
|
# 'plot sample' button click
|
||||||
|
if len(stg.sand_sample_target_indice) == 0:
|
||||||
|
self._data_validity_message_box()
|
||||||
|
return
|
||||||
|
|
||||||
if stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
|
data_choice = self.combobox_acoustic_data_choice \
|
||||||
|
.currentIndex()
|
||||||
|
|
||||||
if stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
|
if stg.depth_cross_section[data_choice].shape != (0,):
|
||||||
|
depth_data = stg.depth_cross_section
|
||||||
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 len(stg.depth_bottom[self.combobox_acoustic_data_choice.currentIndex()]) != 0 else np.array([])][0]
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
|
if stg.time_cross_section[data_choice].shape != (0,):
|
||||||
|
time_data = stg.time_cross_section
|
||||||
else:
|
else:
|
||||||
|
time_data = stg.time
|
||||||
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]
|
|
||||||
] if len(stg.depth_bottom[self.combobox_acoustic_data_choice.currentIndex()]) else np.array([])][0]
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
depth_data = stg.depth
|
||||||
|
|
||||||
if stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,):
|
if stg.time_cross_section[data_choice].shape != (0,):
|
||||||
|
time_data = stg.time_cross_sectino
|
||||||
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]
|
|
||||||
] if len(stg.depth_bottom[self.combobox_acoustic_data_choice.currentIndex()]) != 0 else np.array([])][0]
|
|
||||||
))
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
time_data = stg.time
|
||||||
|
|
||||||
stg.range_lin_interp, stg.M_profile_fine = (
|
self.interpolate_Mfine_profile_compute(
|
||||||
self.inv_hc.M_profile_SCC_fine_interpolated(
|
data_choice, depth_data, time_data
|
||||||
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(), :],
|
def interpolate_Mfine_profile_compute(self, data_choice, depth_data, time_data):
|
||||||
r_bottom=[stg.depth_bottom[self.combobox_acoustic_data_choice.currentIndex()]
|
range_cells = depth_data[data_choice][
|
||||||
[
|
self.combobox_freq2.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]]) ==
|
sample_depth = [
|
||||||
np.nanmin(np.abs(
|
-stg.depth_fine[k[1]]
|
||||||
stg.time[self.combobox_acoustic_data_choice.currentIndex()][
|
for k in stg.fine_sample_profile
|
||||||
self.combobox_freq2.currentIndex(), :]
|
]
|
||||||
- stg.time_fine[stg.fine_sample_profile[-1][1]])))[0][0]
|
|
||||||
] if len(stg.depth_bottom[self.combobox_acoustic_data_choice.currentIndex()]) else np.array([])][0]
|
M_profile = [
|
||||||
))
|
stg.Ctot_fine[k[1]]
|
||||||
|
for k in stg.fine_sample_profile
|
||||||
|
]
|
||||||
|
|
||||||
|
r_bottom = [stg.depth_bottom[data_choice][
|
||||||
|
np.where(
|
||||||
|
np.abs(
|
||||||
|
time_data[data_choice][
|
||||||
|
self.combobox_freq2.currentIndex(), :
|
||||||
|
]
|
||||||
|
- stg.time_fine[stg.fine_sample_profile[-1][1]]
|
||||||
|
) == np.nanmin(
|
||||||
|
np.abs(
|
||||||
|
time_data[data_choice][
|
||||||
|
self.combobox_freq2.currentIndex(), :
|
||||||
|
]
|
||||||
|
- stg.time_fine[stg.fine_sample_profile[-1][1]])
|
||||||
|
)
|
||||||
|
)[0][0]
|
||||||
|
] if len(stg.depth_bottom[data_choice])!=0 else np.array([])][0]
|
||||||
|
|
||||||
|
logger.debug(
|
||||||
|
"call 'inv_hc.M_profile_SCC_fine_interpolated' params:"
|
||||||
|
)
|
||||||
|
logger.debug(f"sample_depth = {sample_depth}")
|
||||||
|
logger.debug(f"M_profile = {M_profile}")
|
||||||
|
logger.debug(f"range_cells = {range_cells}")
|
||||||
|
logger.debug(f"r_bottom = {r_bottom}")
|
||||||
|
|
||||||
|
stg.range_lin_interp, stg.M_profile_fine = (
|
||||||
|
self.inv_hc.M_profile_SCC_fine_interpolated(
|
||||||
|
sample_depth=sample_depth,
|
||||||
|
M_profile=M_profile,
|
||||||
|
range_cells=range_cells,
|
||||||
|
r_bottom=r_bottom
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
stg.range_lin_interp = stg.range_lin_interp
|
stg.range_lin_interp = stg.range_lin_interp
|
||||||
stg.M_profile_fine = stg.M_profile_fine
|
stg.M_profile_fine = stg.M_profile_fine
|
||||||
stg.M_profile_fine = stg.M_profile_fine[:stg.range_lin_interp.shape[0]]
|
stg.M_profile_fine = stg.M_profile_fine[
|
||||||
|
:stg.range_lin_interp.shape[0]
|
||||||
|
]
|
||||||
|
|
||||||
self.plot_profile_of_concentration_fine()
|
self.plot_profile_of_concentration_fine()
|
||||||
|
|
||||||
|
def _data_validity_message_box(self):
|
||||||
|
msgBox = QMessageBox()
|
||||||
|
msgBox.setWindowTitle("Interpolate (step 2)")
|
||||||
|
msgBox.setIconPixmap(
|
||||||
|
QPixmap(
|
||||||
|
self._path_icon("no_approved.png")
|
||||||
|
)
|
||||||
|
.scaledToHeight(32, Qt.SmoothTransformation)
|
||||||
|
)
|
||||||
|
msgBox.setText(
|
||||||
|
"Please select and valid the sample data with"
|
||||||
|
+ "click on 'sample plot' button"
|
||||||
|
)
|
||||||
|
msgBox.setStandardButtons(QMessageBox.Ok)
|
||||||
|
msgBox.exec()
|
||||||
|
|
||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
# --------------- Functions for sediment calibration ---------------
|
# --------------- Functions for sediment calibration ---------------
|
||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
|
|
@ -1417,8 +1439,8 @@ class SedimentCalibrationTab(QWidget):
|
||||||
"Calibration file (*.xls, *.ods, *csv)",
|
"Calibration file (*.xls, *.ods, *csv)",
|
||||||
options=QFileDialog.DontUseNativeDialog)
|
options=QFileDialog.DontUseNativeDialog)
|
||||||
|
|
||||||
dir_name = path.dirname(filename[0])
|
dir_name = os.path.dirname(filename[0])
|
||||||
name = path.basename(filename[0])
|
name = os.path.basename(filename[0])
|
||||||
|
|
||||||
stg.path_calibration_file = dir_name
|
stg.path_calibration_file = dir_name
|
||||||
stg.filename_calibration_file = name
|
stg.filename_calibration_file = name
|
||||||
|
|
@ -2020,7 +2042,7 @@ class SedimentCalibrationTab(QWidget):
|
||||||
|
|
||||||
if dir_save_cal:
|
if dir_save_cal:
|
||||||
|
|
||||||
stg.path_calibration_file = path.dirname(dir_save_cal)
|
stg.path_calibration_file = os.path.dirname(dir_save_cal)
|
||||||
|
|
||||||
cal_array = [[' ', stg.freq_text[self.combobox_acoustic_data_choice.currentIndex()][stg.frequencies_for_calibration[0][1]],
|
cal_array = [[' ', stg.freq_text[self.combobox_acoustic_data_choice.currentIndex()][stg.frequencies_for_calibration[0][1]],
|
||||||
stg.freq_text[self.combobox_acoustic_data_choice.currentIndex()][stg.frequencies_for_calibration[1][1]]],
|
stg.freq_text[self.combobox_acoustic_data_choice.currentIndex()][stg.frequencies_for_calibration[1][1]]],
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue