diff --git a/debye_bec/devices/pilatus/pilatus.py b/debye_bec/devices/pilatus/pilatus.py index a673066..cbaed1e 100644 --- a/debye_bec/devices/pilatus/pilatus.py +++ b/debye_bec/devices/pilatus/pilatus.py @@ -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()