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,90 @@
|
|
|
1
|
+
from typing import Optional, Union, List
|
|
2
|
+
|
|
3
|
+
import pandas as pd
|
|
4
|
+
from cliffs_delta import cliffs_delta
|
|
5
|
+
from scipy.stats import ks_2samp
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def test_2samp_generic(
|
|
9
|
+
data: pd.DataFrame,
|
|
10
|
+
feature: Optional[str] = None,
|
|
11
|
+
groupby_cols: Optional[Union[str, List[str]]] = None,
|
|
12
|
+
method="ks_2samp",
|
|
13
|
+
*args,
|
|
14
|
+
**kwargs,
|
|
15
|
+
) -> pd.DataFrame:
|
|
16
|
+
"""
|
|
17
|
+
Performs pairwise statistical tests between groups of data, comparing a specified feature using a chosen method.
|
|
18
|
+
|
|
19
|
+
The function applies two-sample statistical tests, such as the Kolmogorov-Smirnov (KS) test or Cliff's Delta,
|
|
20
|
+
to compare distributions of a given feature across groups defined by `groupby_cols`. It returns the test results
|
|
21
|
+
in a pivot table format with each group's pairwise comparison.
|
|
22
|
+
|
|
23
|
+
Parameters
|
|
24
|
+
----------
|
|
25
|
+
data : pandas.DataFrame
|
|
26
|
+
The input dataset containing the feature to be tested.
|
|
27
|
+
feature : str
|
|
28
|
+
The name of the column representing the feature to compare between groups.
|
|
29
|
+
groupby_cols : list or str
|
|
30
|
+
The column(s) used to group the data. These columns define the groups that will be compared pairwise.
|
|
31
|
+
method : str, optional, default="ks_2samp"
|
|
32
|
+
The statistical test to use. Options:
|
|
33
|
+
- "ks_2samp": Two-sample Kolmogorov-Smirnov test (default).
|
|
34
|
+
- "cliffs_delta": Cliff's Delta for effect size between two distributions.
|
|
35
|
+
*args, **kwargs :
|
|
36
|
+
Additional arguments and keyword arguments for the selected test method.
|
|
37
|
+
|
|
38
|
+
Returns
|
|
39
|
+
-------
|
|
40
|
+
pivot : pandas.DataFrame
|
|
41
|
+
A pivot table containing the pairwise test results (p-values or effect sizes).
|
|
42
|
+
The rows and columns represent the unique groups defined by `groupby_cols`,
|
|
43
|
+
and the values represent the test result (e.g., p-values or effect sizes) between each group.
|
|
44
|
+
|
|
45
|
+
Notes
|
|
46
|
+
-----
|
|
47
|
+
- The function compares all unique pairwise combinations of the groups based on `groupby_cols`.
|
|
48
|
+
- For the "ks_2samp" method, the test compares the distributions using the Kolmogorov-Smirnov test.
|
|
49
|
+
- For the "cliffs_delta" method, the function calculates the effect size between two distributions.
|
|
50
|
+
- The results are returned in a symmetric pivot table where each cell represents the test result for the corresponding group pair.
|
|
51
|
+
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
assert groupby_cols is not None, "Please set a valid groupby_cols..."
|
|
55
|
+
assert feature is not None, "Please set a feature to test..."
|
|
56
|
+
|
|
57
|
+
results = []
|
|
58
|
+
|
|
59
|
+
for lbl1, group1 in data.dropna(subset=feature).groupby(groupby_cols):
|
|
60
|
+
for lbl2, group2 in data.dropna(subset=feature).groupby(groupby_cols):
|
|
61
|
+
|
|
62
|
+
dist1 = group1[feature].values
|
|
63
|
+
dist2 = group2[feature].values
|
|
64
|
+
if method == "ks_2samp":
|
|
65
|
+
test = ks_2samp(
|
|
66
|
+
list(dist1),
|
|
67
|
+
list(dist2),
|
|
68
|
+
alternative="less",
|
|
69
|
+
mode="auto",
|
|
70
|
+
*args,
|
|
71
|
+
**kwargs,
|
|
72
|
+
)
|
|
73
|
+
val = test.pvalue
|
|
74
|
+
elif method == "cliffs_delta":
|
|
75
|
+
test = cliffs_delta(list(dist1), list(dist2), *args, **kwargs)
|
|
76
|
+
val = test[0]
|
|
77
|
+
|
|
78
|
+
results.append({"cdt1": lbl1, "cdt2": lbl2, "value": val})
|
|
79
|
+
|
|
80
|
+
results = pd.DataFrame(results)
|
|
81
|
+
results["cdt1"] = results["cdt1"].astype(str)
|
|
82
|
+
results["cdt2"] = results["cdt2"].astype(str)
|
|
83
|
+
|
|
84
|
+
pivot = results.pivot(index="cdt1", columns="cdt2", values="value")
|
|
85
|
+
pivot.reset_index(inplace=True)
|
|
86
|
+
pivot.columns.name = None
|
|
87
|
+
pivot.set_index("cdt1", drop=True, inplace=True)
|
|
88
|
+
pivot.index.name = None
|
|
89
|
+
|
|
90
|
+
return pivot
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import numpy
|
|
2
|
+
import numpy as np
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def is_integer_array(arr: np.ndarray) -> bool:
|
|
6
|
+
|
|
7
|
+
# Mask out NaNs
|
|
8
|
+
non_nan_values = arr[arr == arr].flatten()
|
|
9
|
+
test = np.all(np.mod(non_nan_values, 1) == 0)
|
|
10
|
+
|
|
11
|
+
if test:
|
|
12
|
+
return True
|
|
13
|
+
else:
|
|
14
|
+
return False
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def test_bool_array(array):
|
|
18
|
+
if array.dtype == "bool":
|
|
19
|
+
return np.array(array, dtype=int)
|
|
20
|
+
else:
|
|
21
|
+
return array
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
celldetective/__init__.py,sha256=LfnOyfUnYPGDc8xcsF_PfYEL7-CqAb7BMBPBIWGv84o,666
|
|
2
|
+
celldetective/__main__.py,sha256=Rzzu9ArxZSgfBVjV-lyn-3oanQB2MumQR6itK5ZaRpA,2597
|
|
3
|
+
celldetective/_version.py,sha256=AMZ674Vi7YVfxguQYyBETUqhTbHYuk3GDM_LK-X1UBg,23
|
|
4
|
+
celldetective/events.py,sha256=n15R53c7QZ2wT8gjb0oeNikQbuRBrVVbyNsRCqXjzXA,8166
|
|
5
|
+
celldetective/exceptions.py,sha256=f3VmIYOthWTiqMEV5xQCox2rw5c5e7yog88h-CcV4oI,356
|
|
6
|
+
celldetective/extra_properties.py,sha256=s_2R4_El2p-gQNZ_EpgDxgrN3UnRitN7KDKHhyLuoHc,21681
|
|
7
|
+
celldetective/filters.py,sha256=QSRSpqvwUfa0YrU5EKoobJWCQFy07fFHwZ2bXxTL3hE,6933
|
|
8
|
+
celldetective/log_manager.py,sha256=Tv7_mVn0TVOyTs_2VnyEKl9_NMeDUtEkLC5njUq-r-Y,2968
|
|
9
|
+
celldetective/measure.py,sha256=Nlbh-YT7D2uafRRGFTl2a63UDkBkbBXnnMqs9zWXP_I,71854
|
|
10
|
+
celldetective/neighborhood.py,sha256=Z5wu2nSMvabrQz91oy6DRf2o90LUY0RMXTEwgW7ORAg,74844
|
|
11
|
+
celldetective/preprocessing.py,sha256=tjAMLG4ZMfopMSFulGGjMQox7czEcReV2MzEkWlL2eQ,59948
|
|
12
|
+
celldetective/relative_measurements.py,sha256=j7xIj1FiY3kn5nA_wMqHV3wvjqikjnk99kZ7v9G6I5Q,42928
|
|
13
|
+
celldetective/segmentation.py,sha256=Itg8xbfEziQKApA7YCo9FTk8c44OrlsJbvtkik6tkgE,33567
|
|
14
|
+
celldetective/signals.py,sha256=2UURVmeonNgUHpiMQVSps0E9VuskKSbsfsmeCtEmfp8,137484
|
|
15
|
+
celldetective/tracking.py,sha256=pjejp65IltUMjW_tlbxjYW0SoBR1-gaEeSJa0y2cWpw,49286
|
|
16
|
+
celldetective/datasets/segmentation_annotations/blank,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
|
+
celldetective/datasets/signal_annotations/blank,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
|
+
celldetective/gui/InitWindow.py,sha256=ynelHEkC9USY14MrsHr_HKtC6YPWQOahk3sv-ZcaKFc,20921
|
|
19
|
+
celldetective/gui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
|
+
celldetective/gui/about.py,sha256=l9SA7WnQs3ISPvZYAGMmf1A0GRXcinkyGwWJpG8akFQ,1977
|
|
21
|
+
celldetective/gui/analyze_block.py,sha256=R82PVFHXfKn8BvUCpbjDOkLBNF4xRVCzYKFHitjw0kk,4114
|
|
22
|
+
celldetective/gui/base_annotator.py,sha256=zMvfbuijCiEdPFOGTc_LPxGpdBX-BRtq6VuDXGvXk08,32364
|
|
23
|
+
celldetective/gui/classifier_widget.py,sha256=uQ9KQmUFp6qWy0Aic-AKB9DkGNpOLxaERtYBSIX9RHw,25424
|
|
24
|
+
celldetective/gui/configure_new_exp.py,sha256=vgT6ozRIGDvT3R0qENlqvDn17BpKnwyJRhRhDS6ax8A,29954
|
|
25
|
+
celldetective/gui/control_panel.py,sha256=vT8Ny9JHGnx25CygjkjqLHBqwj7tL7q-tE4R_iildiQ,24115
|
|
26
|
+
celldetective/gui/dynamic_progress.py,sha256=wjTmDPy62qssY0zdteP3T9umIGGQk0UvebFIdn54CIc,16676
|
|
27
|
+
celldetective/gui/event_annotator.py,sha256=kCrehnLQagLXqViWHcOF-kHj9i1pbdJ97CLUU-HOM7w,73019
|
|
28
|
+
celldetective/gui/generic_signal_plot.py,sha256=D3b6pG1yrSi8C2PPyYzK2yA6711CBBPRp5_OIrjayqs,49348
|
|
29
|
+
celldetective/gui/gui_utils.py,sha256=KbxgwOXGKup_w2FntJxFDSl-eUmc2aqq6h3O5nW8nO0,33258
|
|
30
|
+
celldetective/gui/interactions_block.py,sha256=6HiCvRnVpfxgPJLYOy9gFyPKTApsXjGgojTqri9gW6Y,27401
|
|
31
|
+
celldetective/gui/interactive_timeseries_viewer.py,sha256=BLVOXf2Rx-6DFDW-dKqa8Fw0Q1OeC72J0qwUytuZUaU,15943
|
|
32
|
+
celldetective/gui/json_readers.py,sha256=t5rhtIxACj0pdwLrnPs-QjyhQo3P25UGWGgOCIBhQxs,4572
|
|
33
|
+
celldetective/gui/pair_event_annotator.py,sha256=QJHaM-z0K2I36sLf6XCMFMymfw-nFhzfGJ8oxrMfZco,124091
|
|
34
|
+
celldetective/gui/plot_measurements.py,sha256=pTBA8_XtAZRsxNtWqd8obOHbDqKyz-c1R085xy7y4Ns,56675
|
|
35
|
+
celldetective/gui/plot_signals_ui.py,sha256=oReZwCZw89pFtwuezGQNI6kAz8Q_daKHvNoAKEgzn2w,28195
|
|
36
|
+
celldetective/gui/preprocessing_block.py,sha256=cgUBv-eQBwfidK48-cTWJi0PS62wlXhsNLnsKhy6MQY,14967
|
|
37
|
+
celldetective/gui/process_block.py,sha256=byOZ-dz65mUJ66shzu3RNsuVQ4zGhiolAzI5LlKsxAc,67444
|
|
38
|
+
celldetective/gui/seg_model_loader.py,sha256=6DzpX630JJgtcsaDEuWA8PEkeb8FC3p__3xeSiFqdGo,23549
|
|
39
|
+
celldetective/gui/survival_ui.py,sha256=IwdRm1gRvhkWdMtrQk04OIKKksW3NZSGYtZO_2GptrA,16034
|
|
40
|
+
celldetective/gui/tableUI.py,sha256=kZP2lp9NwHtbWEqIyaDwohX42tRkhI0Hlf_8O5w5BD0,61267
|
|
41
|
+
celldetective/gui/thresholds_gui.py,sha256=w6ke2TyIEi71LxbuFGz0UrwH8h21N_ESU-o6xq_NNKo,33346
|
|
42
|
+
celldetective/gui/workers.py,sha256=0U-wn_dmZjB2idGjpM8s_1dLET9Eh2TmVWB6PLJTSas,11411
|
|
43
|
+
celldetective/gui/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
44
|
+
celldetective/gui/base/channel_norm_generator.py,sha256=JqNAo87zA3nMKzkGjvoeV-SHI89eIATwQj4jHv3-LpI,13973
|
|
45
|
+
celldetective/gui/base/components.py,sha256=DF1sT2AZIpTec7mYYihIMTDYKRrT5k2DoaceZjvAEEw,7452
|
|
46
|
+
celldetective/gui/base/feature_choice.py,sha256=n1T2fPoNLiTDS_6fa_GuGReDhBW11HdUrKy2RywotF8,2800
|
|
47
|
+
celldetective/gui/base/figure_canvas.py,sha256=dQlmLfB3PUttFmyHZIvSc_9GQ5JRy7jH9w7lyKAGElk,1523
|
|
48
|
+
celldetective/gui/base/list_widget.py,sha256=_WU3ZRU7UcJZIxm8qx_5HF7IK7dUu8IU1FY2AaW_qgo,4694
|
|
49
|
+
celldetective/gui/base/styles.py,sha256=3Kz1eXw6OLr90wtErhK0KPJyJbyhAlqkniqm0JNGwFc,7407
|
|
50
|
+
celldetective/gui/base/utils.py,sha256=KojauRKGM9XKNhaWn211p6mJNZWIHLH75yeLpDd7pvA,1103
|
|
51
|
+
celldetective/gui/help/DL-segmentation-strategy.json,sha256=PZD9xXjrwbX3TiudHJPuvcyZD28o4k-fVgeTd7dBKzI,1583
|
|
52
|
+
celldetective/gui/help/Threshold-vs-DL.json,sha256=rrFnZT2DhyS7g1nIDWeUV8-HH7M2Sv8D7sDCGBU1M_0,934
|
|
53
|
+
celldetective/gui/help/cell-populations.json,sha256=e5yJp75rKsYkGVuO8stXxU1TznkADw71djdMUs21gd8,1200
|
|
54
|
+
celldetective/gui/help/exp-structure.json,sha256=61zZAHms7se4Vtuma904xKMsNlWuTOIeF24cbwQiYQg,1973
|
|
55
|
+
celldetective/gui/help/feature-btrack.json,sha256=wvKFiM38AvfQ2QsePDjTflOovqq04CWYcK2QXZhHs-A,693
|
|
56
|
+
celldetective/gui/help/neighborhood.json,sha256=h-aFuQUFM1mnjZPLE0eR6oaRGcRFLeK8ilTXICqkzzg,1259
|
|
57
|
+
celldetective/gui/help/prefilter-for-segmentation.json,sha256=NEL6O2nj_l8ImjMzzX6qqg7U9QV01sgZMFvkGHUiG4E,791
|
|
58
|
+
celldetective/gui/help/preprocessing.json,sha256=M-AxW6zYB5oDiQdoc9wcky8C5p0m6uv-CJMLpUVboew,4716
|
|
59
|
+
celldetective/gui/help/propagate-classification.json,sha256=F7Ir1mtgRVTXWLN7n3ny3vrU01LFNeDh5dN2QBIXHqE,1227
|
|
60
|
+
celldetective/gui/help/track-postprocessing.json,sha256=VaGd8EEkA33OL-EI3NXWZ8yHeWWyUeImDF5yAjsVYGA,3990
|
|
61
|
+
celldetective/gui/help/tracking.json,sha256=yIAoOToqCSQ_XF4gwEZCcyXcvQ3mROju263ZPDvlUyY,776
|
|
62
|
+
celldetective/gui/layouts/__init__.py,sha256=Rm0i-juuITLlBLyvwaLaOCY9yyWV4OCKp8uVc89rQps,320
|
|
63
|
+
celldetective/gui/layouts/background_model_free_layout.py,sha256=YvuO2YmHxDTuPxIwfuVsNrO_uM3TQCiFvZFT_6diBaI,20332
|
|
64
|
+
celldetective/gui/layouts/channel_offset_layout.py,sha256=DKn0HKSVg_44khxopUz55YQoLxccMM84fmyH8H88n-c,5133
|
|
65
|
+
celldetective/gui/layouts/local_correction_layout.py,sha256=oSRPYYMHsYvafxmBQ7oFTP9UajuD0cH276sO9pd4wVY,3136
|
|
66
|
+
celldetective/gui/layouts/model_fit_layout.py,sha256=7rxwYKaV9YaMuJljjx2oDvlF38fgd7nvWM5rCxFV_QA,14474
|
|
67
|
+
celldetective/gui/layouts/operation_layout.py,sha256=mdUPEdoViFlvLy05-XP9lQyN6-MlEx3EcbbQbovUONs,2381
|
|
68
|
+
celldetective/gui/layouts/protocol_designer_layout.py,sha256=JkEbUiYOHSPV08hYIC8_g2Znj4IznTYO-ui-iR_F9Us,3344
|
|
69
|
+
celldetective/gui/settings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
70
|
+
celldetective/gui/settings/_cellpose_model_params.py,sha256=oeoyT_aGIQe_Y9LJi6ZZD9cnQT5sZvErxxPWAyy30Eo,7705
|
|
71
|
+
celldetective/gui/settings/_event_detection_model_params.py,sha256=f3jkh6f3oE-_5pCaf44yKSA-hs9YoSZoFQU7v9pJLKI,3683
|
|
72
|
+
celldetective/gui/settings/_segmentation_model_params.py,sha256=YooEXRlkmOlHCyReiFynagrxBQn2y-dTB0FgowqZno0,6471
|
|
73
|
+
celldetective/gui/settings/_settings_base.py,sha256=_Yfq6vLkwm4FW5n0-SjVQjdhfL3hR5pUGBc0ttq_YXE,2576
|
|
74
|
+
celldetective/gui/settings/_settings_event_model_training.py,sha256=TVPnnYPmdAF6PJciJ0Y9z5uC9Md8rlrsUJWcp_IrIRk,29546
|
|
75
|
+
celldetective/gui/settings/_settings_measurements.py,sha256=nrVR1dG3B7iyJayRql1yierhKvgXZiu6qVtfkxI1ABA,47947
|
|
76
|
+
celldetective/gui/settings/_settings_neighborhood.py,sha256=ws6H99bKU4NYd2IYyaJj7g9-MScr5W6UB2raP88ytfE,23767
|
|
77
|
+
celldetective/gui/settings/_settings_segmentation.py,sha256=6DihD1mk-dN4Sstdth1iJ-0HR34rTVlTHP-pXUh_rY0,1901
|
|
78
|
+
celldetective/gui/settings/_settings_segmentation_model_training.py,sha256=XxqSCxLHOvn1w8V8ZEEfPAvdwfS0IKz107ox4yll7AA,30229
|
|
79
|
+
celldetective/gui/settings/_settings_signal_annotator.py,sha256=Mvvre-yHJvRoR-slbkLNwEemuGgiMCQQ4H1BHjFk3r4,12412
|
|
80
|
+
celldetective/gui/settings/_settings_tracking.py,sha256=5ZxJp3o3stD2NKdhqZofIgsUNp73oAN_pIi_bDFAd0Y,53293
|
|
81
|
+
celldetective/gui/settings/_stardist_model_params.py,sha256=dEKhaLcJ4r8VxgBU2DI-hcTaTk5S181O-_CN0j7JSgE,4020
|
|
82
|
+
celldetective/gui/table_ops/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
83
|
+
celldetective/gui/table_ops/_maths.py,sha256=bvsZCGnGX3EScQ4XJ6CBgyRiHPIBviyZtfsukE5IbZw,10672
|
|
84
|
+
celldetective/gui/table_ops/_merge_groups.py,sha256=Pjfuk1o6cRWGaybCqL4YxPjFvbWKi6DpRFx2nhlEYZE,4895
|
|
85
|
+
celldetective/gui/table_ops/_merge_one_hot.py,sha256=gKRgem-u_-JENkVkbjRobsH4TkScojbNrkVqaS8MCI0,3472
|
|
86
|
+
celldetective/gui/table_ops/_query_table.py,sha256=K-XHSZ1I4v2wwqWjyQAgyFRZJbem3CmTfHmO0vijh9g,1345
|
|
87
|
+
celldetective/gui/table_ops/_rename_col.py,sha256=UAgDSpXJo_h4pLJpHaNc2w2VhbaW4D2JZTgJ3cYC4-g,1457
|
|
88
|
+
celldetective/gui/viewers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
89
|
+
celldetective/gui/viewers/base_viewer.py,sha256=etX9c9Fw-LXXzD_zUrcOHFEaHKF-XZt7VlZ2YmMvFhc,25303
|
|
90
|
+
celldetective/gui/viewers/channel_offset_viewer.py,sha256=aQpxrJX9qM_xX848XnFrxrhTqE22DIshtD-uKL8e4gU,12423
|
|
91
|
+
celldetective/gui/viewers/contour_viewer.py,sha256=zN0MKYZRM4mSFIoaeDPf36RcH7D8j1VUsgD_r8HPtDc,14696
|
|
92
|
+
celldetective/gui/viewers/size_viewer.py,sha256=uXITjaxg5dhQ09Q6TNUxwLxi-ZglyGFcxEH1RtGIZWw,6020
|
|
93
|
+
celldetective/gui/viewers/spot_detection_viewer.py,sha256=JO7kcqATHXR91lLvo8aQ5xVYdtxkMxV-xx36s01VlNQ,12545
|
|
94
|
+
celldetective/gui/viewers/threshold_viewer.py,sha256=CBc6Y7cGK5U3ptAMMkmRLBvm5yl7pjGEUJjB4PKWjfM,11627
|
|
95
|
+
celldetective/icons/logo-large.png,sha256=FXSwV3u6zEKcfpuSn4unnqB0oUnN9cHqQ9BCKWytrpg,36631
|
|
96
|
+
celldetective/icons/logo.png,sha256=wV2OS8_dU5Td5cgdPbCOU3JpMpTwNuYLnfVcnQX0tJA,2437
|
|
97
|
+
celldetective/icons/signals_icon.png,sha256=vEiKoqWTtN0-uJgVqtAlwCuP-f4QeWYOlO3sdp2tg2w,3969
|
|
98
|
+
celldetective/icons/splash-test.png,sha256=W9smcuuwJUF9DU-rz4aACx7_rCmGRsxYUGPBDlDnrJk,17523
|
|
99
|
+
celldetective/icons/splash.png,sha256=J_1jPJylxwHGzGF1xCGocc-BmylHtHTII9VJSLKnezY,17895
|
|
100
|
+
celldetective/icons/splash0.png,sha256=qVXsrYUinm5g6-vbHcqwyjh8SIqs9lEqPWnPa1WijaQ,14233
|
|
101
|
+
celldetective/icons/survival2.png,sha256=8zsualD7d9VPAecoFA4Om9TFARErqpJzMg6U7XANXf4,4479
|
|
102
|
+
celldetective/icons/vignette_signals2.png,sha256=hsVOdQDpEfMGM45aaSeacEm3lvxbquRKKYutiS9qoS0,20743
|
|
103
|
+
celldetective/icons/vignette_signals2.svg,sha256=muGNcQudV1jG-bmFd9FwV-Wb8PcrRV5osdZ7pHR7Ekk,5947
|
|
104
|
+
celldetective/links/zenodo.json,sha256=3OSml-j5FbCY5B24t7LZ7raXyVA1834osurmaEckIP8,34511
|
|
105
|
+
celldetective/models/pair_signal_detection/blank,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
106
|
+
celldetective/models/segmentation_effectors/blank,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
107
|
+
celldetective/models/segmentation_generic/blank,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
108
|
+
celldetective/models/segmentation_targets/blank,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
109
|
+
celldetective/models/signal_detection/blank,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
110
|
+
celldetective/models/tracking_configs/biased_motion.json,sha256=RZa-ZCP4jbFtMVz-M4lf1LtqmAvBrUxIhhudNiU1jtY,1782
|
|
111
|
+
celldetective/models/tracking_configs/mcf7.json,sha256=iDjb8i6yxs0GleW39dvY3Ld5bZJatlXJrwI8PG3vCT0,1780
|
|
112
|
+
celldetective/models/tracking_configs/no_z_motion.json,sha256=b4RWOJ0w6Y2e0vJYwKMyOexedeL2eA8fEDbSzbNmB4A,2702
|
|
113
|
+
celldetective/models/tracking_configs/ricm.json,sha256=L-vmwCR1f89U-qnH2Ms0cBfPFR_dxIWoe2ccH8V-QBA,2727
|
|
114
|
+
celldetective/models/tracking_configs/ricm2.json,sha256=DDjJ6ScYcDWvlsy7ujPID8v8H28vcNcMuZmNR8XmGxo,2718
|
|
115
|
+
celldetective/napari/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
116
|
+
celldetective/napari/utils.py,sha256=mjFeG1TDqHJs7cRcpfGWwAoFpWzJYZOEmUue7ZMYmzI,35106
|
|
117
|
+
celldetective/processes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
118
|
+
celldetective/processes/background_correction.py,sha256=fyv2_7ztUex7RDwIRaURweYZsRe-YD_ZPUHeiFmVq6Q,10715
|
|
119
|
+
celldetective/processes/compute_neighborhood.py,sha256=DGi4U3el0OisRNaOQSzUaXpEgHBO440-Q4cUphB6FAA,34393
|
|
120
|
+
celldetective/processes/detect_events.py,sha256=4psWjnYxbMB3p0BrRoQgkXgIdsnUIErrqUkE9CU4hRM,9733
|
|
121
|
+
celldetective/processes/downloader.py,sha256=jnNitmQ9xUCGJHSvr3Myts5soe6rdYDBx_AGJKr1AWk,3406
|
|
122
|
+
celldetective/processes/measure_cells.py,sha256=ccf2j7_6dcRevEhseVXioIjiATx8IvIsi5ZG3IcdhJY,20876
|
|
123
|
+
celldetective/processes/segment_cells.py,sha256=klGl5y3tHbLbQFNAQz0PV1FspmiPC-GHVGWYLgyLqwc,26500
|
|
124
|
+
celldetective/processes/track_cells.py,sha256=cgQNn7fsqPCHODhe27sqvMUlubsi7qM_0qjAXbj68oY,15084
|
|
125
|
+
celldetective/processes/train_segmentation_model.py,sha256=j1aPgR4CzF2OR-9njriNmUStVViiWaiicQA9YWRWOTo,25411
|
|
126
|
+
celldetective/processes/train_signal_model.py,sha256=HInUHCXNePhfQs8-DQOreJ19LtLkQopvYSyX8tj0mOo,9498
|
|
127
|
+
celldetective/processes/unified_process.py,sha256=vHAS_LbtwmlOjKho_FpwDy7WHVgyY38s3X2BtHxep7A,11671
|
|
128
|
+
celldetective/regionprops/__init__.py,sha256=ohe9vC7j4lnpKnGXidVo1PVfoQfC8TqCuHTNo8rXmdg,44
|
|
129
|
+
celldetective/regionprops/_regionprops.py,sha256=spq_Mb43HjHiKqot7yjLJl_jrMTNfIP8NLrPnCEm8Nc,13306
|
|
130
|
+
celldetective/regionprops/props.json,sha256=sCwACmbh0n-JAw9eve9yV85REukoMBJLsRjxCwTRMm8,2424
|
|
131
|
+
celldetective/scripts/analyze_signals.py,sha256=WfBqWFKzPpJNkkgLSWwpmpqFO67ZSewdxe2NCIXxEyQ,2190
|
|
132
|
+
celldetective/scripts/measure_cells.py,sha256=MuF8w3PFCE8OoYh_-V8ru8c4fzCoSMqgolfix-6u508,13667
|
|
133
|
+
celldetective/scripts/measure_relative.py,sha256=sjKRvbJ-E-n1adN4Lq0B2IjEaNkkFjXMixm9ZJGSUD0,4632
|
|
134
|
+
celldetective/scripts/segment_cells.py,sha256=YjiwHT2tAjWW7M6Fu5wf-6P35lPU9z16rcYqbH48GAY,8022
|
|
135
|
+
celldetective/scripts/segment_cells_thresholds.py,sha256=eeVr4mH_OMPogtp_8VaH7B7wfDVZ1G7vUcqIws7HX70,5557
|
|
136
|
+
celldetective/scripts/track_cells.py,sha256=h6ZhkeM73w_ziVjH7jJBejhZYZhf_Vpeg-9G6xQtmDE,9670
|
|
137
|
+
celldetective/scripts/train_segmentation_model.py,sha256=IKZGXf8i74xrc-wQ_oGgdE30FSO8eh2dhZDZfnBjkEk,12740
|
|
138
|
+
celldetective/scripts/train_signal_model.py,sha256=zPSdlr4WnnL6yTSL9ZreFNVw1is4E7GatjKzIASL99A,3711
|
|
139
|
+
celldetective/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
140
|
+
celldetective/utils/color_mappings.py,sha256=yarqOTSrTsnOPPiPrrN_vLoPCbgWqF3wjqFwpbp-KsU,1007
|
|
141
|
+
celldetective/utils/data_cleaning.py,sha256=K-2gScxLreX7QkrM0h3dZdP0IsmvCzcxNh2-M9PALZY,22025
|
|
142
|
+
celldetective/utils/data_loaders.py,sha256=tExtC_7gX16VYmYFz8BU7jRKLDug2egVghU1YIcGRh0,16292
|
|
143
|
+
celldetective/utils/dataset_helpers.py,sha256=3ezpHO6nytw2Mx0D3maP_4535V2ohOTQn6Qpfk8gnms,6898
|
|
144
|
+
celldetective/utils/downloaders.py,sha256=Cf7K-f_Bm4M6HIfgiSoIoph0O1NS6LZIaYvgWKauXes,6595
|
|
145
|
+
celldetective/utils/experiment.py,sha256=bgADS70QuW4KGbzDJbVpVM-tw4qmZKMWtDT1cSxugrY,58342
|
|
146
|
+
celldetective/utils/image_augmenters.py,sha256=USYd8z6dVn5z1x96IYJ4mG0smN9I_S21QMGU0wyHmjc,11654
|
|
147
|
+
celldetective/utils/image_cleaning.py,sha256=KliQ3K5hdwPx4eFxJnmg3yi-ZIoimEveunPJkbbA6wA,2388
|
|
148
|
+
celldetective/utils/image_loaders.py,sha256=nsyneHM67R9r-mmWKI7Z6xpe5MQCLOFsaYKFhxw2R-c,34032
|
|
149
|
+
celldetective/utils/image_transforms.py,sha256=cgaHuEUArWWHgxlBlcQLf--zQa-4VphPJ2s2EyPN29o,11213
|
|
150
|
+
celldetective/utils/io.py,sha256=WQH6B27iS722eVV8HHRaSvxMRZ217LoiEIPOqNGtqJk,1632
|
|
151
|
+
celldetective/utils/mask_cleaning.py,sha256=n1Q2RfyhX0W3AcLO0U6ucSyDGRCofj6bPLSO_xeVZPI,12545
|
|
152
|
+
celldetective/utils/mask_transforms.py,sha256=fX-ajhUhzZwOe7rAnMcQc6w4e2B8SZeRp9jrQLF6DFs,144
|
|
153
|
+
celldetective/utils/masks.py,sha256=wz47NrCsLD_9WX2Goswl_ThgnxyLJokIN6cj8KH7ZjI,7075
|
|
154
|
+
celldetective/utils/maths.py,sha256=cYdIqSgpaDO1JZOpmgGFPPikEvu66absC64op_6kw0o,12003
|
|
155
|
+
celldetective/utils/model_getters.py,sha256=jVq9FhAF-xUmFOETWP6hByhoWgapmJGlNmSK11fQ69g,11370
|
|
156
|
+
celldetective/utils/model_loaders.py,sha256=CjScJBGtnenb8qRMZkEozdj1-ULYHvsDFS4AVgYbB5s,10576
|
|
157
|
+
celldetective/utils/normalization.py,sha256=SN-nrycZtmtqv8v1S9bAKvDTGiN6cQKfryitwNtH1bA,15635
|
|
158
|
+
celldetective/utils/parsing.py,sha256=1zpIH9tyULCRmO5Kwzy6yA01fqm5uE_mZKYtondy-VA,14443
|
|
159
|
+
celldetective/utils/resources.py,sha256=3Fz_W0NYWl_Ixc2AjEmkOv5f7ejXerCLJ2z1iWhGWUI,1153
|
|
160
|
+
celldetective/utils/stats.py,sha256=4TVHRqi38Y0sed-izaMI51sMP0fd5tC5M68EYyfJjkE,3636
|
|
161
|
+
celldetective/utils/types.py,sha256=lRfWSMVzTkxgoctGGp0NqD551akuxu0ygna7zVGonTg,397
|
|
162
|
+
celldetective/utils/cellpose_utils/__init__.py,sha256=grsglxR29vj42tlgsBoXnVnjrIJWsBXqbtkjFjzqH7A,4898
|
|
163
|
+
celldetective/utils/event_detection/__init__.py,sha256=KX20PwPTevdbZ-25otDy_QTmealcDx5xNCfH2SOVIZM,323
|
|
164
|
+
celldetective/utils/plots/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
165
|
+
celldetective/utils/plots/regression.py,sha256=oUCn29-hp7PxMqC-R0yoL60KMw5ZWpZAIoCDh2ErlcY,1764
|
|
166
|
+
celldetective/utils/stardist_utils/__init__.py,sha256=e9s3DEaTKCUOGZb5k_DgShBTl4B0U-Jmg3Ioo8D5PyE,3978
|
|
167
|
+
celldetective-1.5.0b0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
168
|
+
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
169
|
+
tests/test_events.py,sha256=eLFwwEEJfQAdwhews3-fn1HSvzozcNNFN_Qn0gOvQkE,685
|
|
170
|
+
tests/test_filters.py,sha256=uj4NVyUnKXa18EpTSiWCetGKI1VFopDyNSJSUxX44wA,1689
|
|
171
|
+
tests/test_io.py,sha256=gk5FmoI7ANEczUtNXYRxc48KzkfYzemwS_eYaLq4_NI,2093
|
|
172
|
+
tests/test_measure.py,sha256=FEUAs1rVHylvIvubCb0bJDNGZLVmkgXNgI3NaGQ1dA8,4542
|
|
173
|
+
tests/test_neighborhood.py,sha256=gk5FmoI7ANEczUtNXYRxc48KzkfYzemwS_eYaLq4_NI,2093
|
|
174
|
+
tests/test_notebooks.py,sha256=WP5TJM1HV1oN8Hp38MLyE2YuLXjUoMvMJBa343vp1Dg,299
|
|
175
|
+
tests/test_preprocessing.py,sha256=c0rKS9d5h37uDcV7fVOTnn5GMVbEB84b8ZTCTdRmvFs,1422
|
|
176
|
+
tests/test_segmentation.py,sha256=k1b_zIZdlytEdJcHjAUQEO3gTBAHtv5WvrwQN2xD4kc,3470
|
|
177
|
+
tests/test_signals.py,sha256=No4cah6KxplhDcKXnU8RrA7eDla4hWw6ccf7xGnBokU,3599
|
|
178
|
+
tests/test_tracking.py,sha256=_YLjwQ3EChQssoHDfEnUJ7fI1yC5KEcJsFnAVR64L70,18909
|
|
179
|
+
tests/test_utils.py,sha256=aSB_eMw9fzTsnxxdYoNmdQQRrXkWqBXB7Uv4TGU6kYE,4778
|
|
180
|
+
tests/gui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
181
|
+
tests/gui/test_new_project.py,sha256=wRjW2vEaZb0LWT-f8G8-Ptk8CW9z8-FDPLpV5uqj6ck,8778
|
|
182
|
+
tests/gui/test_project.py,sha256=KzAnodIc0Ovta0ARL5Kr5PkOR5euA6qczT_GhEZpyE4,4710
|
|
183
|
+
celldetective-1.5.0b0.dist-info/METADATA,sha256=btAint9Y6sB0i_XItoVQqUHMsn1KtXNm0JSeavdXH48,10947
|
|
184
|
+
celldetective-1.5.0b0.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
|
|
185
|
+
celldetective-1.5.0b0.dist-info/entry_points.txt,sha256=2NU6_EOByvPxqBbCvjwxlVlvnQreqZ3BKRCVIKEv3dg,62
|
|
186
|
+
celldetective-1.5.0b0.dist-info/top_level.txt,sha256=6rsIKKfGMKgud7HPuATcpq6EhdXwcg_yknBVWn9x4C4,20
|
|
187
|
+
celldetective-1.5.0b0.dist-info/RECORD,,
|
tests/gui/test_new_project.py
CHANGED
|
@@ -2,7 +2,7 @@ import pytest
|
|
|
2
2
|
from PyQt5 import QtCore
|
|
3
3
|
from PyQt5.QtWidgets import QApplication
|
|
4
4
|
from celldetective.gui.InitWindow import AppInitWindow
|
|
5
|
-
from celldetective
|
|
5
|
+
from celldetective import get_software_location
|
|
6
6
|
import os
|
|
7
7
|
from unittest.mock import patch
|
|
8
8
|
import shutil
|
|
@@ -11,126 +11,138 @@ from pathlib import Path
|
|
|
11
11
|
abs_path = os.sep.join([os.path.split(os.path.dirname(os.path.realpath(__file__)))[0]])
|
|
12
12
|
print(abs_path)
|
|
13
13
|
|
|
14
|
+
|
|
14
15
|
@pytest.fixture
|
|
15
16
|
def app(qtbot):
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
software_location = get_software_location()
|
|
18
|
+
test_app = AppInitWindow(software_location=software_location)
|
|
19
|
+
qtbot.addWidget(test_app)
|
|
20
|
+
return test_app
|
|
21
|
+
|
|
20
22
|
|
|
21
23
|
def test_new_project(app, qtbot):
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
24
|
+
# app.newExpAction.trigger()
|
|
25
|
+
# qtbot.wait(1000)
|
|
26
|
+
interaction_time = 500
|
|
27
|
+
test_directory = os.path.dirname(os.path.abspath(__file__))
|
|
28
|
+
parent_directory = str(Path(test_directory).parent)
|
|
29
|
+
|
|
30
|
+
# Patch QFileDialog.getExistingDirectory to return test_directory
|
|
31
|
+
with patch(
|
|
32
|
+
"PyQt5.QtWidgets.QFileDialog.getExistingDirectory",
|
|
33
|
+
return_value=parent_directory,
|
|
34
|
+
):
|
|
35
|
+
|
|
36
|
+
if os.path.exists(os.sep.join([parent_directory, "ExperimentTest"])):
|
|
37
|
+
shutil.rmtree(os.sep.join([parent_directory, "ExperimentTest"]))
|
|
38
|
+
|
|
39
|
+
app.new_exp_action.trigger()
|
|
40
|
+
qtbot.wait(interaction_time * 3)
|
|
41
|
+
|
|
42
|
+
app.new_exp_window.expName.setText("ExperimentTest")
|
|
43
|
+
qtbot.wait(interaction_time)
|
|
44
|
+
|
|
45
|
+
app.new_exp_window.SliderWells.setValue(10)
|
|
46
|
+
qtbot.wait(interaction_time)
|
|
47
|
+
|
|
48
|
+
app.new_exp_window.SliderPos.setValue(3)
|
|
49
|
+
qtbot.wait(interaction_time)
|
|
50
|
+
|
|
51
|
+
app.new_exp_window.MovieLengthSlider.setValue(1)
|
|
52
|
+
qtbot.wait(interaction_time)
|
|
53
|
+
|
|
54
|
+
app.new_exp_window.PxToUm_field.setText("0,3112")
|
|
55
|
+
qtbot.wait(interaction_time)
|
|
56
|
+
|
|
57
|
+
app.new_exp_window.shape_x_field.setText("660")
|
|
58
|
+
qtbot.wait(interaction_time)
|
|
59
|
+
|
|
60
|
+
app.new_exp_window.shape_y_field.setText("682")
|
|
61
|
+
qtbot.wait(interaction_time)
|
|
62
|
+
|
|
63
|
+
# set first channel
|
|
64
|
+
app.new_exp_window.checkBoxes[0].setChecked(True)
|
|
65
|
+
qtbot.wait(interaction_time)
|
|
66
|
+
|
|
67
|
+
app.new_exp_window.sliders[0].setValue(0)
|
|
68
|
+
qtbot.wait(interaction_time)
|
|
69
|
+
|
|
70
|
+
# set second with channel index of 1
|
|
71
|
+
app.new_exp_window.checkBoxes[1].setChecked(True)
|
|
72
|
+
qtbot.wait(interaction_time)
|
|
73
|
+
|
|
74
|
+
app.new_exp_window.sliders[1].setValue(3)
|
|
75
|
+
qtbot.wait(interaction_time)
|
|
76
|
+
|
|
77
|
+
app.new_exp_window.checkBoxes[2].setChecked(True)
|
|
78
|
+
qtbot.wait(interaction_time)
|
|
79
|
+
|
|
80
|
+
app.new_exp_window.sliders[2].setValue(1)
|
|
81
|
+
qtbot.wait(interaction_time)
|
|
82
|
+
|
|
83
|
+
# add extra custom channel
|
|
84
|
+
qtbot.mouseClick(app.new_exp_window.addChannelBtn, QtCore.Qt.LeftButton)
|
|
85
|
+
qtbot.wait(interaction_time)
|
|
86
|
+
|
|
87
|
+
app.new_exp_window.name_le.setText("empty_channel")
|
|
88
|
+
qtbot.wait(interaction_time)
|
|
89
|
+
|
|
90
|
+
qtbot.mouseClick(app.new_exp_window.createBtn, QtCore.Qt.LeftButton)
|
|
91
|
+
qtbot.wait(interaction_time)
|
|
92
|
+
|
|
93
|
+
app.new_exp_window.checkBoxes[-1].setChecked(True)
|
|
94
|
+
qtbot.wait(interaction_time)
|
|
95
|
+
|
|
96
|
+
app.new_exp_window.sliders[-1].setValue(2)
|
|
97
|
+
qtbot.wait(interaction_time)
|
|
98
|
+
|
|
99
|
+
# Untick populations and create new one
|
|
100
|
+
for box in app.new_exp_window.population_checkboxes:
|
|
101
|
+
if box.text() == "targets":
|
|
102
|
+
box.setChecked(True)
|
|
103
|
+
else:
|
|
104
|
+
box.setChecked(False)
|
|
105
|
+
|
|
106
|
+
qtbot.mouseClick(app.new_exp_window.addPopBtn, QtCore.Qt.LeftButton)
|
|
107
|
+
qtbot.wait(interaction_time)
|
|
108
|
+
|
|
109
|
+
app.new_exp_window.name_le.setText("more_cells")
|
|
110
|
+
qtbot.wait(interaction_time)
|
|
111
|
+
|
|
112
|
+
qtbot.mouseClick(app.new_exp_window.addPopBtn, QtCore.Qt.LeftButton)
|
|
113
|
+
qtbot.wait(interaction_time)
|
|
114
|
+
|
|
115
|
+
qtbot.mouseClick(app.new_exp_window.validate_button, QtCore.Qt.LeftButton)
|
|
116
|
+
qtbot.wait(interaction_time)
|
|
117
|
+
|
|
118
|
+
qtbot.mouseClick(app.new_exp_window.w.submit_btn, QtCore.Qt.LeftButton)
|
|
119
|
+
qtbot.wait(interaction_time)
|
|
120
|
+
|
|
121
|
+
shutil.copy(
|
|
122
|
+
os.sep.join([parent_directory, "assets", "sample.tif"]),
|
|
123
|
+
os.sep.join(
|
|
124
|
+
[parent_directory, "ExperimentTest", "W1", "100", "movie", "sample.tif"]
|
|
125
|
+
),
|
|
126
|
+
)
|
|
127
|
+
qtbot.wait(interaction_time)
|
|
128
|
+
|
|
129
|
+
qtbot.mouseClick(app.validate_button, QtCore.Qt.LeftButton)
|
|
130
|
+
qtbot.mouseClick(app.control_panel.view_stack_btn, QtCore.Qt.LeftButton)
|
|
131
|
+
qtbot.wait(interaction_time)
|
|
132
|
+
|
|
133
|
+
app.control_panel.viewer.channel_cb.setCurrentIndex(1)
|
|
134
|
+
qtbot.wait(interaction_time * 2)
|
|
135
|
+
|
|
136
|
+
app.control_panel.viewer.contrast_slider.setValue([200, 300])
|
|
137
|
+
qtbot.wait(interaction_time * 2)
|
|
138
|
+
|
|
139
|
+
# QApplication.closeAllWindows()
|
|
140
|
+
# try:
|
|
141
|
+
# shutil.rmtree(os.sep.join([parent_directory, "ExperimentTest"]))
|
|
142
|
+
# except:
|
|
143
|
+
# pass
|
|
144
|
+
|
|
145
|
+
|
|
134
146
|
# def test_lauch_app(app, qtbot):
|
|
135
147
|
# app.show()
|
|
136
148
|
# qtbot.wait(1000)
|