cellects 0.1.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 (59) hide show
  1. cellects-0.1.0/LICENSE.odt +0 -0
  2. cellects-0.1.0/PKG-INFO +132 -0
  3. cellects-0.1.0/README.md +94 -0
  4. cellects-0.1.0/pyproject.toml +79 -0
  5. cellects-0.1.0/setup.cfg +4 -0
  6. cellects-0.1.0/src/cellects/__init__.py +0 -0
  7. cellects-0.1.0/src/cellects/__main__.py +49 -0
  8. cellects-0.1.0/src/cellects/config/__init__.py +0 -0
  9. cellects-0.1.0/src/cellects/config/all_vars_dict.py +155 -0
  10. cellects-0.1.0/src/cellects/core/__init__.py +0 -0
  11. cellects-0.1.0/src/cellects/core/cellects_paths.py +30 -0
  12. cellects-0.1.0/src/cellects/core/cellects_threads.py +1451 -0
  13. cellects-0.1.0/src/cellects/core/motion_analysis.py +2010 -0
  14. cellects-0.1.0/src/cellects/core/one_image_analysis.py +1061 -0
  15. cellects-0.1.0/src/cellects/core/one_video_per_blob.py +540 -0
  16. cellects-0.1.0/src/cellects/core/program_organizer.py +1316 -0
  17. cellects-0.1.0/src/cellects/core/script_based_run.py +154 -0
  18. cellects-0.1.0/src/cellects/gui/__init__.py +0 -0
  19. cellects-0.1.0/src/cellects/gui/advanced_parameters.py +1258 -0
  20. cellects-0.1.0/src/cellects/gui/cellects.py +189 -0
  21. cellects-0.1.0/src/cellects/gui/custom_widgets.py +790 -0
  22. cellects-0.1.0/src/cellects/gui/first_window.py +449 -0
  23. cellects-0.1.0/src/cellects/gui/if_several_folders_window.py +239 -0
  24. cellects-0.1.0/src/cellects/gui/image_analysis_window.py +2066 -0
  25. cellects-0.1.0/src/cellects/gui/required_output.py +232 -0
  26. cellects-0.1.0/src/cellects/gui/video_analysis_window.py +656 -0
  27. cellects-0.1.0/src/cellects/icons/__init__.py +0 -0
  28. cellects-0.1.0/src/cellects/icons/cellects_icon.icns +0 -0
  29. cellects-0.1.0/src/cellects/icons/cellects_icon.ico +0 -0
  30. cellects-0.1.0/src/cellects/image_analysis/__init__.py +0 -0
  31. cellects-0.1.0/src/cellects/image_analysis/cell_leaving_detection.py +54 -0
  32. cellects-0.1.0/src/cellects/image_analysis/cluster_flux_study.py +102 -0
  33. cellects-0.1.0/src/cellects/image_analysis/image_segmentation.py +706 -0
  34. cellects-0.1.0/src/cellects/image_analysis/morphological_operations.py +1635 -0
  35. cellects-0.1.0/src/cellects/image_analysis/network_functions.py +1757 -0
  36. cellects-0.1.0/src/cellects/image_analysis/one_image_analysis_threads.py +289 -0
  37. cellects-0.1.0/src/cellects/image_analysis/progressively_add_distant_shapes.py +508 -0
  38. cellects-0.1.0/src/cellects/image_analysis/shape_descriptors.py +1016 -0
  39. cellects-0.1.0/src/cellects/utils/__init__.py +0 -0
  40. cellects-0.1.0/src/cellects/utils/decorators.py +14 -0
  41. cellects-0.1.0/src/cellects/utils/formulas.py +637 -0
  42. cellects-0.1.0/src/cellects/utils/load_display_save.py +1053 -0
  43. cellects-0.1.0/src/cellects/utils/utilitarian.py +490 -0
  44. cellects-0.1.0/src/cellects.egg-info/PKG-INFO +132 -0
  45. cellects-0.1.0/src/cellects.egg-info/SOURCES.txt +57 -0
  46. cellects-0.1.0/src/cellects.egg-info/dependency_links.txt +1 -0
  47. cellects-0.1.0/src/cellects.egg-info/entry_points.txt +2 -0
  48. cellects-0.1.0/src/cellects.egg-info/requires.txt +26 -0
  49. cellects-0.1.0/src/cellects.egg-info/top_level.txt +1 -0
  50. cellects-0.1.0/tests/test_based_run.py +107 -0
  51. cellects-0.1.0/tests/test_formulas.py +415 -0
  52. cellects-0.1.0/tests/test_image_segmentation.py +449 -0
  53. cellects-0.1.0/tests/test_integration.py +134 -0
  54. cellects-0.1.0/tests/test_load_display_save.py +453 -0
  55. cellects-0.1.0/tests/test_morphological_operations.py +1472 -0
  56. cellects-0.1.0/tests/test_network_functions.py +1454 -0
  57. cellects-0.1.0/tests/test_progressively_add_distant_shapes.py +210 -0
  58. cellects-0.1.0/tests/test_shape_descriptors.py +130 -0
  59. cellects-0.1.0/tests/test_utilitarian.py +363 -0
