|
18 | 18 |
|
19 | 19 | import math |
20 | 20 | import time |
21 | | -from datetime import datetime |
22 | | -from pathlib import Path |
23 | 21 |
|
24 | 22 | import numpy as np |
25 | 23 | import tango |
@@ -250,63 +248,35 @@ def register_stage(self): |
250 | 248 | # ------------------------------------------------------------------ |
251 | 249 | # Internal acquisition helpers |
252 | 250 | # ------------------------------------------------------------------ |
253 | | - def _persist(self, adorned, acquisition_type, detector, data_server, dataset_name="image"): |
254 | | - """Save acquired images in the format requested by the SCAN device. |
255 | | - """ |
256 | | - scan = self._detector_proxies.get("scan") |
257 | | - fmt = scan.output_format if scan is not None else ".h5" # ".h5" default |
258 | | - if fmt == ".h5": |
259 | | - return save_acquisition(self, data_server, acquisition_type, detector, adorned, dataset_name=dataset_name) |
260 | | - if fmt != ".tiff": |
261 | | - raise ValueError(f"Unsupported output_format {fmt!r}; expected '.h5' or '.tiff'") |
262 | | - |
263 | | - # .tiff → AutoScript native save, one file per detector sharing one stamp |
264 | | - images = list(adorned) if isinstance(adorned, (list, tuple)) else [adorned] |
265 | | - detectors = list(detector) if isinstance(detector, (list, tuple)) else [detector] |
266 | | - if len(images) != len(detectors): |
267 | | - raise ValueError(f"Got {len(images)} images for {len(detectors)} detector(s) {detectors}") |
268 | | - |
269 | | - save_dir = data_server.save_path if data_server is not None else DEFAULT_ACQUISITION_DIR |
270 | | - directory = Path(save_dir).expanduser() |
271 | | - directory.mkdir(parents=True, exist_ok=True) |
272 | | - stamp = datetime.now().strftime("%Y%m%dT%H%M%S%f") |
273 | | - stem = f"{acquisition_type}_{stamp}" |
274 | | - # AutoScript returns images in the requested detector order (assumed; verify on hardware) |
275 | | - for img, det in zip(images, detectors): |
276 | | - path = directory / f"{stem}_{det}.tiff" |
277 | | - img.save(str(path)) |
278 | | - if data_server is not None: |
279 | | - data_server.register_path(str(path)) |
280 | | - return stem |
281 | | - |
282 | 251 | def _acquire_scanned_image( |
283 | 252 | self, |
284 | 253 | imsize: int, |
285 | 254 | dwell_time: float, |
286 | 255 | detector_list: list[str] = ["haadf"], |
287 | 256 | scan_region: list[float] = [0.0, 0.0, 1.0, 1.0], |
| 257 | + output_format: str = ".h5", |
288 | 258 | ) -> str: |
289 | 259 | """ |
290 | | - Call AutoScript scanned image acquisition, save one HDF5 file, and return its DATA/Tiled key. |
| 260 | + Call AutoScript scanned image acquisition, save it, and return its DATA/Tiled key. |
291 | 261 | """ |
292 | 262 | detector_list = [d.upper() for d in detector_list] |
293 | 263 | settings = StemAcquisitionSettings(dwell_time=dwell_time, detector_types=detector_list, size=imsize, region=Region(RegionCoordinateSystem.RELATIVE, Rectangle(*scan_region))) |
294 | 264 | adorned = self._microscope.acquisition.acquire_stem_images_advanced(settings) |
295 | 265 | if not isinstance(adorned, list): |
296 | 266 | adorned = [adorned] |
297 | 267 | data_server = self._detector_proxies.get("data") |
298 | | - return self._persist(adorned, "stem_image", detector_list, data_server) |
| 268 | + return save_acquisition(self, data_server, "stem_image", detector_list, adorned, output_format=output_format) |
299 | 269 |
|
300 | 270 |
|
301 | 271 | def _acquire_camera_image(self, imsize: int, exposure_time: float, detector: str, readout_area: str) -> str: |
302 | 272 | """ |
303 | | - Call AutoScript acquisition, save the adorned image, and return its path. |
| 273 | + Call AutoScript acquisition, save the adorned image, and return its DATA/Tiled key. |
304 | 274 | this is the advanced version |
305 | 275 | """ |
306 | 276 | settings = CameraAcquisitionSettings(camera_detector=detector, size=imsize, exposure_time=exposure_time, fixed_readout_area=readout_area, frame_combining=1) |
307 | 277 | adorned = self._microscope.acquisition.acquire_camera_image_advanced(settings) |
308 | 278 | data_server = self._detector_proxies.get("data") |
309 | | - return self._persist(adorned, "camera_image", str(detector), data_server) |
| 279 | + return save_acquisition(self, data_server, "camera_image", str(detector), adorned) |
310 | 280 |
|
311 | 281 | def _acquire_scanned_data_advanced(self, imsize: int, dwell_time: float, detector: str, scan_region: list[float]) -> str: |
312 | 282 | """ |
|
0 commit comments