Compare commits

...
3 Commits
6 changed files with 75 additions and 11 deletions

No files matched your search

+16
View File
@@ -252,3 +252,19 @@ class Ensemble(SQLSubModel):
def target_data(self, target_data): def target_data(self, target_data):
self._target_data = target_data self._target_data = target_data
self._status.modified() self._status.modified()
def get_data_dict(self):
return {
"name": self.name,
"data_type": self.data_type,
"target_data": self.target_data,
"distribution": self.distribution,
"params": self.params,
}
def set_data_dict(self, data):
self.name = data["name"]
self.data_type = data["data_type"]
self.target_data = data["target_data"]
self.distribution = data["distribution"]
self.params = data["params"]
+5 -4
View File
@@ -393,7 +393,7 @@ class Reach(SQLSubModel):
class River(SQLSubModel): class River(SQLSubModel):
_sub_classes = [Reach] _sub_classes = [Reach]
def __init__(self, study, parent): def __init__(self, study, parent, init=True):
super(River, self).__init__( super(River, self).__init__(
id=-1, status=study.status, id=-1, status=study.status,
owner_scenario=study.status.scenario.id owner_scenario=study.status.scenario.id
@@ -404,8 +404,9 @@ class River(SQLSubModel):
# Dict with timestamps as key # Dict with timestamps as key
self._reachs = [] self._reachs = []
for i, _ in enumerate(self._study.river.enable_edges()): if init:
self.add(i) for i, _ in enumerate(self._study.river.enable_edges()):
self.add(i)
def __len__(self): def __len__(self):
return len(self._reachs) return len(self._reachs)
@@ -458,7 +459,7 @@ class River(SQLSubModel):
study = data["study"] study = data["study"]
parent = data["parent"] parent = data["parent"]
new_river = cls(study, parent) new_river = cls(study, parent, init=False)
for reach in study.river.reachs(): for reach in study.river.reachs():
data["reach"] = reach.reach data["reach"] = reach.reach
+9 -6
View File
@@ -201,19 +201,22 @@ class EnsembleEditDialog(PamhyrDialog):
return self._values return self._values
def accept(self): def accept(self):
self._ensemble.name = self.get_line_edit_text("lineEdit_name")
self._ensemble.data_type = self._target_data[0]
self._ensemble.target_data = self._target_data[1]
txt = self.get_combobox_text("comboBox_distribution") txt = self.get_combobox_text("comboBox_distribution")
self._ensemble.distribution = next( distribution = next(
filter( filter(
lambda d: d.name == txt, lambda d: d.name == txt,
self._study._ens_distributions.lst self._study._ens_distributions.lst
), ),
None None
) )
self._ensemble.params = self._params_widget.values
self._values = {
"name": self.get_line_edit_text("lineEdit_name"),
"data_type": self._target_data[0],
"target_data": self._target_data[1],
"distribution": distribution,
"params": self._params_widget.values,
}
super().accept() super().accept()
+15
View File
@@ -133,3 +133,18 @@ class DelCommand(QUndoCommand):
def redo(self): def redo(self):
self._ensembles.delete_i(self._rows) self._ensembles.delete_i(self._rows)
class SetAllCommand(QUndoCommand):
def __init__(self, ensemble, data):
QUndoCommand.__init__(self)
self._ensemble = ensemble
self._old = self._ensemble.get_data_dict()
self._new = data
def undo(self):
self._ensemble.set_data_dict(self._old)
def redo(self):
self._ensemble.set_data_dict(self._new)
+6 -1
View File
@@ -47,6 +47,7 @@ from View.Ensembles.Table import (
EnsembleTableModel, ComboBoxDelegate EnsembleTableModel, ComboBoxDelegate
) )
from View.Ensembles.Translate import EnsemblesTranslate from View.Ensembles.Translate import EnsemblesTranslate
from View.Ensembles.UndoCommand import SetAllCommand
logger = logging.getLogger() logger = logging.getLogger()
@@ -194,7 +195,11 @@ class EnsemblesWindow(PamhyrWindow):
) )
if dlg.exec(): if dlg.exec():
return self._undo_stack.push(
SetAllCommand(
ens, dlg.values
)
)
except Exception as e: except Exception as e:
logger_exception(e) logger_exception(e)
return return
+24
View File
@@ -102,6 +102,7 @@ class PlotHEnsemble(PamhyrPlot):
return return
self.draw_data(res_id) self.draw_data(res_id)
self.draw_data_std_derivation(res_id)
self.canvas.axes.set_xlabel( self.canvas.axes.set_xlabel(
self._trad["unit_time_s"], self._trad["unit_time_s"],
@@ -159,6 +160,29 @@ class PlotHEnsemble(PamhyrPlot):
self._line.append(line) self._line.append(line)
@timer
def draw_data_std_derivation(self, res_id):
results = self.results[res_id]
reach = results.river.reach(self._current_reach_id)
q = results.get("table")["q_mean"]
std_deriv = results.get("table")["q_std_derivation"]
profile = reach.profile(self._current_profile_id[0])
x = self._timestamps
y = q[:, profile.global_index]
std = std_deriv[:, profile.global_index]
y_b = y - std
y_t = y + std
plot = self.canvas.axes.fill_between(
x, y_b, y_t,
label=f"Standard derivation {profile.name}",
color=self.color_plot_ensemble_std_deriv,
alpha=0.3,
)
def draw_additional_data(self, res_id): def draw_additional_data(self, res_id):
results = self.results[res_id] results = self.results[res_id]