adists_release
Theophile Terraz 2024-12-05 16:50:10 +01:00
parent f1d6eb8990
commit b38e252746
15 changed files with 87 additions and 1062 deletions

View File

@ -176,7 +176,8 @@ class TableModel(PamhyrTableModel):
)
)
elif self._headers[column] == "pol":
pol = next(filter(lambda x: x.name == value, self._data._Pollutants.Pollutants_List))
pol = next(filter(lambda x: x.name == value,
self._data._Pollutants.Pollutants_List))
self._undo.push(
SetPolCommand(
self._lst, row, pol.id

View File

@ -161,7 +161,7 @@ class CustomPlot(PamhyrPlot):
sl, z
),
ts_z_bedrock, # Bedrock elevations
asarray(sl)[:,0,:,0] # Sediment layers
asarray(sl)[:, 0, :, 0] # Sediment layers
)
)
return ts_z_min
@ -952,4 +952,3 @@ class CustomPlot(PamhyrPlot):
x = self._timestamp
self._current.set_data([x, x], self.canvas.axes.get_ylim())
self.canvas.draw_idle()

View File

@ -1,162 +0,0 @@
# PlotCAdisTS.py -- Pamhyr
# Copyright (C) 2023-2024 INRAE
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
# -*- coding: utf-8 -*-
import logging
from functools import reduce
from datetime import datetime
from tools import timer, trace
from View.Tools.PamhyrPlot import PamhyrPlot
from PyQt5.QtCore import (
QCoreApplication
)
_translate = QCoreApplication.translate
logger = logging.getLogger()
class PlotC(PamhyrPlot):
def __init__(self, canvas=None, trad=None, toolbar=None,
results=None, reach_id=0, profile_id=0, pol_id=0,
parent=None):
super(PlotC, self).__init__(
canvas=canvas,
trad=trad,
data=results,
toolbar=toolbar,
parent=parent
)
self._mode = "time"
self._current_timestamp = max(results.get("timestamps"))
self._current_reach_id = reach_id
self._current_profile_id = profile_id
self._current_pol_id = pol_id
self.label_x = _translate("Results", "Time (s)")
self.label_y = _translate("Results", "Discharge (m³/s)")
self.label_discharge = _translate("Results", "Cross-section discharge")
self.label_discharge_max = _translate("Results", "Max discharge")
self.label_timestamp = _translate("Results", "Current timestamp")
self._isometric_axis = False
self._auto_relim_update = False
self._autoscale_update = False
@property
def results(self):
return self.data
@results.setter
def results(self, results):
self.data = results
self._current_timestamp = max(results.get("timestamps"))
@timer
def draw(self, highlight=None):
self.init_axes()
if self.results is None:
return
reach = self.results.river.reach(self._current_reach_id)
profile = reach.profile(self._current_profile_id)
pollutant = self._current_pol_id
if reach.geometry.number_profiles == 0:
self._init = False
return
self.draw_data(reach, profile, pollutant)
self.set_ticks_time_formater()
self.enable_legend()
self.idle()
self._init = True
def draw_data(self, reach, profile, pollutant):
self.ts = list(self.results.get("timestamps"))
self.ts.sort()
x = self.ts
#y = profile.get_key("Q")
#First 0 for pol and second 0 for phys var
y = list(map(lambda data_el: data_el[pollutant][0], profile.get_key("pols")))
###print("************//////////////////")
###print("profile: ", self._current_profile_id)
###print("reach: ", self._current_reach_id)
###print("pollutant: ", pollutant)
###print("*****************draw data: ", len(x),len(y))
###print("x: ", x)
###print("y: ", y)
###print("reach: ", reach)
###print("profile: ", profile)
###print("pollutant: ", pollutant)
self._line, = self.canvas.axes.plot(
x, y,
label=self.label_discharge,
color=self.color_plot,
**self.plot_default_kargs
)
def set_reach(self, reach_id):
self._current_reach_id = reach_id
self._current_profile_id = 0
self.draw()
def set_profile(self, profile_id):
self._current_profile_id = profile_id
self.update()
def set_pollutant(self, pol_id):
self._current_pol_id = pol_id
self.update()
def set_timestamp(self, timestamp):
self._current_timestamp = timestamp
self.update()
def update(self):
if not self._init:
self.draw()
self.update_data()
self.update_idle()
def update_data(self):
reach = self.results.river.reach(self._current_reach_id)
profile = reach.profile(self._current_profile_id)
pollutant = self._current_pol_id
x = self.ts
#y = profile.get_key("Q")
y = list(map(lambda data_el: data_el[pollutant][0], profile.get_key("pols")))
self._line.set_data(x, y)

View File

