From cd7d273f48be2830dda3c7018a664c90cc694610 Mon Sep 17 00:00:00 2001 From: JackEAllen Date: Thu, 11 Jul 2024 11:24:44 +0100 Subject: [PATCH 01/17] Add Time Stamp String Property to Image_Data Class --- mantidimaging/gui/windows/live_viewer/model.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mantidimaging/gui/windows/live_viewer/model.py b/mantidimaging/gui/windows/live_viewer/model.py index dd8fe2c96e4..dd0c78671f2 100644 --- a/mantidimaging/gui/windows/live_viewer/model.py +++ b/mantidimaging/gui/windows/live_viewer/model.py @@ -55,6 +55,11 @@ def image_modified_time(self) -> float: """Return the image modified time""" return self._stat.st_mtime + @property + def image_modified_time_stamp(self) -> str: + """Return the image modified time as a string""" + return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(self.image_modified_time)) + class SubDirectory: From 4f63ace2bf31df8ebdd71fb050cfdea3fa0583d2 Mon Sep 17 00:00:00 2001 From: JackEAllen Date: Thu, 11 Jul 2024 11:27:45 +0100 Subject: [PATCH 02/17] Modify Current Image Label to Display Time Stamp as Well as Image Filename --- mantidimaging/gui/windows/live_viewer/presenter.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mantidimaging/gui/windows/live_viewer/presenter.py b/mantidimaging/gui/windows/live_viewer/presenter.py index 8945f4194bd..2753db4c6e6 100644 --- a/mantidimaging/gui/windows/live_viewer/presenter.py +++ b/mantidimaging/gui/windows/live_viewer/presenter.py @@ -78,7 +78,8 @@ def select_image(self, index: int) -> None: if not self.model.images: return self.selected_image = self.model.images[index] - self.view.label_active_filename.setText(self.selected_image.image_name) + image_timestamp = self.selected_image.image_modified_time_stamp + self.view.label_active_filename.setText(f"{self.selected_image.image_name} - {image_timestamp}") self.display_image(self.selected_image.image_path) From 8f7127b3f36f143f1fd53ca71ef7867dc04812ab Mon Sep 17 00:00:00 2001 From: Sam Tygier Date: Tue, 6 Aug 2024 11:20:28 +0100 Subject: [PATCH 03/17] Remove conda-verify from conda build env Not on conda-forge for python 3.12 and we were not using it --- .github/actions/publish-package/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/publish-package/action.yml b/.github/actions/publish-package/action.yml index 66d2f12bf6f..475708cbad4 100644 --- a/.github/actions/publish-package/action.yml +++ b/.github/actions/publish-package/action.yml @@ -31,7 +31,7 @@ runs: conda config --set always_yes yes --set changeps1 no # Install build requirements # We can't use the makefile target for this because the CONDA_ACTIVATE command is incompatible with GitHub Actions Windows runners - conda create -n build-env --yes boa anaconda-client conda-verify + conda create -n build-env --yes boa anaconda-client conda activate build-env # Configure the conda channels conda config --env $(cat environment.yml | sed -ne '/channels:/,/dependencies:/{//!p}' | grep '^ -' | sed 's/ - / --append channels /g' | tr -d '\n') From 6ae29a432d18b04f5eeee9cd2aa5c29f9418c5da Mon Sep 17 00:00:00 2001 From: Sam Tygier Date: Wed, 7 Aug 2024 14:33:46 +0100 Subject: [PATCH 04/17] Update setuptools for conda package build --- conda/meta.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conda/meta.yaml b/conda/meta.yaml index 5f8f6874564..f129f9df21a 100644 --- a/conda/meta.yaml +++ b/conda/meta.yaml @@ -13,7 +13,7 @@ source: requirements: build: - python=3.12.* - - setuptools=62.* + - setuptools=72.* run: - python=3.12.* - pip From a74648a5637a468070960a92d6236190d0ebda0e Mon Sep 17 00:00:00 2001 From: Sam Tygier Date: Wed, 7 Aug 2024 14:45:28 +0100 Subject: [PATCH 05/17] Rename workflow centos -> rocky --- .github/workflows/{cos7_testing.yml => rocky_testing.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{cos7_testing.yml => rocky_testing.yml} (100%) diff --git a/.github/workflows/cos7_testing.yml b/.github/workflows/rocky_testing.yml similarity index 100% rename from .github/workflows/cos7_testing.yml rename to .github/workflows/rocky_testing.yml From 8266a49f2cae2061227af9fcd4a2849bb910be9d Mon Sep 17 00:00:00 2001 From: Sam Tygier Date: Wed, 7 Aug 2024 14:47:37 +0100 Subject: [PATCH 06/17] Change docker workflow from centos7 to rocky8 --- .github/workflows/rocky_testing.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/rocky_testing.yml b/.github/workflows/rocky_testing.yml index 1e0edd2c610..3a02001b8a0 100644 --- a/.github/workflows/rocky_testing.yml +++ b/.github/workflows/rocky_testing.yml @@ -1,4 +1,4 @@ -name: Testing with CentOS 7 docker +name: Testing with Rocky docker on: push: @@ -16,42 +16,42 @@ concurrency: jobs: test: - # It is hosted on Ubuntu but the docker image is built on CentOS 7 + # It is hosted on Ubuntu but the docker image is built on Rocky runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Pre-load docker image - run: docker pull ghcr.io/mantidproject/mantidimaging:centos7 + run: docker pull ghcr.io/mantidproject/mantidimaging:rocky8 - name: List versions uses: ./.github/actions/test with: command: python --version; conda list ; pip list - label: centos7 + label: rocky8 - name: yapf uses: ./.github/actions/test with: command: yapf --parallel --diff --recursive . - label: centos7 + label: rocky8 - name: ruff uses: ./.github/actions/test with: command: ruff check . - label: centos7 + label: rocky8 - name: mypy uses: ./.github/actions/test with: command: mypy --ignore-missing-imports mantidimaging - label: centos7 + label: rocky8 - name: pytest timeout-minutes: 5 uses: ./.github/actions/test with: command: xvfb-run pytest -n auto -o log_cli=true --ignore=mantidimaging/eyes_tests --durations=10 - label: centos7 + label: rocky8 From 4a4afb651929b24089ac09cfecf8a104c12e957f Mon Sep 17 00:00:00 2001 From: Sam Tygier Date: Wed, 7 Aug 2024 15:04:54 +0100 Subject: [PATCH 07/17] Update docs: we no longer test on centos 7 --- docs/installation.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/installation.rst b/docs/installation.rst index 4443b255894..8a70d9cf91a 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -17,7 +17,7 @@ Requirements ------------ Operating system - - Linux. Tested on Ubuntu 18.04, 20.04, 22.04 and CentOS 7 + - Linux. Tested on Ubuntu 18.04, 20.04, 22.04 and Rocky 8 - Windows. Tested on Windows 10 GPU From ed669053599337fabbe17af2518c96bef8abd209 Mon Sep 17 00:00:00 2001 From: Sam Tygier Date: Wed, 7 Aug 2024 15:08:55 +0100 Subject: [PATCH 08/17] Remove obsolete Makefile from docker folder --- docker/Makefile | 24 ------------------------ 1 file changed, 24 deletions(-) delete mode 100644 docker/Makefile diff --git a/docker/Makefile b/docker/Makefile deleted file mode 100644 index 5b31b8e1c0b..00000000000 --- a/docker/Makefile +++ /dev/null @@ -1,24 +0,0 @@ -image_label := $$(if [ -z "$$IMAGE_LABEL" ]; then echo travis-ci-$$(git rev-parse --short HEAD); else echo "$$IMAGE_LABEL"; fi) - -all: centos7-base ubuntu18-base - docker tag mantidproject/mantidimaging:centos7-base mantidproject/mantidimaging:base - docker build --no-cache -f Dockerfile -t mantidproject/mantidimaging:centos7 .. - - docker tag mantidproject/mantidimaging:ubuntu18-base mantidproject/mantidimaging:base - docker build --no-cache -f Dockerfile -t mantidproject/mantidimaging:ubuntu18 .. - docker tag mantidproject/mantidimaging:ubuntu18 mantidproject/mantidimaging:latest - -push: - docker push mantidproject/mantidimaging:centos7 - docker push mantidproject/mantidimaging:ubuntu18 - docker push mantidproject/mantidimaging:latest - -centos7-base: - docker build -f CentOS7_base.Dockerfile -t mantidproject/mantidimaging:centos7-base .. - docker push mantidproject/mantidimaging:centos7-base - -ubuntu18-base: - docker build -f Ubuntu18_base.Dockerfile -t mantidproject/mantidimaging:ubuntu18-base .. - docker push mantidproject/mantidimaging:ubuntu18-base - docker tag mantidproject/mantidimaging:ubuntu18-base mantidproject/mantidimaging:base - docker push mantidproject/mantidimaging:base From 513bc20f253e0a64867498a54069d986b96c4efa Mon Sep 17 00:00:00 2001 From: JackEAllen Date: Thu, 11 Jul 2024 17:31:08 +0100 Subject: [PATCH 09/17] Mock File Modification Time --- .../eyes_tests/live_viewer_window_test.py | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/mantidimaging/eyes_tests/live_viewer_window_test.py b/mantidimaging/eyes_tests/live_viewer_window_test.py index 81de5ccdeaf..7d9b49bea06 100644 --- a/mantidimaging/eyes_tests/live_viewer_window_test.py +++ b/mantidimaging/eyes_tests/live_viewer_window_test.py @@ -1,21 +1,27 @@ # Copyright (C) 2024 ISIS Rutherford Appleton Laboratory UKRI # SPDX - License - Identifier: GPL-3.0-or-later -from __future__ import annotations +from __future__ import annotations +from typing import TYPE_CHECKING from unittest import mock - import numpy as np - +import os from mantidimaging.core.operations.loader import load_filter_packages from mantidimaging.gui.windows.live_viewer.model import Image_Data from mantidimaging.test_helpers.unit_test_helper import FakeFSTestCase from pathlib import Path - from mantidimaging.eyes_tests.base_eyes import BaseEyesTest +if TYPE_CHECKING: + import time # noqa: F401 + class LiveViewerWindowTest(FakeFSTestCase, BaseEyesTest): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.initial_time = 4000.0 + @classmethod def setUpClass(cls) -> None: super().setUpClass() @@ -30,26 +36,30 @@ def setUp(self) -> None: def _generate_image(self): image = np.zeros((10, 10)) image[5, :] = np.arange(10) + os.utime(self.live_directory, (10, self.initial_time)) + self.initial_time += 1000 return image def _make_simple_dir(self, directory: Path): file_list = [directory / f"abc_{i:06d}.tif" for i in range(5)] - if not directory.exists(): - self.fs.create_dir(directory) - + increment = 0 for file in file_list: self.fs.create_file(file) + os.utime(file, (10, self.initial_time + increment)) + increment += 1000 return file_list @mock.patch('mantidimaging.gui.windows.live_viewer.model.ImageWatcher') - def test_live_view_opens_without_data(self, _mock_image_watcher): + @mock.patch("time.time", return_value=4000.0) + def test_live_view_opens_without_data(self, _mock_time, _mock_image_watcher): self.imaging.show_live_viewer(self.live_directory) self.check_target(widget=self.imaging.live_viewer) @mock.patch('mantidimaging.gui.windows.live_viewer.presenter.LiveViewerWindowPresenter.load_image') @mock.patch('mantidimaging.gui.windows.live_viewer.model.ImageWatcher') - def test_live_view_opens_with_data(self, _mock_image_watcher, mock_load_image): + @mock.patch("time.time", return_value=4000.0) + def test_live_view_opens_with_data(self, _mock_time, _mock_image_watcher, mock_load_image): file_list = self._make_simple_dir(self.live_directory) image_list = [Image_Data(path) for path in file_list] mock_load_image.return_value = self._generate_image() @@ -59,7 +69,8 @@ def test_live_view_opens_with_data(self, _mock_image_watcher, mock_load_image): @mock.patch('mantidimaging.gui.windows.live_viewer.presenter.LiveViewerWindowPresenter.load_image') @mock.patch('mantidimaging.gui.windows.live_viewer.model.ImageWatcher') - def test_live_view_opens_with_bad_data(self, _mock_image_watcher, mock_load_image): + @mock.patch("time.time", return_value=4000.0) + def test_live_view_opens_with_bad_data(self, _mock_time, _mock_image_watcher, mock_load_image): file_list = self._make_simple_dir(self.live_directory) image_list = [Image_Data(path) for path in file_list] mock_load_image.side_effect = ValueError @@ -69,7 +80,8 @@ def test_live_view_opens_with_bad_data(self, _mock_image_watcher, mock_load_imag @mock.patch('mantidimaging.gui.windows.live_viewer.presenter.LiveViewerWindowPresenter.load_image') @mock.patch('mantidimaging.gui.windows.live_viewer.model.ImageWatcher') - def test_rotate_operation_rotates_image(self, _mock_image_watcher, mock_load_image): + @mock.patch("time.time", return_value=4000.0) + def test_rotate_operation_rotates_image(self, _mock_time, _mock_image_watcher, mock_load_image): file_list = self._make_simple_dir(self.live_directory) image_list = [Image_Data(path) for path in file_list] mock_load_image.return_value = self._generate_image() From c10991fa97ef49c9b249661165f7c7d543b38631 Mon Sep 17 00:00:00 2001 From: JackEAllen Date: Tue, 6 Aug 2024 11:52:29 +0100 Subject: [PATCH 10/17] Release Notes --- docs/release_notes/next/feature-2273-live-view-img-timestamp | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/release_notes/next/feature-2273-live-view-img-timestamp diff --git a/docs/release_notes/next/feature-2273-live-view-img-timestamp b/docs/release_notes/next/feature-2273-live-view-img-timestamp new file mode 100644 index 00000000000..dd6202b87ab --- /dev/null +++ b/docs/release_notes/next/feature-2273-live-view-img-timestamp @@ -0,0 +1 @@ +#2273: Display the modified image timestamp within the live viewer to allow for easier determination of what scan is being displayed within the live viewer. From 38fb62f4346e4cc950c493ee7ac444b4eecd184a Mon Sep 17 00:00:00 2001 From: JackEAllen Date: Thu, 1 Aug 2024 16:48:39 +0100 Subject: [PATCH 11/17] Resolve Dialog Window Closure on Operation Window Close --- mantidimaging/gui/windows/operations/view.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/mantidimaging/gui/windows/operations/view.py b/mantidimaging/gui/windows/operations/view.py index 8cf045b6244..a9490479ab1 100644 --- a/mantidimaging/gui/windows/operations/view.py +++ b/mantidimaging/gui/windows/operations/view.py @@ -64,6 +64,7 @@ def __init__(self, main_window: MainWindowView): self.main_window = main_window self.presenter = FiltersWindowPresenter(self, main_window) self.roi_view = None + self.roi_selector_dialog: ROISelectorView | None = None self.roi_view_averaged = False self.splitter.setSizes([200, 9999]) self.splitter.setStretchFactor(0, 1) @@ -122,8 +123,9 @@ def closeEvent(self, e): def cleanup(self): self.stackSelector.unsubscribe_from_main_window() if self.roi_view is not None: - self.roi_view.close() self.roi_view = None + self.roi_selector_dialog.close() + self.presenter.set_stack(None) self.auto_update_triggered.disconnect() self.main_window.filters = None @@ -255,16 +257,17 @@ def roi_changed_callback(callback): except ValueError: roi_values = None - window = ROISelectorView(self, self.presenter.stack, self.presenter.model.preview_image_idx, roi_values, - roi_changed_callback) + self.roi_selector_dialog = ROISelectorView(self, self.presenter.stack, self.presenter.model.preview_image_idx, + roi_values, roi_changed_callback) def close_event(event): roi_field.setEnabled(True) roi_button.setEnabled(True) event.accept() - window.closeEvent = functools.partial(close_event) - window.show() + self.roi_view = self.roi_selector_dialog.roi_view + self.roi_selector_dialog.closeEvent = functools.partial(close_event) + self.roi_selector_dialog.show() def toggle_filters_section(self): if self.collapseToggleButton.text() == "<<": From bdb9faa523092a8f9e4eb586291f275fe2912efb Mon Sep 17 00:00:00 2001 From: JackEAllen Date: Thu, 1 Aug 2024 17:32:38 +0100 Subject: [PATCH 12/17] Update Initial ROI Size to Use Stack Shape Instead of Fixed Value Update initial ROI size to use stack shape instead of fixed values of 200. Additionally, add update preview call post-filter to clear preview if no preview exists --- mantidimaging/gui/windows/operations/presenter.py | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/mantidimaging/gui/windows/operations/presenter.py b/mantidimaging/gui/windows/operations/presenter.py index 21293e4f538..0952a983d01 100644 --- a/mantidimaging/gui/windows/operations/presenter.py +++ b/mantidimaging/gui/windows/operations/presenter.py @@ -284,14 +284,9 @@ def _post_filter(self, updated_stacks: list[ImageStack], task): if np.any(stack.data < 0): negative_stacks.append(stack) - if self.view.roi_view is not None: - self.view.roi_view.close() - self.view.roi_view = None - self.applying_to_all = False - self.do_update_previews() - if task.error is not None: + if task.error: # task failed, show why self.view.show_error_dialog(f"Operation failed: {task.error}") elif use_new_data: @@ -312,6 +307,7 @@ def _post_filter(self, updated_stacks: list[ImageStack], task): self.view.filter_applied.emit() self._set_apply_buttons_enabled(self.prev_apply_single_state, self.prev_apply_all_state) self.filter_is_running = False + self.do_update_previews() def _do_apply_filter(self, apply_to: list[ImageStack]): self.filter_is_running = True @@ -454,11 +450,8 @@ def init_roi_field(self, roi_field: QLineEdit): if self.stack is None: return - larger = np.greater(self.stack.data[0].shape, (200, 200)) - if all(larger): - return - x = min(self.stack.data[0].shape[0], 200) - y = min(self.stack.data[0].shape[1], 200) + x = self.stack.data.shape[1] // 2 + y = self.stack.data.shape[2] // 2 crop_string = ", ".join(["0", "0", str(y), str(x)]) roi_field.setText(crop_string) From c4f68c350c9217d58f71fc042814e3a555b9bc0a Mon Sep 17 00:00:00 2001 From: JackEAllen Date: Thu, 1 Aug 2024 17:33:55 +0100 Subject: [PATCH 13/17] Update Presetner Tests to Reflect Changes to Initial ROI size --- mantidimaging/gui/windows/operations/test/presenter_test.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mantidimaging/gui/windows/operations/test/presenter_test.py b/mantidimaging/gui/windows/operations/test/presenter_test.py index a40eb7e970c..10f35e2e6d6 100644 --- a/mantidimaging/gui/windows/operations/test/presenter_test.py +++ b/mantidimaging/gui/windows/operations/test/presenter_test.py @@ -448,14 +448,14 @@ def test_init_roi_field_does_nothing_when_stack_is_none(self): self.presenter.init_roi_field(mock_roi_field) mock_roi_field.setText.assert_not_called() - def test_init_roi_field_does_nothing_when_image_is_greater_than_200_by_200(self): + def test_init_roi_field_called_with_smaller_values_if_image_is_greater_than_200_by_200(self): mock_roi_field = mock.Mock() self.presenter.stack = mock.Mock() self.presenter.stack.data = np.ones((2, 201, 201)) self.presenter.init_roi_field(mock_roi_field) - mock_roi_field.setText.assert_not_called() + mock_roi_field.setText.assert_called_once_with("0, 0, 100, 100") - @parameterized.expand([(190, 201, "0, 0, 200, 190"), (201, 80, "0, 0, 80, 200"), (200, 200, "0, 0, 200, 200")]) + @parameterized.expand([(190, 201, "0, 0, 100, 95"), (201, 80, "0, 0, 40, 100"), (200, 200, "0, 0, 100, 100")]) def test_set_text_called_when_image_not_greater_than_200_by_200(self, shape_x, shape_y, expected): mock_roi_field = mock.Mock() self.presenter.stack = mock.Mock() From 29ec272e207a0825d7d5acd7f5e0bc4c7273ca26 Mon Sep 17 00:00:00 2001 From: JackEAllen Date: Thu, 1 Aug 2024 17:36:24 +0100 Subject: [PATCH 14/17] Add Close Method to ROISelectorView --- mantidimaging/gui/widgets/roi_selector/view.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mantidimaging/gui/widgets/roi_selector/view.py b/mantidimaging/gui/widgets/roi_selector/view.py index 390a7cb6665..8a271b05834 100644 --- a/mantidimaging/gui/widgets/roi_selector/view.py +++ b/mantidimaging/gui/widgets/roi_selector/view.py @@ -69,3 +69,7 @@ def toggle_average_images(self) -> None: self.roi_view_averaged = not self.roi_view_averaged self.roi_view.roi.show() self.roi_view.ui.roiPlot.hide() + + def closeEvent(self, event) -> None: + self.roi_view.close() + event.accept() From 7643337ad95e8a98c3a89f4476f79e3c6f339b74 Mon Sep 17 00:00:00 2001 From: JackEAllen Date: Thu, 1 Aug 2024 17:39:05 +0100 Subject: [PATCH 15/17] Set ROI Max Bounds to Size of Image --- mantidimaging/gui/widgets/mi_image_view/view.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mantidimaging/gui/widgets/mi_image_view/view.py b/mantidimaging/gui/widgets/mi_image_view/view.py index 0dc1e1805c0..904f9fe395e 100644 --- a/mantidimaging/gui/widgets/mi_image_view/view.py +++ b/mantidimaging/gui/widgets/mi_image_view/view.py @@ -7,7 +7,7 @@ from typing import TYPE_CHECKING from collections.abc import Callable -from PyQt5.QtCore import Qt +from PyQt5.QtCore import Qt, QRectF from PyQt5.QtWidgets import QApplication, QHBoxLayout, QLabel, QPushButton, QSizePolicy from pyqtgraph import ROI, ImageItem, ImageView, ViewBox from pyqtgraph.GraphicsScene.mouseEvents import HoverEvent @@ -148,6 +148,9 @@ def angles(self, angles: ProjectionAngles | None) -> None: self._angles = angles self._update_message(self._last_mouse_hover_location) + def _set_roi_max_bounds(self): + self.roi.maxBounds = QRectF(0, 0, self.image_data.shape[2], self.image_data.shape[1]) + def setImage(self, image: np.ndarray, *args, **kwargs): dimensions_changed = self.image_data is None or self.image_data.shape != image.shape if image.ndim == 3: @@ -195,6 +198,7 @@ def roiChanged(self) -> None: roi = self._update_roi_region_avg() if self.roi_changed_callback and roi is not None: self.roi_changed_callback(roi) + self._set_roi_max_bounds() self._refresh_message() def _update_roi_region_avg(self) -> SensibleROI | None: From 6612be90977bd26bd6d72d40d11275ffc857a1c5 Mon Sep 17 00:00:00 2001 From: JackEAllen Date: Thu, 8 Aug 2024 16:18:54 +0000 Subject: [PATCH 16/17] Remove Allowed Error for ROI Bounds Out of Range --- mantidimaging/gui/test/gui_system_operations_test.py | 1 - 1 file changed, 1 deletion(-) diff --git a/mantidimaging/gui/test/gui_system_operations_test.py b/mantidimaging/gui/test/gui_system_operations_test.py index 80403dc6a89..a7b7ade8570 100644 --- a/mantidimaging/gui/test/gui_system_operations_test.py +++ b/mantidimaging/gui/test/gui_system_operations_test.py @@ -49,7 +49,6 @@ ALLOWED_ERRORS = [ 'Negative values found in result preview for slice 0.', 'Flat-fielding completed. Slices containing negative values in IMAT_Flower_Tomo_000000: all slices.', - 'Error applying filter for preview: could not broadcast input array from shape (1,80,80) into shape (1,90,90)' ] From b074c81e084b4881cb9f2c0aa3b43069ae01ab6a Mon Sep 17 00:00:00 2001 From: JackEAllen Date: Thu, 1 Aug 2024 17:47:59 +0100 Subject: [PATCH 17/17] Release Notes --- docs/release_notes/next/fix-2285-crop-coord-stack-bounds | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/release_notes/next/fix-2285-crop-coord-stack-bounds diff --git a/docs/release_notes/next/fix-2285-crop-coord-stack-bounds b/docs/release_notes/next/fix-2285-crop-coord-stack-bounds new file mode 100644 index 00000000000..0c8d77d2837 --- /dev/null +++ b/docs/release_notes/next/fix-2285-crop-coord-stack-bounds @@ -0,0 +1 @@ +#2285: Resolve operations windows crop co-ordinates ROI size from being larger than stack bounds. Additionally resolve ROI crop co-ordinate dialog window persistence if parent window closed. \ No newline at end of file