From dca2d1fabba89cf07c1e233bfb06a66f39749c53 Mon Sep 17 00:00:00 2001 From: Richard Bowman Date: Mon, 15 Jan 2024 20:27:35 +0000 Subject: [PATCH] Improve scan naming logic and type hints Removed an unnecessary `Optional` and removed the `scan_` prefix from scans that have a non-empty name. I also added a closing ` to a logging statement. --- .../things/smart_scan.py | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/openflexure_microscope_server/things/smart_scan.py b/src/openflexure_microscope_server/things/smart_scan.py index 183c6a90..85240219 100644 --- a/src/openflexure_microscope_server/things/smart_scan.py +++ b/src/openflexure_microscope_server/things/smart_scan.py @@ -341,12 +341,24 @@ class SmartScanThing(Thing): scan_name = self.latest_scan_name return os.path.join(self.scans_folder_path, scan_name) - def new_scan_folder(self, scan_name: Optional[str]="") -> str: - """Create a new empty folder, into which we can save scan images""" + def new_scan_folder(self, scan_name: str="scan") -> str: + """Create a new empty folder, into which we can save scan images + + The folder will be named `{scan_name}_000001/` where the number is + zero-padded to be 6 digits long (to allow correct sorting if the + scans are ordered alphanumerically). + + Note that if you have discontinuous numbering (e.g. you've got scans + numbered 1 through 10, but you deleted scan 5), then the gaps will + get filled in - so there's no guarantee, for now, that the numbers + will correspond to order of creation. This may change in the future. + """ if not os.path.exists(self.scans_folder_path): os.makedirs(self.scans_folder_path) + if not scan_name: + scan_name = "scan" for j in range(999999): - folder_path = os.path.join(self.scans_folder_path, f"scan_{scan_name}{j:06}") + folder_path = os.path.join(self.scans_folder_path, f"{scan_name}_{j:06}") if not os.path.exists(folder_path): os.makedirs(folder_path) self._latest_scan_name = os.path.basename(folder_path) @@ -364,7 +376,7 @@ class SmartScanThing(Thing): csm: CSMDep, background_detect: BackgroundDep, recentre: RecentreStage, - scan_name: Optional[str] + scan_name: str="", ): """Move the stage to cover an area, taking images that can be tiled together.