mirror of https://gitlab.com/pamhyr/pamhyr2
results adists pollutants table view
parent
629b856788
commit
84fd841f86
|
|
@ -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 <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 (
|
||||
|
|
|
|||
|
|
@ -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 <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>
|
||||
|
|
|
|||
Loading…
Reference in New Issue