DAQ: changes to ALC to handle Sample ShortInfo instead of sample.db_id. Debugging of ALC logic in progress

This commit is contained in:
2026-04-22 10:11:21 +02:00
parent 0d0953c74c
commit 39e53d65cd
+39 -39
View File
@@ -1742,45 +1742,45 @@ class AareDAQ:
)
self.save_screenshot_db(sample_id, f"{sample_id}_{angle}_{zoom_value:.0f}")
if targets_found_this_attempt == 0:
logger.error(f"No targets found in this attempt {attempt}")
raise LoopCenteringFailed
else:
# if targets_found_this_attempt == 0:
# logger.error(f"No targets found in this attempt {attempt}")
# raise LoopCenteringFailed
#
# else:
# if targets_found_this_attempt >= len(base_angles):
# logger.debug(
# f"sucessfully found {targets_found_this_attempt} targets in attempt {attempt + 1} ")
# break
#if found_flag is not None and found_angle is not None:
logger.debug(f"found a target at angle {found_angle} in attempt {attempt + 1}")
base_angles = (0, 90)
logger.debug(f"new base angles: {base_angles}")
attempt += 1
logger.debug(f"attempt {attempt} of {max_attempt}")
if attempt >= max_attempt:
if targets_found_this_attempt >= len(base_angles):
logger.debug(
f"sucessfully found {targets_found_this_attempt} targets in attempt {attempt + 1} ")
break
if found_flag is not None and found_angle is not None:
logger.debug(f"found a target at angle {found_angle} in attempt {attempt + 1}")
base_angles = (found_angle, found_angle + 45)
logger.debug(f"new base angles: {base_angles}")
attempt += 1
logger.debug(f"attempt {attempt} of {max_attempt}")
if attempt >= max_attempt:
logger.error(f"{attempt} exceeds max attempts {max_attempt}")
raise LoopCenteringFailed
logger.error(f"{attempt} exceeds max attempts {max_attempt}")
logger.debug(f"time to loop center: {time.perf_counter() - start}")
raise LoopCenteringFailed
#i += 1
logger.debug("alc success")
logger.debug(f"current sample: {self.__cfg.current_sample}, sample_id of scan: {sample_id}")
self.__aare.sample_centered(self.__cfg.current_sample)
if sample_id is not None:
logger.info(f"sample {sample_id} centered")
self.save_screenshot_db(sample_id, f"{sample_id}_centered")
self._append_smargon_trace(sample_id=sample_id, event="alc_success")
logger.debug(f"time to loop center: {time.perf_counter() - start}")
return True
return LoopCenteringResult(success=True)
except Exception as e:
total_detections = sum(found_classes_count.values())
if total_detections == 0:
logger.error("ALC: No objects found in any zoom")
self.__aare.alc_failed(self.sample, alc_comment="No objects detected")
alc_comment="No objects detected"
else:
self.__aare.alc_failed(
self.sample,
alc_comment=(
alc_comment = (
"Failed to centre but detected objects - "
f"Crystal: {found_classes_count.get(2, 0)}, "
f"Loop_face: {found_classes_count.get(3, 0)}, "
@@ -1788,27 +1788,23 @@ class AareDAQ:
f"Pin: {found_classes_count.get(1, 0)}, "
f"Ice: {found_classes_count.get(4, 0)}, "
f"Needle: {found_classes_count.get(5, 0)}"
),
)
logger.error("Failed to centre but detected objects - "
f"Crystal: {found_classes_count.get(2,0)}, "
f"Loop_face: {found_classes_count.get(3,0)}, "
f"Loop_all: {found_classes_count.get(0,0)}, "
f"Pin: {found_classes_count.get(1,0)}, "
f"Ice: {found_classes_count.get(4,0)}, "
f"Needle: {found_classes_count.get(5,0)}")
logger.error(traceback.format_exc())
)
logger.error(f"ALC exception: {alc_comment}")
logger.error(traceback.format_exc())
logger.error(f"Error in loop centering: {e}")
return False
return LoopCenteringResult(
success=False,
comment=alc_comment,
error=e
)
def auto_loop_center(self, sample_id: int | None = None) -> float:
def auto_loop_center(self, sample:Optional[SampleShortInfo]=None) -> float:
"""
Automatically center the loop using ML-based detection.
This performs a multi-step sequence including rotation and centering.
Args:
sample_id: Optional database ID of the sample. If None, uses current sample.
sample: the current SampleShortInfo. If None, the current sample (self.sample) is used.
Returns:
Time taken for the centering process (seconds)
@@ -1819,10 +1815,14 @@ class AareDAQ:
start = time.perf_counter()
try:
self.__cfg.try_set_busy(timeout=360)
if sample_id is None:
sample_id = self.__cfg.current_sample.db_id
if sample is None:
if self.sample is None:
raise LoopCenteringFailed("No sample available for loop centering."
"If you have mounted a manual sample,"
"please add it in the manual sample panel.")
sample = self.sample
if not self._execute_loop_centering(sample_id):
if not self._execute_loop_centering(sample):
raise LoopCenteringFailed
self.__cfg.state_busy = False