@ -1,173 +0,0 @@
# PlotMAdisTS.py -- Pamhyr
# Copyright (C) 2023-2024 INRAE
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
# -*- coding: utf-8 -*-
import logging
from functools import reduce
from datetime import datetime
import numpy as np
from tools import timer, trace
from View.Tools.PamhyrPlot import PamhyrPlot
from PyQt5.QtCore import (
QCoreApplication
)
_translate = QCoreApplication.translate
logger = logging.getLogger()
class PlotM(PamhyrPlot):
def __init__(self, canvas=None, trad=None, toolbar=None,
results=None, reach_id=0, profile_id=0, pol_id=0,
parent=None):
super(PlotM, self).__init__(
canvas=canvas,
trad=trad,
data=results,
toolbar=toolbar,
parent=parent
)
self._mode = "time"
self._current_timestamp = max(results.get("timestamps"))
self._current_reach_id = reach_id
self._current_profile_id = profile_id
self._current_pol_id = pol_id
self.label_x = _translate("Results", "Time (s)")
self.label_y = _translate("Results", "Discharge (m³/s)")
self.label_discharge = _translate("Results", "Cross-section discharge")
self.label_discharge_max = _translate("Results", "Max discharge")
self.label_timestamp = _translate("Results", "Current timestamp")
self._isometric_axis = False
self._auto_relim_update = False
self._autoscale_update = False
@property
def results(self):
return self.data
@results.setter
def results(self, results):
self.data = results
self._current_timestamp = max(results.get("timestamps"))
@timer
def draw(self, highlight=None):
self.init_axes()
if self.results is None:
return
reach = self.results.river.reach(self._current_reach_id)
profile = reach.profile(self._current_profile_id)
pollutant = self._current_pol_id
if reach.geometry.number_profiles == 0:
self._init = False
return
self.draw_data(reach, profile, pollutant)
self.set_ticks_time_formater()
self.enable_legend()
self.idle()
self._init = True
def draw_data(self, reach, profile, pollutant):
self.ts = list(self.results.get("timestamps"))
self.ts.sort()
x = self.ts
#y = profile.get_key("Q")
#First 0 for pol and second 0 for phys var
y1 = list(map(lambda data_el: data_el[pollutant][1], profile.get_key("pols")))
y2 = list(map(lambda data_el: data_el[pollutant][2], profile.get_key("pols")))
y3 = list(map(lambda data_el: data_el[pollutant][3], profile.get_key("pols")))
y = (np.array(y1) + np.array(y2) + np.array(y3)).tolist()
###print("************//////////////////")
###print("profile: ", self._current_profile_id)
###print("reach: ", self._current_reach_id)
###print("pollutant: ", pollutant)
###print("*****************draw data: ", len(x),len(y))
###print("x: ", x)
###print("y: ", y)
###print("reach: ", reach)
###print("profile: ", profile)
###print("pollutant: ", pollutant)
self._line, = self.canvas.axes.plot(
x, y,
label=self.label_discharge,
color=self.color_plot,
**self.plot_default_kargs
)
def set_reach(self, reach_id):
self._current_reach_id = reach_id
self._current_profile_id = 0
self.draw()
def set_profile(self, profile_id):
self._current_profile_id = profile_id
self.update()
def set_pollutant(self, pol_id):
self._current_pol_id = pol_id
self.update()
def set_timestamp(self, timestamp):
self._current_timestamp = timestamp
self.update()
def update(self):
if not self._init:
self.draw()
self.update_data()
self.update_idle()
def update_data(self):
reach = self.results.river.reach(self._current_reach_id)
profile = reach.profile(self._current_profile_id)
pollutant = self._current_pol_id
x = self.ts
#y = profile.get_key("Q")
y1 = list(map(lambda data_el: data_el[pollutant][1], profile.get_key("pols")))
y2 = list(map(lambda data_el: data_el[pollutant][2], profile.get_key("pols")))
y3 = list(map(lambda data_el: data_el[pollutant][3], profile.get_key("pols")))
y = (np.array(y1) + np.array(y2) + np.array(y3)).tolist()
self._line.set_data(x, y)

View File

