fucciphase 0.0.2__py3-none-any.whl → 0.0.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.
@@ -1,7 +1,7 @@
1
1
  import re
2
2
  import xml.etree.ElementTree as et
3
3
  from pathlib import Path
4
- from typing import Any, Dict, List, Optional, Tuple, Union
4
+ from typing import Any
5
5
 
6
6
  import numpy as np
7
7
  import pandas as pd
@@ -46,7 +46,7 @@ class TrackMateXML:
46
46
  List of all features in the xml file, and whether they are integer features.
47
47
  """
48
48
 
49
- def __init__(self, xml_path: Union[str, Path]) -> None:
49
+ def __init__(self, xml_path: str | Path) -> None:
50
50
  """Initialize the TrackMateXML object.
51
51
 
52
52
  The xml file is parsed and the model and all spots are imported.
@@ -55,18 +55,35 @@ class TrackMateXML:
55
55
  ----------
56
56
  xml_path : Union[str, Path]
57
57
  Path to the xml file.
58
+
59
+ Raises
60
+ ------
61
+ FileNotFoundError
62
+ If the XML file does not exist.
63
+ ValueError
64
+ If the XML file is malformed or not a valid TrackMate file.
58
65
  """
59
66
  # parse tree
60
- self._tree: et.ElementTree[et.Element[str]] = et.parse(xml_path)
67
+ xml_path = Path(xml_path)
68
+ if not xml_path.exists():
69
+ raise FileNotFoundError(f"TrackMate XML file not found: {xml_path}")
70
+
71
+ try:
72
+ self._tree: et.ElementTree[et.Element[str]] = et.parse(xml_path)
73
+ except et.ParseError as e:
74
+ raise ValueError(
75
+ f"Failed to parse TrackMate XML file {xml_path}: {e}"
76
+ ) from None
77
+
61
78
  self._root: et.Element | Any = self._tree.getroot()
62
79
 
63
80
  # placeholders
64
- self._model: Optional[et.Element] = None
65
- self._allspots: Optional[et.Element] = None
81
+ self._model: et.Element | None = None
82
+ self._allspots: et.Element | None = None
66
83
 
67
84
  self.nspots: int = 0 # number of spots
68
- self.features: Dict[str, type] = {} # features and their types
69
- self.spot_features: List[str] = [] # list of spot features
85
+ self.features: dict[str, type] = {} # features and their types
86
+ self.spot_features: list[str] = [] # list of spot features
70
87
 
71
88
  # import model and all spots
72
89
  self._import_data()
@@ -74,7 +91,7 @@ class TrackMateXML:
74
91
  def _get_spot_features(self) -> None:
75
92
  """Get the spot features from the tree."""
76
93
  if self._allspots is not None:
77
- spot_features: List[str] = []
94
+ spot_features: list[str] = []
78
95
  for frame in self._allspots:
79
96
  for spot in frame:
80
97
  spot_features.extend(spot.attrib.keys())
@@ -249,7 +266,7 @@ class TrackMateXML:
249
266
  for feature in new_features:
250
267
  spot.attrib[feature] = str(spot_df[feature].values[0])
251
268
 
252
- def save_xml(self, xml_path: Union[str, Path]) -> None:
269
+ def save_xml(self, xml_path: str | Path) -> None:
253
270
  """Save the xml file.
254
271
 
255
272
  Parameters
@@ -262,12 +279,12 @@ class TrackMateXML:
262
279
 
263
280
  def get_full_tracks(
264
281
  df: pd.DataFrame,
265
- channels: List[str],
282
+ channels: list[str],
266
283
  track_id_name: str = "UNIQUE_TRACK_ID",
267
284
  spot_name: str = "name",
268
285
  frame_name: str = "FRAME",
269
286
  min_length: int = 40,
270
- ) -> Tuple[List[pd.DataFrame], List[pd.DataFrame]]:
287
+ ) -> tuple[list[pd.DataFrame], list[pd.DataFrame]]:
271
288
  """Locate all tracks that may describe a full cycle.
272
289
  Tracks need to be auto-named by TrackMate.
273
290
  For example, Track_1a, Track_1aa, Track_1b etc.
@@ -275,8 +292,8 @@ class TrackMateXML:
275
292
  In addition, tracks longer than a certain minimum length can be selected.
276
293
  """
277
294
  regex = "Track_[0-9]+.[a-z]+"
