Skip to content

Commit

Permalink
Refactoring for SpectrumROI (#2506)
Browse files Browse the repository at this point in the history
  • Loading branch information
MikeSullivan7 authored Feb 26, 2025
2 parents 65f8cf5 + 4ee4026 commit c409e60
Show file tree
Hide file tree
Showing 6 changed files with 17 additions and 48 deletions.
2 changes: 1 addition & 1 deletion mantidimaging/gui/test/gui_system_liveviewer_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ def test_roi_resized(self):
QTest.qWait(SHORT_DELAY)
wait_until(lambda: not np.isnan(self.live_viewer_window.presenter.model.mean).any(), max_retry=600)
old_mean = self.live_viewer_window.presenter.model.mean
roi = self.live_viewer_window.live_viewer.roi_object.roi
roi = self.live_viewer_window.live_viewer.roi_object
handle_index = 0
new_position = (10, 20)
roi.movePoint(handle_index, new_position)
Expand Down
12 changes: 4 additions & 8 deletions mantidimaging/gui/windows/live_viewer/live_view_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
from PyQt5.QtCore import pyqtSignal
from pyqtgraph import GraphicsLayoutWidget, mkPen

from mantidimaging.core.utility.close_enough_point import CloseEnoughPoint
from mantidimaging.core.utility.sensible_roi import SensibleROI
from mantidimaging.gui.widgets.mi_mini_image_view.view import MIMiniImageView
from mantidimaging.gui.widgets.zslider.zslider import ZSlider
Expand Down Expand Up @@ -65,17 +64,14 @@ def add_roi(self) -> None:
self.roi_object = SpectrumROI('roi', roi, rotatable=False, scaleSnap=True, translateSnap=True)
self.roi_object.colour = (255, 194, 10, 255)
self.roi_object.hoverPen = mkPen(self.roi_object.colour, width=3)
self.roi_object.roi.sigRegionChangeFinished.connect(self.roi_changed.emit)
self.roi_object.roi.sigRegionChanged.connect(self.roi_changing.emit)
self.image.vb.addItem(self.roi_object.roi)
self.roi_object.sigRegionChangeFinished.connect(self.roi_changed.emit)
self.roi_object.sigRegionChanged.connect(self.roi_changing.emit)
self.image.vb.addItem(self.roi_object)

def get_roi(self) -> SensibleROI | None:
if not self.roi_object:
return None
roi = self.roi_object.roi
pos = CloseEnoughPoint(roi.pos())
size = CloseEnoughPoint(roi.size())
return SensibleROI.from_points(pos, size)
return self.roi_object.as_sensible_roi()

def set_roi_visibility_flags(self, visible: bool) -> None:
if not self.roi_object:
Expand Down
2 changes: 1 addition & 1 deletion mantidimaging/gui/windows/live_viewer/presenter.py
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,7 @@ def update_intensity_with_mean(self) -> None:

def set_roi_enabled(self, enable: bool):
if self.view.live_viewer.roi_object is not None:
self.view.live_viewer.roi_object.roi.blockSignals(not enable)
self.view.live_viewer.roi_object.blockSignals(not enable)

def try_next_mean_chunk(self) -> None:
if np.isnan(self.model.mean).any():
Expand Down
2 changes: 1 addition & 1 deletion mantidimaging/gui/windows/spectrum_viewer/presenter.py
Original file line number Diff line number Diff line change
Expand Up @@ -343,7 +343,7 @@ def do_add_roi(self) -> None:
self.view.auto_range_image()
self.do_add_roi_to_table(roi_name)

def change_roi_colour(self, roi_name: str, new_colour: tuple[int, int, int]) -> None:
def change_roi_colour(self, roi_name: str, new_colour: tuple[int, int, int, int]) -> None:
"""
Change the colour of a given ROI in both the spectrum widget and the table.
Expand Down
41 changes: 7 additions & 34 deletions mantidimaging/gui/windows/spectrum_viewer/spectrum_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,15 +36,14 @@ def __init__(self, name: str, sensible_roi: SensibleROI, *args, **kwargs) -> Non
kwargs["pos"] = sensible_roi.left, sensible_roi.top
kwargs["size"] = sensible_roi.width, sensible_roi.height
super().__init__(*args, **kwargs)
self._name = name
self.name = name
self._colour = (0, 0, 0, 255)
self.maxBounds = self.parentBounds()
self.addScaleHandle([1, 1], [0, 0])
self.addScaleHandle([1, 0], [0, 1])
self.addScaleHandle([0, 0], [1, 1])
self.addScaleHandle([0, 1], [1, 0])
self._selected_row = None
self.roi.setAcceptedMouseButtons(Qt.MouseButton.LeftButton)
self.setAcceptedMouseButtons(Qt.MouseButton.LeftButton)

self.menu = QMenu()
self.change_color_action = QAction("Change ROI Colour", self)
Expand All @@ -54,33 +53,17 @@ def __init__(self, name: str, sensible_roi: SensibleROI, *args, **kwargs) -> Non
def onChangeColor(self) -> None:
current_color = QColor(*self._colour)
selected_color = self.openColorDialog(current_color)
color_valid = self.check_color_valid(selected_color)
if color_valid:
if selected_color.isValid():
new_color = (selected_color.red(), selected_color.green(), selected_color.blue(), 255)
self._colour = new_color
self.sig_colour_change.emit(self._name, new_color)
self.sig_colour_change.emit(self.name, new_color)

def openColorDialog(self, current_color: QColor) -> QColor:
return QColorDialog.getColor(current_color)

def check_color_valid(self, get_colour: QColor) -> bool:
return get_colour.isValid()

def contextMenuEnabled(self) -> bool:
return True

@property
def name(self) -> str:
return self._name

@name.setter
def name(self, name: str) -> None:
self._name = name

@property
def roi(self) -> ROI:
return self

@property
def colour(self) -> tuple[int, int, int, int]:
return self._colour
Expand All @@ -99,17 +82,10 @@ def set_visibility(self, visible: bool) -> None:
for handle in self.getHandles():
handle.setVisible(visible)

@property
def selected_row(self) -> int | None:
return self._selected_row

def adjust_spec_roi(self, roi: SensibleROI) -> None:
self.setPos((roi.left, roi.top))
self.setSize((roi.width, roi.height))

def rename_roi(self, new_name: str) -> None:
self._name = new_name

def as_sensible_roi(self) -> SensibleROI:
"""
Converts the SpectrumROI to a SensibleROI object.
Expand All @@ -133,7 +109,6 @@ class SpectrumWidget(QWidget):
spectrum: PlotItem

range_control: LinearRegionItem
roi_dict: dict[str, ROI]
last_clicked_roi: str

range_changed = pyqtSignal(object)
Expand Down Expand Up @@ -162,7 +137,7 @@ def __init__(self, main_window: MainWindowView) -> None:

self.spectrum_data_dict: dict[str, np.ndarray | None] = {}

self.roi_dict: dict[str, ROI] = {}
self.roi_dict: dict[str, SpectrumROI] = {}
self.colour_index = 0

def cleanup(self) -> None:
Expand Down Expand Up @@ -234,9 +209,7 @@ def get_roi(self, roi_name: str) -> SensibleROI:
@return: The ROI with the given name.
"""
if roi_name in self.roi_dict.keys():
pos = CloseEnoughPoint(self.roi_dict[roi_name].pos())
size = CloseEnoughPoint(self.roi_dict[roi_name].size())
return SensibleROI.from_points(pos, size)
return self.roi_dict[roi_name].as_sensible_roi()
elif roi_name == "all":
pos = CloseEnoughPoint((0, 0))
size = CloseEnoughPoint(self.max_roi_size)
Expand Down Expand Up @@ -275,7 +248,7 @@ def rename_roi(self, old_name: str, new_name: str) -> None:

self.roi_dict[new_name] = self.roi_dict.pop(old_name)
self.spectrum_data_dict[new_name] = self.spectrum_data_dict.pop(old_name)
self.roi_dict[new_name].rename_roi(new_name)
self.roi_dict[new_name].name = new_name

def _emit_roi_changed(self):
sender_roi = self.sender()
Expand Down
6 changes: 3 additions & 3 deletions mantidimaging/gui/windows/spectrum_viewer/view.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,15 +174,15 @@ def set_old_table_names(self, old_table_names) -> None:
if 'rits_roi' in self.old_table_names:
self.old_table_names.remove('rits_roi')

def update_roi_color(self, roi_name: str, new_color: tuple[int, int, int]) -> None:
def update_roi_color(self, roi_name: str, new_color: tuple[int, int, int, int]) -> None:
"""
Finds ROI by name in table and updates it's colour (R, G, B) format.
"""
row = self.find_row_for_roi(roi_name)
if row is not None:
self._roi_table_model.update_color(row, new_color)

def add_row(self, name: str, colour: tuple[int, int, int], roi_names: list[str]) -> None:
def add_row(self, name: str, colour: tuple[int, int, int, int], roi_names: list[str]) -> None:
"""
Add a new row to the ROI table
"""
Expand Down Expand Up @@ -560,7 +560,7 @@ def show_visible_spectrums(self) -> None:
name=key,
pen=self.spectrum_widget.roi_dict[key].colour)

def add_roi_table_row(self, name: str, colour: tuple[int, int, int]) -> None:
def add_roi_table_row(self, name: str, colour: tuple[int, int, int, int]) -> None:
"""
Add a new row to the ROI table
Expand Down

0 comments on commit c409e60

Please sign in to comment.