Sediment calibration: Refactoring method 'interpolate_Mfine_profile'.

dev-brahim
Pierre-Antoine 2025-03-10 14:23:11 +01:00
parent 6628d610de
commit 8f7e679598
1 changed files with 61 additions and 86 deletions

View File

@ -21,9 +21,18 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import os 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 matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolBar
from PyQt5.QtWidgets import ( from PyQt5.QtWidgets import (
QWidget, QVBoxLayout, QHBoxLayout, QGroupBox, QComboBox, QWidget, QVBoxLayout, QHBoxLayout, QGroupBox, QComboBox,
QGridLayout, QLabel, QPushButton, QSlider, QLineEdit, QGridLayout, QLabel, QPushButton, QSlider, QLineEdit,
@ -35,18 +44,10 @@ 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 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):
@ -861,7 +862,6 @@ class SedimentCalibrationTab(QWidget):
self.compute_FCB() self.compute_FCB()
def update_acoustic_data(self): def update_acoustic_data(self):
self.combobox_acoustic_data_choice.clear() self.combobox_acoustic_data_choice.clear()
self.combobox_acoustic_data_choice.addItems(stg.data_preprocessed) self.combobox_acoustic_data_choice.addItems(stg.data_preprocessed)
self.combobox_acoustic_data_choice.currentIndexChanged.connect(self.plot_acoustic_recording) self.combobox_acoustic_data_choice.currentIndexChanged.connect(self.plot_acoustic_recording)
@ -1510,90 +1510,65 @@ 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):
data_choice = self.combobox_acoustic_data_choice.currentIndex()
if stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()].shape != (0,): if stg.depth_cross_section[data_choice].shape != (0,):
range_cells = stg.depth_cross_section[data_choice][
print("test find indice of time ", np.where( np.abs(stg.time_cross_section[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq2.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]]))) ))
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]])
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]
] ]
)
) if stg.time_cross_section[data_choice].shape != (0,):
time_data = stg.time_cross_section
else:
time_data = stg.time
else: else:
range_cells=stg.depth[data_choice][
self.combobox_freq2.currentIndex(), :
]
if stg.time_cross_section[data_choice].shape != (0,):
time_data = stg.time_cross_sectino
else:
time_data = stg.time
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]
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]
]
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 = ( stg.range_lin_interp, stg.M_profile_fine = (
self.inv_hc.M_profile_SCC_fine_interpolated( self.inv_hc.M_profile_SCC_fine_interpolated(
sample_depth=[-stg.depth_fine[k[1]] for k in stg.fine_sample_profile], sample_depth=sample_depth,
M_profile=[stg.Ctot_fine[k[1]] for k in stg.fine_sample_profile], M_profile=M_profile,
range_cells=stg.depth_cross_section[self.combobox_acoustic_data_choice.currentIndex()][self.combobox_freq2.currentIndex(), :], range_cells=range_cells,
r_bottom=stg.depth_bottom[self.combobox_acoustic_data_choice.currentIndex()] r_bottom=r_bottom
[
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]
]
) )
) )
else:
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]
]
))
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]]