Source code for napari_locan.widgets.widget_show_info

"""
Show information for a SMLM dataset.

QWidget plugin for showing additional information
for a single SMLM dataset.
"""

import logging
from collections.abc import Iterable

import locan as lc
from napari.viewer import Viewer
from qtpy.QtWidgets import (
    QCheckBox,
    QHBoxLayout,
    QLabel,
    QVBoxLayout,
    QWidget,
)

from napari_locan import smlm_data
from napari_locan.data_model.smlm_data import SmlmData

logger = logging.getLogger(__name__)


[docs] class ShowInfoQWidget(QWidget): # type: ignore def __init__(self, napari_viewer: Viewer, smlm_data: SmlmData = smlm_data): super().__init__() self.viewer = napari_viewer self.smlm_data = smlm_data self._add_information_meta() self._add_information_collection() self._add_information_selection() self._add_information_coordinate_dimension() self._add_information_localization_count() self.smlm_data.index_changed_signal.emit(self.smlm_data.index) self._set_layout() def _add_information_meta(self) -> None: self._information_meta_checkbox = QCheckBox("has metadata.") self._information_meta_checkbox.setDisabled(True) self._information_meta_checkbox.setToolTip( "If checked the Locdata instance has a meta attribute that is not none." ) self.smlm_data.index_changed_signal.connect(self._update_information_meta) self._information_meta_layout = QHBoxLayout() self._information_meta_layout.addWidget(self._information_meta_checkbox) def _add_information_collection(self) -> None: self._information_collection_checkbox = QCheckBox("is a collection.") self._information_collection_checkbox.setDisabled(True) self._information_collection_checkbox.setToolTip( "If checked the LocData instance has a reference attribute with a collection of other LocData instances." ) self.smlm_data.index_changed_signal.connect(self._update_information_collection) self._information_collection_layout = QHBoxLayout() self._information_collection_layout.addWidget( self._information_collection_checkbox ) def _add_information_selection(self) -> None: self._information_selection_checkbox = QCheckBox("is a selection.") self._information_selection_checkbox.setDisabled(True) self._information_selection_checkbox.setToolTip( "If checked the LocData instance has a reference attribute with a selection for other LocData instances." ) self.smlm_data.index_changed_signal.connect(self._update_information_selection) self._information_selection_layout = QHBoxLayout() self._information_selection_layout.addWidget( self._information_selection_checkbox ) def _add_information_coordinate_dimension(self) -> None: self._information_coordinate_dimension_text_edit = QLabel() self._information_coordinate_dimension_label = QLabel( "Coordinate dimension is:" ) self._information_coordinate_dimension_label.setToolTip( "Number of coordinates available for each localization (i.e. size of coordinate_keys)." ) self.smlm_data.index_changed_signal.connect( self._update_information_coordinate_dimension ) self._information_coordinate_dimension_layout = QHBoxLayout() self._information_coordinate_dimension_layout.addWidget( self._information_coordinate_dimension_label ) self._information_coordinate_dimension_layout.addWidget( self._information_coordinate_dimension_text_edit ) def _add_information_localization_count(self) -> None: self._information_localization_count_text_edit = QLabel() self._information_localization_count_label = QLabel("Number of localizations:") self._information_localization_count_label.setToolTip( "Total number of localizations in SMLM dataset." ) self.smlm_data.index_changed_signal.connect( self._update_localization_count_dimension ) self._information_localization_count_layout = QHBoxLayout() self._information_localization_count_layout.addWidget( self._information_localization_count_label ) self._information_localization_count_layout.addWidget( self._information_localization_count_text_edit ) def _update_information_meta(self) -> None: if ( self.smlm_data.index != -1 and self.smlm_data.locdata is not None and self.smlm_data.locdata.meta is not None ): self._information_meta_checkbox.setChecked(True) else: self._information_meta_checkbox.setChecked(False) def _update_information_collection(self) -> None: if ( self.smlm_data.index != -1 and self.smlm_data.locdata is not None and self.smlm_data.locdata.references is not None and isinstance(self.smlm_data.locdata.references, Iterable) ): self._information_collection_checkbox.setChecked(True) else: self._information_collection_checkbox.setChecked(False) def _update_information_selection(self) -> None: if ( self.smlm_data.index != -1 and self.smlm_data.locdata is not None and self.smlm_data.locdata.references is not None and isinstance(self.smlm_data.locdata.references, lc.LocData) ): self._information_selection_checkbox.setChecked(True) else: self._information_selection_checkbox.setChecked(False) def _update_information_coordinate_dimension(self) -> None: if self.smlm_data.index != -1 and self.smlm_data.locdata is not None: self._information_coordinate_dimension_text_edit.setNum( self.smlm_data.locdata.dimension ) else: self._information_coordinate_dimension_text_edit.clear() def _update_localization_count_dimension(self) -> None: if self.smlm_data.index != -1 and self.smlm_data.locdata is not None: self._information_localization_count_text_edit.setNum( self.smlm_data.locdata.properties["localization_count"] ) else: self._information_localization_count_text_edit.clear() def _set_layout(self) -> None: layout = QVBoxLayout() layout.addLayout(self._information_meta_layout) layout.addLayout(self._information_collection_layout) layout.addLayout(self._information_selection_layout) layout.addLayout(self._information_coordinate_dimension_layout) layout.addLayout(self._information_localization_count_layout) self.setLayout(layout)