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.
Files changed (41) hide show
  1. celldetective/__main__.py +30 -4
  2. celldetective/_version.py +1 -1
  3. celldetective/extra_properties.py +21 -0
  4. celldetective/filters.py +15 -2
  5. celldetective/gui/InitWindow.py +28 -34
  6. celldetective/gui/analyze_block.py +3 -498
  7. celldetective/gui/classifier_widget.py +1 -1
  8. celldetective/gui/control_panel.py +100 -29
  9. celldetective/gui/generic_signal_plot.py +35 -18
  10. celldetective/gui/gui_utils.py +143 -2
  11. celldetective/gui/layouts.py +7 -6
  12. celldetective/gui/measurement_options.py +38 -43
  13. celldetective/gui/plot_measurements.py +5 -13
  14. celldetective/gui/plot_signals_ui.py +30 -30
  15. celldetective/gui/process_block.py +66 -197
  16. celldetective/gui/retrain_segmentation_model_options.py +3 -1
  17. celldetective/gui/signal_annotator.py +50 -32
  18. celldetective/gui/signal_annotator2.py +7 -4
  19. celldetective/gui/styles.py +13 -0
  20. celldetective/gui/survival_ui.py +8 -21
  21. celldetective/gui/tableUI.py +1 -2
  22. celldetective/gui/thresholds_gui.py +195 -205
  23. celldetective/gui/viewers.py +262 -12
  24. celldetective/io.py +85 -11
  25. celldetective/measure.py +128 -88
  26. celldetective/models/segmentation_effectors/ricm_bf_all_last/config_input.json +79 -0
  27. celldetective/models/segmentation_effectors/ricm_bf_all_last/ricm_bf_all_last +0 -0
  28. celldetective/models/segmentation_effectors/ricm_bf_all_last/training_instructions.json +37 -0
  29. celldetective/models/segmentation_effectors/test-transfer/config_input.json +39 -0
  30. celldetective/models/segmentation_effectors/test-transfer/test-transfer +0 -0
  31. celldetective/neighborhood.py +0 -2
  32. celldetective/scripts/measure_cells.py +21 -9
  33. celldetective/signals.py +77 -66
  34. celldetective/tracking.py +19 -13
  35. {celldetective-1.3.2.dist-info → celldetective-1.3.4.dist-info}/METADATA +12 -10
  36. {celldetective-1.3.2.dist-info → celldetective-1.3.4.dist-info}/RECORD +41 -36
  37. {celldetective-1.3.2.dist-info → celldetective-1.3.4.dist-info}/WHEEL +1 -1
  38. tests/test_qt.py +5 -3
  39. {celldetective-1.3.2.dist-info → celldetective-1.3.4.dist-info}/LICENSE +0 -0
  40. {celldetective-1.3.2.dist-info → celldetective-1.3.4.dist-info}/entry_points.txt +0 -0
  41. {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, ceil
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
- classes = model.predict_class(signals)
198
- times_recast = model.predict_time_of_interest(signals)
198
+ classes = model.predict_class(signals)
199
+ times_recast = model.predict_time_of_interest(signals)
199
200
 
200
- if label is None:
201
- class_col = 'class'
202
- time_col = 't0'
203
- status_col = 'status'
204
- else:
205
- class_col = 'class_'+label
206
- time_col = 't_'+label
207
- status_col = 'status_'+label
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
- for i,(tid,group) in enumerate(trajectories.groupby(column_labels['track'])):
210
- indices = group.index
211
- trajectories.loc[indices,class_col] = classes[i]
212
- trajectories.loc[indices,time_col] = times_recast[i]
213
- print('Done.')
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
- for tid, group in trajectories.groupby(column_labels['track']):
216
-
217
- indices = group.index
218
- t0 = group[time_col].to_numpy()[0]
219
- cclass = group[class_col].to_numpy()[0]
220
- timeline = group[column_labels['time']].to_numpy()
221
- status = np.zeros_like(timeline)
222
- if t0 > 0:
223
- status[timeline>=t0] = 1.
224
- if cclass==2:
225
- status[:] = 2
226
- if cclass>2:
227
- status[:] = 42
228
- status_color = [color_from_status(s) for s in status]
229
- class_color = [color_from_class(cclass) for i in range(len(status))]
230
-
231
- trajectories.loc[indices, status_col] = status
232
- trajectories.loc[indices, 'status_color'] = status_color
233
- trajectories.loc[indices, 'class_color'] = class_color
234
-
235
- if plot_outcome:
236
- fig,ax = plt.subplots(1,len(selected_signals), figsize=(10,5))
237
- for i,s in enumerate(selected_signals):
238
- for k,(tid,group) in enumerate(trajectories.groupby(column_labels['track'])):
239
- cclass = group[class_col].to_numpy()[0]
240
- t0 = group[time_col].to_numpy()[0]
241
- timeline = group[column_labels['time']].to_numpy()
242
- if cclass==0:
243
- if len(selected_signals)>1:
244
- ax[i].plot(timeline - t0, group[s].to_numpy(),c='tab:blue',alpha=0.1)
245
- else:
246
- ax.plot(timeline - t0, group[s].to_numpy(),c='tab:blue',alpha=0.1)
247
- if len(selected_signals)>1:
248
- for a,s in zip(ax,selected_signals):
249
- a.set_title(s)
250
- a.set_xlabel(r'time - t$_0$ [frame]')
251
- a.spines['top'].set_visible(False)
252
- a.spines['right'].set_visible(False)
253
- else:
254
- ax.set_title(s)
255
- ax.set_xlabel(r'time - t$_0$ [frame]')
256
- ax.spines['top'].set_visible(False)
257
- ax.spines['right'].set_visible(False)
258
- plt.tight_layout()
259
- if output_dir is not None:
260
- plt.savefig(output_dir+'signal_collapse.png',bbox_inches='tight',dpi=300)
261
- plt.pause(3)
262
- plt.close()
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 {path}...")
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
- if len(timeline)>2:
963
- dt = timeline[1] - timeline[0]
964
- if np.any(detection==detection):
965
- t_first = timeline[detection==detection][0]
966
- cclass = 0
967
- if t_first<=0:
968
- t_first = -1
969
- cclass = 2
970
- else:
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.2
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: nbsphinx-link
14
- Requires-Dist: sphinx-rtd-theme
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: matplotlib-scalebar
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: cliffs-delta
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.585250v1)
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 Torro and Beatriz D{\`\i}az-Bello and Dalia El Arawi and Lorna Ammer and Patrick Chames and Kheya Sengupta and Laurent Limozin},
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 key challenge in bioimaging is the analysis of multimodal and multidimensional data reporting dynamic interactions between diverse cell populations. We developed Celldetective, a software that integrates AI-based segmentation and tracking algorithms and automated signal analysis into a user-friendly graphical interface. It offers complete interactive visualization, annotation, and training capabilities. We demonstrate it by analyzing original experimental data of spreading immune effector cells as well as antibody-dependent cell cytotoxicity events using multimodal fluorescence microscopy.Competing Interest StatementThe authors have declared no competing interest.},
186
- URL = {https://www.biorxiv.org/content/early/2024/03/17/2024.03.15.585250},
187
- eprint = {https://www.biorxiv.org/content/early/2024/03/17/2024.03.15.585250.full.pdf},
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=_H9B620ntENFx9RBvlV6ybxpvtHzCbv5NnIPmDBr9Z0,1127
3
- celldetective/_version.py,sha256=HgKA3RqZvC7slo8MgLyffCGwJbQ3cY6I7oUMFvGLWps,22
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=88JtyoY883ibon-rqtCX_BCHOpo0MTGfiLciIR7jM24,5176
6
- celldetective/filters.py,sha256=b0qKwHor1fvNA_dHovP17nQz8EsW5YlyhT2TJnayn08,3615
7
- celldetective/io.py,sha256=CWwhiJMUwz6-9Ekxo1lWmThhN_0aP8RRg9HUr8BgNZo,88428
8
- celldetective/measure.py,sha256=ZrhAp2nL0L012aKrlSsJkmIStklj2GQdDu8Yfftp9ZU,56400
9
- celldetective/neighborhood.py,sha256=66fsOPDtjbrUTww97wVFmPk-UZakJgglua8O1Jl-RC4,56745
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=XGBTyAPVp7hhXDK1qRFrC4H2U65jj2nBR4FQJ4LvUvA,121028
14
- celldetective/tracking.py,sha256=zZ9J1plUCTjKuK4HAPiuj3BysoR6hLehqYVsBEqhCnk,37995
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=OyEyWF6KJ4YzGK-8ZeMwYmPEG1maHcHlxmdsCJyUiEs,14963
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=sat8RECEeZxlaconZZIxI0IrIjwJo121PcBXqJmA1-o,24756
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=4239jKQb1uZMQU6iBBicavE05QAgmBQBM0YnmDesoPs,18430
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=5twtX3-gKAJZVNXkuAkX4PLcOgmRhAyFHZSG3bk7xpk,19144
26
- celldetective/gui/generic_signal_plot.py,sha256=KPJU5uP7uHxWQ6txmZx6gFalGPGxC165LSsx7AvB7zA,35605
27
- celldetective/gui/gui_utils.py,sha256=og9iz2DkkJc_4UZmnvhN2oCMMPbJVnx-FAF10JfR8Eo,30441
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=f_MoRPtl6e1UAsSTVidCSNk4_hoz1me_Z1KFaia29TQ,51783
30
- celldetective/gui/measurement_options.py,sha256=jc0_RGpbCB3BhDWjqKFBP4j5ncTSIKUz8In7ae306vE,39288
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=SBFkY3542hW4H_vllOCMxMOgBz09KUE2FLhhgI8avXk,51024
33
- celldetective/gui/plot_signals_ui.py,sha256=i3ulnd6_dyFDRRy8RLO-fC6zwkbYjMXLYRc8rTYKTlE,15981
34
- celldetective/gui/process_block.py,sha256=ekwVETKOAxBv0yIpB2ILkLcPG2dnyK8f0fXsnHNb35s,73618
35
- celldetective/gui/retrain_segmentation_model_options.py,sha256=jYD9AWzDPacUgaBv9l6ldQxXNZb3BD4EwJc-0t02jXw,23207
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=uzX06JYJOCFm4EytQRV2_JR8orbjDh6NjWberQePiGg,88244
39
- celldetective/gui/signal_annotator2.py,sha256=Phft2_mjwtadd_BFNnZwofOGtrzXL9AEBG46hHvlZow,108888
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=fup0_U1Zk0IJAjyruHde_r-X7d7cTMcrpPLPl-HuKAM,4820
42
- celldetective/gui/survival_ui.py,sha256=SJV-HIcA0hg_ZvyTdxbutvkUwuCSnx2TI3hNHn3AtZE,10362
43
- celldetective/gui/tableUI.py,sha256=kkgqxopWuC8nnTFPVkf09_h9176OfBmRMZ3E6AsyQIc,50531
44
- celldetective/gui/thresholds_gui.py,sha256=t1hTDdaJTJWHBt9vtRCE4B1TsVHhobQwCpKfntVgaQI,50510
45
- celldetective/gui/viewers.py,sha256=rQWJoE45uncNl8-_ktNPnzxvx_Rm8MN3LIawZtWfusU,37723
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=hKBLX6qT1K5asq0e53kLs2_Xr9oPYwliiEaPQgpnNrU,11734
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=eYqOoff-vfvZAZM6H_IY19IqK7qzyETcyj54f9T0bQA,3906
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.2.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
98
- celldetective-1.3.2.dist-info/METADATA,sha256=TDy-Xv2HDKhb-rkNOqiXDYrW9yICk9BJxr4FPmveNEg,9969
99
- celldetective-1.3.2.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
100
- celldetective-1.3.2.dist-info/entry_points.txt,sha256=2NU6_EOByvPxqBbCvjwxlVlvnQreqZ3BKRCVIKEv3dg,62
101
- celldetective-1.3.2.dist-info/top_level.txt,sha256=6rsIKKfGMKgud7HPuATcpq6EhdXwcg_yknBVWn9x4C4,20
102
- celldetective-1.3.2.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.5.0)
2
+ Generator: setuptools (75.6.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
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
- test_app = AppInitWindow()
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(1)
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)