From 956c9ece2416e568542a162093c65c4049758954 Mon Sep 17 00:00:00 2001 From: Gilbert Montague Date: Tue, 8 Jul 2025 17:21:55 -0700 Subject: [PATCH] Feature: add lsb saving support for hdf5 broadband --- synapse/cli/offline_hdf5_plotter.py | 3 ++- synapse/cli/streaming.py | 31 +++++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/synapse/cli/offline_hdf5_plotter.py b/synapse/cli/offline_hdf5_plotter.py index a1db238..ca6a552 100644 --- a/synapse/cli/offline_hdf5_plotter.py +++ b/synapse/cli/offline_hdf5_plotter.py @@ -157,8 +157,9 @@ def load_h5_data(data_file, console, time_range=None): f"[red]⚠️ Found {len(gaps_found)} gaps in sequence numbers:[/red]" ) for gap in gaps_found: + gap_in_seconds = gap["gap_size"] / sample_rate console.print( - f"[red] Index {gap['index']}: Expected {gap['expected']}, got {gap['actual']} (gap of {gap['gap_size']})[/red]" + f"[red] Index {gap['index']}: Expected {gap['expected']}, got {gap['actual']} (gap of {gap_in_seconds:.2f}s)[/red]" ) else: console.print( diff --git a/synapse/cli/streaming.py b/synapse/cli/streaming.py index ad3df6d..9c9c7b7 100644 --- a/synapse/cli/streaming.py +++ b/synapse/cli/streaming.py @@ -13,6 +13,7 @@ import synapse as syn from synapse.api.status_pb2 import DeviceState, StatusCode +from synapse.api.node_pb2 import NodeType from synapse.client.taps import Tap from synapse.utils.proto import load_device_config from synapse.api.datatype_pb2 import BroadbandFrame @@ -249,13 +250,18 @@ def get_stats(self): } def set_attributes( - self, sample_rate_hz: float, channels: list, session_description: str = "" + self, + sample_rate_hz: float, + channels: list, + broadband_lsb_uv: float, + session_description: str = "", ): """Set HDF5 attributes""" self.file.attrs["sample_rate_hz"] = sample_rate_hz if session_description: self.file.attrs["session_description"] = session_description self.file.attrs["session_start_time"] = datetime.now().isoformat() + self.file.attrs["lsb_uv"] = broadband_lsb_uv device_group = self.file.create_group("general/device") device_group.attrs["device_type"] = "SciFi" @@ -879,6 +885,14 @@ def stream_data(broadband_tap, writer, plotter, monitor, first_frame, console, a console.print("=" * 60) +def get_broadband_node_status(device_info): + """Get the broadband node status from the device info""" + for node in device_info.status.signal_chain.nodes: + if node.type == NodeType.kBroadbandSource: + return node.broadband_source.status + return None + + def read(args): console = Console() @@ -932,8 +946,21 @@ def read(args): # Setup our HDF5 writer if output is requested writer = None if args.output: + # Get the latest info on the device + device_info = device.info() + broadband_node = get_broadband_node_status(device_info) + if broadband_node is None: + console.print( + "[bold red]Failed to get broadband node, cannot save data[/bold red]" + ) + return + broadband_lsb_uv = broadband_node.electrode.lsb_uV writer = BroadbandFrameWriter(args.output) - writer.set_attributes(sample_rate_hz=sample_rate, channels=available_channels) + writer.set_attributes( + sample_rate_hz=sample_rate, + channels=available_channels, + broadband_lsb_uv=broadband_lsb_uv, + ) writer.start() console.log("[cyan]Using threaded writer for serializing data[/cyan]")