mirror of
https://gitlab.com/pamhyr/pamhyr2.git
synced 2026-10-30 03:20:41 +01:00
start to work on compare results
This commit is contained in:
1 parent
58f72cfa6b
commit
558085705f
9 files changed
+358
-7
No files matched your search
+109
-3
@@ -70,12 +70,20 @@ from View.SedimentLayers.Reach.Window import ReachSedimentLayersWindow
|
||||
from View.AdditionalFiles.Window import AddFileListWindow
|
||||
from View.REPLines.Window import REPLineListWindow
|
||||
from View.SolverParameters.Window import SolverParametersWindow
|
||||
from View.RunSolver.Window import SelectSolverWindow, SolverLogWindow
|
||||
from View.RunSolver.Window import (
|
||||
SelectSolverWindow,
|
||||
SolverLogWindow,
|
||||
CompareSolversWindow
|
||||
)
|
||||
from View.CheckList.Window import CheckListWindow
|
||||
from View.Results.Window import ResultsWindow
|
||||
from View.Results.Window import ResultsWindow, CompareResultsWindow
|
||||
from View.Results.ReadingResultsDialog import ReadingResultsDialog
|
||||
from View.Debug.Window import ReplWindow
|
||||
|
||||
from Solver.Solvers import GenericSolver
|
||||
|
||||
from Model.Results.Results import Results
|
||||
|
||||
# Optional internal display of documentation for make the application
|
||||
# package lighter...
|
||||
try:
|
||||
@@ -117,7 +125,7 @@ define_model_action = [
|
||||
"action_menu_edit_reach_sediment_layers", "action_menu_edit_reservoirs",
|
||||
"action_menu_edit_hydraulic_structures", "action_menu_additional_file",
|
||||
"action_menu_results_last", "action_open_results_from_file",
|
||||
"action_menu_boundary_conditions_sediment",
|
||||
"action_compare_results", "action_menu_boundary_conditions_sediment",
|
||||
"action_menu_rep_additional_lines",
|
||||
]
|
||||
|
||||
@@ -255,6 +263,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
|
||||
"action_menu_close": self.close_model,
|
||||
"action_menu_results_last": self.open_last_results,
|
||||
"action_open_results_from_file": self.open_results_from_file,
|
||||
"action_compare_results": self.compare_results,
|
||||
# Help
|
||||
"action_menu_pamhyr_users_wiki": self.open_doc_user,
|
||||
"action_menu_pamhyr_developers_pdf":
|
||||
@@ -1344,6 +1353,103 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
|
||||
results=file_name[0]
|
||||
)
|
||||
|
||||
def compare_results(self):
|
||||
if self._study is None:
|
||||
return
|
||||
|
||||
run = CompareSolversWindow(
|
||||
study=self._study,
|
||||
config=self.conf,
|
||||
parent=self
|
||||
)
|
||||
if run.exec():
|
||||
results = self.diff_results(run.solver1,
|
||||
run.solver2)
|
||||
|
||||
# At least one result not available
|
||||
if results is None:
|
||||
return
|
||||
|
||||
# Windows already opened
|
||||
if self.sub_window_exists(
|
||||
ResultsWindow,
|
||||
data=[
|
||||
self._study,
|
||||
None, # No config
|
||||
results._solver,
|
||||
results
|
||||
]
|
||||
):
|
||||
return
|
||||
|
||||
res = CompareResultsWindow(
|
||||
study=self._study,
|
||||
solver=results._solver,
|
||||
results=results,
|
||||
parent=self
|
||||
)
|
||||
res.show()
|
||||
|
||||
|
||||
def diff_results(self, solver1, solver2):
|
||||
if solver1 is None:
|
||||
# TODO message
|
||||
return None
|
||||
if solver2 is None:
|
||||
# TODO message
|
||||
return None
|
||||
|
||||
solver3 = GenericSolver(solver1.name+" - "+solver2.name)
|
||||
|
||||
result1 = solver1.results(
|
||||
self._study,
|
||||
self._solver_workdir(solver1),
|
||||
)
|
||||
|
||||
if result1 is None:
|
||||
# TODO message
|
||||
return None
|
||||
|
||||
result2 = solver2.results(
|
||||
self._study,
|
||||
self._solver_workdir(solver2),
|
||||
)
|
||||
|
||||
if result2 is None:
|
||||
# TODO message
|
||||
return None
|
||||
|
||||
if result2.get("nb_reach") != result1.get("nb_reach"):
|
||||
# TODO message
|
||||
return None
|
||||
|
||||
if result2.get("nb_profile") != result1.get("nb_profile"):
|
||||
# TODO message
|
||||
return None
|
||||
|
||||
result3 = Results(self._study, solver3)
|
||||
result3.set("nb_reach", result1.get("nb_reach"))
|
||||
result3.set("nb_profile", result1.get("nb_profile"))
|
||||
ts = list(result1.get("timestamps").intersection(result2.get("timestamps")))
|
||||
result3.set("timestamps", ts)
|
||||
|
||||
for i in range(int(result1.get("nb_reach"))):
|
||||
# Add reach to results reach list
|
||||
r = result3.river.add(i)
|
||||
|
||||
for timestamp in result3.get("timestamps"):
|
||||
for r in range(int(result1.get("nb_reach"))):
|
||||
reach1 = result1.river.reach(r)
|
||||
reach2 = result2.river.reach(r)
|
||||
reach3 = result3.river.reach(r)
|
||||
for p, (profile1, profile2) in enumerate(zip(reach1.profiles, reach2.profiles)):
|
||||
for key in ["Z", "Q"]:
|
||||
d1 = profile1.get_ts_key(timestamp, key)
|
||||
d2 = profile2.get_ts_key(timestamp, key)
|
||||
reach3.set(p, timestamp, key, d1-d2)
|
||||
|
||||
return result3
|
||||
|
||||
#################
|
||||
# DOCUMENTATION #
|
||||
#################
|
||||
|
||||
Reference in new issue
Block a user