278
- candidate_tracks: List[pd.DataFrame] = []
279
- save_tracks: List[pd.DataFrame] = []
295
+ candidate_tracks: list[pd.DataFrame] = []
296
+ save_tracks: list[pd.DataFrame] = []
280
297
  track_ids = df[track_id_name].unique()
281
298
  for track_id in track_ids:
282
299
  track = df[df[track_id_name] == track_id]
@@ -0,0 +1,238 @@
1
+ Metadata-Version: 2.4
2
+ Name: fucciphase
3
+ Version: 0.0.4
4
+ Summary: Cell cycle analysis plugin.
5
+ Project-URL: homepage, https://github.com/nobias-ht/fucciphase
6
+ Project-URL: repository, https://github.com/nobias-ht/fucciphase
7
+ Author-email: Joran Deschamps <joran.deschamps@fht.org>
8
+ License: BSD-3-Clause
9
+ License-File: LICENSE
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: License :: OSI Approved :: BSD License
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Programming Language :: Python :: 3.14
18
+ Requires-Python: >=3.10
19
+ Requires-Dist: dtaidistance
20
+ Requires-Dist: lineagetree<1.5.0
21
+ Requires-Dist: matplotlib
22
+ Requires-Dist: monotonic-derivative
23
+ Requires-Dist: numpy
24
+ Requires-Dist: openpyxl
25
+ Requires-Dist: pandas
26
+ Requires-Dist: scipy
27
+ Requires-Dist: svgwrite
28
+ Provides-Extra: dev
29
+ Requires-Dist: ipython; extra == 'dev'
30
+ Requires-Dist: mypy; extra == 'dev'
31
+ Requires-Dist: pdbpp; extra == 'dev'
32
+ Requires-Dist: pre-commit; extra == 'dev'
33
+ Requires-Dist: rich; extra == 'dev'
34
+ Requires-Dist: ruff; extra == 'dev'
35
+ Provides-Extra: doc
36
+ Requires-Dist: sphinx; extra == 'doc'
37
+ Provides-Extra: jupyter
38
+ Requires-Dist: jupyter; extra == 'jupyter'
39
+ Provides-Extra: napari
40
+ Requires-Dist: bioio; extra == 'napari'
41
+ Requires-Dist: bioio-ome-tiff; extra == 'napari'
42
+ Requires-Dist: bioio-tifffile; extra == 'napari'
43
+ Requires-Dist: napari; extra == 'napari'
44
+ Provides-Extra: test
45
+ Requires-Dist: pytest; extra == 'test'
46
+ Requires-Dist: pytest-cov; extra == 'test'
47
+ Description-Content-Type: text/markdown
48
+
49
+ # fucciphase
50
+
51
+ [![License](https://img.shields.io/pypi/l/fucciphase.svg?color=green)](https://github.com/Synthetic-Physiology-Lab/fucciphase/raw/main/LICENSE)
52
+ [![PyPI](https://img.shields.io/pypi/v/fucciphase.svg?color=green)](https://pypi.org/project/fucciphase)
53
+ [![Python Version](https://img.shields.io/pypi/pyversions/fucciphase.svg?color=green)](https://python.org)
54
+ [![CI](https://github.com/Synthetic-Physiology-Lab/fucciphase/actions/workflows/ci.yml/badge.svg)](https://github.com/Synthetic-Physiology-Lab/fucciphase/actions/workflows/ci.yml)
55
+ [![codecov](https://codecov.io/gh/Synthetic-Physiology-Lab/fucciphase/branch/main/graph/badge.svg)](https://codecov.io/gh/Synthetic-Physiology-Lab/fucciphase)
56
+ [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/Synthetic-Physiology-Lab/fucciphase/main.svg)](https://results.pre-commit.ci/latest/github/Synthetic-Physiology-Lab/fucciphase/main)
57
+
58
+ FUCCI cell cycle analysis plugin. Obtain cell cycle information from FUCCI fluorescence intensities.
59
+
60
+ ## Installation
61
+ The best way to run fucciphase is to install it in a virtual conda environment.
62
+ Make sure that git is installed and can be called from the command line.
63
+
64
+ To install from pip:
65
+
66
+ ```bash
67
+ pip install fucciphase
68
+ ```
69
+
70
+ If you wish to install it from source:
71
+
72
+ ```bash
73
+ git clone https://github.com/Synthetic-Physiology-Lab/fucciphase
74
+ cd fucciphase
75
+ pip install -e .
76
+ ```
77
+
78
+ The installation should not take longer than a few seconds (depending on your internet connection).
79
+
80
+ A minimal environment for running the [notebooks](examples/notebooks) can be set up with:
81
+
82
+ ```bash
83
+ pip install fucciphase jupyter matplotlib pandas
84
+ ````
85
+
86
+ ### Install Napari + movie reading support (optional)
87
+
88
+ FUCCIphase does not install Napari by default. For .ome.tif visualisation, install:
89
+ ```bash
90
+ pip install napari bioio bioio-ome-tiff bioio-tifffile
91
+ ```
92
+ or, if installing from source with extras:
93
+ ```bash
94
+ pip install -e ".[napari]"
95
+ ```
96
+ ---
97
+ ## What’s Inside This Repository
98
+
99
+ This repository is organized to support both **analysis workflows** and **reproducible usage examples** of FUCCIphase.
100
+ If you're new to the tool, this is where to start.
101
+
102
+ ### 1 — `examples/notebooks/` [📁 notebooks](examples/notebooks)
103
+
104
+ Interactive Jupyter workflows demonstrating how to use FUCCIphase in practical scenarios.
105
+
106
+ | Notebook | Purpose |
107
+ | ---------------------------------- |----------------------------------------------------------------|
108
+ | `extract_calibration_data.ipynb` | Convert raw movies + TrackMate XML into FUCCI reference curves |
109
+ | `sensor_calibration.ipynb` | Build a FUCCI sensor model from calibration traces |
110
+ | `getting_started.ipynb` | Minimal end-to-end example of FUCCIphase usage |
111
+ | `example_estimated.ipynb` | Visualize fucciphase output tables |
112
+ | `percentage_reconstruction.ipynb` | Smooth and reconstruct %phase trajectories |
113
+ | `example_reconstruction.ipynb` | Recover incomplete/noisy fluorescence traces |
114
+ | `example_simulated.ipynb` | Generate synthetic FUCCI signals for testing |
115
+ | `color-tails-by-percentage.ipynb` | Visualize population-level phase composition |
116
+ | `explanation-dtw-alignment.ipynb` | How DTW alignment works internally |
117
+ | `phaselocking-workflow-lazy.ipynb` | Scalable phase-locking for large datasets |
118
+ ---
119
+
120
+ ### 2 — `examples/reproducibility/` [📁 reproducibility](examples/reproducibility)
121
+
122
+ This is a minimal workflow that uses the sample data. Navigate to the reproducibility directory, then run the following command in one step:
123
+
124
+ ```bash
125
+ fucciphase inputs/merged_linked.ome.xml `
126
+ -ref ../example_data/hacat_fucciphase_reference.csv `
127
+ -dt 0.25 `
128
+ -m MEAN_INTENSITY_CH1 `
129
+ -c MEAN_INTENSITY_CH2 `
130
+ --generate_unique_tracks true `
131
+ ```
132
+ and to visualize results in napari:
133
+
134
+ ```bash
135
+ fucciphase-napari outputs/merged_linked.ome_processed.csv inputs/downscaled_hacat.ome.tif -m 0 -c 1 -s 2 --pixel_size 0.544
136
+ ```
137
+
138
+ Below a preview of the output generated by the reproducibility workflow:
139
+
140
+ [![Preview of the video](examples/reproducibility/outputs/thumbnail.png)](outputs/video_downscaled_hacat.mp4)
141
+
142
+ ---
143
+
144
+ ### 3 — `examples/example_data/` [📁 example_data](examples/example_data)
145
+
146
+ Reference-style FUCCI datasets used for **calibration & sensor building**.
147
+
148
+ Includes:
149
+
150
+ | File | Meaning |
151
+ | ------------------ | ------------------------------------------------- |
152
+ | `*_reference.csv` | FUCCI calibration traces used to learn the sensor |
153
+ | `*.json` | Saved sensor models usable via CLI or notebooks |
154
+
155
+ Use this folder if you want to train your own sensor or understand expected input format.
156
+
157
+ ---
158
+ ## Basic usage
159
+
160
+ Fucci phase currently supports loading a
161
+ [TrackMate](https://imagej.net/plugins/trackmate/) XML file:
162
+
163
+ ```python
164
+ from fucciphase import process_trackmate
165
+ from fucciphase.sensor import get_fuccisa_default_sensor
166
+
167
+ trackmate_xml = "path/to/trackmate.xml"
168
+ channel1 = "MEAN_INTENSITY_CH3"
169
+ channel2 = "MEAN_INTENSITY_CH4"
170
+
171
+ sensor = get_fuccisa_default_sensor()
172
+
173
+ df = process_trackmate(trackmate_xml,
174
+ channels=[channel1, channel2],
175
+ sensor=sensor,
176
+ thresholds=[0.1, 0.1])
177
+ print(df)
178
+ ```
179
+ The TrackMate XML is converted to a [Pandas](https://pandas.pydata.org/) DataFrame.
180
+ Thus, in general data (e.g., stored in a CSV or XLSX file) that can be parsed into
181
+ a DataFrame is supported.
182
+
183
+ The runtime of the scripts depends on your datasize. 2D samples with a few hundred to a few thousand cells
184
+ can be processed in a few minutes. Visualization in Napari can take a bit longer.
185
+ Standard processing does not require a powerful computer.
186
+ Make sure that you have sufficient RAM to load videos for visualization in Napari.
187
+
188
+ ### Using your own data
189
+
190
+ To process your own dataset:
191
+
192
+ 1. Export tracking from Fiji/TrackMate as `.xml`
193
+
194
+
195
+ 2. Build a reference CSV (minimum one full cell cycle):
196
+
197
+ ```
198
+ percentage, time, cyan, magenta
199
+ ```
200
+ For reference, check the example files available in the `example_data` folder.
201
+
202
+
203
+ 3. Run:
204
+
205
+ ```bash
206
+ fucciphase your_tracks.xml -ref your_reference.csv -dt <your timestep> -m <ch1> -c <ch2>
207
+ ```
208
+ 4. Visualize with:
209
+
210
+ ```bash
211
+ fucciphase-napari your_tracks_processed.csv your_video.ome.tif -m <ch1> -c <ch2> -s <mask>
212
+ ```
213
+
214
+ ---
215
+ ## Development
216
+
217
+ To develop fucciphase, clone the repository, install fucciphase in your environment
218
+ and install the pre-commit hooks:
219
+
220
+ ```bash
221
+ git clone https://github.com/Synthetic-Physiology-Lab/fucciphase
222
+ cd fucciphase
223
+ pip install -e ".[test, dev]"
224
+ pre-commit install
225
+ ```
226
+
227
+ If you want to build the documentation, replace the abovementioned pip install by:
228
+ ```bash
229
+ pip install -e ".[test, dev, doc]"
230
+ ```
231
+ ---
232
+
233
+ ## Cite us
234
+
235
+ Di Sante, M., Pezzotti, M., Zimmermann, J., Enrico, A., Deschamps, J., Balmas, E.,
236
+ Becca, S., Solito, S., Reali, A., Bertero, A., Jug, F. and Pasqualini, F.S., 2025.
237
+ CALIPERS: Cell cycle-aware live imaging for phenotyping experiments and regeneration studies.
238
+ bioRxiv, https://doi.org/10.1101/2024.12.19.629259
@@ -0,0 +1,25 @@
1
+ fucciphase/__init__.py,sha256=HkyHcSzLlTlEIz7E3bvuINGBqfnIL0s6oPU0EE_pQCs,545
2
+ fucciphase/__main__.py,sha256=lXUDkaeNRAZep5O7dNLj9RY4EclpPolruAll0FFC_jo,298
3
+ fucciphase/fucci_phase.py,sha256=34EmEaG_jEGvRMBocPRYfBYXSJpko3_nYUgP013Bkjo,8990
4
+ fucciphase/io.py,sha256=5a8Qre5KCT1haoqsB8FELyPKM7hzPM9kcEBGclokSPA,2018
5
+ fucciphase/main_cli.py,sha256=870EiTIxck_vHczeZ0Go9Ia42d9UTgWtHoNfm0Q9BJ0,11036
6
+ fucciphase/phase.py,sha256=wxBJoglCtnLTpZwJ2j1kUeKZMb3y3pqeKakjMSIn1bw,25450
7
+ fucciphase/plot.py,sha256=0bLCJBdfR-I7_qNDurY4iJyeV8D0GqBTvHZO4NSNTlk,24212
8
+ fucciphase/py.typed,sha256=esB4cHc6c07uVkGtqf8at7ttEnprwRxwk8obY8Qumq4,187
9
+ fucciphase/sensor.py,sha256=XVshjhe6ix8FO5xmICLF7ovBCf_JcEkD328tU40-dj0,15172
10
+ fucciphase/tracking_utilities.py,sha256=dJ0q903_aF7bJyARU7wPeRjX6r7b-sHWJVOyXucpMcI,4825
11
+ fucciphase/napari/__init__.py,sha256=At9Shk6HfDf6obtQaM0yKG4NOZVO6YxD2-J1M2ZGm7w,198
12
+ fucciphase/napari/tracks_to_napari.py,sha256=ITqm_aw1uRG-RIfuxoC-zJLCDmrxjduWbiWC69xGzMM,4060
13
+ fucciphase/utils/__init__.py,sha256=YwgK2COtG44QJaXHVPYKu2-Ifm6GIG1ahykvJ4pr-MM,1408
14
+ fucciphase/utils/checks.py,sha256=o4mMGJMIE5wlaf0jtblnTD4JGTfjc5W7ZS4tYDIPlLo,625
15
+ fucciphase/utils/dtw.py,sha256=6RJ5wZ8jDFKSVmcYajsdTJ4tfe3E-wKROEA2rWyGRN4,1638
16
+ fucciphase/utils/normalize.py,sha256=EyVDeMJrDu02XfSwt0jIUecAlTN9v9BAS2KdU5wKk_c,7173
17
+ fucciphase/utils/phase_fit.py,sha256=tiZ7rVkPvFokf7ghhGfkcdr1udjptUU4HmKu53EL3LQ,1835
18
+ fucciphase/utils/simulator.py,sha256=fV-Pj6APms3QbYmiD9TjEYYkTqkIWk0uKDLCpz36HmA,2323
19
+ fucciphase/utils/track_postprocessing.py,sha256=AOm4N4WACzKymX7vz74HWeAIQx556OQ5IS6uHZHgvHw,14500
20
+ fucciphase/utils/trackmate.py,sha256=NeP8vCQEAGiKwz2O0kDmmvJtkxHN6LBtDwkAHsZJrvg,11131
21
+ fucciphase-0.0.4.dist-info/METADATA,sha256=JNqZF53wGiKLnWceUHEYXj1sim9p8TgftwNoRrnWHrk,9019
22
+ fucciphase-0.0.4.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
23
+ fucciphase-0.0.4.dist-info/entry_points.txt,sha256=B77Cm5QnxeQz6DEfqD6n7zDw48-HrlepWPwLbdVITMY,119
24
+ fucciphase-0.0.4.dist-info/licenses/LICENSE,sha256=pQGrOGpOTwikEzkZ8Zc9XLQwbaZ85TMJP-GaWCNZciw,1554
25
+ fucciphase-0.0.4.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.27.0
2
+ Generator: hatchling 1.28.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,137 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: fucciphase
3
- Version: 0.0.2
4
- Summary: Cell cycle analysis plugin.
5
- Project-URL: homepage, https://github.com/nobias-ht/fucciphase
6
- Project-URL: repository, https://github.com/nobias-ht/fucciphase
7
- Author-email: Joran Deschamps <joran.deschamps@fht.org>
8
- License: BSD-3-Clause
9
- License-File: LICENSE
10
- Classifier: Development Status :: 3 - Alpha
11
- Classifier: License :: OSI Approved :: BSD License
12
- Classifier: Programming Language :: Python :: 3
13
- Classifier: Programming Language :: Python :: 3.8
14
- Classifier: Programming Language :: Python :: 3.9
15
- Classifier: Programming Language :: Python :: 3.10
16
- Classifier: Programming Language :: Python :: 3.11
17
- Requires-Python: >=3.8
18
- Requires-Dist: dtaidistance
19
- Requires-Dist: lineagetree<1.5.0
20
- Requires-Dist: matplotlib
21
- Requires-Dist: monotonic-derivative
22
- Requires-Dist: numpy
23
- Requires-Dist: openpyxl
24
- Requires-Dist: pandas
25
- Requires-Dist: scipy
26
- Requires-Dist: svgwrite
27
- Provides-Extra: dev
28
- Requires-Dist: ipython; extra == 'dev'
29
- Requires-Dist: mypy; extra == 'dev'
30
- Requires-Dist: pdbpp; extra == 'dev'
31
- Requires-Dist: pre-commit; extra == 'dev'
32
- Requires-Dist: rich; extra == 'dev'
33
- Requires-Dist: ruff; extra == 'dev'
34
- Provides-Extra: doc
35
- Requires-Dist: sphinx; extra == 'doc'
36
- Provides-Extra: jupyter
37
- Requires-Dist: jupyter; extra == 'jupyter'
38
- Provides-Extra: test
39
- Requires-Dist: pytest; extra == 'test'
40
- Requires-Dist: pytest-cov; extra == 'test'
41
- Description-Content-Type: text/markdown
42
-
43
- # fucciphase
44
-
45
- [![License](https://img.shields.io/pypi/l/fucciphase.svg?color=green)](https://github.com/Synthetic-Physiology-Lab/fucciphase/raw/main/LICENSE)
46
- [![PyPI](https://img.shields.io/pypi/v/fucciphase.svg?color=green)](https://pypi.org/project/fucciphase)
47
- [![Python Version](https://img.shields.io/pypi/pyversions/fucciphase.svg?color=green)](https://python.org)
48
- [![CI](https://github.com/Synthetic-Physiology-Lab/fucciphase/actions/workflows/ci.yml/badge.svg)](https://github.com/Synthetic-Physiology-Lab/fucciphase/actions/workflows/ci.yml)
49
- [![codecov](https://codecov.io/gh/Synthetic-Physiology-Lab/fucciphase/branch/main/graph/badge.svg)](https://codecov.io/gh/Synthetic-Physiology-Lab/fucciphase)
50
- [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/Synthetic-Physiology-Lab/fucciphase/main.svg)](https://results.pre-commit.ci/latest/github/Synthetic-Physiology-Lab/fucciphase/main)
51
-
52
- FUCCI cell cycle analysis plugin.
53
- Obtain cell cycle information from FUCCI fluorescence intensities.
54
-
55
- ## Installation
56
-
57
- The best way to run fucciphase is to install it in a virtual conda environment.
58
- Make sure that git is installed and can be called from the command line.
59
-
60
- To install from pip:
61
-
62
- ```bash
63
- pip install fucciphase
64
- ```
65
-
66
- If you wish to install it from source:
67
-
68
- ```bash
69
- git clone https://github.com/Synthetic-Physiology-Lab/fucciphase
70
- cd fucciphase
71
- pip install -e .
72
- ```
73
-
74
- The installation should not take longer than a few seconds (depending on your internet connection).
75
-
76
- To use the notebooks, also install jupyter:
77
-
78
- ```bash
79
- pip install jupyter
80
- ```
81
-
82
- ## Usage
83
-
84
- Fucci phase currently supports loading a
85
- [TrackMate](https://imagej.net/plugins/trackmate/) XML file:
86
-
87
- ```python
88
- from fucciphase import process_trackmate
89
- from fucciphase.sensor import get_fuccisa_default_sensor
90
-
91
- trackmate_xml = "path/to/trackmate.xml"
92
- channel1 = "MEAN_INTENSITY_CH3"
93
- channel2 = "MEAN_INTENSITY_CH4"
94
-
95
- sensor = get_fuccisa_default_sensor()
96
-
97
- df = process_trackmate(trackmate_xml,
98
- channels=[channel1, channel2],
99
- sensor=sensor,
100
- thresholds=[0.1, 0.1])
101
- print(df)
102
- ```
103
-
104
- The TrackMate XML is converted to a [Pandas](https://pandas.pydata.org/) DataFrame.
105
- Thus, in general data (e.g., stored in a CSV or XLSX file) that can be parsed into
106
- a DataFrame is supported.
107
-
108
- Have a look at the examples in the `example` folder to get more information!
109
-
110
- The runtime of the scripts depends on your datasize. 2D samples with a few hundred to a few thousand cells
111
- can be processed in a few minutes. Visualization in Napari can take a bit longer.
112
- Standard processing does not require a powerful computer.
113
- Make sure that you have sufficient RAM to load videos for visualization in Napari.
114
-
115
- ## Development
116
-
117
- To develop fucciphase, clone the repository, install fucciphase in your environment
118
- and install the pre-commit hooks:
119
-
120
- ```bash
121
- git clone https://github.com/Synthetic-Physiology-Lab/fucciphase
122
- cd fucciphase
123
- pip install -e ".[test, dev]"
124
- pre-commit install
125
- ```
126
-
127
- If you want to build the documentation, replace the abovementioned pip install by:
128
- ```bash
129
- pip install -e ".[test, dev, doc]"
130
- ```
131
-
132
- ## Cite us
133
-
134
- Di Sante, M., Pezzotti, M., Zimmermann, J., Enrico, A., Deschamps, J., Balmas, E.,
135
- Becca, S., Solito, S., Reali, A., Bertero, A., Jug, F. and Pasqualini, F.S., 2025.
136
- CALIPERS: Cell cycle-aware live imaging for phenotyping experiments and regeneration studies.
137
- bioRxiv, https://doi.org/10.1101/2024.12.19.629259
@@ -1,24 +0,0 @@
1
- fucciphase/__init__.py,sha256=8PA6UNaYjycfPpOg7e5ArP3k9Lj9H15Lmw-Mnd14azY,375
2
- fucciphase/fucci_phase.py,sha256=VgydHVN0nWzC6Eeh0LRaPHdScL2w7C5X7IhGSvyp4qw,6134
3
- fucciphase/io.py,sha256=ELcoxsPHzcg9tf48MaMNnuSMxe0Fd3Nc9LCWbQ6p4I8,1715
4
- fucciphase/main_cli.py,sha256=S4nRitMkLFFR77DHDT3j5_OtYbTST55ysMzE9J8pf9I,5979
5
- fucciphase/phase.py,sha256=jy2l9LD81FTk6TIlyWyYPbVnwClGP9N4RrYyqtiMStg,17130
6
- fucciphase/plot.py,sha256=gFoprFvJGH5Zb-227riRH1x5NEAAhpeqaVCyb1kYLr8,18589
7
- fucciphase/py.typed,sha256=esB4cHc6c07uVkGtqf8at7ttEnprwRxwk8obY8Qumq4,187
8
- fucciphase/sensor.py,sha256=6-WEI8viI5fSVyKHnECmKYKaROW4tQaPaNW4hHYVAcA,14788
9
- fucciphase/tracking_utilities.py,sha256=IfKH2fyPo7fkW3PBvQrCz-UcfrdkOj7D-iLJabynvfw,2776
10
- fucciphase/napari/__init__.py,sha256=At9Shk6HfDf6obtQaM0yKG4NOZVO6YxD2-J1M2ZGm7w,198
11
- fucciphase/napari/tracks_to_napari.py,sha256=US9uAzGVJi5wAJ4CbUi9XztRFbrMRK7t0oJrQ40aDEg,4094
12
- fucciphase/utils/__init__.py,sha256=E4wk7ygjHQQ-8vj4VNHseMLE-PQ1bZK2gvDFaO5Z1eU,1011
13
- fucciphase/utils/checks.py,sha256=ZTe6cq11Y2e3suM3vECqCvvFxQTMOJqXMPS8gdCP7qc,651
14
- fucciphase/utils/dtw.py,sha256=MDJEJUT9oSz8Iu6SeWFSBhVgZmLnE3CXE_2cbEl6TE8,1682
15
- fucciphase/utils/normalize.py,sha256=eGytBDjmWcr1OY88McCJNcmy4zioM2DbtQConDoIVRw,6037
16
- fucciphase/utils/phase_fit.py,sha256=Ht_dEyuLYonv6is9qQ-Xd95pQR7IR-8C8mv0ckDcp4E,1743
17
- fucciphase/utils/simulator.py,sha256=7bmrO0IWUqsk4CyM-PlVpG2QTJxjTsY1h6buxmTs1iM,2322
18
- fucciphase/utils/track_postprocessing.py,sha256=cTe3OOCR4dxFBZwN7XdbzDbnsgouoJql8rv4WwvmbM8,14438
19
- fucciphase/utils/trackmate.py,sha256=dir4ayS1Fl-gtK8NTbP7t7CBLnrumC8LgPiCwxsBf-c,10666
20
- fucciphase-0.0.2.dist-info/METADATA,sha256=Hbprshl_yGXUkarqCfjd1r34CDz9doj2HSHo5XN0m8Q,4893
21
- fucciphase-0.0.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
22
- fucciphase-0.0.2.dist-info/entry_points.txt,sha256=B77Cm5QnxeQz6DEfqD6n7zDw48-HrlepWPwLbdVITMY,119
23
- fucciphase-0.0.2.dist-info/licenses/LICENSE,sha256=pQGrOGpOTwikEzkZ8Zc9XLQwbaZ85TMJP-GaWCNZciw,1554
24
- fucciphase-0.0.2.dist-info/RECORD,,