celldetective 1.3.9.post4__tar.gz → 1.4.0__tar.gz

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 (141) hide show
  1. {celldetective-1.3.9.post4 → celldetective-1.4.0}/PKG-INFO +24 -16
  2. {celldetective-1.3.9.post4 → celldetective-1.4.0}/README.md +17 -14
  3. celldetective-1.4.0/celldetective/__init__.py +1 -0
  4. celldetective-1.4.0/celldetective/_version.py +1 -0
  5. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/events.py +2 -4
  6. celldetective-1.4.0/celldetective/extra_properties.py +569 -0
  7. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/InitWindow.py +33 -45
  8. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/__init__.py +1 -0
  9. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/about.py +19 -15
  10. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/analyze_block.py +34 -19
  11. celldetective-1.4.0/celldetective/gui/base_components.py +23 -0
  12. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/btrack_options.py +26 -34
  13. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/classifier_widget.py +71 -80
  14. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/configure_new_exp.py +113 -17
  15. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/control_panel.py +68 -141
  16. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/generic_signal_plot.py +9 -12
  17. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/gui_utils.py +49 -21
  18. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/json_readers.py +5 -4
  19. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/layouts.py +246 -22
  20. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/measurement_options.py +32 -17
  21. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/neighborhood_options.py +10 -13
  22. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/plot_measurements.py +21 -17
  23. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/plot_signals_ui.py +131 -75
  24. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/process_block.py +180 -123
  25. celldetective-1.4.0/celldetective/gui/processes/compute_neighborhood.py +594 -0
  26. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/processes/measure_cells.py +5 -0
  27. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/processes/segment_cells.py +27 -6
  28. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/processes/track_cells.py +6 -0
  29. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/retrain_segmentation_model_options.py +12 -20
  30. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/retrain_signal_model_options.py +57 -56
  31. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/seg_model_loader.py +21 -62
  32. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/signal_annotator.py +139 -72
  33. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/signal_annotator2.py +431 -635
  34. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/signal_annotator_options.py +8 -11
  35. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/survival_ui.py +49 -95
  36. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/tableUI.py +28 -25
  37. celldetective-1.4.0/celldetective/gui/thresholds_gui.py +714 -0
  38. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/viewers.py +106 -39
  39. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/workers.py +9 -3
  40. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/io.py +73 -27
  41. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/measure.py +63 -27
  42. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/neighborhood.py +342 -268
  43. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/preprocessing.py +25 -17
  44. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/relative_measurements.py +50 -29
  45. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/scripts/analyze_signals.py +4 -1
  46. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/scripts/measure_relative.py +4 -1
  47. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/scripts/segment_cells.py +0 -6
  48. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/scripts/track_cells.py +3 -1
  49. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/scripts/train_segmentation_model.py +7 -4
  50. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/signals.py +29 -14
  51. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/tracking.py +7 -2
  52. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/utils.py +36 -8
  53. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective.egg-info/PKG-INFO +24 -16
  54. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective.egg-info/SOURCES.txt +2 -0
  55. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective.egg-info/requires.txt +4 -0
  56. {celldetective-1.3.9.post4 → celldetective-1.4.0}/tests/test_qt.py +21 -21
  57. celldetective-1.3.9.post4/celldetective/__init__.py +0 -4
  58. celldetective-1.3.9.post4/celldetective/_version.py +0 -1
  59. celldetective-1.3.9.post4/celldetective/extra_properties.py +0 -273
  60. celldetective-1.3.9.post4/celldetective/gui/thresholds_gui.py +0 -1318
  61. {celldetective-1.3.9.post4 → celldetective-1.4.0}/LICENSE +0 -0
  62. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/__main__.py +0 -0
  63. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/datasets/segmentation_annotations/blank +0 -0
  64. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/datasets/signal_annotations/blank +0 -0
  65. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/filters.py +0 -0
  66. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/help/DL-segmentation-strategy.json +0 -0
  67. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/help/Threshold-vs-DL.json +0 -0
  68. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/help/cell-populations.json +0 -0
  69. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/help/exp-structure.json +0 -0
  70. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/help/feature-btrack.json +0 -0
  71. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/help/neighborhood.json +0 -0
  72. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/help/prefilter-for-segmentation.json +0 -0
  73. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/help/preprocessing.json +0 -0
  74. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/help/propagate-classification.json +0 -0
  75. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/help/track-postprocessing.json +0 -0
  76. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/help/tracking.json +0 -0
  77. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/processes/downloader.py +0 -0
  78. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/processes/train_segmentation_model.py +0 -0
  79. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/processes/train_signal_model.py +0 -0
  80. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/gui/styles.py +0 -0
  81. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/icons/logo-large.png +0 -0
  82. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/icons/logo.png +0 -0
  83. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/icons/signals_icon.png +0 -0
  84. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/icons/splash-test.png +0 -0
  85. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/icons/splash.png +0 -0
  86. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/icons/splash0.png +0 -0
  87. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/icons/survival2.png +0 -0
  88. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/icons/vignette_signals2.png +0 -0
  89. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/icons/vignette_signals2.svg +0 -0
  90. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/links/zenodo.json +0 -0
  91. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/models/pair_signal_detection/blank +0 -0
  92. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/models/segmentation_effectors/blank +0 -0
  93. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/models/segmentation_effectors/ricm_bf_all_last/config_input.json +0 -0
  94. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/models/segmentation_effectors/ricm_bf_all_last/ricm_bf_all_last +0 -0
  95. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/models/segmentation_effectors/ricm_bf_all_last/training_instructions.json +0 -0
  96. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/models/segmentation_effectors/test-transfer/config_input.json +0 -0
  97. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/models/segmentation_effectors/test-transfer/test-transfer +0 -0
  98. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/models/segmentation_generic/blank +0 -0
  99. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/models/segmentation_targets/blank +0 -0
  100. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/models/signal_detection/NucCond/classification_loss.png +0 -0
  101. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/models/signal_detection/NucCond/classifier.h5 +0 -0
  102. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/models/signal_detection/NucCond/config_input.json +0 -0
  103. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/models/signal_detection/NucCond/log_classifier.csv +0 -0
  104. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/models/signal_detection/NucCond/log_regressor.csv +0 -0
  105. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/models/signal_detection/NucCond/regression_loss.png +0 -0
  106. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/models/signal_detection/NucCond/regressor.h5 +0 -0
  107. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/models/signal_detection/NucCond/scores.npy +0 -0
  108. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/models/signal_detection/NucCond/test_confusion_matrix.png +0 -0
  109. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/models/signal_detection/NucCond/test_regression.png +0 -0
  110. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/models/signal_detection/NucCond/validation_confusion_matrix.png +0 -0
  111. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/models/signal_detection/NucCond/validation_regression.png +0 -0
  112. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/models/signal_detection/blank +0 -0
  113. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/models/tracking_configs/biased_motion.json +0 -0
  114. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/models/tracking_configs/mcf7.json +0 -0
  115. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/models/tracking_configs/no_z_motion.json +0 -0
  116. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/models/tracking_configs/ricm.json +0 -0
  117. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/models/tracking_configs/ricm2.json +0 -0
  118. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/regionprops/__init__.py +0 -0
  119. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/regionprops/_regionprops.py +0 -0
  120. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/regionprops/props.json +0 -0
  121. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/scripts/measure_cells.py +0 -0
  122. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/scripts/segment_cells_thresholds.py +0 -0
  123. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/scripts/train_signal_model.py +0 -0
  124. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective/segmentation.py +0 -0
  125. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective.egg-info/dependency_links.txt +0 -0
  126. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective.egg-info/entry_points.txt +0 -0
  127. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective.egg-info/not-zip-safe +0 -0
  128. {celldetective-1.3.9.post4 → celldetective-1.4.0}/celldetective.egg-info/top_level.txt +0 -0
  129. {celldetective-1.3.9.post4 → celldetective-1.4.0}/setup.cfg +0 -0
  130. {celldetective-1.3.9.post4 → celldetective-1.4.0}/setup.py +0 -0
  131. {celldetective-1.3.9.post4 → celldetective-1.4.0}/tests/__init__.py +0 -0
  132. {celldetective-1.3.9.post4 → celldetective-1.4.0}/tests/test_events.py +0 -0
  133. {celldetective-1.3.9.post4 → celldetective-1.4.0}/tests/test_filters.py +0 -0
  134. {celldetective-1.3.9.post4 → celldetective-1.4.0}/tests/test_io.py +0 -0
  135. {celldetective-1.3.9.post4 → celldetective-1.4.0}/tests/test_measure.py +0 -0
  136. {celldetective-1.3.9.post4 → celldetective-1.4.0}/tests/test_neighborhood.py +0 -0
  137. {celldetective-1.3.9.post4 → celldetective-1.4.0}/tests/test_preprocessing.py +0 -0
  138. {celldetective-1.3.9.post4 → celldetective-1.4.0}/tests/test_segmentation.py +0 -0
  139. {celldetective-1.3.9.post4 → celldetective-1.4.0}/tests/test_signals.py +0 -0
  140. {celldetective-1.3.9.post4 → celldetective-1.4.0}/tests/test_tracking.py +0 -0
  141. {celldetective-1.3.9.post4 → celldetective-1.4.0}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: celldetective
