start work on results buffers

dev_dylan
Theophile Terraz 2026-04-02 11:54:55 +02:00
parent b00cca953e
commit 242df7f648
3 changed files with 20 additions and 0 deletions

View File

@ -219,6 +219,11 @@ class Results(SQLSubModel):
qlog=None, qlog=None,
) )
def bufferize(self, key):
if self.is_valid:
for reach in self._river._reachs:
reach.bufferize(self._meta_data["timestamps"], key)
def timestamps_to_struct(self): def timestamps_to_struct(self):
ts = self._meta_data["timestamps"] ts = self._meta_data["timestamps"]
sf = ">" + ''.join(itertools.repeat("d", len(ts))) sf = ">" + ''.join(itertools.repeat("d", len(ts)))

View File

@ -17,6 +17,7 @@
import struct import struct
import logging import logging
import itertools import itertools
import numpy as np
from tools import flatten from tools import flatten
from functools import reduce from functools import reduce
@ -275,6 +276,7 @@ class Reach(SQLSubModel):
lambda p: p.name[0:8] != 'interpol', self._profiles lambda p: p.name[0:8] != 'interpol', self._profiles
) )
) )
self._buffers = {}
def __len__(self): def __len__(self):
return len(self._profiles) return len(self._profiles)
@ -295,6 +297,10 @@ class Reach(SQLSubModel):
def profile_mask(self): def profile_mask(self):
return self._profile_mask return self._profile_mask
@property
def buffers(self):
return self._buffers
def profile(self, id): def profile(self, id):
return self._profiles[id] return self._profiles[id]
@ -304,6 +310,11 @@ class Reach(SQLSubModel):
def has_sediment(self): def has_sediment(self):
return any(map(lambda profile: profile.has_sediment(), self._profiles)) return any(map(lambda profile: profile.has_sediment(), self._profiles))
def bufferize(self, timestamps, key):
self._buffers[key] = np.zeros((len(timestamps), len(self)))
for i, p in enumerate(self._profiles):
self._buffers[key][:, i] = p.get_key(key)
@classmethod @classmethod
def _db_create(cls, execute, ext=""): def _db_create(cls, execute, ext=""):
return cls._create_submodel(execute) return cls._create_submodel(execute)

View File

@ -1196,6 +1196,10 @@ class Mage8(Mage):
r.set(i, t, "V", v) r.set(i, t, "V", v)
logger.info(f"read_bin: ... end with {len(ts)} timestamp read") logger.info(f"read_bin: ... end with {len(ts)} timestamp read")
results.bufferize("Z")
results.bufferize("Q")
results.bufferize("V")
@timer @timer
def read_gra(self, study, repertory, results, qlog=None, name="0"): def read_gra(self, study, repertory, results, qlog=None, name="0"):
if not study.river.has_sediment(): if not study.river.has_sediment():