celldetective 1.4.2__py3-none-any.whl → 1.5.0b0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- celldetective/__init__.py +25 -0
- celldetective/__main__.py +62 -43
- celldetective/_version.py +1 -1
- celldetective/extra_properties.py +477 -399
- celldetective/filters.py +192 -97
- celldetective/gui/InitWindow.py +541 -411
- celldetective/gui/__init__.py +0 -15
- celldetective/gui/about.py +44 -39
- celldetective/gui/analyze_block.py +120 -84
- celldetective/gui/base/__init__.py +0 -0
- celldetective/gui/base/channel_norm_generator.py +335 -0
- celldetective/gui/base/components.py +249 -0
- celldetective/gui/base/feature_choice.py +92 -0
- celldetective/gui/base/figure_canvas.py +52 -0
- celldetective/gui/base/list_widget.py +133 -0
- celldetective/gui/{styles.py → base/styles.py} +92 -36
- celldetective/gui/base/utils.py +33 -0
- celldetective/gui/base_annotator.py +900 -767
- celldetective/gui/classifier_widget.py +6 -22
- celldetective/gui/configure_new_exp.py +777 -671
- celldetective/gui/control_panel.py +635 -524
- celldetective/gui/dynamic_progress.py +449 -0
- celldetective/gui/event_annotator.py +2023 -1662
- celldetective/gui/generic_signal_plot.py +1292 -944
- celldetective/gui/gui_utils.py +899 -1289
- celldetective/gui/interactions_block.py +658 -0
- celldetective/gui/interactive_timeseries_viewer.py +447 -0
- celldetective/gui/json_readers.py +48 -15
- celldetective/gui/layouts/__init__.py +5 -0
- celldetective/gui/layouts/background_model_free_layout.py +537 -0
- celldetective/gui/layouts/channel_offset_layout.py +134 -0
- celldetective/gui/layouts/local_correction_layout.py +91 -0
- celldetective/gui/layouts/model_fit_layout.py +372 -0
- celldetective/gui/layouts/operation_layout.py +68 -0
- celldetective/gui/layouts/protocol_designer_layout.py +96 -0
- celldetective/gui/pair_event_annotator.py +3130 -2435
- celldetective/gui/plot_measurements.py +586 -267
- celldetective/gui/plot_signals_ui.py +724 -506
- celldetective/gui/preprocessing_block.py +395 -0
- celldetective/gui/process_block.py +1678 -1831
- celldetective/gui/seg_model_loader.py +580 -473
- celldetective/gui/settings/__init__.py +0 -7
- celldetective/gui/settings/_cellpose_model_params.py +181 -0
- celldetective/gui/settings/_event_detection_model_params.py +95 -0
- celldetective/gui/settings/_segmentation_model_params.py +159 -0
- celldetective/gui/settings/_settings_base.py +77 -65
- celldetective/gui/settings/_settings_event_model_training.py +752 -526
- celldetective/gui/settings/_settings_measurements.py +1133 -964
- celldetective/gui/settings/_settings_neighborhood.py +574 -488
- celldetective/gui/settings/_settings_segmentation_model_training.py +779 -564
- celldetective/gui/settings/_settings_signal_annotator.py +329 -305
- celldetective/gui/settings/_settings_tracking.py +1304 -1094
- celldetective/gui/settings/_stardist_model_params.py +98 -0
- celldetective/gui/survival_ui.py +422 -312
- celldetective/gui/tableUI.py +1665 -1701
- celldetective/gui/table_ops/_maths.py +295 -0
- celldetective/gui/table_ops/_merge_groups.py +140 -0
- celldetective/gui/table_ops/_merge_one_hot.py +95 -0
- celldetective/gui/table_ops/_query_table.py +43 -0
- celldetective/gui/table_ops/_rename_col.py +44 -0
- celldetective/gui/thresholds_gui.py +382 -179
- celldetective/gui/viewers/__init__.py +0 -0
- celldetective/gui/viewers/base_viewer.py +700 -0
- celldetective/gui/viewers/channel_offset_viewer.py +331 -0
- celldetective/gui/viewers/contour_viewer.py +394 -0
- celldetective/gui/viewers/size_viewer.py +153 -0
- celldetective/gui/viewers/spot_detection_viewer.py +341 -0
- celldetective/gui/viewers/threshold_viewer.py +309 -0
- celldetective/gui/workers.py +304 -126
- celldetective/log_manager.py +92 -0
- celldetective/measure.py +1895 -1478
- celldetective/napari/__init__.py +0 -0
- celldetective/napari/utils.py +1025 -0
- celldetective/neighborhood.py +1914 -1448
- celldetective/preprocessing.py +1620 -1220
- celldetective/processes/__init__.py +0 -0
- celldetective/processes/background_correction.py +271 -0
- celldetective/processes/compute_neighborhood.py +894 -0
- celldetective/processes/detect_events.py +246 -0
- celldetective/processes/measure_cells.py +565 -0
- celldetective/processes/segment_cells.py +760 -0
- celldetective/processes/track_cells.py +435 -0
- celldetective/processes/train_segmentation_model.py +694 -0
- celldetective/processes/train_signal_model.py +265 -0
- celldetective/processes/unified_process.py +292 -0
- celldetective/regionprops/_regionprops.py +358 -317
- celldetective/relative_measurements.py +987 -710
- celldetective/scripts/measure_cells.py +313 -212
- celldetective/scripts/measure_relative.py +90 -46
- celldetective/scripts/segment_cells.py +165 -104
- celldetective/scripts/segment_cells_thresholds.py +96 -68
- celldetective/scripts/track_cells.py +198 -149
- celldetective/scripts/train_segmentation_model.py +324 -201
- celldetective/scripts/train_signal_model.py +87 -45
- celldetective/segmentation.py +844 -749
- celldetective/signals.py +3514 -2861
- celldetective/tracking.py +30 -15
- celldetective/utils/__init__.py +0 -0
- celldetective/utils/cellpose_utils/__init__.py +133 -0
- celldetective/utils/color_mappings.py +42 -0
- celldetective/utils/data_cleaning.py +630 -0
- celldetective/utils/data_loaders.py +450 -0
- celldetective/utils/dataset_helpers.py +207 -0
- celldetective/utils/downloaders.py +197 -0
- celldetective/utils/event_detection/__init__.py +8 -0
- celldetective/utils/experiment.py +1782 -0
- celldetective/utils/image_augmenters.py +308 -0
- celldetective/utils/image_cleaning.py +74 -0
- celldetective/utils/image_loaders.py +926 -0
- celldetective/utils/image_transforms.py +335 -0
- celldetective/utils/io.py +62 -0
- celldetective/utils/mask_cleaning.py +348 -0
- celldetective/utils/mask_transforms.py +5 -0
- celldetective/utils/masks.py +184 -0
- celldetective/utils/maths.py +351 -0
- celldetective/utils/model_getters.py +325 -0
- celldetective/utils/model_loaders.py +296 -0
- celldetective/utils/normalization.py +380 -0
- celldetective/utils/parsing.py +465 -0
- celldetective/utils/plots/__init__.py +0 -0
- celldetective/utils/plots/regression.py +53 -0
- celldetective/utils/resources.py +34 -0
- celldetective/utils/stardist_utils/__init__.py +104 -0
- celldetective/utils/stats.py +90 -0
- celldetective/utils/types.py +21 -0
- {celldetective-1.4.2.dist-info → celldetective-1.5.0b0.dist-info}/METADATA +1 -1
- celldetective-1.5.0b0.dist-info/RECORD +187 -0
- {celldetective-1.4.2.dist-info → celldetective-1.5.0b0.dist-info}/WHEEL +1 -1
- tests/gui/test_new_project.py +129 -117
- tests/gui/test_project.py +127 -79
- tests/test_filters.py +39 -15
- tests/test_notebooks.py +8 -0
- tests/test_tracking.py +232 -13
- tests/test_utils.py +123 -77
- celldetective/gui/base_components.py +0 -23
- celldetective/gui/layouts.py +0 -1602
- celldetective/gui/processes/compute_neighborhood.py +0 -594
- celldetective/gui/processes/measure_cells.py +0 -360
- celldetective/gui/processes/segment_cells.py +0 -499
- celldetective/gui/processes/track_cells.py +0 -303
- celldetective/gui/processes/train_segmentation_model.py +0 -270
- celldetective/gui/processes/train_signal_model.py +0 -108
- celldetective/gui/table_ops/merge_groups.py +0 -118
- celldetective/gui/viewers.py +0 -1354
- celldetective/io.py +0 -3663
- celldetective/utils.py +0 -3108
- celldetective-1.4.2.dist-info/RECORD +0 -123
- /celldetective/{gui/processes → processes}/downloader.py +0 -0
- {celldetective-1.4.2.dist-info → celldetective-1.5.0b0.dist-info}/entry_points.txt +0 -0
- {celldetective-1.4.2.dist-info → celldetective-1.5.0b0.dist-info}/licenses/LICENSE +0 -0
- {celldetective-1.4.2.dist-info → celldetective-1.5.0b0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
from PyQt5.QtWidgets import QVBoxLayout, QComboBox, QHBoxLayout, QLabel, QPushButton
|
|
2
|
+
|
|
3
|
+
from celldetective.gui.base.components import CelldetectiveWidget
|
|
4
|
+
from celldetective.gui.base.utils import center_window
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class StarDistParamsWidget(CelldetectiveWidget):
|
|
8
|
+
"""
|
|
9
|
+
A widget to configure parameters for StarDist segmentation.
|
|
10
|
+
|
|
11
|
+
This widget allows the user to select specific imaging channels for segmentation and adjust
|
|
12
|
+
parameters for StarDist, a neural network-based image segmentation tool designed to segment
|
|
13
|
+
star-convex shapes (typically nuclei).
|
|
14
|
+
|
|
15
|
+
Parameters
|
|
16
|
+
----------
|
|
17
|
+
parent_window : QWidget, optional
|
|
18
|
+
The parent window hosting this widget (default is None).
|
|
19
|
+
model_name : str, optional
|
|
20
|
+
The name of the StarDist model being used, typically 'SD_versatile_fluo' for versatile
|
|
21
|
+
fluorescence or 'SD_versatile_he' for H&E-stained images (default is 'SD_versatile_fluo').
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
def __init__(
|
|
25
|
+
self, parent_window=None, model_name="SD_versatile_fluo", *args, **kwargs
|
|
26
|
+
):
|
|
27
|
+
|
|
28
|
+
super().__init__(*args)
|
|
29
|
+
self.setWindowTitle("Channels")
|
|
30
|
+
self.parent_window = parent_window
|
|
31
|
+
self.model_name = model_name
|
|
32
|
+
|
|
33
|
+
# Setting up references to parent window attributes
|
|
34
|
+
if hasattr(self.parent_window.parent_window, "locate_image"):
|
|
35
|
+
self.attr_parent = self.parent_window.parent_window
|
|
36
|
+
elif hasattr(self.parent_window.parent_window.parent_window, "locate_image"):
|
|
37
|
+
self.attr_parent = self.parent_window.parent_window.parent_window
|
|
38
|
+
else:
|
|
39
|
+
self.attr_parent = (
|
|
40
|
+
self.parent_window.parent_window.parent_window.parent_window
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
# Set up layout and widgets
|
|
44
|
+
self.layout = QVBoxLayout()
|
|
45
|
+
self.populate_widgets()
|
|
46
|
+
self.setLayout(self.layout)
|
|
47
|
+
center_window(self)
|
|
48
|
+
|
|
49
|
+
def populate_widgets(self):
|
|
50
|
+
"""
|
|
51
|
+
Populates the widget with channel selection comboboxes and a 'set' button to configure
|
|
52
|
+
the StarDist segmentation settings. Handles different models by adjusting the number of
|
|
53
|
+
available channels.
|
|
54
|
+
"""
|
|
55
|
+
|
|
56
|
+
# Initialize comboboxes based on the selected model
|
|
57
|
+
self.stardist_channel_cb = [QComboBox() for i in range(1)]
|
|
58
|
+
self.stardist_channel_template = ["live_nuclei_channel"]
|
|
59
|
+
max_i = 1
|
|
60
|
+
|
|
61
|
+
# If the H&E model is selected, update the combobox configuration
|
|
62
|
+
if self.model_name == "SD_versatile_he":
|
|
63
|
+
self.stardist_channel_template = ["H&E_1", "H&E_2", "H&E_3"]
|
|
64
|
+
self.stardist_channel_cb = [QComboBox() for i in range(3)]
|
|
65
|
+
max_i = 3
|
|
66
|
+
|
|
67
|
+
# Populate the comboboxes with available channels from the experiment
|
|
68
|
+
for k in range(max_i):
|
|
69
|
+
hbox_channel = QHBoxLayout()
|
|
70
|
+
hbox_channel.addWidget(QLabel(f"channel {k+1}: "))
|
|
71
|
+
hbox_channel.addWidget(self.stardist_channel_cb[k])
|
|
72
|
+
if k == 1:
|
|
73
|
+
self.stardist_channel_cb[k].addItems(
|
|
74
|
+
list(self.attr_parent.exp_channels) + ["None"]
|
|
75
|
+
)
|
|
76
|
+
else:
|
|
77
|
+
self.stardist_channel_cb[k].addItems(
|
|
78
|
+
list(self.attr_parent.exp_channels)
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
# Set the default channel based on the template or fallback to the first option
|
|
82
|
+
idx = self.stardist_channel_cb[k].findText(
|
|
83
|
+
self.stardist_channel_template[k]
|
|
84
|
+
)
|
|
85
|
+
if idx > 0:
|
|
86
|
+
self.stardist_channel_cb[k].setCurrentIndex(idx)
|
|
87
|
+
else:
|
|
88
|
+
self.stardist_channel_cb[k].setCurrentIndex(0)
|
|
89
|
+
|
|
90
|
+
self.layout.addLayout(hbox_channel)
|
|
91
|
+
|
|
92
|
+
# Button to apply the StarDist settings
|
|
93
|
+
self.set_stardist_scale_btn = QPushButton("set")
|
|
94
|
+
self.set_stardist_scale_btn.setStyleSheet(self.button_style_sheet)
|
|
95
|
+
self.set_stardist_scale_btn.clicked.connect(
|
|
96
|
+
self.parent_window.set_stardist_scale
|
|
97
|
+
)
|
|
98
|
+
self.layout.addWidget(self.set_stardist_scale_btn)
|