Files
navigate/test/model/metadata_sources/test_metadata.py
2025-12-04 16:07:30 +08:00

155 lines
4.7 KiB
Python

import pytest
import random
def test_metadata_voxel_size(dummy_model):
from navigate.model.metadata_sources.metadata import Metadata
md = Metadata()
md.configuration = dummy_model.configuration
zoom = dummy_model.configuration["experiment"]["MicroscopeState"]["zoom"]
active_microscope = dummy_model.configuration["experiment"]["MicroscopeState"][
"microscope_name"
]
pixel_size = float(
dummy_model.configuration["configuration"]["microscopes"][active_microscope][
"zoom"
]["pixel_size"][zoom]
)
dx, dy, dz = md.voxel_size
assert (
(dx == pixel_size)
and (dy == pixel_size)
and (
dz
== float(
dummy_model.configuration["experiment"]["MicroscopeState"]["step_size"]
)
)
)
def test_metadata_shape(dummy_model):
from navigate.model.metadata_sources.metadata import Metadata
dummy_model.configuration["experiment"]["MicroscopeState"]["image_mode"] = "z-stack"
md = Metadata()
md.configuration = dummy_model.configuration
microscope_name = dummy_model.configuration["experiment"]["MicroscopeState"][
"microscope_name"
]
txs = dummy_model.configuration["experiment"]["CameraParameters"][microscope_name][
"img_x_pixels"
]
tys = dummy_model.configuration["experiment"]["CameraParameters"][microscope_name][
"img_y_pixels"
]
tzs = dummy_model.configuration["experiment"]["MicroscopeState"]["number_z_steps"]
tts = dummy_model.configuration["experiment"]["MicroscopeState"]["timepoints"]
tcs = sum(
[
v["is_selected"] is True
for k, v in dummy_model.configuration["experiment"]["MicroscopeState"][
"channels"
].items()
]
)
xs, ys, cs, zs, ts = md.shape
assert (xs == txs) and (ys == tys) and (zs == tzs) and (ts == tts) and (cs == tcs)
@pytest.mark.parametrize(
"image_mode",
[
"single",
"Confocal Projection",
"z-stack",
],
)
@pytest.mark.parametrize("stack_cycling_mode", ["per_stack", "per_z"])
@pytest.mark.parametrize("conpro_cycling_mode", ["per_stack", "per_plane"])
def test_metadata_set_stack_order_from_configuration_experiment(
dummy_model, image_mode, stack_cycling_mode, conpro_cycling_mode
):
from navigate.model.metadata_sources.metadata import Metadata
dummy_model.configuration["experiment"]["MicroscopeState"][
"image_mode"
] = image_mode
dummy_model.configuration["experiment"]["MicroscopeState"][
"stack_cycling_mode"
] = stack_cycling_mode
dummy_model.configuration["experiment"]["MicroscopeState"][
"conpro_cycling_mode"
] = conpro_cycling_mode
md = Metadata()
md.configuration = dummy_model.configuration
if image_mode == "z-stack" and stack_cycling_mode == "per_stack":
assert md._per_stack is True
elif image_mode == "Confocal Projection" and stack_cycling_mode == "per_stack":
assert md._per_stack is True
else:
assert md._per_stack is False
def set_shape_from_configuration_experiment(dummy_model):
from navigate.model.metadata_sources.metadata import Metadata
md = Metadata()
md.configuration = dummy_model.configuration.copy()
# set up experiment with multiposition
# no position
md.configuration["experiment"]["MicroscopeState"]["image_mode"] = "z-stack"
md.configuration["multi_positions"] = [
["X", "Y", "Z", "THETA", "F"]
]
md.configuration["expriment"]["MicroscopeState"]["is_multiposition"] = False
md._set_shape_from_configuration_experiment()
assert md._multiposition is False
assert md.positions == 1
# customized mode
md.configuration["experiment"]["MicroscopeState"]["image_mode"] = "customized"
assert md._multiposition is True
assert md.positions == 1
# random multiposition
md.configuration["experiment"]["MicroscopeState"]["image_mode"] = "z-stack"
for i in range(5):
num_positions = random.randint(2, 10)
md.configuration["multi_positions"] = [["X", "Y", "Z", "THETA", "F"]]
for p in range(num_positions):
pos = [
random.uniform(0, 100), # X
random.uniform(0, 100), # Y
random.uniform(0, 100), # Z
random.uniform(0, 360), # THETA
random.uniform(0, 10), # F
]
md.configuration["multi_positions"].append(pos)
md.configuration["experiment"]["MicroscopeState"]["is_multiposition"] = True
md._set_shape_from_configuration_experiment()
assert md._multiposition is True
assert md.positions == num_positions