From 61c387720201363e7040b8dd27c905a2e0afe3fe Mon Sep 17 00:00:00 2001 From: Chish36 Date: Fri, 25 Jul 2025 08:58:04 +0100 Subject: [PATCH] Removed the need for steps_generate function --- .../things/stage_measure.py | 53 +++++++++++-------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/src/openflexure_microscope_server/things/stage_measure.py b/src/openflexure_microscope_server/things/stage_measure.py index 0a490cb8..8f056b52 100644 --- a/src/openflexure_microscope_server/things/stage_measure.py +++ b/src/openflexure_microscope_server/things/stage_measure.py @@ -56,22 +56,6 @@ def dict_generate(fov_perc: int, stream_resolution: list[int], direction: int, f } return xy_dict -def steps_generate(small_step: int, z_perc: int, big_step: int, direction: int, stream_resolution: list) -> tuple: - '''Creates all required dictionaries of all necessary step sizes.''' - step_sizes_big = dict_generate(big_step, stream_resolution, direction) - step_sizes_small = dict_generate(small_step, stream_resolution, direction) - minimum_offset_small = dict_generate( - small_step, stream_resolution, direction, factor=0.65 - ) - z_steps = dict_generate(z_perc, stream_resolution, direction) - minimum_offset_z = dict_generate(z_perc, stream_resolution, direction, factor=0.65) - wrong_axis_max_small = dict_generate( - small_step, stream_resolution, direction, factor=0.1 - ) - wrong_axis_max_z = dict_generate(z_perc, stream_resolution, direction, factor=0.1) - - return step_sizes_small, minimum_offset_small, z_steps, minimum_offset_z, step_sizes_big, wrong_axis_max_small, wrong_axis_max_z - def predict_z(positions: list, axis: str, relative_move: float, stage: StageDep, csm: CSMDep) -> float: """Predicts the next z position for a 'big' move using an array of previous positions. This avoids long autofocuses and reduces the possibility of colliding with the sample. @@ -198,15 +182,20 @@ class RangeofMotionThing(Thing): # Generate required dictionaries for step sizes and minimum offsets stream_resolution = cam.stream_resolution - step_sizes_small, minimum_offset_small, z_steps, minimum_offset_z, step_sizes_big, wrong_axis_max_small, wrong_axis_max_z = steps_generate(20, 50, 200, direction, stream_resolution=stream_resolution) + small_step = 20 + medium_step = 50 + big_step = 200 + + minimum_offset_small = dict_generate(small_step, stream_resolution, direction, factor=0.65) + wrong_axis_max_small = dict_generate(small_step, stream_resolution, direction, factor=0.1) + wrong_axis_max_z = dict_generate(medium_step, stream_resolution, direction, factor=0.1) + step_sizes_big = dict_generate(big_step, stream_resolution, direction) delta = { 'x':0, 'y':0 } - logger.info(f"Using the follwing steps: {step_sizes_small, minimum_offset_small, z_steps, minimum_offset_z, step_sizes_big}") - parasitic_motion = False stage_coords.append(stage.position) @@ -216,7 +205,17 @@ class RangeofMotionThing(Thing): # Medium sized steps for loop in range(5): image1 = cv2.resize(np.array(Image.open(cam.grab_jpeg().open())), dsize=(0,0), fx= 1, fy= 1) - delta, offset, focus_data, wrong_axis = move_and_measure(step_size = z_steps, axis = axis, delta = delta, image1 = image1, autofocus_proc = True, focus_data = focus_data, csm = csm, autofocus = autofocus, cam = cam) + delta, offset, focus_data, wrong_axis = move_and_measure( + step_size=dict_generate(medium_step, stream_resolution, direction), + axis=axis, + delta=delta, + image1=image1, + autofocus_proc=True, + focus_data=focus_data, + csm=csm, + autofocus=autofocus, + cam=cam, + ) logger.info(f"Offset measured as {delta[axis]}") stage_coords.append(stage.position) cor_lat_steps.append(offset) @@ -252,7 +251,19 @@ class RangeofMotionThing(Thing): # Turn into function for loop in range(3): image1 = cv2.resize(np.array(Image.open(cam.grab_jpeg().open())), dsize=(0,0), fx= 1, fy= 1) - delta, offset, focus_data, wrong_axis = move_and_measure(step_size = step_sizes_small, axis = axis, delta = delta, image1 = image1, autofocus_proc = False, focus_data = focus_data, csm = csm, autofocus = autofocus, cam = cam) + delta, offset, focus_data, wrong_axis = move_and_measure( + step_size=dict_generate( + small_step, stream_resolution, direction + ), + axis=axis, + delta=delta, + image1=image1, + autofocus_proc=False, + focus_data=focus_data, + csm=csm, + autofocus=autofocus, + cam=cam, + ) logger.info(f"Offset measured as {delta[axis]}") while np.abs(delta[axis]) < np.abs(minimum_offset_small[axis]) and failure_count < 3: