Commit 84fd841f authored by Youcef Aouad's avatar Youcef Aouad
Browse files

results adists pollutants table view

No related merge requests found
Pipeline #57776 passed with stages
in 57 seconds
Showing with 218 additions and 36 deletions
+218 -36
# 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 <https://www.gnu.org/licenses/>.
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,
)
...@@ -33,7 +33,7 @@ from tools import ( ...@@ -33,7 +33,7 @@ from tools import (
from Solver.CommandLine import CommandLineSolver 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 Model.Results.River.River import River, Reach, Profile
from Checker.Adists import ( from Checker.Adists import (
......
# 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 <https://www.gnu.org/licenses/>.
# -*- 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()
...@@ -58,7 +58,7 @@ from View.Results.CustomPlot.CustomPlotValuesSelectionDialog import ( ...@@ -58,7 +58,7 @@ from View.Results.CustomPlot.CustomPlotValuesSelectionDialog import (
CustomPlotValuesSelectionDialog, CustomPlotValuesSelectionDialog,
) )
from View.Results.Table import TableModel from View.Results.TableAdisTS import TableModel
from View.Results.translate import ResultsTranslate from View.Results.translate import ResultsTranslate
from View.Stricklers.Window import StricklersWindow from View.Stricklers.Window import StricklersWindow
...@@ -124,8 +124,9 @@ class ResultsWindowAdisTS(PamhyrWindow): ...@@ -124,8 +124,9 @@ class ResultsWindowAdisTS(PamhyrWindow):
print("setup table adists results") print("setup table adists results")
print("results study name: ", self._results.study.name) print("results study name: ", self._results.study.name)
print("results study river: ", self._results.study.river) print("results study river: ", self._results.study.river)
print("*********files names resultats from Results Window: ", self._results.pollutants_list)
self._table = {} self._table = {}
for t in ["reach", "profile"]:#, "raw_data"]: for t in ["reach", "profile", "pollutants"]:#, "raw_data"]:
print("t: ", t) print("t: ", t)
table = self.find(QTableView, f"tableView_{t}") table = self.find(QTableView, f"tableView_{t}")
self._table[t] = TableModel( self._table[t] = TableModel(
......
...@@ -45,7 +45,7 @@ class ResultsTranslate(MainTranslate): ...@@ -45,7 +45,7 @@ class ResultsTranslate(MainTranslate):
) )
self._sub_dict["table_headers_reach"] = { self._sub_dict["table_headers_reach"] = {
"name": _translate("Results", "Reach name"), "name": _translate("Results", "Pollutant name"),
} }
self._sub_dict["table_headers_profile"] = { self._sub_dict["table_headers_profile"] = {
...@@ -53,6 +53,10 @@ class ResultsTranslate(MainTranslate): ...@@ -53,6 +53,10 @@ class ResultsTranslate(MainTranslate):
"kp": self._dict["unit_kp"], "kp": self._dict["unit_kp"],
} }
self._sub_dict["table_headers_pollutants"] = {
"name": _translate("Results", "Reach name"),
}
self._sub_dict["table_headers_raw_data"] = { self._sub_dict["table_headers_raw_data"] = {
"name": _translate("Results", "Profile"), "name": _translate("Results", "Profile"),
"water_elevation": self._dict["unit_water_elevation"], "water_elevation": self._dict["unit_water_elevation"],
......
...@@ -54,6 +54,7 @@ ...@@ -54,6 +54,7 @@
</item> </item>
</layout> </layout>
</widget> </widget>
<widget class="QTableView" name="tableView_pollutants"/>
</widget> </widget>
<widget class="QWidget" name="layoutWidget"> <widget class="QWidget" name="layoutWidget">
<layout class="QGridLayout" name="gridLayout_2"> <layout class="QGridLayout" name="gridLayout_2">
...@@ -164,38 +165,6 @@ ...@@ -164,38 +165,6 @@
</item> </item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>Water elevation</string>
</attribute>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QSplitter" name="splitter_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<widget class="QSplitter" name="splitter">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<widget class="QWidget" name="verticalLayoutWidget">
<layout class="QVBoxLayout" name="verticalLayout"/>
</widget>
<widget class="QWidget" name="verticalLayoutWidget_2">
<layout class="QVBoxLayout" name="verticalLayout_2"/>
</widget>
</widget>
<widget class="QWidget" name="verticalLayoutWidget_3">
<layout class="QVBoxLayout" name="verticalLayout_3"/>
</widget>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_2"> <widget class="QWidget" name="tab_2">
<attribute name="title"> <attribute name="title">
<string>Hydrograph</string> <string>Hydrograph</string>
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment