cellects 0.1.2__py3-none-any.whl → 0.2.6__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 (38) hide show
  1. cellects/__main__.py +65 -25
  2. cellects/config/all_vars_dict.py +18 -17
  3. cellects/core/cellects_threads.py +1034 -396
  4. cellects/core/motion_analysis.py +1664 -2010
  5. cellects/core/one_image_analysis.py +1082 -1061
  6. cellects/core/program_organizer.py +1687 -1316
  7. cellects/core/script_based_run.py +80 -76
  8. cellects/gui/advanced_parameters.py +390 -330
  9. cellects/gui/cellects.py +102 -91
  10. cellects/gui/custom_widgets.py +16 -33
  11. cellects/gui/first_window.py +226 -104
  12. cellects/gui/if_several_folders_window.py +117 -68
  13. cellects/gui/image_analysis_window.py +866 -454
  14. cellects/gui/required_output.py +104 -57
  15. cellects/gui/ui_strings.py +840 -0
  16. cellects/gui/video_analysis_window.py +333 -155
  17. cellects/image_analysis/cell_leaving_detection.py +64 -4
  18. cellects/image_analysis/image_segmentation.py +451 -22
  19. cellects/image_analysis/morphological_operations.py +2166 -1635
  20. cellects/image_analysis/network_functions.py +616 -253
  21. cellects/image_analysis/one_image_analysis_threads.py +94 -153
  22. cellects/image_analysis/oscillations_functions.py +131 -0
  23. cellects/image_analysis/progressively_add_distant_shapes.py +2 -3
  24. cellects/image_analysis/shape_descriptors.py +517 -466
  25. cellects/utils/formulas.py +169 -6
  26. cellects/utils/load_display_save.py +362 -109
  27. cellects/utils/utilitarian.py +86 -9
  28. cellects-0.2.6.dist-info/LICENSE +675 -0
  29. cellects-0.2.6.dist-info/METADATA +829 -0
  30. cellects-0.2.6.dist-info/RECORD +44 -0
  31. cellects/core/one_video_per_blob.py +0 -540
  32. cellects/image_analysis/cluster_flux_study.py +0 -102
  33. cellects-0.1.2.dist-info/LICENSE.odt +0 -0
  34. cellects-0.1.2.dist-info/METADATA +0 -132
  35. cellects-0.1.2.dist-info/RECORD +0 -44
  36. {cellects-0.1.2.dist-info → cellects-0.2.6.dist-info}/WHEEL +0 -0
  37. {cellects-0.1.2.dist-info → cellects-0.2.6.dist-info}/entry_points.txt +0 -0
  38. {cellects-0.1.2.dist-info → cellects-0.2.6.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,840 @@
1
+ #!/usr/bin/env python3
2
+
3
+ ########################################
4
+ ######### First Window #########
5
+ ########################################
6
+
7
+ FW = dict()
8
+ FW["Image_list_or_videos"] = {}
9
+ FW["Image_list_or_videos"]["label"] = "Image list or videos"
10
+ # START_TIP
11
+ FW["Image_list_or_videos"]["tips"] = \
12
+ f"""The *Image list or video* option indicates whether the data have been stored as an image stack (i.e.
13
+ a set of files where each file contains a single image) or as a video. Images must be named
14
+ alphanumerically so the program can read them in the right order.
15
+ """
16
+ # END_TIP
17
+
18
+ FW["Image_prefix_and_extension"] = {}
19
+ FW["Image_prefix_and_extension"]["label"] = "Image prefix and extension"
20
+ # START_TIP
21
+ FW["Image_prefix_and_extension"]["tips"] = \
22
+ f"""The *Images prefix* and *Images extension* fields allow Cellects to consider relevant data. For
23
+ example, setting 'exp_' as image prefix and '.jpg' as image extension will cause Cellects to only
24
+ consider JPG files whose name starts with 'exp_'. Remaining labels should indicate the order in
25
+ which images were taken.
26
+ NB:
27
+ - Image prefix is optional
28
+ - If every .jpg files start with IMG_ but other .jpg files exist, use the prefix to exclude
29
+ irrelevant files.
30
+ - Supported formats: bmp, dib, exr, exr, hdr, jp2, jpe, jpeg, jpg, pbm, pfm, pgm, pic, png, pnm,
31
+ ppm, ras, sr, tif, tiff, webp, cr2, cr3, nef, arw, sr2, raf, prf, rw2, pef, dng, 3fr, iiq.
32
+ """
33
+ # END_TIP
34
+
35
+ FW["Folder"] = {}
36
+ FW["Folder"]["label"] = "Folder"
37
+ # START_TIP
38
+ FW["Folder"]["tips"] = \
39
+ f"""The *Folder* field must specify the directory path to the folder(s) for Cellects to be able to run
40
+ the analysis. The user can copy/paste this path into the field or navigate to the folder using the
41
+ *Browse* push button. For batch analysis, provide a path leading directly to the parent folder
42
+ containing all subfolders.
43
+ """
44
+ # END_TIP
45
+
46
+ FW["Arena_number_per_folder"] = {}
47
+ FW["Arena_number_per_folder"]["label"] = "Arena number per folder"
48
+ # START_TIP
49
+ FW["Arena_number_per_folder"]["tips"] = \
50
+ f"""The *Arena number per folder* specifies how many arenas are present in the images. Cellects will
51
+ process and analyze each arena separately.
52
+ NB:
53
+ - For batch processing, assign different arena counts for each subfolder (see Fig. 11: the several
54
+ folder window).
55
+ """
56
+ # END_TIP
57
+
58
+ FW["Browse"] = {}
59
+ FW["Browse"]["label"] = "Browse"
60
+ # START_TIP
61
+ FW["Browse"]["tips"] = \
62
+ f"""Clicking the *Browse* button opens a dialog to select a folder for analysis.
63
+ """
64
+ # END_TIP
65
+
66
+ FW["Required_outputs"] = {}
67
+ FW["Required_outputs"]["label"] = "Required outputs"
68
+ # START_TIP
69
+ FW["Required_outputs"]["tips"] = \
70
+ f"""Clicking the *Required outputs* button opens the window allowing to choose what descriptors Cellects
71
+ will compute on the selected data. Find details about this window in the advanced documentation.
72
+ """
73
+ # END_TIP
74
+
75
+ FW["Advanced_parameters"] = {}
76
+ FW["Advanced_parameters"]["label"] = "Advanced parameters"
77
+ # START_TIP
78
+ FW["Advanced_parameters"]["tips"] = \
79
+ f"""Clicking the *Advanced parameters* button opens the window containing all secondary parameters of
80
+ the software. Find details about this window in the advanced documentation.
81
+ """
82
+ # END_TIP
83
+
84
+ FW["Run_all_directly"] = {}
85
+ FW["Run_all_directly"]["label"] = "Run all directly"
86
+ # START_TIP
87
+ FW["Run_all_directly"]["tips"] = \
88
+ f"""This option appears when image analysis has already been performed for the current folder. It is a
89
+ shortcut to bypass the image analysis step and proceed directly to video tracking refinement.
90
+ """
91
+ # END_TIP
92
+
93
+ FW["Next"] = {}
94
+ FW["Next"]["label"] = "Next"
95
+ # START_TIP
96
+ FW["Next"]["tips"] = \
97
+ f"""Click the *Next* button to go to the image analysis window (Fig. 2), or to the window showing the
98
+ list of folders (Fig. 11) if applicable.
99
+ """
100
+ # END_TIP
101
+
102
+ #######################################
103
+ ######### ImageAnalysisWindow #########
104
+ #######################################
105
+
106
+ IAW = dict()
107
+ IAW["Image_number"] = {}
108
+ IAW["Image_number"]["label"] = "Image number"
109
+ # START_TIP
110
+ IAW["Image_number"]["tips"] = \
111
+ f"""Selects the image number to analyze. This number should only be changed when specimen(s) are
112
+ invisible on the first image (e.g., in the case of appearing colonies of bacteria), never otherwise.
113
+ When the specimen(s) are invisible, read more advanced images until some material can be detected.
114
+ NB:
115
+ - When the data is stored as images, this image number comes from alphanumerical sorting of original
116
+ image labels.
117
+ """
118
+ # END_TIP
119
+
120
+ IAW["several_blob_per_arena"] = {}
121
+ IAW["several_blob_per_arena"]["label"] = "One specimen per arena"
122
+ # START_TIP
123
+ IAW["several_blob_per_arena"]["tips"] = \
124
+ f"""Select this option if there is only one specimen (e.g., a cell or connected colony) per arena. If
125
+ multiple specimens exist (or will be present) in an arena, unselect this option.
126
+ NB:
127
+ - This option is selected by default.
128
+ """
129
+ # END_TIP
130
+
131
+ IAW["Scale_with"] = {}
132
+ IAW["Scale_with"]["label"] = "Scale with"
133
+ # START_TIP
134
+ IAW["Scale_with"]["tips"] = \
135
+ f"""Specify how to compute true pixel size (in mm). Cellects can determine this scale using:
136
+ - Image width (horizontal dimension)
137
+ - Specimen width on first image (usable when specimens share consistent width)
138
+ NB:
139
+ - Advanced parameters allow disabling scaling and outputting in pixels.
140
+ - Using specimen width reduces initial detection efficiency. We recommend using image width unless
141
+ specimen dimensions are known with higher accuracy than imaging equipment.
142
+ - Pixel size is stored in a file named `software_settings.csv`.
143
+ """
144
+ # END_TIP
145
+
146
+ IAW["Scale_size"] = {}
147
+ IAW["Scale_size"]["label"] = "Scale size"
148
+ # START_TIP
149
+ IAW["Scale_size"]["tips"] = \
150
+ f"""The *Scale size* is the actual length (in mm) corresponding to scaling reference.
151
+ NB:
152
+ - This value enables conversion from pixel coordinates to physical dimensions.
153
+ """
154
+ # END_TIP
155
+
156
+ IAW["Select_and_draw"] = {}
157
+ IAW["Select_and_draw"]["label"] = "Select and draw"
158
+ # START_TIP
159
+ IAW["Select_and_draw"]["tips"] = \
160
+ f"""*Select and draw* allows the user to inform Cellects about specimen (*Cell*) and background (*Back*)
161
+ areas in images. To use, click *Cell* or *Back* button (button color changes), then:
162
+ - Click and drag mouse on image to mark corresponding area
163
+ - Numbered drawings appear below buttons for reference
164
+ - (if needed) Click numbered drawing to remove selection.
165
+ NB:
166
+ - By default, this tool only works for the first folder when analyzing multiple folders. Advanced
167
+ parameters include an option to use these same masks in multiple folders.
168
+ - To apply saved masks (e.g., background or specimen initiation regions) across selected folders,
169
+ enable *Keep Cell and Back drawing for all folders* in *Advanced parameters*.
170
+ """
171
+ # END_TIP
172
+
173
+ IAW["Draw_buttons"] = {}
174
+ IAW["Draw_buttons"]["label"] = "Draw buttons"
175
+ # START_TIP
176
+ IAW["Draw_buttons"]["tips"] = \
177
+ f"""Click the *Cell* or *Back* button and draw a corresponding area on the image by clicking and holding
178
+ mouse on the image.
179
+ """
180
+ # END_TIP
181
+
182
+ IAW["Advanced_mode"] = {}
183
+ IAW["Advanced_mode"]["label"] = "Advanced mode"
184
+ # START_TIP
185
+ IAW["Advanced_mode"]["tips"] = \
186
+ f"""The *Advanced mode* enables fine tuning of image analysis parameters for:
187
+ - Custom color space combinations (e.g., HSV, HLS)
188
+ - Applying filters before segmentation
189
+ - Combining segmentations using logical operators
190
+ - Accessing rolling window and Kmeans algorithms
191
+ NB:
192
+ - Useful for reusing validated parameter sets or testing alternative methods.
193
+ """
194
+ # END_TIP
195
+
196
+ IAW["Color_combination"] = {}
197
+ IAW["Color_combination"]["label"] = "Color combination"
198
+ # START_TIP
199
+ IAW["Color_combination"]["tips"] = \
200
+ f"""Color spaces are transformations of the original BGR (Blue Green Red) image Instead of defining an
201
+ image by 3 colors, they transform it into 3 different visual properties
202
+ - hsv: hue (color), saturation, value (lightness)
203
+ - hls: hue (color), lightness, saturation
204
+ - lab: Lightness, Red/Green, Blue/Yellow
205
+ - luv and yuv: l and y are Lightness, u and v are related to colors
206
+ """
207
+ # END_TIP
208
+
209
+ IAW["Logical_operator"] = {}
210
+ IAW["Logical_operator"]["label"] = "Logical operator"
211
+ # START_TIP
212
+ IAW["Logical_operator"]["tips"] = \
213
+ f"""The *Logical operator* defines how to combine results from distinct segmentations (e.g., merging the
214
+ segmentation resulting from a specific color space transformation and filtering with a different
215
+ one). Supported operators: AND, OR, XOR.
216
+ """
217
+ # END_TIP
218
+
219
+ IAW["Filter"] = {}
220
+ IAW["Filter"]["label"] = "Filter"
221
+ # START_TIP
222
+ IAW["Filter"]["tips"] = \
223
+ f"""Apply a filter to preprocess images before segmentation.
224
+ NB:
225
+ - Filtering can improve segmentation accuracy by emphasizing relevant image features.
226
+ """
227
+ # END_TIP
228
+
229
+ IAW["Rolling_window_segmentation"] = {}
230
+ IAW["Rolling_window_segmentation"]["label"] = "Rolling window segmentation"
231
+ # START_TIP
232
+ IAW["Rolling_window_segmentation"]["tips"] = \
233
+ f"""Segments image regions using a rolling window approach to detect local intensity valleys. The method
234
+ applies Otsu's thresholding locally on each window.
235
+ """
236
+ # END_TIP
237
+
238
+ IAW["Kmeans"] = {}
239
+ IAW["Kmeans"]["label"] = "Kmeans"
240
+ # START_TIP
241
+ IAW["Kmeans"]["tips"] = \
242
+ f"""The *Kmeans* algorithm clusters pixels into a specified number of categories (2
243
+ -5) to identify specimen regions within the image.
244
+ """
245
+ # END_TIP
246
+
247
+ IAW["Generate_analysis_options"] = {}
248
+ IAW["Generate_analysis_options"]["label"] = "Generate analysis options"
249
+ # START_TIP
250
+ IAW["Generate_analysis_options"]["tips"] = \
251
+ f"""Cellects proposes algorithms to automatically determine optimal specimen detection parameters on the
252
+ first or last image:
253
+ - **Basic** → provides suggestions in minutes. Alternatively, the user can switch to *Advanced mode*
254
+ to review or modify more specific settings.
255
+ NB:
256
+ - Selecting *Basic* (or *Apply current config*) will trigger an orange working message during
257
+ processing.
258
+ """
259
+ # END_TIP
260
+
261
+ IAW["Select_option_to_read"] = {}
262
+ IAW["Select_option_to_read"]["label"] = "Select option to read"
263
+ # START_TIP
264
+ IAW["Select_option_to_read"]["tips"] = \
265
+ f"""Choose the option producing optimal segmentation results. This menu appears after generating
266
+ analysis options, allowing direct quality assessment. For example, if Option 1 shows correct
267
+ detection (e.g., 6 spots in 6 arenas), click *Yes*. Otherwise, improve analysis via:
268
+ - Adjusting arena/spot shapes or sizes
269
+ - Using *Select and draw* to annotate specimens/background
270
+ - Manual configuration in advanced mode → Test changes with *Apply current config*
271
+ NB:
272
+ - Confirm when magenta/pink contours match expected positions and counts.
273
+ """
274
+ # END_TIP
275
+
276
+ IAW["Arena_shape"] = {}
277
+ IAW["Arena_shape"]["label"] = "Arena shape"
278
+ # START_TIP
279
+ IAW["Arena_shape"]["tips"] = \
280
+ f"""Specifies whether the specimen(s) can move in a circular or rectangular arena.
281
+ """
282
+ # END_TIP
283
+
284
+ IAW["Spot_shape"] = {}
285
+ IAW["Spot_shape"]["label"] = "Set spot shape"
286
+ # START_TIP
287
+ IAW["Spot_shape"]["tips"] = \
288
+ f"""Defines the expected shape of specimens within arenas.
289
+ """
290
+ # END_TIP
291
+
292
+ IAW["Spot_size"] = {}
293
+ IAW["Spot_size"]["label"] = "Set spot size"
294
+ # START_TIP
295
+ IAW["Spot_size"]["tips"] = \
296
+ f"""Initial horizontal size of the specimen(s) (in mm). If similar across all specimens, this can also
297
+ be used as a scale.
298
+ """
299
+ # END_TIP
300
+
301
+ IAW["Video_delimitation"] = {}
302
+ IAW["Video_delimitation"]["label"] = "Video delimitation"
303
+ # START_TIP
304
+ IAW["Video_delimitation"]["tips"] = \
305
+ f"""After confirming initial detection, automatic video delimitation results appear in blue. Click
306
+ *Yes* if accurate or *No* for:
307
+ - A slower, higher precision algorithm.
308
+ - Manual delineation option.
309
+ """
310
+ # END_TIP
311
+
312
+ IAW["Last_image_question"] = {}
313
+ IAW["Last_image_question"]["label"] = "Last image question"
314
+ # START_TIP
315
+ IAW["Last_image_question"]["tips"] = \
316
+ f"""If parameters might fail on later images, test them first on the final frame:
317
+ - *Yes* → validates with last image before tracking.
318
+ - *No* → proceeds directly to video analysis.
319
+ """
320
+ # END_TIP
321
+
322
+ IAW["Start_differs_from_arena"] = {}
323
+ IAW["Start_differs_from_arena"]["label"] = "Check if the medium at starting position differs from the rest of the arena"
324
+ # START_TIP
325
+ IAW["Start_differs_from_arena"]["tips"] = \
326
+ f"""Enable if the substrate differs between initial position and arena growth area (e.g., nutritive gel
327
+ vs. agar). Disable for homogeneous substrates.
328
+ """
329
+ # END_TIP
330
+
331
+ IAW["Save_image_analysis"] = {}
332
+ IAW["Save_image_analysis"]["label"] = "Save image analysis"
333
+ # START_TIP
334
+ IAW["Save_image_analysis"]["tips"] = \
335
+ f"""Complete the analysis of the current image. Clicking this button analyzes only one image. To analyze
336
+ video(s), click *Next*.
337
+ NB:
338
+ - When analyzing a single specimen per arena, keeps the largest connected component.
339
+ - Saves all selected descriptors in .csv format for the current image and generates a validation
340
+ image to assess segmentation accuracy.
341
+ """
342
+ # END_TIP
343
+
344
+
345
+ #################################################
346
+ ######### Video analysis Window #########
347
+ #################################################
348
+
349
+ VAW = dict()
350
+ VAW["Arena_to_analyze"] = {}
351
+ VAW["Arena_to_analyze"]["label"] = "Arena to analyze"
352
+ # START_TIP
353
+ VAW["Arena_to_analyze"]["tips"] = \
354
+ f"""This arena number selects a specific arena in the current folder. The user can choose an arena,
355
+ click *Detection* to load and analyze it, then *Read* results.
356
+ NB:
357
+ - Cellects automatically names the arena by their position (left to right, top to bottom).
358
+ - For single arena setups, use 1.
359
+ - *Post processing* triggers *Detection*, which in turn triggers *Load One arena*.
360
+ - Videos can be saved (as .npy files) for later analysis using the Advanced parameter *Keep
361
+ unaltered videos*.
362
+ """
363
+ # END_TIP
364
+
365
+ VAW["Maximal_growth_factor"] = {}
366
+ VAW["Maximal_growth_factor"]["label"] = "Maximal growth factor"
367
+ # START_TIP
368
+ VAW["Maximal_growth_factor"]["tips"] = \
369
+ f"""This is the maximum allowable proportion of image area that may be covered by specimen movement
370
+ between frames. Adjust accordingly:
371
+ - Increase if specimen size is underestimated.
372
+ - Decrease if specimen size is overestimated.
373
+ NB:
374
+ - Precisely, this defines an upper bound on relative coverage changes between sequential images.
375
+ """
376
+ # END_TIP
377
+
378
+ VAW["Temporal_smoothing"] = {}
379
+ VAW["Temporal_smoothing"]["label"] = "Temporal smoothing"
380
+ # START_TIP
381
+ VAW["Temporal_smoothing"]["tips"] = \
382
+ f"""Applies temporal smoothing to reduce noise and highlight long
383
+ -term trends by averaging pixel intensity changes. Use when analyzing slope
384
+ -based segmentation results.
385
+ NB:
386
+ - This uses a moving window algorithm on pixel intensity curves over time.
387
+ - Excessive iterations produce constant values, preventing accurate detection.
388
+ """
389
+ # END_TIP
390
+
391
+ VAW["Segmentation_method"] = {}
392
+ VAW["Segmentation_method"]["label"] = "Segmentation method"
393
+ # START_TIP
394
+ VAW["Segmentation_method"]["tips"] = \
395
+ f"""Cellects includes five video tracking options:
396
+ - **Frame option**: Applies the image analysis algorithm frame by frame, without temporal dynamics.
397
+ - **Threshold option**: Compares pixel intensity with the average intensity of the whole image at
398
+ each time step.
399
+ - **Slope option**: Compares pixel intensity slopes with an automatically defined threshold.
400
+ - **T and S option**: logical AND of threshold and slope options.
401
+ - **T or S option**: logical OR of threshold and slope options.
402
+ NB:
403
+ - Selecting the *Compute all options* before dunning *Detection* allows method comparison. Once
404
+ analysis completes. Once the analysis completed, select one option and click *Read*.
405
+ - Computing only one option is faster and requires less memory.
406
+ - When *Heterogeneous background* or *Grid segmentation* has been selected in the image analysis
407
+ window, only the *Frame* option remains available.
408
+ """
409
+ # END_TIP
410
+
411
+ VAW["Load_one_arena"] = {}
412
+ VAW["Load_one_arena"]["label"] = "Load one arena"
413
+ # START_TIP
414
+ VAW["Load_one_arena"]["tips"] = \
415
+ f"""Clicking this button loads the arena associated with *Arena to analyze*. The center of the window
416
+ displays the first frame of that arena's video. Click *Read* to review the full video.
417
+ """
418
+ # END_TIP
419
+
420
+ VAW["Detection"] = {}
421
+ VAW["Detection"]["label"] = "Detection"
422
+ # START_TIP
423
+ VAW["Detection"]["tips"] = \
424
+ f"""*Detection* applies a (or all) segmentation methods to one arena. Once finished, click *Read* to
425
+ view the detection result. If correct, answer *Done* to proceed with tuning parameters for post
426
+ processing.
427
+ """
428
+ # END_TIP
429
+
430
+ VAW["Read"] = {}
431
+ VAW["Read"]["label"] = "Read"
432
+ # START_TIP
433
+ VAW["Read"]["tips"] = \
434
+ f"""Clicking *Read* starts the video display corresponding to the current state of the analysis.
435
+ """
436
+ # END_TIP
437
+
438
+ VAW["Fading_detection"] = {}
439
+ VAW["Fading_detection"]["label"] = "Fading detection"
440
+ # START_TIP
441
+ VAW["Fading_detection"]["tips"] = \
442
+ f"""*Fading detection* monitors when specimens leave previously occupied areas, useful for moving
443
+ organisms rather than static growth. Uncheck this option if not needed. Set a value between minus
444
+ one and one to control sensitivity:
445
+ - Near minus one: Minimal false removal of specimen traces.
446
+ - Near one: High risk of over
447
+ -removal from all areas.
448
+ """
449
+ # END_TIP
450
+
451
+ VAW["Post_processing"] = {}
452
+ VAW["Post_processing"]["label"] = "Post processing"
453
+ # START_TIP
454
+ VAW["Post_processing"]["tips"] = \
455
+ f"""*Post processing* applies detection algorithms with additional enhancements:
456
+ - Binary operations: opening, closing, logical ops.
457
+ - Fading detection* tracking: when specimen(s) may leave areas (optional).
458
+ - *Correct errors around initial shape*: when the contour of the initial position of the specimen is
459
+ hard to detect (optional).
460
+ - *Connect distant shapes*: when the specimen's heterogeneity create wrong disconnections in the
461
+ video detection (optional).
462
+ - *Prevent fast growth near periphery*: when arena's border (typically petri dishes) may be wrongly
463
+ detected as specimen (optional).
464
+ NB:
465
+ - Once Post processing works, the user can click “*Done*” to *Step 2: Tune fading and advanced
466
+ parameters to improve Post processing*, and then *Run All* arenas.
467
+ """
468
+ # END_TIP
469
+
470
+ VAW["Save_one_result"] = {}
471
+ VAW["Save_one_result"]["label"] = "Save one result"
472
+ # START_TIP
473
+ VAW["Save_one_result"]["tips"] = \
474
+ f"""Complete the current video analysis by clicking this button for single arena processing. Saving
475
+ includes:
476
+ - Calculating all selected descriptors (.csv) per frame.
477
+ - Generating validation videos for detection verification.
478
+ - Storing configuration parameters for reproducibility.
479
+ NB:
480
+ - This action will overwrite results and validation data for the current arena.
481
+ """
482
+ # END_TIP
483
+
484
+ VAW["Run_All"] = {}
485
+ VAW["Run_All"]["label"] = "Run All"
486
+ # START_TIP
487
+ VAW["Run_All"]["tips"] = \
488
+ f"""Apply validated parameters to all arenas by clicking *Run All*. This action:
489
+ - Generates full
490
+ -resolution video outputs (storage
491
+ -intensive)
492
+ - Processes videos sequentially with real time visualization
493
+ - Calculates selected descriptors for each frame
494
+ - Produces validation content at multiple intervals
495
+ - Preserves current configuration settings
496
+ """
497
+ # END_TIP
498
+
499
+ VAW["Save_all_choices"] = {}
500
+ VAW["Save_all_choices"]["label"] = "Save all choices"
501
+ # START_TIP
502
+ VAW["Save_all_choices"]["tips"] = \
503
+ f"""Clicking *Save all choices* writes/updates configuration files to preserve analysis parameters for
504
+ future replication.
505
+ """
506
+ # END_TIP
507
+
508
+ #################################################
509
+ ######## Multiple folders Window ########
510
+ #################################################
511
+
512
+ MF = dict()
513
+ MF["Check_to_select_all_folders"] = {}
514
+ MF["Check_to_select_all_folders"]["label"] = "Check to select all folders"
515
+ # START_TIP
516
+ MF["Check_to_select_all_folders"]["tips"] = \
517
+ f"""Select this option to run the analysis on all folders containing images matching the *Image prefix*
518
+ and *Images extension*. Otherwise, use Ctrl/Cmd to select specific folders for analysis.
519
+ NB:
520
+ - This setting affects only the *Run All* functionality.
521
+ - To apply saved masks (e.g., background or specimen initiation regions) across selected folders,
522
+ enable *Keep Cell and Back drawing for all folders* in *Advanced parameters*.
523
+ """
524
+ # END_TIP
525
+
526
+ #################################################
527
+ ######## Required Output Window ########
528
+ #################################################
529
+
530
+ RO = dict()
531
+ RO["coord_specimen"] = {}
532
+ RO["coord_specimen"]["label"] = "Pixels covered by the specimen(s)"
533
+ # START_TIP
534
+ RO["coord_specimen"]["tips"] = \
535
+ f"""Save a .npy file containing coordinates (t, y, x) of specimen pixel presence as detected by current
536
+ parameters.
537
+ NB:
538
+ - These files may consume significant memory depending on the total frame count.
539
+ """
540
+ # END_TIP
541
+
542
+ RO["Graph"] = {}
543
+ RO["Graph"]["label"] = "Graph of the specimen(s) (or network)"
544
+ # START_TIP
545
+ RO["Graph"]["tips"] = \
546
+ f"""Compute a geometrical graph describing the specimen based on current detection parameters. Cellects
547
+ generates this graph using the skeleton of the largest connected component per frame. If network
548
+ detection is enabled, it will be computed on the detected network instead. The output includes:
549
+ - A .csv file for vertices with coordinates (t, y, x), IDs, tip status, part of the specimen's
550
+ initial position, connection status with other vertices.
551
+ - A .csv file for edges with IDs, vertex pairs, lengths, average width, and intensity.
552
+ NB:
553
+ - These files may consume significant memory depending on the total frame count.
554
+ - Network and graph detection together are relevant only for organisms with a distinct internal
555
+ network (e.g., *Physarum polycephalum*).
556
+ """
557
+ # END_TIP
558
+
559
+ RO["coord_oscillating"] = {}
560
+ RO["coord_oscillating"]["label"] = "Oscillating areas in the specimen(s)"
561
+ # START_TIP
562
+ RO["coord_oscillating"]["tips"] = \
563
+ f"""Compute and save (as .npy files) coordinates (t, y, x) of oscillating areas in the specimen(s). Two
564
+ files are generated: one for thickening regions and one for slimming regions.
565
+ """
566
+ # END_TIP
567
+
568
+ RO["coord_network"] = {}
569
+ RO["coord_network"]["label"] = "Network in the specimen(s)"
570
+ # START_TIP
571
+ RO["coord_network"]["tips"] = \
572
+ f"""Detect and save (as .npy file) coordinates (t, y, x) of a distinct network within the specimen(s).
573
+ specimen(s).
574
+ """
575
+ # END_TIP
576
+
577
+ ####################################################
578
+ ######## Advanced Parameters Window ########
579
+ ####################################################
580
+
581
+ AP = dict()
582
+ AP["Crop_images"] = {}
583
+ AP["Crop_images"]["label"] = "Automatically crop images"
584
+ # START_TIP
585
+ AP["Crop_images"]["tips"] = \
586
+ f"""Uses initial image detection to crop all images and improve arena/last image detection.
587
+ NB:
588
+ - Unselect this option if analysis fails or crashes during image analysis.
589
+ """
590
+ # END_TIP
591
+
592
+ AP["Subtract_background"] = {}
593
+ AP["Subtract_background"]["label"] = "Subtract background"
594
+ # START_TIP
595
+ AP["Subtract_background"]["tips"] = \
596
+ f"""Takes the first image and subtracts it from subsequent images. This can improve or degrade detection
597
+ depending on dataset characteristics.
598
+ """
599
+ # END_TIP
600
+
601
+ AP["Keep_drawings"] = {}
602
+ AP["Keep_drawings"]["label"] = "Keep Cell and Back drawings for all folders"
603
+ # START_TIP
604
+ AP["Keep_drawings"]["tips"] = \
605
+ f"""During initial image analysis, if the user drew cell/back regions to assist detection, this option
606
+ saves and uses these annotations across all folders. In summary:
607
+ - **Checked** → retain annotations for all folders
608
+ - **Unchecked** → apply only to current folder
609
+ """
610
+ # END_TIP
611
+
612
+ AP["Correct_errors_around_initial"] = {}
613
+ AP["Correct_errors_around_initial"]["label"] = "Correct errors around initial specimen's position"
614
+ # START_TIP
615
+ AP["Correct_errors_around_initial"]["tips"] = \
616
+ f"""Applies an algorithm to correct detection errors near the initial specimen position due to color
617
+ variations (e.g., from nutrient patches). Technical workflow:
618
+ - Identifies potential gaps around initial position
619
+ - Monitors local growth velocity
620
+ - Fills gaps using growth patterns from adjacent pixels
621
+ NB:
622
+ - ⚠️ Not recommended if the substrate has the same transparency everywhere (i.e. no difference
623
+ between starting and growth regions).
624
+ """
625
+ # END_TIP
626
+
627
+ AP["Prevent_fast_growth_near_periphery"] = {}
628
+ AP["Prevent_fast_growth_near_periphery"]["label"] = "Prevent fast growth near periphery"
629
+ # START_TIP
630
+ AP["Prevent_fast_growth_near_periphery"]["tips"] = \
631
+ f"""During video analysis, prevents false specimen detection at arena borders by filtering rapid
632
+ periphery growth.
633
+ - **Checked** → Exclude fast
634
+ -moving detections near boundaries
635
+ - **Unchecked** → Use standard detection criteria
636
+ """
637
+ # END_TIP
638
+
639
+ AP["Connect_distant_shapes"] = {}
640
+ AP["Connect_distant_shapes"]["label"] = "Connect distant shapes"
641
+ # START_TIP
642
+ AP["Connect_distant_shapes"]["tips"] = \
643
+ f"""Algorithm for connecting disjoint specimen regions in cases where there should be only one connected
644
+ specimen per arena. This is useful when the specimen's heterogeneity create wrong disconnections
645
+ and the detection is smaller than the true specimen. Technical implementation:
646
+ - Identifies disconnected subregions
647
+ - Analyzes local growth dynamics
648
+ - Recreates connections using spatially consistent growth patterns
649
+ NB:
650
+ - Increases analysis time substantially.
651
+ """
652
+ # END_TIP
653
+
654
+ AP["Specimens_have_same_direction"] = {}
655
+ AP["Specimens_have_same_direction"]["label"] = "All specimens have the same direction"
656
+ # START_TIP
657
+ AP["Specimens_have_same_direction"]["tips"] = \
658
+ f"""Select to optimize arena detection for specimens moving move in the same direction.
659
+ - **Checked** → Uses motion pattern analysis for arena localization.
660
+ - **Unchecked** → Employs standard centroid
661
+ -based algorithm.
662
+ """
663
+ # END_TIP
664
+
665
+ AP["Appearance_size_threshold"] = {}
666
+ AP["Appearance_size_threshold"]["label"] = "Appearance size threshold (automatic if checked)"
667
+ # START_TIP
668
+ AP["Appearance_size_threshold"]["tips"] = \
669
+ f"""Minimum pixel count threshold for identifying specimen emergence (e.g., bacterial colony formation).
670
+ - **Checked** → Automatic threshold calculation.
671
+ - **Unchecked** → Manual user
672
+ -defined threshold.
673
+ """
674
+ # END_TIP
675
+
676
+ AP["Appearance_detection_method"] = {}
677
+ AP["Appearance_detection_method"]["label"] = "Appearance detection method"
678
+ # START_TIP
679
+ AP["Appearance_detection_method"]["tips"] = \
680
+ f"""Selection criteria for initial specimen detection:
681
+ - Largest: Based on component size metric.
682
+ - Most central: Based on arena center proximity.
683
+ NB:
684
+ - Applicable only to progressively emerging specimens.
685
+ """
686
+ # END_TIP
687
+
688
+ AP["Mesh_side_length"] = {}
689
+ AP["Mesh_side_length"]["label"] = "Mesh side length"
690
+ # START_TIP
691
+ AP["Mesh_side_length"]["tips"] = \
692
+ f"""Pixel dimension for analysis window size.
693
+ NB:
694
+ - Must not exceed minimum image dimension
695
+ """
696
+ # END_TIP
697
+
698
+ AP["Mesh_step_length"] = {}
699
+ AP["Mesh_step_length"]["label"] = "Mesh step"
700
+ # START_TIP
701
+ AP["Mesh_step_length"]["tips"] = \
702
+ f"""The size of the step (in pixels) between consecutive rolling window positions.
703
+ NB:
704
+ - Must not exceed the mesh side length to ensure full coverage of the image.
705
+ """
706
+ # END_TIP
707
+
708
+ AP["Mesh_minimal_intensity_variation"] = {}
709
+ AP["Mesh_minimal_intensity_variation"]["label"] = "Mesh minimal intensity variation"
710
+ # START_TIP
711
+ AP["Mesh_minimal_intensity_variation"]["tips"] = \
712
+ f"""The minimal variation in intensity to consider that a given window does contain the specimen(s).
713
+ NB:
714
+ - This threshold is an intensity value ranging from 0 to 255 (generally small).
715
+ - Correspond to the level of noise in the background.
716
+ """
717
+ # END_TIP
718
+
719
+ AP["Expected_oscillation_period"] = {}
720
+ AP["Expected_oscillation_period"]["label"] = "Expected oscillation period"
721
+ # START_TIP
722
+ AP["Expected_oscillation_period"]["tips"] = \
723
+ f"""The period (in minutes) of biological oscillations to detect within the specimen(s). Computation is
724
+ based on luminosity variations.
725
+ """
726
+ # END_TIP
727
+
728
+ AP["Minimal_oscillating_cluster_size"] = {}
729
+ AP["Minimal_oscillating_cluster_size"]["label"] = "Minimal oscillating cluster size"
730
+ # START_TIP
731
+ AP["Minimal_oscillating_cluster_size"]["tips"] = \
732
+ f"""When looking for oscillatory patterns, Cellects detects connected components that are thickening or
733
+ slimming synchronously in the specimen(s). This parameter thresholds the minimal size of these
734
+ groups of connected pixels. This threshold is useful to filter out small noisy oscillations.
735
+ """
736
+ # END_TIP
737
+
738
+ AP["Spatio_temporal_scaling"] = {}
739
+ AP["Spatio_temporal_scaling"]["label"] = "Spatio-temporal scaling"
740
+ # START_TIP
741
+ AP["Spatio_temporal_scaling"]["tips"] = \
742
+ f"""Defines the spatiotemporal scale of the dataset:
743
+ - Time between images or frames (minutes).
744
+ - An option to convert areas/distances from pixels to mm/mm².
745
+ """
746
+ # END_TIP
747
+
748
+ AP["Parallel_analysis"] = {}
749
+ AP["Parallel_analysis"]["label"] = "Run analysis in parallel"
750
+ # START_TIP
751
+ AP["Parallel_analysis"]["tips"] = \
752
+ f"""Allow the use of more than one core of the computer processor.
753
+ - **Checked** → Uses multiple CPU cores to analyze arenas in parallel (faster).
754
+ - **Unchecked** → Single core analysis.
755
+ """
756
+ # END_TIP
757
+
758
+ AP["Proc_max_core_nb"] = {}
759
+ AP["Proc_max_core_nb"]["label"] = "Proc max core number"
760
+ # START_TIP
761
+ AP["Proc_max_core_nb"]["tips"] = \
762
+ f"""Maximum number of logical CPU cores to use during analysis. The default value is set to the total
763
+ number of available CPU cores minus one.
764
+ """
765
+ # END_TIP
766
+
767
+ AP["Minimal_RAM_let_free"] = {}
768
+ AP["Minimal_RAM_let_free"]["label"] = "Minimal RAM let free"
769
+ # START_TIP
770
+ AP["Minimal_RAM_let_free"]["tips"] = \
771
+ f"""Amount of RAM that should be left available for other programs. Setting to `0` gives Cellects all
772
+ memory, but increases crash risk if other apps are open.
773
+ """
774
+ # END_TIP
775
+
776
+ AP["Lose_accuracy_to_save_RAM"] = {}
777
+ AP["Lose_accuracy_to_save_RAM"]["label"] = "Lose accuracy to save RAM"
778
+ # START_TIP
779
+ AP["Lose_accuracy_to_save_RAM"]["tips"] = \
780
+ f"""For low memory systems:
781
+ - Converts video from `np.float64` to `uint8`
782
+ - Saves RAM at the cost of a slight precision loss
783
+ """
784
+ # END_TIP
785
+
786
+ AP["Video_fps"] = {}
787
+ AP["Video_fps"]["label"] = "Video fps"
788
+ # START_TIP
789
+ AP["Video_fps"]["tips"] = \
790
+ f"""Frames per second of validation videos.
791
+ """
792
+ # END_TIP
793
+
794
+ AP["Keep_unaltered_videos"] = {}
795
+ AP["Keep_unaltered_videos"]["label"] = 'Keep unaltered videos'
796
+ # START_TIP
797
+ AP["Keep_unaltered_videos"]["tips"] = \
798
+ f"""Keeps unaltered `.npy` videos in hard drive.
799
+ - **Checked** → Rerunning the same analysis will be faster.
800
+ - **Unchecked** → These videos will be written and removed each run of the same analysis.
801
+ NB:
802
+ - Large files: it is recommended to remove them once analysis is entirely finalized.
803
+ """
804
+ # END_TIP
805
+
806
+ AP["Save_processed_videos"] = {}
807
+ AP["Save_processed_videos"]["label"] = 'Save processed videos'
808
+ # START_TIP
809
+ AP["Save_processed_videos"]["tips"] = \
810
+ f"""Saves lightweight processed validation videos (recommended over unaltered videos). These videos
811
+ assess analysis accuracy and can be read in standard video players.
812
+ """
813
+ # END_TIP
814
+
815
+ AP["Csc_for_video_analysis"] = {}
816
+ AP["Csc_for_video_analysis"]["label"] = 'Color space combination for video analysis'
817
+ # START_TIP
818
+ AP["Csc_for_video_analysis"]["tips"] = \
819
+ f"""Advanced option: Changes the way RGB processing directly in video tracking. Useful for testing new
820
+ color spaces without (re)running image analysis.
821
+ """
822
+ # END_TIP
823
+
824
+ AP["Night_mode"] = {}
825
+ AP["Night_mode"]["label"] = 'Night mode'
826
+ # START_TIP
827
+ AP["Night_mode"]["tips"] = \
828
+ f"""Switches the application background between light and dark themes.
829
+ """
830
+ # END_TIP
831
+
832
+ AP["Reset_all_settings"] = {}
833
+ AP["Reset_all_settings"]["label"] = 'Reset all settings'
834
+ # START_TIP
835
+ AP["Reset_all_settings"]["tips"] = \
836
+ f"""Useful when the software freezes with no apparent reason. To reset all settings, it removes the
837
+ config file in the current folder as well as the config file in the software folder. Then, it
838
+ retrieves and saves the default parameters.
839
+ """
840
+ # END_TIP