Source code for ewoksndreg.tasks.reg2d_preeval
from typing import Optional
from ewokscore.model import BaseInputModel
from ewokscore.task import Task
from pydantic import Field
from ..evaluation.evaluation import pre_evaluation
from ..io.input_stack import InputDataType
from ..io.input_stack import input_context
[docs]
class Reg2DPreEvaluation(
Task,
input_model=Inputs,
output_names=[
"image_stacks",
"reference_stack",
"ranked_stack_names",
"output_configuration",
],
):
"""Given several stacks of images requiring the same alignment,
determine the stack which is most suitable to get a correct alignment.
"""
[docs]
def run(self):
reference_stack = self.inputs.reference_stack
image_stacks = self.inputs.image_stacks
if self.inputs.skip:
self.outputs.reference_stack = reference_stack
self.outputs.ranked_stack_names = None
elif reference_stack:
if reference_stack not in image_stacks:
raise ValueError(f"{reference_stack=} must be in {list(image_stacks)}")
self.outputs.reference_stack = reference_stack
self.outputs.ranked_stack_names = None
else:
with input_context(image_stacks) as stacks:
pre_eval_rank = pre_evaluation(stacks)
self.outputs.reference_stack = pre_eval_rank[0]
self.outputs.ranked_stack_names = pre_eval_rank
self.outputs.image_stacks = image_stacks
output_configuration = self.get_input_value("output_configuration") or dict()
output_configuration["reference_stack"] = reference_stack
self.outputs.output_configuration = output_configuration