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 (
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 (
......
# 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 (
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(
......
......@@ -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"],
......
......@@ -54,6 +54,7 @@
</item>
</layout>
</widget>
<widget class="QTableView" name="tableView_pollutants"/>
</widget>
<widget class="QWidget" name="layoutWidget">
<layout class="QGridLayout" name="gridLayout_2">
......@@ -164,38 +165,6 @@
</item>
</layout>
</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">
<attribute name="title">
<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