mirror of
https://gitlab.com/pamhyr/pamhyr2.git
synced 2026-10-30 03:20:41 +01:00
Merge branch 'scenario-dev-pa' into scenarios.
This commit is contained in:
commit
b666162bdf
27 files changed
+2034
-83
No files matched your search
+91
-40
@@ -56,9 +56,12 @@ from PyQt5.QtWidgets import (
|
||||
QFileDialog, QTableView, QAbstractItemView,
|
||||
QUndoStack, QShortcut, QAction, QItemDelegate,
|
||||
QComboBox, QVBoxLayout, QHeaderView, QTabWidget,
|
||||
QSlider, QLabel, QWidget, QGridLayout, QTabBar, QInputDialog
|
||||
QSlider, QLabel, QWidget, QGridLayout, QTabBar,
|
||||
QInputDialog,
|
||||
)
|
||||
|
||||
from Model.Results.Results import AdditionalData
|
||||
|
||||
from View.Tools.Plot.PamhyrCanvas import MplCanvas
|
||||
from View.Tools.Plot.PamhyrToolbar import PamhyrPlotToolbar
|
||||
|
||||
@@ -144,11 +147,14 @@ class ResultsWindow(PamhyrWindow):
|
||||
profile_id=[0])
|
||||
|
||||
self.update_table_selection_solver(0)
|
||||
self.update_plot_additional_data()
|
||||
|
||||
def setup_table(self):
|
||||
self._table = {}
|
||||
|
||||
for t in ["reach", "profile", "raw_data", "solver"]:
|
||||
table = self.find(QTableView, f"tableView_{t}")
|
||||
|
||||
self._table[t] = TableModel(
|
||||
table_view=table,
|
||||
table_headers=self._trad.get_dict(f"table_headers_{t}"),
|
||||
@@ -157,8 +163,11 @@ class ResultsWindow(PamhyrWindow):
|
||||
opt_data=t,
|
||||
parent=self
|
||||
)
|
||||
|
||||
self._table[t]._timestamp = self._timestamps[
|
||||
self._slider_time.value()]
|
||||
self._slider_time.value()
|
||||
]
|
||||
|
||||
if len(self._results) <= 1:
|
||||
table = self.find(QTableView, f"tableView_solver")
|
||||
table.hide()
|
||||
@@ -189,12 +198,15 @@ class ResultsWindow(PamhyrWindow):
|
||||
|
||||
def setup_plots(self):
|
||||
self.canvas = MplCanvas(width=5, height=4, dpi=100)
|
||||
|
||||
tab_widget = self.find(QTabWidget, f"tabWidget")
|
||||
|
||||
tab_widget.setTabsClosable(True)
|
||||
tab_widget.tabCloseRequested.connect(self.delete_tab)
|
||||
tab_widget.tabBar().setTabButton(0, QTabBar.RightSide, None)
|
||||
tab_widget.tabBar().setTabButton(1, QTabBar.RightSide, None)
|
||||
tab_widget.tabBar().setTabButton(2, QTabBar.RightSide, None)
|
||||
|
||||
self.canvas.setObjectName("canvas")
|
||||
self.toolbar = PamhyrPlotToolbar(
|
||||
self.canvas, self, items=[
|
||||
@@ -202,6 +214,7 @@ class ResultsWindow(PamhyrWindow):
|
||||
"iso", "back/forward"
|
||||
]
|
||||
)
|
||||
|
||||
self.plot_layout = self.find(QVBoxLayout, "verticalLayout")
|
||||
self.plot_layout.addWidget(self.toolbar)
|
||||
self.plot_layout.addWidget(self.canvas)
|
||||
@@ -1217,8 +1230,7 @@ class ResultsWindow(PamhyrWindow):
|
||||
extent=[b[0], b[2], b[1], b[3]])
|
||||
else:
|
||||
dlg = CoordinatesDialog(
|
||||
xlim,
|
||||
ylim,
|
||||
xlim, ylim,
|
||||
trad=self._trad,
|
||||
parent=self
|
||||
)
|
||||
@@ -1231,7 +1243,6 @@ class ResultsWindow(PamhyrWindow):
|
||||
return
|
||||
|
||||
def import_data(self):
|
||||
|
||||
file_types = [
|
||||
self._trad["file_csv"],
|
||||
self._trad["file_all"],
|
||||
@@ -1242,41 +1253,61 @@ class ResultsWindow(PamhyrWindow):
|
||||
callback=lambda f: self.read_csv_file(f[0]),
|
||||
default_suffix=".csv",
|
||||
file_filter=file_types,
|
||||
directory=self._results[self._current_results[0]]._repertory,
|
||||
)
|
||||
|
||||
def read_csv_file(self, filename):
|
||||
if filename == "":
|
||||
return
|
||||
|
||||
sep = " "
|
||||
x, y = self.read_csv_file_data(filename)
|
||||
data = self.read_csv_file_format(x, y)
|
||||
|
||||
def is_float(string):
|
||||
if string.replace(".", "").isnumeric():
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
results = self._results[self._current_results[0]]
|
||||
data_lst = results.get("additional_data")
|
||||
data_lst.append(
|
||||
AdditionalData(
|
||||
study=self._study,
|
||||
data=data
|
||||
)
|
||||
)
|
||||
|
||||
self.update_plot_additional_data()
|
||||
|
||||
def read_csv_file_data(self, filename):
|
||||
sep = ","
|
||||
x = []
|
||||
y = []
|
||||
|
||||
with open(filename, 'r', newline='') as f:
|
||||
lines = f.readlines()
|
||||
x = []
|
||||
y = []
|
||||
for line in lines:
|
||||
if line[0] != "*" and line[0] != "#" and line[0] != "$":
|
||||
row = line.split(sep)
|
||||
if len(row) >= 2:
|
||||
if is_float(row[0]) and is_float(row[1]):
|
||||
x.append(float(row[0]))
|
||||
y.append(float(row[1]))
|
||||
|
||||
if len(row) < 2:
|
||||
continue
|
||||
|
||||
try:
|
||||
fx, fy = float(row[0]), float(row[1])
|
||||
x.append(fx)
|
||||
y.append(fy)
|
||||
except Exception as e:
|
||||
continue
|
||||
|
||||
return x, y
|
||||
|
||||
def read_csv_file_format(self, x, y):
|
||||
data_type_lst = ['Q(t)', 'Z(t)', 'Z(x)']
|
||||
data_type, ok = QInputDialog.getItem(
|
||||
self, 'Data type', 'Chose the type of data:', data_type_lst)
|
||||
|
||||
self, 'Data type',
|
||||
'Chose the type of data:',
|
||||
data_type_lst
|
||||
)
|
||||
if not ok:
|
||||
return
|
||||
|
||||
legend, ok = QInputDialog.getText(self, 'Legend', 'Legend:')
|
||||
|
||||
if not ok:
|
||||
return
|
||||
|
||||
@@ -1291,25 +1322,45 @@ class ResultsWindow(PamhyrWindow):
|
||||
tmp_unit = {'Z': ' (m)',
|
||||
'Q': ' (m³/s)'}
|
||||
|
||||
data = {'type_x': tmp_dict[data_type[2]],
|
||||
'type_y': tmp_dict[data_type[0]],
|
||||
'legend': legend,
|
||||
'unit': tmp_unit[data_type[0]],
|
||||
'x': x,
|
||||
'y': y}
|
||||
data = {
|
||||
'type_x': tmp_dict[data_type[2]],
|
||||
'type_y': tmp_dict[data_type[0]],
|
||||
'legend': legend,
|
||||
'unit': tmp_unit[data_type[0]],
|
||||
'x': x, 'y': y
|
||||
}
|
||||
|
||||
if data_type == 'Z(x)':
|
||||
line = self.canvas_2.axes.plot(x, y, marker="+",
|
||||
label=legend + ' (m)')
|
||||
self.plot_rkc.canvas.draw_idle()
|
||||
self.plot_rkc.update_idle()
|
||||
if data_type == 'Q(t)':
|
||||
line = self.canvas_4.axes.plot(x, y, marker="+",
|
||||
label=legend + ' (m³/s)')
|
||||
self.plot_h._line.append(line)
|
||||
self.plot_h.enable_legend()
|
||||
self.plot_h.canvas.draw_idle()
|
||||
self.plot_h.update_idle
|
||||
return data
|
||||
|
||||
for p in self._additional_plot:
|
||||
self._additional_plot[p].add_imported_plot(data)
|
||||
def update_plot_additional_data(self):
|
||||
results = self._results[self._current_results[0]]
|
||||
|
||||
for data in results.get("additional_data"):
|
||||
data = data._data
|
||||
x, y = data['x'], data['y']
|
||||
legend = data['legend']
|
||||
unit = data['unit']
|
||||
|
||||
if (
|
||||
data['type_x'] == 'water_elevation' and
|
||||
data['type_y'] == 'time'
|
||||
):
|
||||
line = self.canvas_2.axes.plot(
|
||||
x, y, marker="+",
|
||||
label=legend + ' ' + unit
|
||||
)
|
||||
self.plot_rkc.canvas.draw_idle()
|
||||
self.plot_rkc.update_idle()
|
||||
|
||||
if data['type_x'] == 'time' and data['type_y'] == 'discharge':
|
||||
line = self.canvas_4.axes.plot(
|
||||
x, y, marker="+",
|
||||
label=legend + ' ' + unit
|
||||
)
|
||||
self.plot_h._line.append(line)
|
||||
self.plot_h.enable_legend()
|
||||
self.plot_h.canvas.draw_idle()
|
||||
self.plot_h.update_idle()
|
||||
|
||||
for p in self._additional_plot:
|
||||
self._additional_plot[p].add_imported_plot(data)
|
||||
Reference in new issue
Block a user