From caaf403bcacf9a6ae6b22b17c16ba6bba862fdcb Mon Sep 17 00:00:00 2001 From: algol Date: Tue, 27 Jan 2026 14:04:53 +0000 Subject: [PATCH] refactoring logic for preview expander --- httomo/ui_layer.py | 20 +++++++++++--------- tests/test_ui_layer.py | 11 ++++++++--- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/httomo/ui_layer.py b/httomo/ui_layer.py index 46e0816ff..5bf2ed87d 100644 --- a/httomo/ui_layer.py +++ b/httomo/ui_layer.py @@ -3,7 +3,7 @@ from typing import Any, Dict, List, Optional, TypeAlias, Union from importlib import import_module from pathlib import Path -import os +import math import re import h5py @@ -172,24 +172,26 @@ def _setup_loader(self) -> LoaderInterface: def fix_preview_y_if_smaller_than_padding( loader: LoaderInterface, methods_list: List[MethodWrapper] ) -> None: - vertical_preview_length = ( - loader.preview.detector_y.stop - loader.preview.detector_y.start - ) // loader.comm.size max_pad_value = 0 for _, m in enumerate(methods_list): if m.padding: - max_pad_value = max(sum(m.calculate_padding()), max_pad_value) - if max_pad_value >= vertical_preview_length: + max_pad_value = int(max(sum(m.calculate_padding()), max_pad_value)) + required_preview_padding_size = max_pad_value*loader.comm.size + loader.comm.size + current_preview_size = loader.preview.detector_y.stop - loader.preview.detector_y.start + extend_preview_value = required_preview_padding_size - current_preview_size + + if extend_preview_value > 0: + # extend the preview to the required_preview_padding_size + extend_preview_value_half_ceil = int(math.ceil(extend_preview_value / 2.0)) loader.preview = PreviewConfig( angles=loader.preview.angles, detector_y=PreviewDimConfig( - start=loader.preview.detector_y.start - max_pad_value // 2, - stop=loader.preview.detector_y.stop + max_pad_value // 2, + start=loader.preview.detector_y.start - extend_preview_value_half_ceil, + stop=loader.preview.detector_y.stop + extend_preview_value_half_ceil, ), detector_x=loader.preview.detector_x, ) - def get_valid_ref_str(parameters: Dict[str, Any]) -> Dict[str, str]: """Find valid reference strings inside dictionary diff --git a/tests/test_ui_layer.py b/tests/test_ui_layer.py index 082577661..fe5846c24 100644 --- a/tests/test_ui_layer.py +++ b/tests/test_ui_layer.py @@ -7,6 +7,7 @@ from httomo import ui_layer import pytest import numpy as np +import math from httomo.preview import PreviewConfig, PreviewDimConfig from httomo.runner.auxiliary_data import AuxiliaryData @@ -433,12 +434,16 @@ def mock_make_data_source(padding) -> DataSetSource: fix_preview_y_if_smaller_than_padding(loader, [wrp]) padding = wrp.calculate_padding() - if slices_total <= sum(padding): + required_preview_padding_size = sum(padding) + loader.comm.size + extend_preview_value = required_preview_padding_size - slices_total + + if extend_preview_value > 0: + extend_preview_value_half_ceil = int(math.ceil(extend_preview_value / 2.0)) EXPECTED_PREVIEW_CONFIG = PreviewConfig( angles=preview.angles, detector_y=PreviewDimConfig( - start=detY_preview_start - padding[0], - stop=detY_preview_stop + padding[1], + start=detY_preview_start - extend_preview_value_half_ceil, + stop=detY_preview_stop + extend_preview_value_half_ceil, ), detector_x=preview.detector_x, )