This commit is contained in:
2025-09-11 17:11:55 +02:00
parent 04c556c4c9
commit 46b9a7ed72
3 changed files with 31 additions and 12 deletions
+29 -12
View File
@@ -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.")
@@ -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]
@@ -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}"
)