3
- Version: 1.3.9.post4
3
+ Version: 1.4.0
4
4
  Summary: description
5
5
  Home-page: http://github.com/remyeltorro/celldetective
6
6
  Author: Rémy Torro
@@ -44,12 +44,17 @@ Requires-Dist: h5py
44
44
  Requires-Dist: cliffs_delta
45
45
  Requires-Dist: requests
46
46
  Requires-Dist: trackpy
47
+ Requires-Dist: prettyprint
48
+ Requires-Dist: pandas
49
+ Requires-Dist: matplotlib
50
+ Requires-Dist: prettytable
47
51
  Dynamic: author
48
52
  Dynamic: author-email
49
53
  Dynamic: description
50
54
  Dynamic: description-content-type
51
55
  Dynamic: home-page
52
56
  Dynamic: license
57
+ Dynamic: license-file
53
58
  Dynamic: requires-dist
54
59
  Dynamic: summary
55
60
 
@@ -183,26 +188,29 @@ For more information about how to get started, please check the [documentation](
183
188
  # How to cite?
184
189
 
185
190
  If you use this software in your research, please cite the
186
- [Celldetective](https://www.biorxiv.org/content/10.1101/2024.03.15.585250v3)
187
- paper (currently preprint):
191
+ [Celldetective](https://elifesciences.org/reviewed-preprints/105302)
192
+ paper (currently a reviewed preprint at eLife):
188
193
 
189
194
  ``` raw
190
- @article {Torro2024.03.15.585250,
191
- 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},
192
- title = {Celldetective: an AI-enhanced image analysis tool for unraveling dynamic cell interactions},
193
- elocation-id = {2024.03.15.585250},
194
- year = {2024},
195
- doi = {10.1101/2024.03.15.585250},
196
- publisher = {Cold Spring Harbor Laboratory},
197
- 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.},
198
- URL = {https://www.biorxiv.org/content/early/2024/11/13/2024.03.15.585250},
199
- eprint = {https://www.biorxiv.org/content/early/2024/11/13/2024.03.15.585250.full.pdf},
200
- journal = {bioRxiv}
195
+ @article{torroCelldetectiveAIenhancedImage2025,
196
+ title = {Celldetective: An {{AI-enhanced}} Image Analysis Tool for Unraveling Dynamic Cell Interactions},
197
+ shorttitle = {Celldetective},
198
+ author = {Torro, Rémy and Dí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},
199
+ date = {2025-03-10},
200
+ journaltitle = {eLife},
201
+ volume = {14},
202
+ publisher = {eLife Sciences Publications Limited},
203
+ doi = {10.7554/eLife.105302.1},
204
+ url = {https://elifesciences.org/reviewed-preprints/105302},
205
+ urldate = {2025-03-20},
206
+ 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.},
207
+ langid = {english},
208
+ file = {/home/torro/Zotero/storage/VFYBBMQF/Torro et al. - 2025 - Celldetective an AI-enhanced image analysis tool .pdf;/home/torro/Zotero/storage/UGMCKKST/105302.html}
201
209
  }
202
210
  ```
203
211
 
204
212
  Make sure you to cite the papers of any segmentation model (StarDist,
205
- Cellpose) or tracker (bTrack) you used through Celldetective.
213
+ Cellpose) or tracker (bTrack, TrackPy) you used through Celldetective.
206
214
 
207
215
  # Bibliography
208
216
 
@@ -128,26 +128,29 @@ For more information about how to get started, please check the [documentation](
128
128
  # How to cite?
129
129
 
130
130
  If you use this software in your research, please cite the
131
- [Celldetective](https://www.biorxiv.org/content/10.1101/2024.03.15.585250v3)
132
- paper (currently preprint):
131
+ [Celldetective](https://elifesciences.org/reviewed-preprints/105302)
132
+ paper (currently a reviewed preprint at eLife):
133
133
 
134
134
  ``` raw
135
- @article {Torro2024.03.15.585250,
136
- 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},
137
- title = {Celldetective: an AI-enhanced image analysis tool for unraveling dynamic cell interactions},
138
- elocation-id = {2024.03.15.585250},
139
- year = {2024},
140
- doi = {10.1101/2024.03.15.585250},
141
- publisher = {Cold Spring Harbor Laboratory},
142
- 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.},
143
- URL = {https://www.biorxiv.org/content/early/2024/11/13/2024.03.15.585250},
144
- eprint = {https://www.biorxiv.org/content/early/2024/11/13/2024.03.15.585250.full.pdf},
145
- journal = {bioRxiv}
135
+ @article{torroCelldetectiveAIenhancedImage2025,
136
+ title = {Celldetective: An {{AI-enhanced}} Image Analysis Tool for Unraveling Dynamic Cell Interactions},
137
+ shorttitle = {Celldetective},
138
+ author = {Torro, Rémy and Dí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},
139
+ date = {2025-03-10},
140
+ journaltitle = {eLife},
141
+ volume = {14},
142
+ publisher = {eLife Sciences Publications Limited},
143
+ doi = {10.7554/eLife.105302.1},
144
+ url = {https://elifesciences.org/reviewed-preprints/105302},
145
+ urldate = {2025-03-20},
146
+ 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.},
147
+ langid = {english},
148
+ file = {/home/torro/Zotero/storage/VFYBBMQF/Torro et al. - 2025 - Celldetective an AI-enhanced image analysis tool .pdf;/home/torro/Zotero/storage/UGMCKKST/105302.html}
146
149
  }
147
150
  ```
148
151
 
149
152
  Make sure you to cite the papers of any segmentation model (StarDist,
150
- Cellpose) or tracker (bTrack) you used through Celldetective.
153
+ Cellpose) or tracker (bTrack, TrackPy) you used through Celldetective.
151
154
 
152
155
  # Bibliography
153
156
 
@@ -0,0 +1 @@
1
+ from ._version import __version__
@@ -0,0 +1 @@
1
+ __version__ = "1.4.0"
@@ -52,7 +52,7 @@ def switch_to_events(classes, event_times, max_times, origin_times=None, left_ce
52
52
  >>> event_times = [5, 10, 15]
53
53
  >>> max_times = [20, 20, 20]
54
54
  >>> origin_times = [0, 0, 5]
55
- >>> events, survival_times = switch_to_events_v2(classes, event_times, max_times, origin_times, FrameToMin=0.5)
55
+ >>> events, survival_times = switch_to_events(classes, event_times, max_times, origin_times, FrameToMin=0.5)
56
56
  # This would process the events considering left censorship and convert survival times to minutes.
57
57
 
58
58
  """
@@ -189,6 +189,7 @@ def compute_survival(df, class_of_interest, t_event, t_reference=None, FrameToMi
189
189
  assert class_of_interest in cols,"The requested class cannot be found in the dataframe..."
190
190
  assert t_event in cols,"The event time cannot be found in the dataframe..."
191
191
  left_censored = False
192
+ first_detections = None
192
193
 
193
194
  if not pairs:
194
195
  groupby_cols = ['position','TRACK_ID']
@@ -209,10 +210,7 @@ def compute_survival(df, class_of_interest, t_event, t_reference=None, FrameToMi
209
210
  assert t_reference in cols,"The reference time cannot be found in the dataframe..."
210
211
  first_detections = df.groupby(groupby_cols)[t_reference].max().values
211
212
 
212
-
213
- print(f"{classes=} {event_times=} {max_times=} {first_detections=}")
214
213
  events, survival_times = switch_to_events(classes, event_times, max_times, origin_times=first_detections, left_censored=left_censored, FrameToMin=FrameToMin, cut_observation_time=cut_observation_time)
215
- print(f"{events=} {survival_times=}")
216
214
 
217
215
  ks = KaplanMeierFitter()
218
216
  if len(events)>0: