diff --git a/src/Model/Results/ResultsAdisTS.py b/src/Model/Results/ResultsAdisTS.py
new file mode 100644
index 00000000..79b1b4e0
--- /dev/null
+++ b/src/Model/Results/ResultsAdisTS.py
@@ -0,0 +1,77 @@
+# Results.py -- Pamhyr
+# Copyright (C) 2023-2024 INRAE
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+import logging
+import numpy as np
+import os, glob
+
+from copy import deepcopy
+from datetime import datetime
+
+from Model.Results.River.River import River
+
+logger = logging.getLogger()
+
+
+class Results(object):
+ def __init__(self, study=None, solver=None,
+ repertory="", name="0"):
+ self._study = study
+ self._solver = solver
+ self._repertory = repertory
+ self._name = name
+
+ self._river = River(self._study)
+
+ self._meta_data = {
+ # Keep results creation date
+ "creation_date": datetime.now(),
+ }
+
+ repertory_results = os.path.join(repertory, "resultats")
+ self._pollutants_list = [el.split("/")[-1][0:-4] for el in glob.glob(repertory_results + "/*.bin")]
+
+ print("*********files names resultats from Results Object: ", self._pollutants_list)
+
+ @property
+ def date(self):
+ date = self._meta_data["creation_date"]
+ return f"{date.isoformat(sep=' ')}"
+
+ @property
+ def river(self):
+ return self._river
+
+ @property
+ def study(self):
+ return self._study
+
+ @property
+ def pollutants_list(self):
+ return self._pollutants_list
+
+ def set(self, key, value):
+ self._meta_data[key] = value
+
+ def get(self, key):
+ return self._meta_data[key]
+
+ def reload(self):
+ return self._solver.results(
+ self._study,
+ self._repertory,
+ qlog=None,
+ )
diff --git a/src/Solver/AdisTS.py b/src/Solver/AdisTS.py
index bea442b1..2c9865b0 100644
--- a/src/Solver/AdisTS.py
+++ b/src/Solver/AdisTS.py
@@ -33,7 +33,7 @@ from tools import (
from Solver.CommandLine import CommandLineSolver
-from Model.Results.Results import Results
+from Model.Results.ResultsAdisTS import Results
from Model.Results.River.River import River, Reach, Profile
from Checker.Adists import (
diff --git a/src/View/Results/TableAdisTS.py b/src/View/Results/TableAdisTS.py
new file mode 100644
index 00000000..31821911
--- /dev/null
+++ b/src/View/Results/TableAdisTS.py
@@ -0,0 +1,131 @@
+# Table.py -- Pamhyr
+# Copyright (C) 2023-2024 INRAE
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+# -*- coding: utf-8 -*-
+
+import logging
+import traceback
+
+from tools import timer, trace
+
+from PyQt5.QtGui import (
+ QKeySequence, QColor
+)
+from PyQt5.QtCore import (
+ Qt, QAbstractTableModel, QModelIndex,
+ QVariant, pyqtSlot, QCoreApplication,
+)
+from PyQt5.QtWidgets import (
+ QMessageBox, QUndoCommand, QUndoStack,
+ QStyledItemDelegate, QLineEdit, QAbstractItemView,
+ QComboBox,
+)
+
+from View.Tools.PamhyrTable import PamhyrTableModel
+from View.Results.translate import *
+
+logger = logging.getLogger()
+
+_translate = QCoreApplication.translate
+
+
+class TableModel(PamhyrTableModel):
+ def _setup_lst(self):
+ _river = self._data.river
+ print("//////////////////opt_data: ", self._opt_data)
+ print("data: ", self._data)
+ print("river: ", _river)
+ print("reaches: ", _river.reachs)
+ if self._opt_data == "reach":
+ self._lst = _river.reachs
+ print("optreach: ", self._lst)
+ elif self._opt_data == "profile":
+ self._lst = _river.reach(0).profiles
+ elif self._opt_data == "raw_data":
+ self._lst = _river.reach(0).profiles
+ elif self._opt_data == "pollutants":
+ tmp_list = self._data.pollutants_list.copy()
+ tmp_list.remove("total_sediment")
+ print(type(tmp_list))
+ tmp_list.insert(len(tmp_list), "total_sediment")
+ self._lst = tmp_list
+ print("=====table pollutants: ", self._lst)
+
+ def __init__(self, **kwargs):
+ self._timestamp = 0.0
+ super(TableModel, self).__init__(**kwargs)
+
+ def data(self, index, role=Qt.DisplayRole):
+ if role != Qt.ItemDataRole.DisplayRole:
+ return QVariant()
+
+ row = index.row()
+ column = index.column()
+
+ if self._opt_data == "reach":
+ if self._headers[column] == "name":
+ v = self._lst[row].name
+ return str(v)
+ elif self._opt_data == "pollutants":
+ if self._headers[column] == "name":
+ v = self._lst[row]
+ return str(v)
+ elif self._opt_data == "profile":
+ if self._headers[column] == "name":
+ v = self._lst[row].name
+ return str(v)
+ elif self._headers[column] == "kp":
+ v = self._lst[row].kp
+ return f"{v:.4f}"
+ elif self._opt_data == "raw_data":
+ p = self._lst[row]
+ if self._headers[column] == "name":
+ if p.name == "":
+ return f"{p.kp:.4f}"
+ return f"{p.name}"
+ elif self._headers[column] == "water_elevation":
+ v = self._lst[row].get_ts_key(self._timestamp, "Z")
+ return f"{v:.4f}"
+ elif self._headers[column] == "discharge":
+ v = self._lst[row].get_ts_key(self._timestamp, "Q")
+ return f"{v:.4f}"
+ elif self._headers[column] == "speed":
+ q = self._lst[row].get_ts_key(self._timestamp, "Q")
+ z = self._lst[row].get_ts_key(self._timestamp, "Q")
+
+ v = self._lst[row].geometry.speed(q, z)
+ return f"{v:.4f}"
+
+ return QVariant()
+
+ def update(self, reach):
+ _river = self._data.river
+
+ if self._opt_data == "reach":
+ self._lst = _river.reachs
+ elif self._opt_data == "profile" or self._opt_data == "raw_data":
+ self._lst = _river.reach(reach).profiles
+
+ self.layoutChanged.emit()
+
+ @property
+ def timestamp(self):
+ return self._timestamp
+
+ @timestamp.setter
+ def timestamp(self, timestamp):
+ self._timestamp = timestamp
+ self.layoutChanged.emit()
diff --git a/src/View/Results/WindowAdisTS.py b/src/View/Results/WindowAdisTS.py
index 62806809..1d72585d 100644
--- a/src/View/Results/WindowAdisTS.py
+++ b/src/View/Results/WindowAdisTS.py
@@ -58,7 +58,7 @@ from View.Results.CustomPlot.CustomPlotValuesSelectionDialog import (
CustomPlotValuesSelectionDialog,
)
-from View.Results.Table import TableModel
+from View.Results.TableAdisTS import TableModel
from View.Results.translate import ResultsTranslate
from View.Stricklers.Window import StricklersWindow
@@ -124,8 +124,9 @@ class ResultsWindowAdisTS(PamhyrWindow):
print("setup table adists results")
print("results study name: ", self._results.study.name)
print("results study river: ", self._results.study.river)
+ print("*********files names resultats from Results Window: ", self._results.pollutants_list)
self._table = {}
- for t in ["reach", "profile"]:#, "raw_data"]:
+ for t in ["reach", "profile", "pollutants"]:#, "raw_data"]:
print("t: ", t)
table = self.find(QTableView, f"tableView_{t}")
self._table[t] = TableModel(
diff --git a/src/View/Results/translate.py b/src/View/Results/translate.py
index e59fb789..12264c62 100644
--- a/src/View/Results/translate.py
+++ b/src/View/Results/translate.py
@@ -45,7 +45,7 @@ class ResultsTranslate(MainTranslate):
)
self._sub_dict["table_headers_reach"] = {
- "name": _translate("Results", "Reach name"),
+ "name": _translate("Results", "Pollutant name"),
}
self._sub_dict["table_headers_profile"] = {
@@ -53,6 +53,10 @@ class ResultsTranslate(MainTranslate):
"kp": self._dict["unit_kp"],
}
+ self._sub_dict["table_headers_pollutants"] = {
+ "name": _translate("Results", "Reach name"),
+ }
+
self._sub_dict["table_headers_raw_data"] = {
"name": _translate("Results", "Profile"),
"water_elevation": self._dict["unit_water_elevation"],
diff --git a/src/View/ui/ResultsAdisTS.ui b/src/View/ui/ResultsAdisTS.ui
index c7c319a0..6d08656a 100644
--- a/src/View/ui/ResultsAdisTS.ui
+++ b/src/View/ui/ResultsAdisTS.ui
@@ -54,6 +54,7 @@
+
@@ -164,38 +165,6 @@
-
-
- Water elevation
-
-
- -
-
-
-
-
-
- Qt::Vertical
-
-
-
- Qt::Horizontal
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Hydrograph