@ -113,11 +113,13 @@ class PlotAdis_dt(PamhyrPlot):
x = self.ts
if self.val_id[self._key] > 0 and self._type_pol == 1:
y=[0.0]*len(x)
y = [0.0]*len(x)
else:
y = list(map(lambda data_el: data_el[self._current_pol_id][self.val_id[self._key]],
profile.get_key("pols")
))
val_id = self.val_id[self._key]
y = list(map(lambda data_el:
data_el[self._current_pol_id][val_id],
profile.get_key("pols")
))
self._line, = self.canvas.axes.plot(
x, y,
@ -141,13 +143,16 @@ class PlotAdis_dt(PamhyrPlot):
x = self.ts
if self.val_id[self._key] > 0 and self._type_pol == 1:
y=[0.0]*len(x)
y = [0.0]*len(x)
else:
y = []
val_id = self.val_id[self._key]
for ts in x:
ts_y = list(map(
lambda p: p.get_ts_key(ts, "pols")[self._current_pol_id][self.val_id[self._key]],
reach.profiles))
ts_y = list(map(lambda p:
p.get_ts_key(
ts, "pols"
)[self._current_pol_id][val_id],
reach.profiles))
y.append(np.max(ts_y))
self._line_max, = self.canvas.axes.plot(
@ -188,13 +193,16 @@ class PlotAdis_dt(PamhyrPlot):
x = self.ts
if self.val_id[self._key] > 0 and self._type_pol == 1:
y=[0.0]*len(x)
y = [0.0]*len(x)
else:
y = []
val_id = self.val_id[self._key]
for ts in x:
ts_y = list(map(
lambda p: p.get_ts_key(ts, "pols")[self._current_pol_id][self.val_id[self._key]],
reach.profiles))
ts_y = list(map(lambda p:
p.get_ts_key(
ts, "pols"
)[self._current_pol_id][val_id],
reach.profiles))
y.append(np.max(ts_y))
self._line_max.set_data(x, y)
@ -205,11 +213,12 @@ class PlotAdis_dt(PamhyrPlot):
x = self.ts
if self.val_id[self._key] > 0 and self._type_pol == 1:
y=[0.0]*len(x)
y = [0.0]*len(x)
else:
y = list(map(lambda data_el: data_el[self._current_pol_id][self.val_id[self._key]],
profile.get_key("pols")
))
y = list(map(lambda data_el:
data_el[self._current_pol_id][self.val_id[self._key]],
profile.get_key("pols")
))
self._line.set_data(x, y)

View File

@ -62,7 +62,7 @@ class PlotAdis_dx(PamhyrPlot):
self.label["C"] = _translate("Results", "Concentration")
self.label_max["C"] = _translate("Results", "Max Concentration")
self.label_min["C"] = _translate("Results", "Min Concentration")
if self._type_pol == -1: # Total
if self._type_pol == -1: # Total
self.label["M"] = _translate("Results", "Thickness")
self.label_max["M"] = _translate("Results", "Max Thickness")
self.label_min["M"] = _translate("Results", "Min Thickness")
@ -78,7 +78,6 @@ class PlotAdis_dx(PamhyrPlot):
self.val_id["M"] = 2
self.val_id["D"] = 3
self._isometric_axis = False
@property
@ -151,12 +150,13 @@ class PlotAdis_dx(PamhyrPlot):
x = reach.geometry.get_rk()
if self.val_id[self._key] > 0 and self._type_pol == 1:
y=[0.0]*len(x)
y = [0.0]*len(x)
else:
y = list(map(
lambda p: p.get_ts_key(self._current_timestamp, "pols")[self._current_pol_id][self.val_id[self._key]],
reach.profiles
))
y = list(map(lambda p:
p.get_ts_key(
self._current_timestamp, "pols"
)[self._current_pol_id][self.val_id[self._key]],
reach.profiles))
self._line, = self.canvas.axes.plot(
x, y,
@ -183,14 +183,16 @@ class PlotAdis_dx(PamhyrPlot):
x = reach.geometry.get_rk()
if self.val_id[self._key] > 0 and self._type_pol == 1:
y=[0.0]*len(x)
y = [0.0]*len(x)
else:
y = []
z = []
val_id = self.val_id[self._key]
for p in reach.profiles:
rk_y = list(map(lambda data_el: data_el[self._current_pol_id][self.val_id[self._key]],
p.get_key("pols")
))
rk_y = list(map(lambda data_el:
data_el[self._current_pol_id][val_id],
p.get_key("pols")
))
y.append(np.max(rk_y))
z.append(np.min(rk_y))
@ -241,14 +243,16 @@ class PlotAdis_dx(PamhyrPlot):
x = reach.geometry.get_rk()
if self.val_id[self._key] > 0 and self._type_pol == 1:
y=[0.0]*len(x)
y = [0.0]*len(x)
else:
y = []
z = []
val_id = self.val_id[self._key]
for p in reach.profiles:
rk_y = list(map(lambda data_el: data_el[self._current_pol_id][self.val_id[self._key]],
p.get_key("pols")
))
rk_y = list(map(lambda data_el:
data_el[self._current_pol_id][val_id],
p.get_key("pols")
))
y.append(np.max(rk_y))
z.append(np.min(rk_y))
@ -262,12 +266,13 @@ class PlotAdis_dx(PamhyrPlot):
x = reach.geometry.get_rk()
if self.val_id[self._key] > 0 and self._type_pol == 1:
y=[0.0]*len(x)
y = [0.0]*len(x)
else:
y = list(map(
lambda p: p.get_ts_key(self._current_timestamp, "pols")[self._current_pol_id][self.val_id[self._key]],
reach.profiles
))
lambda p: p.get_ts_key(
self._current_timestamp, "pols"
)[self._current_pol_id][self.val_id[self._key]],
reach.profiles))
self._line.set_data(x, y)
@ -305,16 +310,14 @@ class PlotAdis_dx(PamhyrPlot):
reach = self.results.river.reach(self._current_reach_id)
if self.val_id[self._key] > 0 and self._type_pol == 1:
y=[0.0]
y = [0.0]
else:
val_id = self.val_id[self._key]
y = list(
map(lambda p:
list(map(lambda data_el: data_el[self._current_pol_id][self.val_id[self._key]],
p.get_key("pols"))
),
reach.profiles
)
)
list(map(lambda data_el:
data_el[self._current_pol_id][val_id],
p.get_key("pols"))), reach.profiles))
self.y_max = np.max(y)
self.y_min = np.min(y)

View File

@ -1,160 +0,0 @@
# PlotTotSedCAdisTS.py -- Pamhyr
# Copyright (C) 2023-2024 INRAE
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
# -*- coding: utf-8 -*-
import logging
from functools import reduce
from datetime import datetime
import numpy as np
from tools import timer, trace
from View.Tools.PamhyrPlot import PamhyrPlot
from PyQt5.QtCore import (
QCoreApplication
)
_translate = QCoreApplication.translate
logger = logging.getLogger()
class PlotTotSedC(PamhyrPlot):
def __init__(self, canvas=None, trad=None, toolbar=None,
results=None, reach_id=0, profile_id=0, pol_id=0,
parent=None):
super(PlotTotSedC, self).__init__(
canvas=canvas,
trad=trad,
data=results,
toolbar=toolbar,
parent=parent
)
self._mode = "time"
self._current_timestamp = max(results.get("timestamps"))
self._current_reach_id = reach_id
self._current_profile_id = profile_id
self._current_pol_id = pol_id
self.label_x = _translate("Results", "Time (s)")
self.label_y = _translate("Results", "Discharge (m³/s)")
self.label_discharge = _translate("Results", "Cross-section discharge")
self.label_discharge_max = _translate("Results", "Max discharge")
self.label_timestamp = _translate("Results", "Current timestamp")
self._isometric_axis = False
self._auto_relim_update = False
self._autoscale_update = False
@property
def results(self):
return self.data
@results.setter
def results(self, results):
self.data = results
self._current_timestamp = max(results.get("timestamps"))
@timer
def draw(self, highlight=None):
self.init_axes()
if self.results is None:
return
reach = self.results.river.reach(self._current_reach_id)
profile = reach.profile(self._current_profile_id)
pollutant = self._current_pol_id
if reach.geometry.number_profiles == 0:
self._init = False
return
self.draw_data(reach, profile, pollutant)
self.set_ticks_time_formater()
self.enable_legend()
self.idle()
self._init = True
def draw_data(self, reach, profile, pollutant):
self.ts = list(self.results.get("timestamps"))
self.ts.sort()
x = self.ts
#y = profile.get_key("Q")
#First 0 for pol and second 0 for phys var
y = list(map(lambda data_el: data_el[pollutant][0], profile.get_key("pols")))
print("Total Sed C************//////////////////")
print("profile: ", self._current_profile_id)
print("reach: ", self._current_reach_id)
print("pollutant: ", pollutant)
###print("*****************draw data: ", len(x),len(y))
###print("x: ", x)
###print("y: ", y)
###print("reach: ", reach)
###print("profile: ", profile)
###print("pollutant: ", pollutant)
self._line, = self.canvas.axes.plot(
x, y,
label=self.label_discharge,
color=self.color_plot,
**self.plot_default_kargs
)
def set_reach(self, reach_id):
self._current_reach_id = reach_id
self._current_profile_id = 0
self.draw()
def set_profile(self, profile_id):
self._current_profile_id = profile_id
self.update()
def set_timestamp(self, timestamp):
self._current_timestamp = timestamp
self.update()
def update(self):
if not self._init:
self.draw()
self.update_data()
self.update_idle()
def update_data(self):
reach = self.results.river.reach(self._current_reach_id)
profile = reach.profile(self._current_profile_id)
pollutant = self._current_pol_id
x = self.ts
#y = profile.get_key("Q")
y = list(map(lambda data_el: data_el[pollutant][0], profile.get_key("pols")))
self._line.set_data(x, y)

View File

@ -1,160 +0,0 @@
# PlotTotSedEDAdisTS.py -- Pamhyr
# Copyright (C) 2023-2024 INRAE
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
# -*- coding: utf-8 -*-
import logging
from functools import reduce
from datetime import datetime
import numpy as np
from tools import timer, trace
from View.Tools.PamhyrPlot import PamhyrPlot
from PyQt5.QtCore import (
QCoreApplication
)
_translate = QCoreApplication.translate
logger = logging.getLogger()
class PlotTotSedED(PamhyrPlot):
def __init__(self, canvas=None, trad=None, toolbar=None,
results=None, reach_id=0, profile_id=0, pol_id=0,
parent=None):
super(PlotTotSedED, self).__init__(
canvas=canvas,
trad=trad,
data=results,
toolbar=toolbar,
parent=parent
)
self._mode = "time"
self._current_timestamp = max(results.get("timestamps"))
self._current_reach_id = reach_id
self._current_profile_id = profile_id
self._current_pol_id = pol_id
self.label_x = _translate("Results", "Time (s)")
self.label_y = _translate("Results", "Discharge (m³/s)")
self.label_discharge = _translate("Results", "Cross-section discharge")
self.label_discharge_max = _translate("Results", "Max discharge")
self.label_timestamp = _translate("Results", "Current timestamp")
self._isometric_axis = False
self._auto_relim_update = False
self._autoscale_update = False
@property
def results(self):
return self.data
@results.setter
def results(self, results):
self.data = results
self._current_timestamp = max(results.get("timestamps"))
@timer
def draw(self, highlight=None):
self.init_axes()
if self.results is None:
return
reach = self.results.river.reach(self._current_reach_id)
profile = reach.profile(self._current_profile_id)
pollutant = self._current_pol_id
if reach.geometry.number_profiles == 0:
self._init = False
return
self.draw_data(reach, profile, pollutant)
self.set_ticks_time_formater()
self.enable_legend()
self.idle()
self._init = True
def draw_data(self, reach, profile, pollutant):
self.ts = list(self.results.get("timestamps"))
self.ts.sort()
x = self.ts
#y = profile.get_key("Q")
#First 0 for pol and second 0 for phys var
y = list(map(lambda data_el: data_el[pollutant][3], profile.get_key("pols")))
print("Total Sed ED ************//////////////////")
print("profile: ", self._current_profile_id)
print("reach: ", self._current_reach_id)
print("pollutant: ", pollutant)
###print("*****************draw data: ", len(x),len(y))
###print("x: ", x)
###print("y: ", y)
###print("reach: ", reach)
###print("profile: ", profile)
###print("pollutant: ", pollutant)
self._line, = self.canvas.axes.plot(
x, y,
label=self.label_discharge,
color=self.color_plot,
**self.plot_default_kargs
)
def set_reach(self, reach_id):
self._current_reach_id = reach_id
self._current_profile_id = 0
self.draw()
def set_profile(self, profile_id):
self._current_profile_id = profile_id
self.update()
def set_timestamp(self, timestamp):
self._current_timestamp = timestamp
self.update()
def update(self):
if not self._init:
self.draw()
self.update_data()
self.update_idle()
def update_data(self):
reach = self.results.river.reach(self._current_reach_id)
profile = reach.profile(self._current_profile_id)
pollutant = self._current_pol_id
x = self.ts
#y = profile.get_key("Q")
y = list(map(lambda data_el: data_el[pollutant][3], profile.get_key("pols")))
self._line.set_data(x, y)

View File

@ -1,160 +0,0 @@
# PlotTotSedEGAdisTS.py -- Pamhyr
# Copyright (C) 2023-2024 INRAE
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
# -*- coding: utf-8 -*-
import logging
from functools import reduce
from datetime import datetime
import numpy as np
from tools import timer, trace
from View.Tools.PamhyrPlot import PamhyrPlot
from PyQt5.QtCore import (
QCoreApplication
)
_translate = QCoreApplication.translate
logger = logging.getLogger()
class PlotTotSedEG(PamhyrPlot):
def __init__(self, canvas=None, trad=None, toolbar=None,
results=None, reach_id=0, profile_id=0, pol_id=0,
parent=None):
super(PlotTotSedEG, self).__init__(
canvas=canvas,
trad=trad,
data=results,
toolbar=toolbar,
parent=parent
)
self._mode = "time"
self._current_timestamp = max(results.get("timestamps"))
self._current_reach_id = reach_id
self._current_profile_id = profile_id
self._current_pol_id = pol_id
self.label_x = _translate("Results", "Time (s)")
self.label_y = _translate("Results", "Discharge (m³/s)")
self.label_discharge = _translate("Results", "Cross-section discharge")
self.label_discharge_max = _translate("Results", "Max discharge")
self.label_timestamp = _translate("Results", "Current timestamp")
self._isometric_axis = False
self._auto_relim_update = False
self._autoscale_update = False
@property
def results(self):
return self.data
@results.setter
def results(self, results):
self.data = results
self._current_timestamp = max(results.get("timestamps"))
@timer
def draw(self, highlight=None):
self.init_axes()
if self.results is None:
return
reach = self.results.river.reach(self._current_reach_id)
profile = reach.profile(self._current_profile_id)
pollutant = self._current_pol_id
if reach.geometry.number_profiles == 0:
self._init = False
return
self.draw_data(reach, profile, pollutant)
self.set_ticks_time_formater()
self.enable_legend()
self.idle()
self._init = True
def draw_data(self, reach, profile, pollutant):
self.ts = list(self.results.get("timestamps"))
self.ts.sort()
x = self.ts
#y = profile.get_key("Q")
#First 0 for pol and second 0 for phys var
y = list(map(lambda data_el: data_el[pollutant][1], profile.get_key("pols")))
print("Total Sed EG ************//////////////////")
print("profile: ", self._current_profile_id)
print("reach: ", self._current_reach_id)
print("pollutant: ", pollutant)
###print("*****************draw data: ", len(x),len(y))
###print("x: ", x)
###print("y: ", y)
###print("reach: ", reach)
###print("profile: ", profile)
###print("pollutant: ", pollutant)
self._line, = self.canvas.axes.plot(
x, y,
label=self.label_discharge,
color=self.color_plot,
**self.plot_default_kargs
)
def set_reach(self, reach_id):
self._current_reach_id = reach_id
self._current_profile_id = 0
self.draw()
def set_profile(self, profile_id):
self._current_profile_id = profile_id
self.update()
def set_timestamp(self, timestamp):
self._current_timestamp = timestamp
self.update()
def update(self):
if not self._init:
self.draw()
self.update_data()
self.update_idle()
def update_data(self):
reach = self.results.river.reach(self._current_reach_id)
profile = reach.profile(self._current_profile_id)
pollutant = self._current_pol_id
x = self.ts
#y = profile.get_key("Q")
y = list(map(lambda data_el: data_el[pollutant][1], profile.get_key("pols")))
self._line.set_data(x, y)

View File

@ -1,160 +0,0 @@
# PlotTotSedEMAdisTS.py -- Pamhyr
# Copyright (C) 2023-2024 INRAE
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
# -*- coding: utf-8 -*-
import logging
from functools import reduce
from datetime import datetime
import numpy as np
from tools import timer, trace
from View.Tools.PamhyrPlot import PamhyrPlot
from PyQt5.QtCore import (
QCoreApplication
)
_translate = QCoreApplication.translate
logger = logging.getLogger()
class PlotTotSedEM(PamhyrPlot):
def __init__(self, canvas=None, trad=None, toolbar=None,
results=None, reach_id=0, profile_id=0, pol_id=0,
parent=None):
super(PlotTotSedEM, self).__init__(
canvas=canvas,
trad=trad,
data=results,
toolbar=toolbar,
parent=parent
)
self._mode = "time"
self._current_timestamp = max(results.get("timestamps"))
self._current_reach_id = reach_id
self._current_profile_id = profile_id
self._current_pol_id = pol_id
self.label_x = _translate("Results", "Time (s)")
self.label_y = _translate("Results", "Discharge (m³/s)")
self.label_discharge = _translate("Results", "Cross-section discharge")
self.label_discharge_max = _translate("Results", "Max discharge")
self.label_timestamp = _translate("Results", "Current timestamp")
self._isometric_axis = False
self._auto_relim_update = False
self._autoscale_update = False
@property
def results(self):
return self.data
@results.setter
def results(self, results):
self.data = results
self._current_timestamp = max(results.get("timestamps"))
@timer
def draw(self, highlight=None):
self.init_axes()
if self.results is None:
return
reach = self.results.river.reach(self._current_reach_id)
profile = reach.profile(self._current_profile_id)
pollutant = self._current_pol_id
if reach.geometry.number_profiles == 0:
self._init = False
return
self.draw_data(reach, profile, pollutant)
self.set_ticks_time_formater()
self.enable_legend()
self.idle()
self._init = True
def draw_data(self, reach, profile, pollutant):
self.ts = list(self.results.get("timestamps"))
self.ts.sort()
x = self.ts
#y = profile.get_key("Q")
#First 0 for pol and second 0 for phys var
y = list(map(lambda data_el: data_el[pollutant][2], profile.get_key("pols")))
print("Total Sed EM ************//////////////////")
print("profile: ", self._current_profile_id)
print("reach: ", self._current_reach_id)
print("pollutant: ", pollutant)
###print("*****************draw data: ", len(x),len(y))
###print("x: ", x)
###print("y: ", y)
###print("reach: ", reach)
###print("profile: ", profile)
###print("pollutant: ", pollutant)
self._line, = self.canvas.axes.plot(
x, y,
label=self.label_discharge,
color=self.color_plot,
**self.plot_default_kargs
)
def set_reach(self, reach_id):
self._current_reach_id = reach_id
self._current_profile_id = 0
self.draw()
def set_profile(self, profile_id):
self._current_profile_id = profile_id
self.update()
def set_timestamp(self, timestamp):
self._current_timestamp = timestamp
self.update()
def update(self):
if not self._init:
self.draw()
self.update_data()
self.update_idle()
def update_data(self):
reach = self.results.river.reach(self._current_reach_id)
profile = reach.profile(self._current_profile_id)
pollutant = self._current_pol_id
x = self.ts
#y = profile.get_key("Q")
y = list(map(lambda data_el: data_el[pollutant][2], profile.get_key("pols")))
self._line.set_data(x, y)

View File

@ -45,29 +45,20 @@ _translate = QCoreApplication.translate
class TableModel(PamhyrTableModel):
def _setup_lst(self):
_river = self._data.river
###print("//////////////////opt_data: ", self._opt_data)
###print("data: ", self._data)
###print("river: ", _river)
###print("reaches: ", _river.reachs)
if self._opt_data == "reach":
self._lst = _river.reachs
###print("optreach: ", self._lst)
elif self._opt_data == "profile":
self._lst = _river.reach(0).profiles
elif self._opt_data == "raw_data":
self._lst = _river.reach(0).profiles
elif self._opt_data == "pollutants":
tmp_list = self._data.pollutants_list.copy()
###print(type(tmp_list))
tmp_list.remove("total_sediment")
#tmp_list.insert(len(tmp_list), "total_sediment")
self._lst = tmp_list
###print("=====table pollutants: ", self._lst)
def __init__(self, type_pol, **kwargs):
self._timestamp = 0.0
self._type_pol = type_pol
print("typ pol from raw data: ", self._type_pol)
super(TableModel, self).__init__(**kwargs)
def data(self, index, role=Qt.DisplayRole):
@ -105,12 +96,17 @@ class TableModel(PamhyrTableModel):
pol_index = tmp_list2.index(pol)
header_name = pol + " Concentration"
if self._headers[column] == header_name:
v = self._lst[row].get_ts_key(self._timestamp, "pols")[pol_index][0]
v = self._lst[row].get_ts_key(
self._timestamp, "pols")[pol_index][0]
return f"{v:.4f}"
if self._headers[column] == pol + " Mass" and self._type_pol[pol_index]==7:
m1 = self._lst[row].get_ts_key(self._timestamp, "pols")[pol_index][1]
m2 = self._lst[row].get_ts_key(self._timestamp, "pols")[pol_index][2]
m3 = self._lst[row].get_ts_key(self._timestamp, "pols")[pol_index][3]
if (self._headers[column] == pol + " Mass"
and self._type_pol[pol_index] == 7):
m1 = self._lst[row].get_ts_key(
self._timestamp, "pols")[pol_index][1]
m2 = self._lst[row].get_ts_key(
self._timestamp, "pols")[pol_index][2]
m3 = self._lst[row].get_ts_key(
self._timestamp, "pols")[pol_index][3]
v = m1 + m2 + m3
return f"{v:.4f}"

View File

@ -685,7 +685,7 @@ class ResultsWindow(PamhyrWindow):
my_dict[dict_x["rk"]] = reach.geometry.get_rk()
if "bed_elevation" in y:
my_dict[dict_y["bed_elevation"]] = reach.geometry.get_z_min()
#if envelop and reach.has_sediment():
# if envelop and reach.has_sediment():
if "discharge" in y:
my_dict[dict_y["discharge"]] = list(
map(

View File

@ -46,14 +46,8 @@ from PyQt5.QtWidgets import (
from View.Tools.Plot.PamhyrCanvas import MplCanvas
from View.Tools.Plot.PamhyrToolbar import PamhyrPlotToolbar
from View.Results.PlotCAdisTS import PlotC
from View.Results.PlotMAdisTS import PlotM
from View.Results.PlotSedAdisDt import PlotAdis_dt
from View.Results.PlotSedAdisDx import PlotAdis_dx
from View.Results.PlotTotSedCAdisTS import PlotTotSedC
from View.Results.PlotTotSedEGAdisTS import PlotTotSedEG
from View.Results.PlotTotSedEMAdisTS import PlotTotSedEM
from View.Results.PlotTotSedEDAdisTS import PlotTotSedED
from View.Results.CustomPlot.Plot import CustomPlot
from View.Results.CustomPlot.CustomPlotValuesSelectionDialog import (
@ -111,7 +105,6 @@ class ResultsWindowAdisTS(PamhyrWindow):
self._reach_id = 0
self._profile_id = 0
try:
self._timestamps = sorted(list(self._results.get("timestamps")))
self.set_type_pol()
@ -187,8 +180,6 @@ class ResultsWindowAdisTS(PamhyrWindow):
)
self.plot_layout_cdt = self.find(
QVBoxLayout, "verticalLayout_concentration_dt")
#self.plot_layout_cdt = self.find(
#QVBoxLayout, "verticalLayout_cdt")
self.plot_layout_cdt.addWidget(self.toolbar_cdt)
self.plot_layout_cdt.addWidget(self.canvas_cdt)
@ -199,7 +190,7 @@ class ResultsWindowAdisTS(PamhyrWindow):
profile_id=self._profile_id,
pol_id=self._pol_id,
key="C",
type_pol = self._type_pol[self._pol_id],
type_pol=self._type_pol[self._pol_id],
trad=self._trad,
toolbar=self.toolbar_cdt
)
@ -215,8 +206,6 @@ class ResultsWindowAdisTS(PamhyrWindow):
)
self.plot_layout_cdx = self.find(
QVBoxLayout, "verticalLayout_concentration_dx")
#self.plot_layout_cdx = self.find(
#QVBoxLayout, "verticalLayout_cdx")
self.plot_layout_cdx.addWidget(self.toolbar_cdx)
self.plot_layout_cdx.addWidget(self.canvas_cdx)
@ -227,7 +216,7 @@ class ResultsWindowAdisTS(PamhyrWindow):
profile_id=self._profile_id,
pol_id=self._pol_id,
key="C",
type_pol = self._type_pol[self._pol_id],
type_pol=self._type_pol[self._pol_id],
trad=self._trad,
toolbar=self.toolbar_cdx
)
@ -253,7 +242,7 @@ class ResultsWindowAdisTS(PamhyrWindow):
profile_id=self._profile_id,
pol_id=self._pol_id,
key="M",
type_pol = self._type_pol[self._pol_id],
type_pol=self._type_pol[self._pol_id],
trad=self._trad,
toolbar=self.toolbar_mdx
)
@ -280,7 +269,7 @@ class ResultsWindowAdisTS(PamhyrWindow):
profile_id=self._profile_id,
pol_id=self._pol_id,
key="M",
type_pol = self._type_pol[self._pol_id],
type_pol=self._type_pol[self._pol_id],
trad=self._trad,
toolbar=self.toolbar_mdt
)
@ -312,7 +301,7 @@ class ResultsWindowAdisTS(PamhyrWindow):
profile_id=self._profile_id,
pol_id=0,
key="M",
type_pol = self._type_pol[0],
type_pol=self._type_pol[0],
trad=self._trad,
toolbar=self.toolbar_tdx
)
@ -339,7 +328,7 @@ class ResultsWindowAdisTS(PamhyrWindow):
profile_id=self._profile_id,
pol_id=0,
key="M",
type_pol = self._type_pol[0],
type_pol=self._type_pol[0],
trad=self._trad,
toolbar=self.toolbar_tdt
)
@ -408,7 +397,7 @@ class ResultsWindowAdisTS(PamhyrWindow):
# Action
actions = {
"action_reload": self._reload,
###"action_add": self._add_custom_plot,
# TODO "action_add": self._add_custom_plot,
"action_export": self.export,
}
@ -425,7 +414,7 @@ class ResultsWindowAdisTS(PamhyrWindow):
"raw_data": self._set_current_profile_raw_data,
}
for t in ["reach", "profile", "pollutants"]:###, "raw_data"]:
for t in ["reach", "profile", "pollutants"]:
table = self.find(QTableView, f"tableView_{t}")
table.selectionModel()\
@ -460,7 +449,7 @@ class ResultsWindowAdisTS(PamhyrWindow):
self._table["raw_data"].update(ind)
def update_table_selection_profile(self, ind):
for t in ["profile"]:###, "raw_data"]:
for t in ["profile"]:
table = self.find(QTableView, f"tableView_{t}")
selectionModel = table.selectionModel()
index = table.model().index(ind, 0)
@ -474,7 +463,7 @@ class ResultsWindowAdisTS(PamhyrWindow):
table.scrollTo(index)
def update_table_selection_pol(self, ind):
for t in ["pollutants"]:###, "raw_data"]:
for t in ["pollutants"]:
table = self.find(QTableView, f"tableView_{t}")
selectionModel = table.selectionModel()
index = table.model().index(ind, 0)
@ -487,7 +476,8 @@ class ResultsWindowAdisTS(PamhyrWindow):
)
table.scrollTo(index)
def update(self, reach_id=None, profile_id=None, pol_id=None, timestamp=None):
def update(self, reach_id=None, profile_id=None,
pol_id=None, timestamp=None):
if reach_id is not None:
self.plot_cdt.set_reach(reach_id)
self.plot_cdx.set_reach(reach_id)

View File

@ -102,9 +102,10 @@ class ResultsTranslate(MainTranslate):
self._sub_dict["table_headers_raw_data"] = {
"name": _translate("Results", "Profile"),
}
for i, pol in enumerate(self.pollutants):
self._sub_dict["table_headers_raw_data"][pol + " Concentration"] = pol + "\n Concentration"
self._sub_dict["table_headers_raw_data"][pol + " Mass"] = pol + "\n Mass"
tmp = self._sub_dict["table_headers_raw_data"]
for pol in self.pollutants:
tmp[pol + " Concentration"] = pol + "\n Concentration"
tmp[pol + " Mass"] = pol + "\n Mass"
else:
self._sub_dict["table_headers_raw_data"] = {
"name": _translate("Results", "Profile"),
@ -131,4 +132,3 @@ class ResultsTranslate(MainTranslate):
"unit_M": self._dict["unit_mass"],
"unit_thickness": self._dict["unit_thickness"],
}

View File

@ -145,7 +145,9 @@ class UnitTranslate(CommonWordTranslate):
)
self._dict["unit_froude"] = _translate("Unit", "Froude number")
self._dict["unit_mass"] = _translate("Unit", "Mass (kg)")
self._dict["unit_concentration"] = _translate("Unit", "Concentration (kg/m^3)")
self._dict["unit_concentration"] = _translate(
"Unit", "Concentration (kg/m^3)"
)
class MainTranslate(UnitTranslate):