This commit is contained in:
2025-09-03 19:03:22 +02:00
parent 9b8bcafda9
commit b0a6be2573

View File

@@ -167,6 +167,7 @@ class Pilatus(PSIDeviceBase, ADBase):
def _poll_array_data(self):
while not self._poll_thread_stop_event.wait(1 / self._poll_rate):
logger.debug("Polling Pilatus array data for preview...")
value = self.image1.array_data.get()
if value is None:
continue
@@ -317,7 +318,7 @@ class Pilatus(PSIDeviceBase, ADBase):
# TODO change to new ANDSTATUS
status_cam = AndStatus(status_hdf, status_cam)
status = AndStatus(status_cam, status_img_written) # , name=f"{self.name}_on_complete")
status.add_callback(self._complete_callback) # Callback that writing was successful
# status.add_callback(self._complete_callback) # Callback that writing was successful
return status
def on_kickoff(self) -> None:
@@ -330,39 +331,43 @@ class Pilatus(PSIDeviceBase, ADBase):
def on_destroy(self) -> None:
"""Called when the device is destroyed. Cleanup resources here."""
self.on_stop()
self._poll_thread_stop_event.set()
if __name__ == "__main__":
pilatus = Pilatus(name="pilatus", prefix="X01DA-ES2-PIL:")
logger.info(f"Calling wait for connection")
# pilatus.wait_for_connection(all_signals=True, timeout=20)
logger.info(f"Connecting to pilatus...")
pilatus.on_connected()
for exp_time, scan_number, n_pnts in zip([0.5, 1.0, 2.0], [1, 2, 3], [30, 20, 10]):
pilatus.scan_info.msg.num_points = n_pnts
pilatus.scan_info.msg.scan_parameters["exposure_time"] = exp_time
pilatus.scan_info.msg.scan_parameters["frames_per_trigger"] = 1
pilatus.scan_info.msg.info["file_components"] = (
f"/sls/x01da/data/p22481/raw/data/S00000-00999/S{scan_number:05d}/S{scan_number:05d}",
"h5",
)
pilatus.on_stage()
logger.info(f"Stage done")
pilatus.on_pre_scan().wait(timeout=5)
logger.info(f"Pre-scan done")
for ii in range(pilatus.scan_info.msg.num_points):
# if ii == 0:
# time.sleep(1)
logger.info(f"Triggering image {ii+1}/{pilatus.scan_info.msg.num_points}")
pilatus.on_trigger().wait()
p = pilatus.preview.get()
if p is not None:
p: DevicePreviewMessage
logger.warning(
f"Preview shape: {p.data.shape}, max: {np.max(p.data)}, min: {np.min(p.data)}, mean: {np.mean(p.data)}"
)
pilatus.on_complete().wait(timeout=5)
logger.info(f"Complete done")
pilatus.on_unstage()
logger.info(f"Unstage done")
try:
pilatus = Pilatus(name="pilatus", prefix="X01DA-ES2-PIL:")
logger.info(f"Calling wait for connection")
# pilatus.wait_for_connection(all_signals=True, timeout=20)
logger.info(f"Connecting to pilatus...")
pilatus.on_connected()
for exp_time, scan_number, n_pnts in zip([0.5, 1.0, 2.0], [1, 2, 3], [30, 20, 10]):
pilatus.scan_info.msg.num_points = n_pnts
pilatus.scan_info.msg.scan_parameters["exposure_time"] = exp_time
pilatus.scan_info.msg.scan_parameters["frames_per_trigger"] = 1
pilatus.scan_info.msg.info["file_components"] = (
f"/sls/x01da/data/p22481/raw/data/S00000-00999/S{scan_number:05d}/S{scan_number:05d}",
"h5",
)
pilatus.on_stage()
logger.info(f"Stage done")
pilatus.on_pre_scan().wait(timeout=5)
logger.info(f"Pre-scan done")
for ii in range(pilatus.scan_info.msg.num_points):
# if ii == 0:
# time.sleep(1)
logger.info(f"Triggering image {ii+1}/{pilatus.scan_info.msg.num_points}")
pilatus.on_trigger().wait()
p = pilatus.preview.get()
if p is not None:
p: DevicePreviewMessage
logger.warning(
f"Preview shape: {p.data.shape}, max: {np.max(p.data)}, min: {np.min(p.data)}, mean: {np.mean(p.data)}"
)
pilatus.on_complete().wait(timeout=5)
logger.info(f"Complete done")
pilatus.on_unstage()
logger.info(f"Unstage done")
finally:
pilatus.on_destroy()