Binary file
@@ -0,0 +1,132 @@
1
+ Metadata-Version: 2.2
2
+ Name: cellects
3
+ Version: 0.1.0
4
+ Summary: Cell Expansion Computer Tracking Software.
5
+ Author: Aurèle Boussard
6
+ Project-URL: Homepage, https://github.com/Aurele-B/Cellects
7
+ Project-URL: Issues, https://github.com/Aurele-B/Cellects/issues
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
10
+ Classifier: Operating System :: OS Independent
11
+ Requires-Python: <3.13,>=3.11
12
+ Description-Content-Type: text/markdown
13
+ License-File: LICENSE.odt
14
+ Requires-Dist: coloredlogs
15
+ Requires-Dist: exif
16
+ Requires-Dist: ExifRead
17
+ Requires-Dist: numba
18
+ Requires-Dist: opencv-python
19
+ Requires-Dist: pandas
20
+ Requires-Dist: psutil
21
+ Requires-Dist: PySide6>=6.5
22
+ Requires-Dist: scipy
23
+ Requires-Dist: screeninfo
24
+ Requires-Dist: numpy>=1.26
25
+ Requires-Dist: scikit-image
26
+ Requires-Dist: tqdm
27
+ Requires-Dist: h5py
28
+ Requires-Dist: matplotlib
29
+ Requires-Dist: natsort
30
+ Provides-Extra: test
31
+ Requires-Dist: pytest; extra == "test"
32
+ Requires-Dist: pytest-env; extra == "test"
33
+ Requires-Dist: pytest-cov; extra == "test"
34
+ Provides-Extra: doc
35
+ Requires-Dist: mkdocs; extra == "doc"
36
+ Requires-Dist: mkdocs-material; extra == "doc"
37
+ Requires-Dist: pymdown-extensions; extra == "doc"
38
+
39
+ Cellects: Cell Expansion Computer Tracking Software
40
+ ===================================================
41
+
42
+ Description
43
+ -----------
44
+
45
+ Cellects is a tracking software for organisms whose shape and size change over time.
46
+ Cellects’ main strengths are its broad scope of action,
47
+ automated computation of a variety of geometrical descriptors, easy installation and user-friendly interface.
48
+
49
+
50
+ ---
51
+
52
+ ## Quick Start
53
+
54
+
55
+ ⚠️ **Note:** At this stage, Cellects is available **only from source**.
56
+ You will need **Miniconda3** and **git** installed on your system.
57
+
58
+ - Install [Miniconda3](https://docs.conda.io/en/latest/miniconda.html)
59
+ (choose the installer for your operating system).
60
+ - Install [git](https://git-scm.com/downloads)
61
+ (also available through package managers like `apt`, `brew`, or `choco`).
62
+
63
+ Once these prerequisites are installed, you can set up Cellects as follows:
64
+
65
+ ```bash
66
+ # Clone the repository
67
+ git clone https://github.com/Aurele-B/Cellects.git
68
+ cd Cellects
69
+
70
+ # Create and activate the environment
71
+ conda env create -f conda/env.yml
72
+ conda activate cellects-dev
73
+
74
+ # Install the package in editable mode
75
+ pip install -e .
76
+ ```
77
+
78
+ Launch the application:
79
+ ```bash
80
+ Cellects
81
+ ```
82
+
83
+ ---
84
+
85
+ ## Developer Guide
86
+
87
+ ### Run Tests
88
+ Cellects uses `pytest` + `pytest-cov`.
89
+ Install test dependencies:
90
+
91
+ ```bash
92
+ pip install -e ".[test]"
93
+ ```
94
+
95
+ Run the test suite (with coverage enabled by default via `pyproject.toml`):
96
+
97
+ ```bash
98
+ pytest
99
+ ```
100
+
101
+ You can access the coverage report with `coverage html` and open `htmlcov/index.html` in your browser.
102
+
103
+ ```bash
104
+ open htmlcov/index.html # macOS
105
+ xdg-open htmlcov/index.html # Linux
106
+ start htmlcov\index.html # Windows (PowerShell)
107
+ ```
108
+
109
+ Or explicitly:
110
+ ```bash
111
+ pytest --cov=src/cellects --cov-report=term-missing
112
+ ```
113
+
114
+ ### Build Documentation
115
+ Install doc dependencies:
116
+
117
+ ```bash
118
+ pip install -e ".[doc]"
119
+ ```
120
+
121
+ Serve the docs locally:
122
+ ```bash
123
+ mkdocs serve
124
+ ```
125
+
126
+ Open [http://127.0.0.1:8000](http://127.0.0.1:8000) in your browser.
127
+
128
+ ---
129
+
130
+ ## Resources
131
+ - [User manual](https://github.com/Aurele-B/Cellects/blob/main/_old_doc/UserManual.md)
132
+ - [Usage example (video)](https://www.youtube.com/watch?v=N-k4p_aSPC0)
@@ -0,0 +1,94 @@
1
+ Cellects: Cell Expansion Computer Tracking Software
2
+ ===================================================
3
+
4
+ Description
5
+ -----------
6
+
7
+ Cellects is a tracking software for organisms whose shape and size change over time.
8
+ Cellects’ main strengths are its broad scope of action,
9
+ automated computation of a variety of geometrical descriptors, easy installation and user-friendly interface.
10
+
11
+
12
+ ---
13
+
14
+ ## Quick Start
15
+
16
+
17
+ ⚠️ **Note:** At this stage, Cellects is available **only from source**.
18
+ You will need **Miniconda3** and **git** installed on your system.
19
+
20
+ - Install [Miniconda3](https://docs.conda.io/en/latest/miniconda.html)
21
+ (choose the installer for your operating system).
22
+ - Install [git](https://git-scm.com/downloads)
23
+ (also available through package managers like `apt`, `brew`, or `choco`).
24
+
25
+ Once these prerequisites are installed, you can set up Cellects as follows:
26
+
27
+ ```bash
28
+ # Clone the repository
29
+ git clone https://github.com/Aurele-B/Cellects.git
30
+ cd Cellects
31
+
32
+ # Create and activate the environment
33
+ conda env create -f conda/env.yml
34
+ conda activate cellects-dev
35
+
36
+ # Install the package in editable mode
37
+ pip install -e .
38
+ ```
39
+
40
+ Launch the application:
41
+ ```bash
42
+ Cellects
43
+ ```
44
+
45
+ ---
46
+
47
+ ## Developer Guide
48
+
49
+ ### Run Tests
50
+ Cellects uses `pytest` + `pytest-cov`.
51
+ Install test dependencies:
52
+
53
+ ```bash
54
+ pip install -e ".[test]"
55
+ ```
56
+
57
+ Run the test suite (with coverage enabled by default via `pyproject.toml`):
58
+
59
+ ```bash
60
+ pytest
61
+ ```
62
+
63
+ You can access the coverage report with `coverage html` and open `htmlcov/index.html` in your browser.
64
+
65
+ ```bash
66
+ open htmlcov/index.html # macOS
67
+ xdg-open htmlcov/index.html # Linux
68
+ start htmlcov\index.html # Windows (PowerShell)
69
+ ```
70
+
71
+ Or explicitly:
72
+ ```bash
73
+ pytest --cov=src/cellects --cov-report=term-missing
74
+ ```
75
+
76
+ ### Build Documentation
77
+ Install doc dependencies:
78
+
79
+ ```bash
80
+ pip install -e ".[doc]"
81
+ ```
82
+
83
+ Serve the docs locally:
84
+ ```bash
85
+ mkdocs serve
86
+ ```
87
+
88
+ Open [http://127.0.0.1:8000](http://127.0.0.1:8000) in your browser.
89
+
90
+ ---
91
+
92
+ ## Resources
93
+ - [User manual](https://github.com/Aurele-B/Cellects/blob/main/_old_doc/UserManual.md)
94
+ - [Usage example (video)](https://www.youtube.com/watch?v=N-k4p_aSPC0)
@@ -0,0 +1,79 @@
1
+ [build-system]
2
+ requires = ["setuptools==76.1.0", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "cellects"
7
+ version = "0.1.0"
8
+ description = "Cell Expansion Computer Tracking Software."
9
+ readme = "README.md"
10
+ license = { file = "LICENSE" }
11
+ requires-python = ">=3.11,<3.13"
12
+ authors = [{ name = "Aurèle Boussard" }]
13
+ classifiers = [
14
+ "Programming Language :: Python :: 3",
15
+ "License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
16
+ "Operating System :: OS Independent",
17
+ ]
18
+
19
+ dependencies = [
20
+ "coloredlogs",
21
+ "exif",
22
+ "ExifRead",
23
+ "numba",
24
+ "opencv-python",
25
+ "pandas",
26
+ "psutil",
27
+ "PySide6>=6.5",
28
+ "scipy",
29
+ "screeninfo",
30
+ "numpy>=1.26",
31
+ "scikit-image",
32
+ "tqdm",
33
+ "h5py",
34
+ "matplotlib",
35
+ "natsort",
36
+ ]
37
+
38
+ [project.scripts]
39
+ Cellects = "cellects.__main__:run_cellects"
40
+
41
+ [project.optional-dependencies]
42
+ test = [
43
+ "pytest",
44
+ "pytest-env",
45
+ "pytest-cov",
46
+ ]
47
+ doc = [
48
+ "mkdocs",
49
+ "mkdocs-material",
50
+ "pymdown-extensions",
51
+ ]
52
+
53
+ [project.urls]
54
+ Homepage = "https://github.com/Aurele-B/Cellects"
55
+ Issues = "https://github.com/Aurele-B/Cellects/issues"
56
+
57
+ [tool.setuptools.packages.find]
58
+ where = ["src"]
59
+ exclude = ["tests*"]
60
+
61
+ [tool.setuptools.package-data]
62
+ cellects = ["icons/**"]
63
+
64
+ [tool.setuptools]
65
+ package-dir = {"" = "src"}
66
+ include-package-data = true
67
+
68
+ [tool.pytest.ini_options]
69
+ testpaths = ["tests"]
70
+ addopts = "--cov=src/cellects --cov-report=term-missing --cov-report=html"
71
+
72
+ [tool.pytest_env]
73
+ USE_NUMBA = "0"
74
+
75
+ [tool.coverage.run]
76
+ omit = [
77
+ "src/cellects/gui/*",
78
+ "src/cellects/utils/load_display_save.py"
79
+ ]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
File without changes
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env python3
2
+ """Launcher of cellects software.
3
+
4
+ """
5
+ import logging
6
+ import sys
7
+ import coloredlogs
8
+ from PySide6 import QtWidgets, QtGui
9
+ from cellects.core.cellects_paths import ICONS_DIR
10
+
11
+ # These two lines allow the taskbar icon to be cellects_icon instead if python icon.
12
+ if sys.platform.startswith('win'):
13
+ import ctypes
14
+ ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID('company.app.1')
15
+
16
+
17
+ LOGLEVEL = "INFO" #"DEBUG"
18
+
19
+ def _initialize_coloredlogs(loglevel: str = 'DEBUG') -> None:
20
+ """Initialize logging parameters with coloredlogs library."""
21
+ coloredlogs.install(
22
+ logger=logging.basicConfig(),
23
+ level=loglevel,
24
+ fmt='[%(asctime)s] [%(levelname)s] %(message)s',
25
+ datefmt='%H:%M:%S')
26
+
27
+
28
+ def run_cellects():
29
+ """Entry point of cellects software."""
30
+ _initialize_coloredlogs(LOGLEVEL)
31
+ from cellects.gui.cellects import CellectsMainWidget
32
+ app = QtWidgets.QApplication([])
33
+
34
+ # Add the icon file to the app
35
+ icon = QtGui.QIcon()
36
+ if sys.platform.startswith('win'):
37
+ icon.addPixmap(QtGui.QPixmap(ICONS_DIR / "cellects_icon.ico"))
38
+ else:
39
+ icon.addPixmap(QtGui.QPixmap(ICONS_DIR / "cellects_icon.icns"))
40
+ app.setWindowIcon(icon)
41
+ # Start session
42
+ session = CellectsMainWidget()
43
+ session.instantiate()
44
+ session.show()
45
+ sys.exit(app.exec())
46
+
47
+
48
+ if __name__ == "__main__":
49
+ run_cellects()
File without changes
@@ -0,0 +1,155 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ This script generates the default parameters of the GUI of Cellects.
4
+ It can be used to write these parameters in a file named all_vars_dict.
5
+ Then, the gui updates this file as users adjust the GUI parameters.
6
+ These parameters are stored in a dictionary with keys corresponding to the parameter's name and values to its tunable
7
+ value.
8
+ """
9
+
10
+ import os
11
+ from cellects.image_analysis.shape_descriptors import descriptors_categories, descriptors
12
+ import numpy as np
13
+ from cellects.core.cellects_paths import ALL_VARS_PKL_FILE
14
+ from cellects.utils.load_display_save import PickleRick
15
+ from cellects.core.cellects_paths import TEST_DIR
16
+
17
+
18
+ class DefaultDicts:
19
+ def __init__(self):
20
+ # po.load_variable_dict()
21
+ self.all = {
22
+ # Interface settings:
23
+ 'compute_all_options': True,
24
+ 'expert_mode': False,
25
+ 'is_auto': False,
26
+ 'night_mode': False,
27
+ 'arena': 1,
28
+ 'video_option': 0,
29
+
30
+ # Analysis settings:
31
+ 'are_gravity_centers_moving': 0,
32
+ 'are_zigzag': 'columns',
33
+ 'automatic_size_thresholding': True,
34
+ 'color_number': 2,
35
+ 'cores': 1,
36
+ 'automatically_crop': False,
37
+ 'descriptors': descriptors_categories,
38
+ 'display_shortcuts': False,
39
+ 'connect_distant_shape_during_segmentation': False,
40
+ 'all_specimens_have_same_direction': True,
41
+ 'extract_time_interval': True,
42
+ 'do_multiprocessing': False,
43
+ 'extension': '.tif',
44
+ 'first_detection_frame': 1,
45
+ 'folder_number': 1,
46
+ 'first_folder_sample_number': 1,
47
+ 'first_move_threshold_in_mm²': 10,
48
+ 'folder_list': [],
49
+ 'global_pathway': str(TEST_DIR / "experiment"),
50
+ 'im_or_vid': 0,
51
+ 'image_horizontal_size_in_mm': 700,
52
+ 'minimal_appearance_size': 10,
53
+ 'more_than_two_colors': False,
54
+ 'bio_mask': None,
55
+ 'back_mask': None,
56
+ 'keep_cell_and_back_for_all_folders': False,
57
+
58
+ # 'overwrite_cellects_data': True,
59
+ 'overwrite_unaltered_videos': False,
60
+ 'radical': 'im',
61
+ 'raw_images': False,
62
+ 'sample_number_per_folder': [1],
63
+ 'scale_with_image_or_cells': 1,
64
+ 'set_spot_shape': True,
65
+ 'set_spot_size': True,
66
+ 'starting_blob_hsize_in_mm': 15,
67
+ 'starting_blob_shape': None
68
+ }
69
+
70
+ self.vars = {
71
+ 'analyzed_individuals': np.empty(0, dtype=np.uint16),
72
+ 'arena_shape': 'rectangle', # 'circle',
73
+ 'bio_label': 1,
74
+ 'bio_label2': 1,
75
+ 'color_number': 2,
76
+ 'convert_for_motion': {
77
+ 'lab': np.array((0, 0, 1), np.int8),
78
+ 'logical': 'None'},
79
+ 'convert_for_origin': {
80
+ 'lab': np.array((0, 0, 1), np.int8),
81
+ 'logical': 'None'},
82
+ 'detection_range_factor': 2,
83
+ 'first_move_threshold': None,
84
+ 'img_number': 0,
85
+ 'iso_digi_analysis': True,
86
+ 'luminosity_threshold': 127,
87
+ 'max_size_for_connection': 300,
88
+ 'min_size_for_connection': 20,
89
+ 'origin_state': 'fluctuating',
90
+ 'oscilacyto_analysis': False,
91
+ 'network_analysis': False,
92
+ 'graph_extraction': False,
93
+ 'network_detection_threshold': 20,
94
+ 'network_mesh_side_length': 8,
95
+ 'network_mesh_step_length': 2,
96
+ 'fractal_analysis': False,
97
+ 'fractal_box_side_threshold': 32,
98
+ 'fractal_zoom_step': 0,
99
+ 'subtract_background': False,
100
+ 'correct_errors_around_initial': False,
101
+ 'prevent_fast_growth_near_periphery': False,
102
+ 'periphery_width': 40,
103
+ 'max_periphery_growth': 20,
104
+ # According to Smith and Saldana (1992),
105
+ # P. polycephalum shuttle streaming has a period of 100-200s
106
+ 'already_greyscale': False,
107
+ 'descriptors_in_long_format': True,
108
+ 'do_slope_segmentation': False,
109
+ 'do_threshold_segmentation': True,
110
+ 'drift_already_corrected': False,
111
+ 'appearance_detection_method': 'largest',
112
+ 'frame_by_frame_segmentation': False,
113
+ 'repeat_video_smoothing': 1,
114
+ 'keep_unaltered_videos': False,
115
+ 'maximal_growth_factor': 0.05,
116
+ 'min_ram_free': 0.87,
117
+ 'expected_oscillation_period': 2, # (min)
118
+ 'minimal_oscillating_cluster_size': 10, # (pixels)
119
+ 'output_in_mm': True,
120
+ 'save_processed_videos': True,
121
+ 'several_blob_per_arena': False,
122
+ 'time_step': 1,
123
+ 'true_if_use_light_AND_slope_else_OR': False,
124
+ 'do_fading': False,
125
+ 'fading': 0,
126
+ 'video_fps': 60,
127
+ 'videos_extension': '.mp4',
128
+ 'exif': [],
129
+ 'lose_accuracy_to_save_memory': True,
130
+ 'save_coord_specimen': False,
131
+ 'save_coord_contour': False,
132
+ 'save_coord_thickening_slimming': False,
133
+ 'save_coord_network': False,
134
+ 'grid_segmentation': False,
135
+ # Data stored during analysis:
136
+ 'descriptors': descriptors,
137
+ 'filter_spec': {'filter1_type': "", 'filter1_param': [1., 1.], 'filter2_type': "", 'filter2_param': [1., 1.]},
138
+ }
139
+
140
+ def save_as_pkl(self, po=None):
141
+ if po is None:
142
+ if os.path.isfile('PickleRick0.pkl'):
143
+ os.remove('PickleRick0.pkl')
144
+ pickle_rick = PickleRick(0)
145
+ pickle_rick.write_file(self.all, ALL_VARS_PKL_FILE)
146
+ else:
147
+ po = po
148
+ po.all = self.all
149
+ po.vars = self.vars
150
+ po.save_variable_dict()
151
+
152
+
153
+
154
+ if __name__ == "__main__":
155
+ DefaultDicts().save_as_pkl()
File without changes
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Generate the different paths used by cellects.
4
+ Adjust the path names according to the current position of the software.
5
+ """
6
+
7
+ import os
8
+ from pathlib import Path
9
+
10
+ # Current file -> src/cellects/cellect_paths.py
11
+ CURR_DIR = Path(os.path.dirname(os.path.realpath(__file__)))
12
+ CELLECTS_DIR = CURR_DIR.parent # = src/cellects
13
+
14
+ # Package-internal dirs
15
+ CONFIG_DIR = CELLECTS_DIR / "config"
16
+ CORE_DIR = CELLECTS_DIR / "core"
17
+ GUI_DIR = CELLECTS_DIR / "gui"
18
+ ICONS_DIR = CELLECTS_DIR / "icons"
19
+ IMAGE_ANALYSIS_DIR = CELLECTS_DIR / "image_analysis"
20
+ UTILS_DIR = CELLECTS_DIR / "utils"
21
+
22
+ # Repo root (src/..)
23
+ REPO_ROOT = CELLECTS_DIR.parent
24
+
25
+ # Repo-level dirs
26
+ DATA_DIR = REPO_ROOT / "data"
27
+ TEST_DIR = REPO_ROOT / "tests"
28
+
29
+ # Example packaged file
30
+ ALL_VARS_PKL_FILE = CONFIG_DIR / "all_vars.pkl"