Source code for spinningdiskanalyzer.frontend.pages.segmentation

from .segmentation_ui import Ui_page
from .page            import Page
from .                import page
from ..               import tasks

from PySide6.QtWidgets import QWidget

from pathlib import Path


[docs] class Segmentation(page.ConfirmClose, page.NavNext, Page): """Segments the cells.""" def __init__(self, parent: QWidget = None): # Load user interface design created in Qt Designer. super().__init__(parent) self.ui = Ui_page() self.ui.setupUi(self) # Make sure hiding buttons does not change layout. button = self.ui.next size_policy = button.sizePolicy() size_policy.setRetainSizeWhenHidden(True) button.setSizePolicy(size_policy) # Connect signals to slots. self.ui.back.clicked.connect(self.go_back.emit) self.ui.next.clicked.connect(self.go_next.emit) # Initialize instance attributes. self.task = None
[docs] def on_enter(self): """Called when entering the page.""" self.mark_busy() self.segment_cells()
[docs] def segment_cells(self): """Triggers the cell segmentation.""" self.task = tasks.SegmentCells() self.task.status_update.connect(self.status_update) self.task.status_clear.connect(self.status_clear) self.task.finished.connect(self.mark_cells) folder = Path(self.parent().select.ui.folder_display.text()) source = folder/'analysis'/'thresholded.tif' target = folder/'analysis'/'cells.tsv' x = self.parent().disk.ui.x.value() y = self.parent().disk.ui.y.value() r = self.parent().disk.ui.r.value() self.task.start(source, target, x, y, r)
[docs] def mark_cells(self): """Triggers marking the cells in the image.""" self.task = tasks.MarkCells() self.task.status_update.connect(self.status_update) self.task.status_clear.connect(self.status_clear) self.task.finished.connect(self.tile_image) folder = Path(self.parent().select.ui.folder_display.text()) source = folder/'analysis'/'disk.tif' target = folder/'analysis'/'segmented.tif' cells = folder/'analysis'/'cells.tsv' self.task.start(source, target, cells)
[docs] def tile_image(self): """Triggers tiling of the display image.""" self.task = tasks.TileImage() self.task.finished.connect(self.tasks_done) self.task.status_update.connect(self.status_update) self.task.status_clear.connect(self.status_clear) folder = Path(self.parent().select.ui.folder_display.text()) source = folder/'analysis'/'segmented.tif' target = folder/'tiles'/'segmented.dzi' self.task.start(source, target)
[docs] def tasks_done(self): """Finishes up when all background tasks are done.""" self.task = None folder = Path(self.parent().select.ui.folder_display.text()) tiled = folder/'tiles'/'segmented.dzi' self.ui.viewer.load(tiled) self.mark_ready()
[docs] def invalidate(self): """Invalidates results from this analysis step.""" self.ui.viewer.load(None) self.flush() folder = Path(self.parent().select.ui.folder_display.text()) tasks.delete( ( folder/'analysis'/'cells.tsv', folder/'analysis'/'segmented.tif', folder/'tiles'/'segmented.dzi', folder/'tiles'/'segmented_files', ) )