mirror of https://gitlab.com/pamhyr/pamhyr2
Ensemble: PlotRKC: Fix table selection plot update.
parent
bf6d40f398
commit
92990948ad
|
|
@ -33,7 +33,7 @@ logger = logging.getLogger()
|
||||||
|
|
||||||
class PlotRKCEnsemble(PamhyrPlot):
|
class PlotRKCEnsemble(PamhyrPlot):
|
||||||
def __init__(self, canvas=None, trad=None, toolbar=None,
|
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):
|
parent=None):
|
||||||
super(PlotRKCEnsemble, self).__init__(
|
super(PlotRKCEnsemble, self).__init__(
|
||||||
canvas=canvas,
|
canvas=canvas,
|
||||||
|
|
@ -46,7 +46,6 @@ class PlotRKCEnsemble(PamhyrPlot):
|
||||||
self._parent = parent
|
self._parent = parent
|
||||||
self._current_reach_id = reach_id
|
self._current_reach_id = reach_id
|
||||||
self._current_profile_id = profile_id
|
self._current_profile_id = profile_id
|
||||||
self._current_run_id = run_id[0]
|
|
||||||
self._timestamps = parent._timestamps
|
self._timestamps = parent._timestamps
|
||||||
self._current_timestamp = max(self._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_min = self._trad["label_water_min"]
|
||||||
self.label_water_max = self._trad["label_water_max"]
|
self.label_water_max = self._trad["label_water_max"]
|
||||||
|
|
||||||
|
self.water = []
|
||||||
|
|
||||||
self._isometric_axis = False
|
self._isometric_axis = False
|
||||||
|
|
||||||
self._auto_relim_update = True
|
self._auto_relim_update = True
|
||||||
|
|
@ -80,10 +81,10 @@ class PlotRKCEnsemble(PamhyrPlot):
|
||||||
if self.results is None:
|
if self.results is None:
|
||||||
return
|
return
|
||||||
|
|
||||||
if self.results[self._current_run_id] is None:
|
if self.results[0] is None:
|
||||||
return
|
return
|
||||||
|
|
||||||
results = self.results[self._current_run_id]
|
results = self.results[0]
|
||||||
reach = results.river.reach(self._current_reach_id)
|
reach = results.river.reach(self._current_reach_id)
|
||||||
|
|
||||||
self.draw_bottom(reach)
|
self.draw_bottom(reach)
|
||||||
|
|
@ -100,7 +101,7 @@ class PlotRKCEnsemble(PamhyrPlot):
|
||||||
self.draw_bottom_geometry(reach)
|
self.draw_bottom_geometry(reach)
|
||||||
|
|
||||||
def draw_profiles_hs(self, reach):
|
def draw_profiles_hs(self, reach):
|
||||||
results = self.results[self._current_run_id]
|
results = self.results[0]
|
||||||
lhs = filter(
|
lhs = filter(
|
||||||
lambda hs: hs._input_reach.reach is reach.geometry,
|
lambda hs: hs._input_reach.reach is reach.geometry,
|
||||||
filter(
|
filter(
|
||||||
|
|
@ -146,10 +147,12 @@ class PlotRKCEnsemble(PamhyrPlot):
|
||||||
|
|
||||||
def draw_water_elevation(self, reach):
|
def draw_water_elevation(self, reach):
|
||||||
if len(reach.geometry.profiles) != 0:
|
if len(reach.geometry.profiles) != 0:
|
||||||
result = self.results[self._current_run_id]
|
result = self.results[0]
|
||||||
rk = reach.geometry.get_rk()
|
rk = reach.geometry.get_rk()
|
||||||
z_min = reach.geometry.get_z_min()
|
z_min = reach.geometry.get_z_min()
|
||||||
|
|
||||||
|
self.water = []
|
||||||
|
|
||||||
colors = [
|
colors = [
|
||||||
("z_min", self.color_plot_ensemble_min),
|
("z_min", self.color_plot_ensemble_min),
|
||||||
("Z", self.color_plot_ensemble_mean),
|
("Z", self.color_plot_ensemble_mean),
|
||||||
|
|
@ -163,15 +166,17 @@ class PlotRKCEnsemble(PamhyrPlot):
|
||||||
gi_0, gi_1 = reach.global_index
|
gi_0, gi_1 = reach.global_index
|
||||||
water_z = table[ts, gi_0 : gi_1 + 1]
|
water_z = table[ts, gi_0 : gi_1 + 1]
|
||||||
|
|
||||||
self.water = self.canvas.axes.plot(
|
plot, = self.canvas.axes.plot(
|
||||||
rk, water_z,
|
rk, water_z,
|
||||||
lw=1., color=color,
|
lw=1., color=color,
|
||||||
linestyle='dotted',
|
linestyle='dotted',
|
||||||
label=f"Elevation: {t} (m)",
|
label=f"Elevation: {t} (m)",
|
||||||
)
|
)
|
||||||
|
|
||||||
def draw_additional_data(self, run_id):
|
self.water.append(plot)
|
||||||
results = self.results[run_id]
|
|
||||||
|
def draw_additional_data(self):
|
||||||
|
results = self.results[0]
|
||||||
|
|
||||||
self._add_data_lines = []
|
self._add_data_lines = []
|
||||||
|
|
||||||
|
|
@ -231,10 +236,6 @@ class PlotRKCEnsemble(PamhyrPlot):
|
||||||
self._current_profile_id = profile_id
|
self._current_profile_id = profile_id
|
||||||
self.update_current()
|
self.update_current()
|
||||||
|
|
||||||
def set_result(self, run_id):
|
|
||||||
self._current_run_id = run_id[0]
|
|
||||||
self.update()
|
|
||||||
|
|
||||||
def set_timestamp(self, timestamp):
|
def set_timestamp(self, timestamp):
|
||||||
self._current_timestamp = timestamp
|
self._current_timestamp = timestamp
|
||||||
self.update()
|
self.update()
|
||||||
|
|
@ -243,7 +244,7 @@ class PlotRKCEnsemble(PamhyrPlot):
|
||||||
if not self._init:
|
if not self._init:
|
||||||
self.draw()
|
self.draw()
|
||||||
|
|
||||||
results = self.results[self._current_run_id]
|
results = self.results[0]
|
||||||
reach = results.river.reach(self._current_reach_id)
|
reach = results.river.reach(self._current_reach_id)
|
||||||
|
|
||||||
self.update_water_elevation()
|
self.update_water_elevation()
|
||||||
|
|
@ -253,13 +254,12 @@ class PlotRKCEnsemble(PamhyrPlot):
|
||||||
def update_all(self):
|
def update_all(self):
|
||||||
self._current_reach_id = self._parent._get_current_reach()
|
self._current_reach_id = self._parent._get_current_reach()
|
||||||
self._current_profile_id = self._parent._get_current_profile()
|
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._current_timestamp = self._parent._get_current_timestamp()
|
||||||
self._init = False
|
self._init = False
|
||||||
self.update()
|
self.update()
|
||||||
|
|
||||||
def update_water_elevation(self):
|
def update_water_elevation(self):
|
||||||
result = self.results[self._current_run_id]
|
result = self.results[0]
|
||||||
reach = result.river.reach(self._current_reach_id)
|
reach = result.river.reach(self._current_reach_id)
|
||||||
rk = reach.geometry.get_rk()
|
rk = reach.geometry.get_rk()
|
||||||
z_min = reach.geometry.get_z_min()
|
z_min = reach.geometry.get_z_min()
|
||||||
|
|
@ -269,16 +269,27 @@ class PlotRKCEnsemble(PamhyrPlot):
|
||||||
gi_0, gi_1 = reach.global_index
|
gi_0, gi_1 = reach.global_index
|
||||||
water_z = table[ts, gi_0 : gi_1 + 1]
|
water_z = table[ts, gi_0 : gi_1 + 1]
|
||||||
|
|
||||||
self.water[0].set_data(
|
colors = [
|
||||||
rk, water_z
|
(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):
|
def update_additional_data(self):
|
||||||
self.draw_additional_data(0)
|
self.draw_additional_data()
|
||||||
self.update_idle()
|
self.update_idle()
|
||||||
|
|
||||||
def update_current(self):
|
def update_current(self):
|
||||||
results = self.results[self._current_run_id]
|
results = self.results[0]
|
||||||
reach = results.river.reach(self._current_reach_id)
|
reach = results.river.reach(self._current_reach_id)
|
||||||
rk = reach.geometry.get_rk()
|
rk = reach.geometry.get_rk()
|
||||||
z_min = reach.geometry.get_z_min()
|
z_min = reach.geometry.get_z_min()
|
||||||
|
|
@ -289,4 +300,6 @@ class PlotRKCEnsemble(PamhyrPlot):
|
||||||
[rk[cid], rk[cid]],
|
[rk[cid], rk[cid]],
|
||||||
[z_max[cid], z_min[cid]]
|
[z_max[cid], z_min[cid]]
|
||||||
)
|
)
|
||||||
|
|
||||||
self.canvas.figure.canvas.draw_idle()
|
self.canvas.figure.canvas.draw_idle()
|
||||||
|
self.update_idle()
|
||||||
|
|
|
||||||
|
|
@ -398,21 +398,21 @@ class ResultsWindow(PamhyrWindow):
|
||||||
)
|
)
|
||||||
|
|
||||||
# Table and Plot
|
# Table and Plot
|
||||||
fun = {
|
funs = [
|
||||||
"reach": self._set_current_reach,
|
("reach", self._set_current_reach),
|
||||||
"profile": self._set_current_profile,
|
("profile", self._set_current_profile),
|
||||||
"raw_data": self._set_current_profile_raw_data,
|
("raw_data", self._set_current_profile_raw_data),
|
||||||
"solver": self._set_current_results,
|
("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 = self.find(QTableView, f"tableView_{t}")
|
||||||
|
|
||||||
table.selectionModel()\
|
table.selectionModel()\
|
||||||
.selectionChanged\
|
.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._slider_time.valueChanged.connect(self._set_current_timestamp)
|
||||||
self._button_play.setChecked(False)
|
self._button_play.setChecked(False)
|
||||||
|
|
@ -1491,7 +1491,6 @@ class ResultsEnsembleWindow(ResultsWindow):
|
||||||
results=self._results,
|
results=self._results,
|
||||||
reach_id=0,
|
reach_id=0,
|
||||||
profile_id=0,
|
profile_id=0,
|
||||||
run_id=self._current_results,
|
|
||||||
trad=self._trad,
|
trad=self._trad,
|
||||||
toolbar=self.toolbar_1,
|
toolbar=self.toolbar_1,
|
||||||
parent=self
|
parent=self
|
||||||
|
|
@ -1541,20 +1540,19 @@ class ResultsEnsembleWindow(ResultsWindow):
|
||||||
)
|
)
|
||||||
|
|
||||||
# Table and Plot
|
# Table and Plot
|
||||||
fun = {
|
funs = [
|
||||||
"reach": self._set_current_reach,
|
("reach", self._set_current_reach),
|
||||||
"profile": self._set_current_profile,
|
("profile", self._set_current_profile),
|
||||||
"runs": self._set_current_results,
|
]
|
||||||
}
|
|
||||||
|
|
||||||
for t in ["reach", "profile", "runs"]:
|
for t, f in funs:
|
||||||
table = self.find(QTableView, f"tableView_{t}")
|
table = self.find(QTableView, f"tableView_{t}")
|
||||||
|
|
||||||
table.selectionModel()\
|
table.selectionModel()\
|
||||||
.selectionChanged\
|
.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._slider_time.valueChanged.connect(self._set_current_timestamp)
|
||||||
self._button_play.setChecked(False)
|
self._button_play.setChecked(False)
|
||||||
|
|
@ -1569,64 +1567,38 @@ class ResultsEnsembleWindow(ResultsWindow):
|
||||||
tab_widget = self.find(QTabWidget, f"tabWidget")
|
tab_widget = self.find(QTabWidget, f"tabWidget")
|
||||||
tab_widget.currentChanged.connect(self.tab_changed)
|
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,
|
def update(self,
|
||||||
reach_id=None,
|
reach_id=None,
|
||||||
profile_id=None,
|
profile_id=None,
|
||||||
runs_id=None,
|
|
||||||
timestamp=None):
|
timestamp=None):
|
||||||
|
|
||||||
tab_widget = self.find(QTabWidget, f"tabWidget")
|
tab_widget = self.find(QTabWidget, f"tabWidget")
|
||||||
tab_index = tab_widget.currentIndex()
|
tab_index = tab_widget.currentIndex()
|
||||||
name = tab_widget.tabText(tab_index)
|
name = tab_widget.tabText(tab_index)
|
||||||
|
|
||||||
if reach_id is not None:
|
if reach_id is not None:
|
||||||
if tab_index == 1:
|
if tab_index == 0:
|
||||||
self.plot_rkc.set_reach(reach_id)
|
self.plot_rkc.set_reach(reach_id)
|
||||||
elif tab_index == 2:
|
elif tab_index == 1:
|
||||||
self.plot_h.set_reach(reach_id)
|
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_reach(reach_id)
|
||||||
self.update_table_selection_profile(0)
|
self.update_table_selection_profile(0)
|
||||||
|
|
||||||
if profile_id is not None:
|
if profile_id is not None:
|
||||||
if tab_index == 1:
|
if tab_index == 0:
|
||||||
self.plot_rkc.set_profile(profile_id[0])
|
self.plot_rkc.set_profile(profile_id[0])
|
||||||
elif tab_index == 2:
|
elif tab_index == 1:
|
||||||
self.plot_h.set_profile(profile_id)
|
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")
|
tab_widget = self.find(QTabWidget, f"tabWidget")
|
||||||
if tab_widget.currentIndex() != 2:
|
if tab_widget.currentIndex() != 2:
|
||||||
self.update_table_selection_profile(profile_id[0])
|
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:
|
if timestamp is not None:
|
||||||
self.plot_rkc.set_timestamp(timestamp)
|
self.plot_rkc.set_timestamp(timestamp)
|
||||||
if tab_index == 2:
|
if tab_index == 1:
|
||||||
self.plot_h.set_timestamp(timestamp)
|
self.plot_h.set_timestamp(timestamp)
|
||||||
|
|
||||||
if tab_widget.currentIndex() > 2:
|
|
||||||
self._additional_plot[name].set_timestamp(timestamp)
|
|
||||||
|
|
||||||
self.update_statusbar()
|
self.update_statusbar()
|
||||||
|
|
||||||
def tab_changed(self, i):
|
def tab_changed(self, i):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue