From 33315951ec0475152a48aa570cc6807643f77b16 Mon Sep 17 00:00:00 2001 From: Lachlan Whitehead Date: Wed, 28 Aug 2024 17:04:41 +1000 Subject: [PATCH 1/2] fix for roi indexing --- core/lls_core/cmds/__main__.py | 9 +++++++-- core/lls_core/models/lattice_data.py | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/core/lls_core/cmds/__main__.py b/core/lls_core/cmds/__main__.py index c777fc50..4b18f74e 100644 --- a/core/lls_core/cmds/__main__.py +++ b/core/lls_core/cmds/__main__.py @@ -21,6 +21,7 @@ from lls_core.models.output import SaveFileType from pydantic.v1 import ValidationError +from toolz.dicttoolz import merge_with if TYPE_CHECKING: from lls_core.models.utils import FieldAccessModel @@ -79,7 +80,11 @@ def field_from_model(model: Type[FieldAccessModel], field_name: str, extra_descr def handle_merge(values: list): if len(values) > 1: - raise ValueError(f"A parameter has been passed multiple times! Got: {', '.join(values)}") + if all(isinstance(param, dict) for param in values): + merged = merge_with(handle_merge,values) + values = [merged] + else: + raise ValueError(f"A parameter has been passed multiple times! Got: {', '.join(values)}") return values[0] def rich_validation(e: ValidationError) -> Table: @@ -224,7 +229,7 @@ def process( except ValidationError as e: console.print(rich_validation(e)) raise Exit(code=1) - + lattice.save() console.print(f"Processing successful. Results can be found in {lattice.save_dir.resolve()}") diff --git a/core/lls_core/models/lattice_data.py b/core/lls_core/models/lattice_data.py index 40cb1058..185cf73a 100644 --- a/core/lls_core/models/lattice_data.py +++ b/core/lls_core/models/lattice_data.py @@ -339,7 +339,7 @@ def _process_crop(self) -> Iterable[ImageSlice]: # We have an extra level of iteration for the crop path: iterating over each ROI for roi_index, roi in enumerate(tqdm(self.crop.selected_rois, desc="ROI", position=0)): # pass arguments for save tiff, callable and function arguments - logger.info(f"Processing ROI {roi_index}") + logger.info(f"Processing ROI {self.crop.roi_subset[roi_index]}") for slice in self.iter_slices(): deconv_args: dict[Any, Any] = {} @@ -367,7 +367,7 @@ def _process_crop(self) -> Iterable[ImageSlice]: z_end=self.crop.z_range[1], **deconv_args ), - "roi_index": roi_index + "roi_index": self.crop.roi_subset[roi_index] }) def _process_non_crop(self) -> Iterable[ImageSlice]: From 584b2cdd647ed0f0b0ed1e79e2b9c4a59402f637 Mon Sep 17 00:00:00 2001 From: Lachie Date: Wed, 28 Aug 2024 21:00:34 +1000 Subject: [PATCH 2/2] simplify return value of handle_merge Co-authored-by: Michael Milton --- core/lls_core/cmds/__main__.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/lls_core/cmds/__main__.py b/core/lls_core/cmds/__main__.py index 4b18f74e..c5560d3d 100644 --- a/core/lls_core/cmds/__main__.py +++ b/core/lls_core/cmds/__main__.py @@ -81,8 +81,7 @@ def field_from_model(model: Type[FieldAccessModel], field_name: str, extra_descr def handle_merge(values: list): if len(values) > 1: if all(isinstance(param, dict) for param in values): - merged = merge_with(handle_merge,values) - values = [merged] + return merge_with(handle_merge, values) else: raise ValueError(f"A parameter has been passed multiple times! Got: {', '.join(values)}") return values[0]