From ea7adfd78559733ae46bc49e1aab5eee4c1f03fd Mon Sep 17 00:00:00 2001 From: Dominik Werder Date: Fri, 12 May 2023 12:40:36 +0200 Subject: [PATCH] Support for time binning in ingest --- items_2/src/binsxbindim0.rs | 24 +++++++++++++++++++++--- items_2/src/eventsxbindim0.rs | 2 +- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/items_2/src/binsxbindim0.rs b/items_2/src/binsxbindim0.rs index c7df7d4..4c5d735 100644 --- a/items_2/src/binsxbindim0.rs +++ b/items_2/src/binsxbindim0.rs @@ -51,7 +51,7 @@ macro_rules! trace4 { pub struct BinsXbinDim0 { ts1s: VecDeque, ts2s: VecDeque, - pub counts: VecDeque, + counts: VecDeque, mins: VecDeque, maxs: VecDeque, avgs: VecDeque, @@ -106,6 +106,10 @@ impl BinsXbinDim0 { } } + pub fn counts(&self) -> &VecDeque { + &self.counts + } + pub fn push(&mut self, ts1: u64, ts2: u64, count: u64, min: NTY, max: NTY, avg: f32) { self.ts1s.push_back(ts1); self.ts2s.push_back(ts2); @@ -837,7 +841,7 @@ impl TimeBinned for BinsXbinDim0 { fn to_simple_bins_f32(&mut self) -> Box { use mem::replace; - let ret = BinsXbinDim0:: { + let ret = super::binsdim0::BinsDim0:: { ts1s: replace(&mut self.ts1s, VecDeque::new()), ts2s: replace(&mut self.ts2s, VecDeque::new()), counts: replace(&mut self.counts, VecDeque::new()), @@ -850,6 +854,20 @@ impl TimeBinned for BinsXbinDim0 { } fn drain_into_tb(&mut self, dst: &mut dyn TimeBinned, range: Range) -> Result<(), Error> { - todo!() + // TODO as_any and as_any_mut are declared on unrelated traits. Simplify. + if let Some(dst) = dst.as_any_mut().downcast_mut::() { + // TODO make it harder to forget new members when the struct may get modified in the future + dst.ts1s.extend(self.ts1s.drain(range.clone())); + dst.ts2s.extend(self.ts2s.drain(range.clone())); + dst.counts.extend(self.counts.drain(range.clone())); + dst.mins.extend(self.mins.drain(range.clone())); + dst.maxs.extend(self.maxs.drain(range.clone())); + dst.avgs.extend(self.avgs.drain(range.clone())); + Ok(()) + } else { + let type_name = any::type_name::(); + error!("downcast to {} FAILED", type_name); + Err(Error::with_msg_no_trace(format!("downcast to {} FAILED", type_name))) + } } } diff --git a/items_2/src/eventsxbindim0.rs b/items_2/src/eventsxbindim0.rs index de50a76..c3c1a18 100644 --- a/items_2/src/eventsxbindim0.rs +++ b/items_2/src/eventsxbindim0.rs @@ -524,7 +524,7 @@ impl TimeBinner for EventsXbinDim0TimeBinner { error!("{}::push_in_progress bins.len() {}", Self::type_name(), bins.len()); return; } else { - if push_empty || bins.counts[0] != 0 { + if push_empty || bins.counts()[0] != 0 { match self.ready.as_mut() { Some(ready) => { ready.append_all_from(&mut bins);