Ensemble: PlotRKC: Fix table selection plot update.

scenario-dev-pa
Pierre-Antoine 2026-09-10 10:26:16 +02:00
parent bf6d40f398
commit 92990948ad
2 changed files with 55 additions and 70 deletions

View File

@ -33,7 +33,7 @@ logger = logging.getLogger()
class PlotRKCEnsemble(PamhyrPlot):
def __init__(self, canvas=None, trad=None, toolbar=None,
results=None, reach_id=0, profile_id=0, run_id=0,
results=None, reach_id=0, profile_id=0,
parent=None):
super(PlotRKCEnsemble, self).__init__(
canvas=canvas,
@ -46,7 +46,6 @@ class PlotRKCEnsemble(PamhyrPlot):
self._parent = parent
self._current_reach_id = reach_id
self._current_profile_id = profile_id
self._current_run_id = run_id[0]
self._timestamps = parent._timestamps
self._current_timestamp = max(self._timestamps)
@ -59,6 +58,8 @@ class PlotRKCEnsemble(PamhyrPlot):
self.label_water_min = self._trad["label_water_min"]
self.label_water_max = self._trad["label_water_max"]
self.water = []
self._isometric_axis = False
self._auto_relim_update = True
@ -80,10 +81,10 @@ class PlotRKCEnsemble(PamhyrPlot):
if self.results is None:
return
if self.results[self._current_run_id] is None:
if self.results[0] is None:
return
results = self.results[self._current_run_id]
results = self.results[0]
reach = results.river.reach(self._current_reach_id)
self.draw_bottom(reach)
@ -100,7 +101,7 @@ class PlotRKCEnsemble(PamhyrPlot):
self.draw_bottom_geometry(reach)
def draw_profiles_hs(self, reach):
results = self.results[self._current_run_id]
results = self.results[0]
lhs = filter(
lambda hs: hs._input_reach.reach is reach.geometry,
filter(
@ -146,10 +147,12 @@ class PlotRKCEnsemble(PamhyrPlot):
def draw_water_elevation(self, reach):
if len(reach.geometry.profiles) != 0:
result = self.results[self._current_run_id]
result = self.results[0]
rk = reach.geometry.get_rk()
z_min = reach.geometry.get_z_min()
self.water = []
colors = [
("z_min", self.color_plot_ensemble_min),
("Z", self.color_plot_ensemble_mean),
@ -163,15 +166,17 @@ class PlotRKCEnsemble(PamhyrPlot):
gi_0, gi_1 = reach.global_index
water_z = table[ts, gi_0 : gi_1 + 1]
self.water = self.canvas.axes.plot(
plot, = self.canvas.axes.plot(
rk, water_z,
lw=1., color=color,
linestyle='dotted',
label=f"Elevation: {t} (m)",
)
def draw_additional_data(self, run_id):
results = self.results[run_id]
self.water.append(plot)
def draw_additional_data(self):
results = self.results[0]
self._add_data_lines = []
@ -231,10 +236,6 @@ class PlotRKCEnsemble(PamhyrPlot):
self._current_profile_id = profile_id
self.update_current()
def set_result(self, run_id):
self._current_run_id = run_id[0]
self.update()
def set_timestamp(self, timestamp):
self._current_timestamp = timestamp
self.update()
@ -243,7 +244,7 @@ class PlotRKCEnsemble(PamhyrPlot):
if not self._init:
self.draw()
results = self.results[self._current_run_id]
results = self.results[0]
reach = results.river.reach(self._current_reach_id)
self.update_water_elevation()
@ -253,13 +254,12 @@ class PlotRKCEnsemble(PamhyrPlot):
def update_all(self):
self._current_reach_id = self._parent._get_current_reach()
self._current_profile_id = self._parent._get_current_profile()
self._current_run_id = self._parent._get_current_results()[0]
self._current_timestamp = self._parent._get_current_timestamp()
self._init = False
self.update()
def update_water_elevation(self):
result = self.results[self._current_run_id]
result = self.results[0]
reach = result.river.reach(self._current_reach_id)
rk = reach.geometry.get_rk()
z_min = reach.geometry.get_z_min()
@ -269,16 +269,27 @@ class PlotRKCEnsemble(PamhyrPlot):
gi_0, gi_1 = reach.global_index
water_z = table[ts, gi_0 : gi_1 + 1]
self.water[0].set_data(
rk, water_z
)
colors = [
(0, "z_min", self.color_plot_ensemble_min),
(1, "Z", self.color_plot_ensemble_mean),
(2, "z_max", self.color_plot_ensemble_max),
]
for i, t, color in colors:
table = result.get("table")[t]
ts = result.get_timestamp_id(self._current_timestamp)
gi_0, gi_1 = reach.global_index
water_z = table[ts, gi_0 : gi_1 + 1]
self.water[i].set_data(rk, water_z)
def update_additional_data(self):
self.draw_additional_data(0)
self.draw_additional_data()
self.update_idle()
def update_current(self):
results = self.results[self._current_run_id]
results = self.results[0]
reach = results.river.reach(self._current_reach_id)
rk = reach.geometry.get_rk()
z_min = reach.geometry.get_z_min()
@ -289,4 +300,6 @@ class PlotRKCEnsemble(PamhyrPlot):
[rk[cid], rk[cid]],
[z_max[cid], z_min[cid]]
)
self.canvas.figure.canvas.draw_idle()
self.update_idle()

View File

@ -398,21 +398,21 @@ class ResultsWindow(PamhyrWindow):
)
# Table and Plot
fun = {
"reach": self._set_current_reach,
"profile": self._set_current_profile,
"raw_data": self._set_current_profile_raw_data,
"solver": self._set_current_results,
}
funs = [
("reach", self._set_current_reach),
("profile", self._set_current_profile),
("raw_data", self._set_current_profile_raw_data),
("solver", self._set_current_results),
]
for t in ["reach", "profile", "raw_data", "solver"]:
for t, f in funs:
table = self.find(QTableView, f"tableView_{t}")
table.selectionModel()\
.selectionChanged\
.connect(fun[t])
.connect(f)
self._table[t].dataChanged.connect(fun[t])
self._table[t].dataChanged.connect(f)
self._slider_time.valueChanged.connect(self._set_current_timestamp)
self._button_play.setChecked(False)
@ -1491,7 +1491,6 @@ class ResultsEnsembleWindow(ResultsWindow):
results=self._results,
reach_id=0,
profile_id=0,
run_id=self._current_results,
trad=self._trad,
toolbar=self.toolbar_1,
parent=self
@ -1541,20 +1540,19 @@ class ResultsEnsembleWindow(ResultsWindow):
)
# Table and Plot
fun = {
"reach": self._set_current_reach,
"profile": self._set_current_profile,
"runs": self._set_current_results,
}
funs = [
("reach", self._set_current_reach),
("profile", self._set_current_profile),
]
for t in ["reach", "profile", "runs"]:
for t, f in funs:
table = self.find(QTableView, f"tableView_{t}")
table.selectionModel()\
.selectionChanged\
.connect(fun[t])
.connect(f)
self._table[t].dataChanged.connect(fun[t])
self._table[t].dataChanged.connect(f)
self._slider_time.valueChanged.connect(self._set_current_timestamp)
self._button_play.setChecked(False)
@ -1569,64 +1567,38 @@ class ResultsEnsembleWindow(ResultsWindow):
tab_widget = self.find(QTabWidget, f"tabWidget")
tab_widget.currentChanged.connect(self.tab_changed)
def _set_current_results(self):
table = self.find(QTableView, f"tableView_runs")
indexes = table.selectedIndexes()
if len(indexes) == 0:
return
self.update(runs_id=[i.row() for i in indexes])
def update(self,
reach_id=None,
profile_id=None,
runs_id=None,
timestamp=None):
tab_widget = self.find(QTabWidget, f"tabWidget")
tab_index = tab_widget.currentIndex()
name = tab_widget.tabText(tab_index)
if reach_id is not None:
if tab_index == 1:
if tab_index == 0:
self.plot_rkc.set_reach(reach_id)
elif tab_index == 2:
elif tab_index == 1:
self.plot_h.set_reach(reach_id)
elif tab_index > 2:
self._additional_plot[name].set_reach(reach_id)
self.update_table_selection_reach(reach_id)
self.update_table_selection_profile(0)
if profile_id is not None:
if tab_index == 1:
if tab_index == 0:
self.plot_rkc.set_profile(profile_id[0])
elif tab_index == 2:
elif tab_index == 1:
self.plot_h.set_profile(profile_id)
elif tab_widget.currentIndex() > 2:
self._additional_plot[name].set_profile(profile_id[0])
tab_widget = self.find(QTabWidget, f"tabWidget")
if tab_widget.currentIndex() != 2:
self.update_table_selection_profile(profile_id[0])
if runs_id is not None:
if tab_index == 1:
self._current_results = runs_id
self.plot_rkc.set_result(runs_id)
elif tab_index == 2:
self.plot_h.set_result(runs_id)
elif tab_widget.currentIndex() > 2:
self._additional_plot[name].set_result(runs_id)
if timestamp is not None:
self.plot_rkc.set_timestamp(timestamp)
if tab_index == 2:
if tab_index == 1:
self.plot_h.set_timestamp(timestamp)
if tab_widget.currentIndex() > 2:
self._additional_plot[name].set_timestamp(timestamp)
self.update_statusbar()
def tab_changed(self, i):