Results: Compare scenarios.

This commit is contained in:
parouby committed 2025-10-27 17:14:29 +01:00
1 parent bc08d06bb1
commit 188486f33a
5 files changed
+426 -124

No files matched your search

+76 -17
View File
@@ -84,10 +84,12 @@ from View.SolverParameters.Window import SolverParametersWindow
from View.RunSolver.Window import (
SelectSolverWindow,
SolverLogWindow,
CompareSolversWindow
)
from View.Results.Window import ResultsWindow
from View.Results.CompareDialog import (
CompareSolversWindow, CompareScenariosWindow
)
from View.RunSolver.WindowAdisTS import (
SelectSolverWindowAdisTS,
@@ -128,8 +130,8 @@ no_model_action = [
model_action = [
"action_menu_close", "action_menu_edit", "action_menu_save",
"action_menu_save_as", "action_toolBar_close", "action_toolBar_save",
"action_menu_numerical_parameter", "action_open_results_from_file",
"action_open_results_adists",
"action_menu_numerical_parameter", "action_menu_open_results_from_file",
"action_menu_open_results_adists",
]
other_model_action = [
@@ -150,8 +152,9 @@ define_model_action = [
"action_menu_run_solver", "action_menu_sediment_layers",
"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_compare_results", "action_menu_boundary_conditions_sediment",
"action_menu_results_last", "action_menu_open_results_from_file",
"action_menu_compare_results", "action_menu_compare_scenarios_results",
"action_menu_boundary_conditions_sediment",
"action_menu_rep_additional_lines", "action_menu_output_rk",
"action_menu_run_adists", "action_menu_pollutants",
"action_menu_d90", "action_menu_dif",
@@ -296,9 +299,10 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
"action_menu_rep_additional_lines": self.open_rep_lines,
"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,
"action_open_results_adists": self.open_results_adists,
"action_menu_open_results_from_file": self.open_results_from_file,
"action_menu_compare_results": self.compare_results,
"action_menu_compare_scenarios_results": self.compare_results_scenarios,
"action_menu_open_results_adists": self.open_results_adists,
# Help
"action_menu_pamhyr_users_wiki": self.open_doc_user,
"action_menu_pamhyr_developers_pdf":
@@ -1641,13 +1645,16 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
)
res.show()
def _solver_workdir(self, solver):
def _solver_workdir(self, solver, scenario=None):
if scenario is None:
scenario = self._study.status.scenario
workdir = os.path.join(
os.path.dirname(self._study.filename),
"_PAMHYR_",
self._study.name.replace(" ", "_"),
solver.name.replace(" ", "_"),
self._study.status.scenario.workdir(),
scenario.workdir(),
)
return workdir
@@ -1724,7 +1731,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
# Windows already opened
if self.sub_window_exists(
ResultsWindow,
CompareSolversWindow,
data=[self._study, None] +
[r._solver for r in results] +
[r._repertory for r in results] +
@@ -1739,6 +1746,46 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
)
res.show()
def compare_results_scenarios(self):
if self._study is None:
return
dlg = CompareScenariosWindow(
study=self._study,
config=self.conf,
parent=self
)
if not dlg.exec():
return
results = self.diff_results(
dlg.solver1, dlg.solver2,
scenario1=dlg.scenario1,
scenario2=dlg.scenario2
)
# At least one result not available
if results is None:
return
# Windows already opened
if self.sub_window_exists(
CompareScenariosWindow,
data=[self._study, None] +
[r._solver for r in results] +
[r._repertory for r in results] +
[r._name for r in results] +
[dlg.scenario1, dlg.scenario2]
):
return
res = ResultsWindow(
study=self._study,
results=results,
parent=self
)
res.show()
def msg_diff_results_param(self):
self.message_box(
window_title=self._trad["Error"],
@@ -1754,21 +1801,33 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
)
@timer
def diff_results(self, solver1, solver2):
def diff_results(self, solver1, solver2,
scenario1=None, scenario2=None):
if solver1 is None or solver2 is None:
self.msg_diff_results_param()
return None
solver3 = GenericSolver(solver1.name + " <> " + solver2.name)
study1 = self._study
study2 = self._study
s3_name = solver1.name + " <> " + solver2.name
if not (scenario2 is None or scenario2 is None):
study1 = self._study.copy_from_scenario(scenario1)
study2 = self._study.copy_from_scenario(scenario2)
s3_name = scenario1.name + " <> " + scenario2.name
solver3 = GenericSolver(s3_name)
result1 = solver1.results(
self._study,
self._solver_workdir(solver1),
study1,
self._solver_workdir(solver1, scenario=scenario1),
)
result2 = solver2.results(
self._study,
self._solver_workdir(solver2),
study2,
self._solver_workdir(solver2, scenario=scenario2),
)
if result1 is None or result2 is None: