diff --git a/src/Model/Results/River/River.py b/src/Model/Results/River/River.py index 204e0048..a8a6de24 100644 --- a/src/Model/Results/River/River.py +++ b/src/Model/Results/River/River.py @@ -18,6 +18,7 @@ import struct import logging import itertools +from tools import flatten from functools import reduce from datetime import datetime @@ -64,7 +65,7 @@ class Profile(SQLSubModel): def get_key(self, key): res = list( - map(lambda ts: self._data[ts][key], self._data) + map(lambda ts: self._data[ts][key], sorted(self._data)) ) return res @@ -146,8 +147,34 @@ class Profile(SQLSubModel): else: new_data = new[profile] - sf = ">" + ''.join(itertools.repeat("f", len_data)) - values = struct.unpack(sf, data) + if key in ["Z", "Q", "V"]: + sf = ">" + ''.join(itertools.repeat("f", len_data)) + len_values = len(values) + values = struct.unpack(sf, data) + elif key in ["sl"]: + nb_layer = len_data / len(timestamps) / 3 + sf = ">" + ''.join(itertools.repeat("f", len_data)) + values = struct.unpack(sf, data) + + tmp_values = [[]] + for value in values: + t = tmp_values[-1] + if len(t) < 3: + t.append(value) + else: + tmp_values.append([value]) + + tmp_values = list(map(tuple, tmp_values)) + + values = [[]] + for value in tmp_values: + t = values[-1] + if len(t) < nb_layer: + t.append(value) + else: + values.append([value]) + + values = list(map(lambda x: [x], values)) for timestamp, value in zip(timestamps, values): new_data.set(timestamp, key, value) @@ -177,13 +204,24 @@ class Profile(SQLSubModel): logger.debug(f"{keys}...") for key in keys: values = self.get_key(key) - if any(filter(lambda x: type(x) in [tuple, list], values)): - logger.debug(f"{key} : {len(values)} {values[0]}") + + if key in ["Z", "Q", "V"]: + values = list(map(float, values)) + + sf = ">" + ''.join(itertools.repeat("f", len(values))) + len_values = len(values) + elif key is "sl": + values = flatten( + flatten( + map(lambda v: list( + map(lambda t: list( + map(float, t)), v[0])), + values))) + len_values = len(values) + sf = ">" + ''.join(itertools.repeat("f", len_values)) + else: continue - values = list(map(float, values)) - - sf = ">" + ''.join(itertools.repeat("f", len(values))) data_bytes = struct.pack(sf, *values) execute( @@ -195,7 +233,7 @@ class Profile(SQLSubModel): pid, result, data["reach"].pamhyr_id, self._profile.pamhyr_id, - key, len(values), data_bytes, + key, len_values, data_bytes, self._owner_scenario ) diff --git a/src/View/Results/PlotAC.py b/src/View/Results/PlotAC.py index 895e69ee..d3b9eb26 100644 --- a/src/View/Results/PlotAC.py +++ b/src/View/Results/PlotAC.py @@ -136,7 +136,6 @@ class PlotAC(PamhyrPlot): ) def draw_gl(self): - results = self.results[self._current_res_id] reach = results.river.reach(self._current_reach_id) profile = reach.profile(self._current_profile_id)