Adjust data types and remove need to reset tracker
This commit is contained in:
parent
9fe6ad8efb
commit
23c4ac6c18
1 changed files with 21 additions and 45 deletions
|
|
@ -24,7 +24,6 @@ import numpy.typing as npt
|
||||||
|
|
||||||
from camera_stage_mapping import fft_image_tracking
|
from camera_stage_mapping import fft_image_tracking
|
||||||
import labthings_fastapi as lt
|
import labthings_fastapi as lt
|
||||||
from labthings_fastapi.types.numpy import DenumpifyingDict
|
|
||||||
|
|
||||||
from openflexure_microscope_server.utilities import quadratic
|
from openflexure_microscope_server.utilities import quadratic
|
||||||
|
|
||||||
|
|
@ -48,6 +47,7 @@ BIG_STEP = 200
|
||||||
class RomDataTracker:
|
class RomDataTracker:
|
||||||
"""Class for tracking range of motion data."""
|
"""Class for tracking range of motion data."""
|
||||||
|
|
||||||
|
# TODO: Find out what these variable are
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
stage_coords: Optional[list[dict[str, int]]] = None,
|
stage_coords: Optional[list[dict[str, int]]] = None,
|
||||||
|
|
@ -64,11 +64,6 @@ class RomDataTracker:
|
||||||
self.stage_coords.append(current_pos)
|
self.stage_coords.append(current_pos)
|
||||||
self.cor_lat_steps.append(cor)
|
self.cor_lat_steps.append(cor)
|
||||||
|
|
||||||
def reset_tracker(self) -> None:
|
|
||||||
"""Empty the rom tracker."""
|
|
||||||
self.stage_coords.clear()
|
|
||||||
self.cor_lat_steps.clear()
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class RomDeps:
|
class RomDeps:
|
||||||
|
|
@ -366,33 +361,12 @@ def _motion_detection(
|
||||||
return rom_deps.stage.position
|
return rom_deps.stage.position
|
||||||
|
|
||||||
|
|
||||||
def _collate_data(data: dict, total_time: float, csm: CSMDep) -> dict[str, Any]:
|
|
||||||
"""Collate and calculate all useful data from ROM test.
|
|
||||||
|
|
||||||
:param data: Dictionary created from ROM test.
|
|
||||||
:param total_time: Total time of the range of motion test.
|
|
||||||
:param csm: A direct_thing_client dependency for camera stage mapping.
|
|
||||||
"""
|
|
||||||
x_range = abs(
|
|
||||||
data["positive x"]["final_position"]["x"]
|
|
||||||
- data["negative x"]["final_position"]["x"]
|
|
||||||
)
|
|
||||||
y_range = abs(
|
|
||||||
data["positive y"]["final_position"]["y"]
|
|
||||||
- data["negative y"]["final_position"]["y"]
|
|
||||||
)
|
|
||||||
step_range = [x_range, y_range]
|
|
||||||
|
|
||||||
data["Time"] = total_time
|
|
||||||
data["CSM Matrix"] = csm.image_to_stage_displacement_matrix
|
|
||||||
data["Step Range"] = step_range
|
|
||||||
return data
|
|
||||||
|
|
||||||
|
|
||||||
class RangeofMotionThing(lt.Thing):
|
class RangeofMotionThing(lt.Thing):
|
||||||
"""A class used to measure the range of motion of the stage in X and Y."""
|
"""A class used to measure the range of motion of the stage in X and Y."""
|
||||||
|
|
||||||
last_calibration = lt.ThingSetting(initial_value=None, model=dict, readonly=True)
|
calibrated_range = lt.ThingSetting(
|
||||||
|
initial_value=None, model=Optional[list[int, int]], readonly=True
|
||||||
|
)
|
||||||
|
|
||||||
def rom_axis(
|
def rom_axis(
|
||||||
self,
|
self,
|
||||||
|
|
@ -482,6 +456,7 @@ class RangeofMotionThing(lt.Thing):
|
||||||
direction=direction,
|
direction=direction,
|
||||||
rom_deps=rom_deps,
|
rom_deps=rom_deps,
|
||||||
)
|
)
|
||||||
|
|
||||||
rom_data.stage_coords[np.shape(np.array(rom_data.stage_coords))[0] - 1] = (
|
rom_data.stage_coords[np.shape(np.array(rom_data.stage_coords))[0] - 1] = (
|
||||||
final_pos
|
final_pos
|
||||||
)
|
)
|
||||||
|
|
@ -492,15 +467,6 @@ class RangeofMotionThing(lt.Thing):
|
||||||
"final_position": final_pos,
|
"final_position": final_pos,
|
||||||
}
|
}
|
||||||
|
|
||||||
rom_data.reset_tracker()
|
|
||||||
|
|
||||||
except ParasiticMotionError:
|
|
||||||
rom_deps.logger.error("Parasitic motion detected.")
|
|
||||||
return {
|
|
||||||
"correlation_lateral_steps": 0,
|
|
||||||
"stage_positions": 0,
|
|
||||||
"final_position": {"x": 0, "y": 0, "z": 0},
|
|
||||||
}
|
|
||||||
finally:
|
finally:
|
||||||
rom_deps.stage.move_absolute(
|
rom_deps.stage.move_absolute(
|
||||||
x=starting_position[0],
|
x=starting_position[0],
|
||||||
|
|
@ -554,12 +520,22 @@ class RangeofMotionThing(lt.Thing):
|
||||||
end_time = time.time()
|
end_time = time.time()
|
||||||
total_time = (end_time - start_time) / 60
|
total_time = (end_time - start_time) / 60
|
||||||
|
|
||||||
rom_results = _collate_data(data=rom_json, total_time=total_time, csm=csm)
|
x_range = abs(
|
||||||
|
rom_json["positive x"]["final_position"]["x"]
|
||||||
logger.info(
|
- rom_json["negative x"]["final_position"]["x"]
|
||||||
f"Range of motion is {rom_results['Step Range'][0]} x {rom_results['Step Range'][1]} steps"
|
|
||||||
)
|
)
|
||||||
|
y_range = abs(
|
||||||
|
rom_json["positive y"]["final_position"]["y"]
|
||||||
|
- rom_json["negative y"]["final_position"]["y"]
|
||||||
|
)
|
||||||
|
step_range = [x_range, y_range]
|
||||||
|
|
||||||
self.last_calibration = DenumpifyingDict(rom_results).model_dump()
|
logger.info(f"Range of motion is {step_range[0]} x {step_range[1]} steps")
|
||||||
|
|
||||||
return rom_results
|
self.calibrated_range = step_range
|
||||||
|
|
||||||
|
return {
|
||||||
|
"Time": total_time,
|
||||||
|
"CSM Matrix": csm.image_to_stage_displacement_matrix.tolist(),
|
||||||
|
"Step Range": step_range,
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue