celldetective 1.3.2__py3-none-any.whl → 1.3.4__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/__main__.py +30 -4
- celldetective/_version.py +1 -1
- celldetective/extra_properties.py +21 -0
- celldetective/filters.py +15 -2
- celldetective/gui/InitWindow.py +28 -34
- celldetective/gui/analyze_block.py +3 -498
- celldetective/gui/classifier_widget.py +1 -1
- celldetective/gui/control_panel.py +100 -29
- celldetective/gui/generic_signal_plot.py +35 -18
- celldetective/gui/gui_utils.py +143 -2
- celldetective/gui/layouts.py +7 -6
- celldetective/gui/measurement_options.py +38 -43
- celldetective/gui/plot_measurements.py +5 -13
- celldetective/gui/plot_signals_ui.py +30 -30
- celldetective/gui/process_block.py +66 -197
- celldetective/gui/retrain_segmentation_model_options.py +3 -1
- celldetective/gui/signal_annotator.py +50 -32
- celldetective/gui/signal_annotator2.py +7 -4
- celldetective/gui/styles.py +13 -0
- celldetective/gui/survival_ui.py +8 -21
- celldetective/gui/tableUI.py +1 -2
- celldetective/gui/thresholds_gui.py +195 -205
- celldetective/gui/viewers.py +262 -12
- celldetective/io.py +85 -11
- celldetective/measure.py +128 -88
- celldetective/models/segmentation_effectors/ricm_bf_all_last/config_input.json +79 -0
- celldetective/models/segmentation_effectors/ricm_bf_all_last/ricm_bf_all_last +0 -0
- celldetective/models/segmentation_effectors/ricm_bf_all_last/training_instructions.json +37 -0
- celldetective/models/segmentation_effectors/test-transfer/config_input.json +39 -0
- celldetective/models/segmentation_effectors/test-transfer/test-transfer +0 -0
- celldetective/neighborhood.py +0 -2
- celldetective/scripts/measure_cells.py +21 -9
- celldetective/signals.py +77 -66
- celldetective/tracking.py +19 -13
- {celldetective-1.3.2.dist-info → celldetective-1.3.4.dist-info}/METADATA +12 -10
- {celldetective-1.3.2.dist-info → celldetective-1.3.4.dist-info}/RECORD +41 -36
- {celldetective-1.3.2.dist-info → celldetective-1.3.4.dist-info}/WHEEL +1 -1
- tests/test_qt.py +5 -3
- {celldetective-1.3.2.dist-info → celldetective-1.3.4.dist-info}/LICENSE +0 -0
- {celldetective-1.3.2.dist-info → celldetective-1.3.4.dist-info}/entry_points.txt +0 -0
- {celldetective-1.3.2.dist-info → celldetective-1.3.4.dist-info}/top_level.txt +0 -0
celldetective/signals.py
CHANGED
|
@@ -27,7 +27,7 @@ from natsort import natsorted
|
|
|
27
27
|
from glob import glob
|
|
28
28
|
import random
|
|
29
29
|
from celldetective.utils import color_from_status, color_from_class
|
|
30
|
-
from math import floor
|
|
30
|
+
from math import floor
|
|
31
31
|
from scipy.optimize import curve_fit
|
|
32
32
|
import time
|
|
33
33
|
import math
|
|
@@ -193,73 +193,74 @@ def analyze_signals(trajectories, model, interpolate_na=True,
|
|
|
193
193
|
signals[i,max(frames):,j] = signal[-1]
|
|
194
194
|
|
|
195
195
|
model = SignalDetectionModel(pretrained=complete_path)
|
|
196
|
+
if not model.pretrained is None:
|
|
196
197
|
|
|
197
|
-
|
|
198
|
-
|
|
198
|
+
classes = model.predict_class(signals)
|
|
199
|
+
times_recast = model.predict_time_of_interest(signals)
|
|
199
200
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
201
|
+
if label is None:
|
|
202
|
+
class_col = 'class'
|
|
203
|
+
time_col = 't0'
|
|
204
|
+
status_col = 'status'
|
|
205
|
+
else:
|
|
206
|
+
class_col = 'class_'+label
|
|
207
|
+
time_col = 't_'+label
|
|
208
|
+
status_col = 'status_'+label
|
|
208
209
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
210
|
+
for i,(tid,group) in enumerate(trajectories.groupby(column_labels['track'])):
|
|
211
|
+
indices = group.index
|
|
212
|
+
trajectories.loc[indices,class_col] = classes[i]
|
|
213
|
+
trajectories.loc[indices,time_col] = times_recast[i]
|
|
214
|
+
print('Done.')
|
|
214
215
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
216
|
+
for tid, group in trajectories.groupby(column_labels['track']):
|
|
217
|
+
|
|
218
|
+
indices = group.index
|
|
219
|
+
t0 = group[time_col].to_numpy()[0]
|
|
220
|
+
cclass = group[class_col].to_numpy()[0]
|
|
221
|
+
timeline = group[column_labels['time']].to_numpy()
|
|
222
|
+
status = np.zeros_like(timeline)
|
|
223
|
+
if t0 > 0:
|
|
224
|
+
status[timeline>=t0] = 1.
|
|
225
|
+
if cclass==2:
|
|
226
|
+
status[:] = 2
|
|
227
|
+
if cclass>2:
|
|
228
|
+
status[:] = 42
|
|
229
|
+
status_color = [color_from_status(s) for s in status]
|
|
230
|
+
class_color = [color_from_class(cclass) for i in range(len(status))]
|
|
231
|
+
|
|
232
|
+
trajectories.loc[indices, status_col] = status
|
|
233
|
+
trajectories.loc[indices, 'status_color'] = status_color
|
|
234
|
+
trajectories.loc[indices, 'class_color'] = class_color
|
|
235
|
+
|
|
236
|
+
if plot_outcome:
|
|
237
|
+
fig,ax = plt.subplots(1,len(selected_signals), figsize=(10,5))
|
|
238
|
+
for i,s in enumerate(selected_signals):
|
|
239
|
+
for k,(tid,group) in enumerate(trajectories.groupby(column_labels['track'])):
|
|
240
|
+
cclass = group[class_col].to_numpy()[0]
|
|
241
|
+
t0 = group[time_col].to_numpy()[0]
|
|
242
|
+
timeline = group[column_labels['time']].to_numpy()
|
|
243
|
+
if cclass==0:
|
|
244
|
+
if len(selected_signals)>1:
|
|
245
|
+
ax[i].plot(timeline - t0, group[s].to_numpy(),c='tab:blue',alpha=0.1)
|
|
246
|
+
else:
|
|
247
|
+
ax.plot(timeline - t0, group[s].to_numpy(),c='tab:blue',alpha=0.1)
|
|
248
|
+
if len(selected_signals)>1:
|
|
249
|
+
for a,s in zip(ax,selected_signals):
|
|
250
|
+
a.set_title(s)
|
|
251
|
+
a.set_xlabel(r'time - t$_0$ [frame]')
|
|
252
|
+
a.spines['top'].set_visible(False)
|
|
253
|
+
a.spines['right'].set_visible(False)
|
|
254
|
+
else:
|
|
255
|
+
ax.set_title(s)
|
|
256
|
+
ax.set_xlabel(r'time - t$_0$ [frame]')
|
|
257
|
+
ax.spines['top'].set_visible(False)
|
|
258
|
+
ax.spines['right'].set_visible(False)
|
|
259
|
+
plt.tight_layout()
|
|
260
|
+
if output_dir is not None:
|
|
261
|
+
plt.savefig(output_dir+'signal_collapse.png',bbox_inches='tight',dpi=300)
|
|
262
|
+
plt.pause(3)
|
|
263
|
+
plt.close()
|
|
263
264
|
|
|
264
265
|
return trajectories
|
|
265
266
|
|
|
@@ -800,8 +801,12 @@ class SignalDetectionModel(object):
|
|
|
800
801
|
|
|
801
802
|
|
|
802
803
|
if self.pretrained is not None:
|
|
803
|
-
print(f"Load pretrained models from {
|
|
804
|
-
self.load_pretrained_model()
|
|
804
|
+
print(f"Load pretrained models from {pretrained}...")
|
|
805
|
+
test = self.load_pretrained_model()
|
|
806
|
+
if test is None:
|
|
807
|
+
self.pretrained = None
|
|
808
|
+
print('Pretrained model could not be loaded. Check the log for error. Abort...')
|
|
809
|
+
return None
|
|
805
810
|
else:
|
|
806
811
|
print("Create models from scratch...")
|
|
807
812
|
self.create_models_from_scratch()
|
|
@@ -828,6 +833,9 @@ class SignalDetectionModel(object):
|
|
|
828
833
|
- The configuration file is expected to be named "config_input.json" and located in the same directory as the models.
|
|
829
834
|
"""
|
|
830
835
|
|
|
836
|
+
if self.pretrained.endswith(os.sep):
|
|
837
|
+
self.pretrained = os.sep.join(self.pretrained.split(os.sep)[:-1])
|
|
838
|
+
|
|
831
839
|
try:
|
|
832
840
|
self.model_class = load_model(os.sep.join([self.pretrained,"classifier.h5"]),compile=False)
|
|
833
841
|
self.model_class.load_weights(os.sep.join([self.pretrained,"classifier.h5"]))
|
|
@@ -843,6 +851,9 @@ class SignalDetectionModel(object):
|
|
|
843
851
|
print(f"Error {e}...")
|
|
844
852
|
self.model_reg = None
|
|
845
853
|
|
|
854
|
+
if self.model_class is None and self.model_reg is None:
|
|
855
|
+
return None
|
|
856
|
+
|
|
846
857
|
# load config
|
|
847
858
|
with open(os.sep.join([self.pretrained,"config_input.json"])) as config_file:
|
|
848
859
|
model_config = json.load(config_file)
|
celldetective/tracking.py
CHANGED
|
@@ -959,22 +959,28 @@ def write_first_detection_class(tab, column_labels={'track': "TRACK_ID", 'time':
|
|
|
959
959
|
indices = track_group.index
|
|
960
960
|
detection = track_group[column_labels['x']].values
|
|
961
961
|
timeline = track_group[column_labels['time']].values
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
t_first = float(t_first) - float(dt)
|
|
972
|
-
else:
|
|
962
|
+
dt = 1
|
|
963
|
+
|
|
964
|
+
# Initialize
|
|
965
|
+
cclass = 2; t_first = np.nan;
|
|
966
|
+
|
|
967
|
+
if np.any(detection==detection):
|
|
968
|
+
t_first = timeline[detection==detection][0]
|
|
969
|
+
cclass = 0
|
|
970
|
+
if t_first<=0:
|
|
973
971
|
t_first = -1
|
|
974
972
|
cclass = 2
|
|
973
|
+
else:
|
|
974
|
+
t_first = float(t_first) - float(dt)
|
|
975
|
+
if t_first==0:
|
|
976
|
+
t_first += 0.01
|
|
977
|
+
else:
|
|
978
|
+
t_first = -1
|
|
979
|
+
cclass = 2
|
|
980
|
+
|
|
981
|
+
tab.loc[indices, 'class_firstdetection'] = cclass
|
|
982
|
+
tab.loc[indices, 't_firstdetection'] = t_first
|
|
975
983
|
|
|
976
|
-
tab.loc[indices, 'class_firstdetection'] = cclass
|
|
977
|
-
tab.loc[indices, 't_firstdetection'] = t_first
|
|
978
984
|
return tab
|
|
979
985
|
|
|
980
986
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: celldetective
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.4
|
|
4
4
|
Summary: description
|
|
5
5
|
Home-page: http://github.com/remyeltorro/celldetective
|
|
6
6
|
Author: Rémy Torro
|
|
@@ -10,8 +10,8 @@ Description-Content-Type: text/markdown
|
|
|
10
10
|
License-File: LICENSE
|
|
11
11
|
Requires-Dist: wheel
|
|
12
12
|
Requires-Dist: nbsphinx
|
|
13
|
-
Requires-Dist:
|
|
14
|
-
Requires-Dist:
|
|
13
|
+
Requires-Dist: nbsphinx_link
|
|
14
|
+
Requires-Dist: sphinx_rtd_theme
|
|
15
15
|
Requires-Dist: sphinx
|
|
16
16
|
Requires-Dist: jinja2
|
|
17
17
|
Requires-Dist: ipykernel
|
|
@@ -34,12 +34,14 @@ Requires-Dist: liblapack
|
|
|
34
34
|
Requires-Dist: gputools
|
|
35
35
|
Requires-Dist: lmfit
|
|
36
36
|
Requires-Dist: superqt[cmap]
|
|
37
|
-
Requires-Dist:
|
|
37
|
+
Requires-Dist: setuptools
|
|
38
|
+
Requires-Dist: matplotlib_scalebar
|
|
38
39
|
Requires-Dist: numpy==1.26.4
|
|
39
40
|
Requires-Dist: pytest
|
|
40
41
|
Requires-Dist: pytest-qt
|
|
41
42
|
Requires-Dist: h5py
|
|
42
|
-
Requires-Dist:
|
|
43
|
+
Requires-Dist: cliffs_delta
|
|
44
|
+
Requires-Dist: requests
|
|
43
45
|
|
|
44
46
|
# Celldetective
|
|
45
47
|
|
|
@@ -171,20 +173,20 @@ For more information about how to get started, please check the [documentation](
|
|
|
171
173
|
# How to cite?
|
|
172
174
|
|
|
173
175
|
If you use this software in your research, please cite the
|
|
174
|
-
[Celldetective](https://www.biorxiv.org/content/10.1101/2024.03.15.
|
|
176
|
+
[Celldetective](https://www.biorxiv.org/content/10.1101/2024.03.15.585250v3)
|
|
175
177
|
paper (currently preprint):
|
|
176
178
|
|
|
177
179
|
``` raw
|
|
178
180
|
@article {Torro2024.03.15.585250,
|
|
179
|
-
author = {R{\'e}my
|
|
181
|
+
author = {Torro, R{\'e}my and D{\'\i}az-Bello, Beatriz and Arawi, Dalia El and Dervanova, Ksenija and Ammer, Lorna and Dupuy, Florian and Chames, Patrick and Sengupta, Kheya and Limozin, Laurent},
|
|
180
182
|
title = {Celldetective: an AI-enhanced image analysis tool for unraveling dynamic cell interactions},
|
|
181
183
|
elocation-id = {2024.03.15.585250},
|
|
182
184
|
year = {2024},
|
|
183
185
|
doi = {10.1101/2024.03.15.585250},
|
|
184
186
|
publisher = {Cold Spring Harbor Laboratory},
|
|
185
|
-
abstract = {A current
|
|
186
|
-
URL = {https://www.biorxiv.org/content/early/2024/
|
|
187
|
-
eprint = {https://www.biorxiv.org/content/early/2024/
|
|
187
|
+
abstract = {A current challenge in bioimaging for immunology and immunotherapy research lies in analyzing multimodal and multidimensional data that capture dynamic interactions between diverse cell populations. Here, we introduce Celldetective, an open-source Python-based software designed for high-performance, end-to-end analysis of image-based in vitro immune and immunotherapy assays. Purpose-built for multicondition, 2D multichannel time-lapse microscopy of mixed cell populations, Celldetective is optimized for the needs of immunology assays. The software seamlessly integrates AI-based segmentation, Bayesian tracking, and automated single-cell event detection, all within an intuitive graphical interface that supports interactive visualization, annotation, and training capabilities. We demonstrate its utility with original data on immune effector cell interactions with an activating surface, mediated by bispecific antibodies, and further showcase its potential for analyzing extensive sets of pairwise interactions in antibody-dependent cell cytotoxicity events.Competing Interest StatementThe authors have declared no competing interest.},
|
|
188
|
+
URL = {https://www.biorxiv.org/content/early/2024/11/13/2024.03.15.585250},
|
|
189
|
+
eprint = {https://www.biorxiv.org/content/early/2024/11/13/2024.03.15.585250.full.pdf},
|
|
188
190
|
journal = {bioRxiv}
|
|
189
191
|
}
|
|
190
192
|
```
|
|
@@ -1,48 +1,48 @@
|
|
|
1
1
|
celldetective/__init__.py,sha256=bi3SGTMo6s2qQBsJAaKy-a4xaGcTQVW8zsqaiX5XKeY,139
|
|
2
|
-
celldetective/__main__.py,sha256=
|
|
3
|
-
celldetective/_version.py,sha256=
|
|
2
|
+
celldetective/__main__.py,sha256=bxTlSvbKhqn3LW_azd2baDCnDsgb37PAP9DfuAJ1_5M,1844
|
|
3
|
+
celldetective/_version.py,sha256=U6E-HRsrit7kgSGgIeTI2eMUeyUCny5DH8LDV4I1o0g,22
|
|
4
4
|
celldetective/events.py,sha256=R6GDtiH0ZuEbad0R-nrlTHmho0Hly3QyyVYx2dD__P0,8051
|
|
5
|
-
celldetective/extra_properties.py,sha256=
|
|
6
|
-
celldetective/filters.py,sha256=
|
|
7
|
-
celldetective/io.py,sha256=
|
|
8
|
-
celldetective/measure.py,sha256=
|
|
9
|
-
celldetective/neighborhood.py,sha256=
|
|
5
|
+
celldetective/extra_properties.py,sha256=y556D6EMjLGhtjDqRoOTRGa85XxTIe0K1Asb26VZXmo,5643
|
|
6
|
+
celldetective/filters.py,sha256=9w4JyPH2cISRu7gtUDVsm9whiMMWxuc1vwhfaq3zWkY,3683
|
|
7
|
+
celldetective/io.py,sha256=_SO32G5Sc60vHQhQj7gXvDNTXjVd1uZ8x1HnFxCYU0g,90833
|
|
8
|
+
celldetective/measure.py,sha256=PXi13O6wjXbgj53o-C8DEWLVkmy9qb4vocmq1irPVV0,57450
|
|
9
|
+
celldetective/neighborhood.py,sha256=s-zVsfGnPlqs6HlDJCXRh21lLiPKbA_S1JC6uZvfG_0,56712
|
|
10
10
|
celldetective/preprocessing.py,sha256=WmetQCgmHK6fo8AuwESPLab05WgeIy8ElBs-9KM-Cco,44081
|
|
11
11
|
celldetective/relative_measurements.py,sha256=av5DiGlGsbILPav8aVcFlhbmbPLPZPxCB5qQejzhiRY,30400
|
|
12
12
|
celldetective/segmentation.py,sha256=NjAVaVpZufpJ-LIvBx5UFH6j5kjRKE6EVLjttDrqaqs,30826
|
|
13
|
-
celldetective/signals.py,sha256=
|
|
14
|
-
celldetective/tracking.py,sha256=
|
|
13
|
+
celldetective/signals.py,sha256=ngBcl6xYlLX4KE7UFgLDzugmoJvrKG7URSPzlhUFNVE,121461
|
|
14
|
+
celldetective/tracking.py,sha256=e6XMunjVRhBnv1cRF66hkK-Hbti5KyPrs2mnR6qKpvU,38027
|
|
15
15
|
celldetective/utils.py,sha256=oP_GHPdJJHK9s8sIlzKEXfTjCvzxAifdYYynkSMfu7A,89145
|
|
16
16
|
celldetective/datasets/segmentation_annotations/blank,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
17
|
celldetective/datasets/signal_annotations/blank,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
|
-
celldetective/gui/InitWindow.py,sha256=
|
|
18
|
+
celldetective/gui/InitWindow.py,sha256=sQSwfZ6SIQeZDQ_3KZoMO2MH9Fs9rhWeqxzEf9PFjEM,14534
|
|
19
19
|
celldetective/gui/__init__.py,sha256=2_r2xfOj4_2xj0yBkCTIfzlF94AHKm-j6Pvpd7DddQc,989
|
|
20
20
|
celldetective/gui/about.py,sha256=FJZrj6C-p6uqp_3UaprKosuW-Sw9_HPNQAvFbis9Gdk,1749
|
|
21
|
-
celldetective/gui/analyze_block.py,sha256=
|
|
21
|
+
celldetective/gui/analyze_block.py,sha256=h0sp7Tk3hZFM8w0yTidwIjZX4WRI-lQF3JCFObrLCPo,2761
|
|
22
22
|
celldetective/gui/btrack_options.py,sha256=OrvbG5coZhLRk5jtXiLFJu34z1hWHN9kHkBiZ7XMZoI,39269
|
|
23
|
-
celldetective/gui/classifier_widget.py,sha256=
|
|
23
|
+
celldetective/gui/classifier_widget.py,sha256=mo7Gel3DKhFTUt184WvF0AOsw4HQ7kC8qrkSf8jr3hY,18412
|
|
24
24
|
celldetective/gui/configure_new_exp.py,sha256=Eyr-M4FH-4xrUJbIGNdKXAtXb_ULr8lCol26JSzXEww,20125
|
|
25
|
-
celldetective/gui/control_panel.py,sha256=
|
|
26
|
-
celldetective/gui/generic_signal_plot.py,sha256=
|
|
27
|
-
celldetective/gui/gui_utils.py,sha256=
|
|
25
|
+
celldetective/gui/control_panel.py,sha256=Xr8W37KkRoR2R4ILsZbclnU6-g3WP1WjjTz6k39PN_8,21645
|
|
26
|
+
celldetective/gui/generic_signal_plot.py,sha256=cfPvNcLtsVp3xvKyOg1ekMKXcomN6fEnlowUnXrYK2c,36293
|
|
27
|
+
celldetective/gui/gui_utils.py,sha256=b6L4mThjN8upgXx4YeNRrfSSCF2l1epb_uEU8cc31F8,34171
|
|
28
28
|
celldetective/gui/json_readers.py,sha256=Su3angSobroeGrrumGgQcs3Cr_9l9p52-Hfm3qneVcI,3664
|
|
29
|
-
celldetective/gui/layouts.py,sha256=
|
|
30
|
-
celldetective/gui/measurement_options.py,sha256=
|
|
29
|
+
celldetective/gui/layouts.py,sha256=XsqiHR58DXsG5SSD5S8KOtUv4yw-y-s2_wZx_XsHeJs,52013
|
|
30
|
+
celldetective/gui/measurement_options.py,sha256=MnJ9dToJb-_UppqHEyFoIvqY8M2cneTGmqxMToeTJ48,39579
|
|
31
31
|
celldetective/gui/neighborhood_options.py,sha256=BvWwsIX1KWogUgHWRZptqY3ZRmH1aj7r8tiLmbRFhW4,19783
|
|
32
|
-
celldetective/gui/plot_measurements.py,sha256=
|
|
33
|
-
celldetective/gui/plot_signals_ui.py,sha256=
|
|
34
|
-
celldetective/gui/process_block.py,sha256=
|
|
35
|
-
celldetective/gui/retrain_segmentation_model_options.py,sha256=
|
|
32
|
+
celldetective/gui/plot_measurements.py,sha256=n0pDUcYcsKlSMaUaBSVplGziuWp_7jKaeXdREs-MqyI,50848
|
|
33
|
+
celldetective/gui/plot_signals_ui.py,sha256=dLClQYdQcs98Dq6RWixWXM7_iS67CicOe695bA9LM-w,16447
|
|
34
|
+
celldetective/gui/process_block.py,sha256=tk3zhhXhutszmFP3T7zbXnoCOZRbFUHPBR4cNNaHQOk,68683
|
|
35
|
+
celldetective/gui/retrain_segmentation_model_options.py,sha256=ACeQ_DdSLy1EK0z_S_9v-0HOiLXjUmrz4sdvHWZT6FI,23330
|
|
36
36
|
celldetective/gui/retrain_signal_model_options.py,sha256=XigNdGlNu3KWB_MYBcKQhfXjcWwVZNMmu0qmxNoo14E,21919
|
|
37
37
|
celldetective/gui/seg_model_loader.py,sha256=vWvPMU6nkTiQfI-x2WjQHrdJGFdV4a4Ne-4YIOq_YZ8,18153
|
|
38
|
-
celldetective/gui/signal_annotator.py,sha256=
|
|
39
|
-
celldetective/gui/signal_annotator2.py,sha256=
|
|
38
|
+
celldetective/gui/signal_annotator.py,sha256=gZtuWoVWjaIzxy5SL1Cg2rBrsH9-s-oYSxJe7CQeEiY,88656
|
|
39
|
+
celldetective/gui/signal_annotator2.py,sha256=fAgkNexxvcnY4KvIxtgHKF3B9K-wsgfA8KbkALq4UPY,108945
|
|
40
40
|
celldetective/gui/signal_annotator_options.py,sha256=ztFFgA70SJ0QkntxYGsgDNCvSuSR5GjF7_J6pYVYc1g,11020
|
|
41
|
-
celldetective/gui/styles.py,sha256=
|
|
42
|
-
celldetective/gui/survival_ui.py,sha256=
|
|
43
|
-
celldetective/gui/tableUI.py,sha256=
|
|
44
|
-
celldetective/gui/thresholds_gui.py,sha256=
|
|
45
|
-
celldetective/gui/viewers.py,sha256=
|
|
41
|
+
celldetective/gui/styles.py,sha256=awg5NfGWUoM4V_LpVlmPP7JorpofiLVNqLBv4zRy89E,5058
|
|
42
|
+
celldetective/gui/survival_ui.py,sha256=7qUenqEIaWEwdf-nKE1gN0LAdybgQbRLb3OJMTI9bfk,10193
|
|
43
|
+
celldetective/gui/tableUI.py,sha256=2tBZN3X1nrBD_t58yaCY4NENWeHtgvaN0IcKzZn18SM,50500
|
|
44
|
+
celldetective/gui/thresholds_gui.py,sha256=6Lgr_CK2LBn_gMsWf0gIQvQIQSMg3oIhFfknFeg8Fh4,50721
|
|
45
|
+
celldetective/gui/viewers.py,sha256=0KmtAKZUNY5xpKFcFajgc1Jbnf_86rw_ooX6UrMmEHc,46328
|
|
46
46
|
celldetective/gui/help/DL-segmentation-strategy.json,sha256=59jVtn8pECbCqPQwJifgViVYTF1AxLQDIkNJMS7CJuk,1143
|
|
47
47
|
celldetective/gui/help/Threshold-vs-DL.json,sha256=SELQk3qF8xcwmkX686Bqrr7i5KiXqN7r4jbUydCLRDU,603
|
|
48
48
|
celldetective/gui/help/cell-populations.json,sha256=wP0ekhokb9oHE3XqOQrC5ARewNgOlv0GJrQeVQyMJzg,1075
|
|
@@ -66,6 +66,11 @@ celldetective/icons/vignette_signals2.svg,sha256=muGNcQudV1jG-bmFd9FwV-Wb8PcrRV5
|
|
|
66
66
|
celldetective/links/zenodo.json,sha256=puCKI6vQi_L_7H70Nii_UzIqRcYVWUQGRKpTulyoHPo,30549
|
|
67
67
|
celldetective/models/pair_signal_detection/blank,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
68
68
|
celldetective/models/segmentation_effectors/blank,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
69
|
+
celldetective/models/segmentation_effectors/ricm_bf_all_last/config_input.json,sha256=Sr5AiyJkg_EoAUFSZbUH_FE-jQHTwNR3tiUZdmvPlaA,7068
|
|
70
|
+
celldetective/models/segmentation_effectors/ricm_bf_all_last/ricm_bf_all_last,sha256=HTgeUImhkhjf-HsoziJPL16azPIGt2XiMmgvB_qf7DA,26559970
|
|
71
|
+
celldetective/models/segmentation_effectors/ricm_bf_all_last/training_instructions.json,sha256=4ZcZVti1kA_1zV8_3jj2pZYBST0kX8Z00tlc4AATlxo,847
|
|
72
|
+
celldetective/models/segmentation_effectors/test-transfer/config_input.json,sha256=JytjANaerSQBjMn-cZktHj8ESdMCIvXWdmwmgQGgUYE,1212
|
|
73
|
+
celldetective/models/segmentation_effectors/test-transfer/test-transfer,sha256=eEy7bx3jJcj0MmV893OMbzSF_jagCz4Ov7CGkXGWmqI,26554673
|
|
69
74
|
celldetective/models/segmentation_generic/blank,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
70
75
|
celldetective/models/segmentation_targets/blank,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
71
76
|
celldetective/models/signal_detection/blank,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -75,7 +80,7 @@ celldetective/models/tracking_configs/no_z_motion.json,sha256=b4RWOJ0w6Y2e0vJYwK
|
|
|
75
80
|
celldetective/models/tracking_configs/ricm.json,sha256=L-vmwCR1f89U-qnH2Ms0cBfPFR_dxIWoe2ccH8V-QBA,2727
|
|
76
81
|
celldetective/models/tracking_configs/ricm2.json,sha256=DDjJ6ScYcDWvlsy7ujPID8v8H28vcNcMuZmNR8XmGxo,2718
|
|
77
82
|
celldetective/scripts/analyze_signals.py,sha256=YE05wZujl2hQFWkvqATBcCx-cAd_V3RxnvKoh0SB7To,2194
|
|
78
|
-
celldetective/scripts/measure_cells.py,sha256=
|
|
83
|
+
celldetective/scripts/measure_cells.py,sha256=jUwPSjIzR4sCvjer_K5vSlRQX3e8AhJE3xhUbevES7c,12143
|
|
79
84
|
celldetective/scripts/measure_relative.py,sha256=L_NjIUfHSGupkAKLZkubBHJdZh0ugPhCTJem80b0zMM,4261
|
|
80
85
|
celldetective/scripts/segment_cells.py,sha256=bnNacgp_6qpb1fvwPizxVctsUNiFBegKalo-PSpXPEU,8262
|
|
81
86
|
celldetective/scripts/segment_cells_thresholds.py,sha256=6ERg-hxdHMSgXPQSBPtYt2lccTlkz9ZLktYgb57Avmw,5168
|
|
@@ -89,14 +94,14 @@ tests/test_io.py,sha256=gk5FmoI7ANEczUtNXYRxc48KzkfYzemwS_eYaLq4_NI,2093
|
|
|
89
94
|
tests/test_measure.py,sha256=FEUAs1rVHylvIvubCb0bJDNGZLVmkgXNgI3NaGQ1dA8,4542
|
|
90
95
|
tests/test_neighborhood.py,sha256=gk5FmoI7ANEczUtNXYRxc48KzkfYzemwS_eYaLq4_NI,2093
|
|
91
96
|
tests/test_preprocessing.py,sha256=FI-Wk-kc4wWmOQg_NLCUIZC1oti396wr5cC-BauBai0,1436
|
|
92
|
-
tests/test_qt.py,sha256=
|
|
97
|
+
tests/test_qt.py,sha256=Mx8qxUofHyMo2NnPOKQq108sJ-7skVFGWAA_VMyehMw,4042
|
|
93
98
|
tests/test_segmentation.py,sha256=k1b_zIZdlytEdJcHjAUQEO3gTBAHtv5WvrwQN2xD4kc,3470
|
|
94
99
|
tests/test_signals.py,sha256=No4cah6KxplhDcKXnU8RrA7eDla4hWw6ccf7xGnBokU,3599
|
|
95
100
|
tests/test_tracking.py,sha256=8hebWSqEIuttD1ABn-6dKCT7EXKRR7-4RwyFWi1WPFo,8800
|
|
96
101
|
tests/test_utils.py,sha256=NKRCAC1d89aBK5cWjTb7-pInYow901RrT-uBlIdz4KI,3692
|
|
97
|
-
celldetective-1.3.
|
|
98
|
-
celldetective-1.3.
|
|
99
|
-
celldetective-1.3.
|
|
100
|
-
celldetective-1.3.
|
|
101
|
-
celldetective-1.3.
|
|
102
|
-
celldetective-1.3.
|
|
102
|
+
celldetective-1.3.4.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
103
|
+
celldetective-1.3.4.dist-info/METADATA,sha256=h45Xti2RUbcEQk5Om87dsNhfDQnRCHPOl_Pw3kFfH48,10528
|
|
104
|
+
celldetective-1.3.4.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
|
105
|
+
celldetective-1.3.4.dist-info/entry_points.txt,sha256=2NU6_EOByvPxqBbCvjwxlVlvnQreqZ3BKRCVIKEv3dg,62
|
|
106
|
+
celldetective-1.3.4.dist-info/top_level.txt,sha256=6rsIKKfGMKgud7HPuATcpq6EhdXwcg_yknBVWn9x4C4,20
|
|
107
|
+
celldetective-1.3.4.dist-info/RECORD,,
|
tests/test_qt.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import pytest
|
|
2
2
|
from PyQt5 import QtCore
|
|
3
3
|
from celldetective.gui.InitWindow import AppInitWindow
|
|
4
|
+
from celldetective.utils import get_software_location
|
|
4
5
|
import time
|
|
5
6
|
import os
|
|
6
7
|
|
|
@@ -9,7 +10,8 @@ print(abs_path)
|
|
|
9
10
|
|
|
10
11
|
@pytest.fixture
|
|
11
12
|
def app(qtbot):
|
|
12
|
-
|
|
13
|
+
software_location = get_software_location()
|
|
14
|
+
test_app = AppInitWindow(software_location=software_location)
|
|
13
15
|
qtbot.addWidget(test_app)
|
|
14
16
|
return test_app
|
|
15
17
|
|
|
@@ -33,8 +35,8 @@ def test_app(app, qtbot):
|
|
|
33
35
|
qtbot.mouseClick(app.validate_button, QtCore.Qt.LeftButton)
|
|
34
36
|
|
|
35
37
|
# Set a position
|
|
36
|
-
app.control_panel.position_list.setCurrentIndex(
|
|
37
|
-
app.control_panel.update_position_options()
|
|
38
|
+
#app.control_panel.position_list.setCurrentIndex(0)
|
|
39
|
+
#app.control_panel.update_position_options()
|
|
38
40
|
|
|
39
41
|
# View stacl
|
|
40
42
|
qtbot.mouseClick(app.control_panel.view_stack_btn, QtCore.Qt.LeftButton)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|