diff --git a/superxas_bec/devices/timepix/timepix.py b/superxas_bec/devices/timepix/timepix.py index 3f593b9..1535541 100644 --- a/superxas_bec/devices/timepix/timepix.py +++ b/superxas_bec/devices/timepix/timepix.py @@ -325,7 +325,19 @@ class Timepix(PSIDeviceBase, TimePixControl): # Prepare backend for TimePixFly self.backend.on_connected() # Register the callback for processing data received by the backend - self.backend.add_callback(self.msg_buffer_callback) + # self.backend.add_callback(self.msg_buffer_callback) + self._msg_dump = {} + + def _on_msg_received(start_frame, data_frame, end_frame): + """Callback""" + ii = len(self._msg_dump) + self._msg_dump[ii] = { + "start_frame": start_frame, + "data_frame": data_frame, + "end_frame": end_frame, + } + + self.backend.add_callback(_on_msg_received) def on_stage(self) -> DeviceStatus | StatusBase | None: """ @@ -339,6 +351,7 @@ class Timepix(PSIDeviceBase, TimePixControl): f"Exposure time {exp_time} must be greater than readout time {self._readout_time}." ) num_images = self.scan_info.msg.scan_parameters.get("frames_per_trigger", 1) + logger.info(f"Setting exposure time to {exp_time} and number of images to {num_images}") self.cam.acquire_time.set(exp_time - self._readout_time).wait(timeout=self._pv_timeout) self.cam.acquire_period.set(exp_time).wait(timeout=self._pv_timeout) @@ -459,7 +472,7 @@ if __name__ == "__main__": # pragma: no cover timepix.wait_for_connection(all_signals=True, timeout=10) timepix.on_connected() print("Timepix connected and initialized.") - for exp_time, frames_per_trigger in zip([0.8, 0.5, 0.1], [10, 15, 20]): + for exp_time, frames_per_trigger in zip([10, 1], [1, 5]): time.sleep(0.5) print( f"Sleeping for 0.5 seconds before starting the scan with exp_time={exp_time} " @@ -491,20 +504,24 @@ if __name__ == "__main__": # pragma: no cover if time.time() - start_time > 30: print("Breaking loop manually after 30 seconds of waiting.") break - print(f"Received number of messages: {len(timepix.backend.msg_buffer)}") - if timepix.xes_data.get() is not None: - # msgs.append(timepix.backend.msg_buffer) - print( - f"Events in energy rois {timepix.xes_data.get().signals[timepix.xes_data.name]['value'].sum()}" - ) - events = timepix.xes_info.get().signals[ - f"{timepix.xes_info.name}_tds_total_events" - ]["value"] - print(f"Total number of events: {events}") + + # if timepix.xes_data.get() is not None: + # # msgs.append(timepix.backend.msg_buffer) + # print( + # f"Events in energy rois {timepix.xes_data.get().signals[timepix.xes_data.name]['value'].sum()}" + # ) + # events = timepix.xes_info.get().signals[ + # f"{timepix.xes_info.name}_tds_total_events" + # ]["value"] + # print(f"Total number of events: {events}") status = timepix.complete() print("Waiting for timepix to complete.") status.wait(timeout=10) print("Timepix scan completed.") + n_messages = len(timepix._msg_dump) + logger.warning( + f"Received new messages: Length of Buffer is {n_messages}, last message {timepix._msg_dump.get(n_messages-1, 'N/A') if n_messages>0 else 'N/A'}" + ) timepix.unstage() print("Timepix unstaged.") diff --git a/superxas_bec/devices/timepix/timepix_fly_client/timepix_fly_backend.py b/superxas_bec/devices/timepix/timepix_fly_client/timepix_fly_backend.py index 0f28448..259d976 100644 --- a/superxas_bec/devices/timepix/timepix_fly_client/timepix_fly_backend.py +++ b/superxas_bec/devices/timepix/timepix_fly_client/timepix_fly_backend.py @@ -426,6 +426,7 @@ class TimepixFlyBackend: def run_msg_callbacks(self): """Run callbacks if EndFrame message is received.""" + # TODO start_frame = self.msg_buffer[0] end_frame = self.msg_buffer[-1] data_frames = self.msg_buffer[1:-1] diff --git a/superxas_bec/devices/timepix/timepix_fly_client/timepix_fly_client.py b/superxas_bec/devices/timepix/timepix_fly_client/timepix_fly_client.py index b44bf1e..435c1aa 100644 --- a/superxas_bec/devices/timepix/timepix_fly_client/timepix_fly_client.py +++ b/superxas_bec/devices/timepix/timepix_fly_client/timepix_fly_client.py @@ -202,6 +202,7 @@ class TimepixFlyClient: except ConnectionRefusedError: if time.time() - start_time > timeout: content = traceback.format_exc() + logger.error(f"Connection timed out: {content}") raise TimeoutError( f"Timeout while waiting for connection to TimePixFly WebSocket server on {self.ws_url}" )