Cell cycle analysis plugin.
Project description
fucciphase
FUCCIphase is open-source software for estimating cell-cycle phase and cell-cycle percentage from FUCCI fluorescence intensities. Repository: https://github.com/Synthetic-Physiology-Lab/fucciphase
Background
FUCCI (Fluorescent Ubiquitination-based Cell Cycle Indicator) is a dual-color live-cell reporter that makes cell-cycle progression directly visible by fluorescence microscopy. In this system, the cyan signal marks cells in G1, while the magenta signal labels cells in S/G2/M. Nuclei showing both signals correspond to cells passing through the G1/S transition, providing an immediate visual readout of cell-cycle state.
FUCCIphase is an open-source analysis tool for time-lapse data. It takes tracked nuclear fluorescence traces from TrackMate or compatible CSV/XLSX tables, and uses the cyan and magenta intensity profiles to assign FUCCI-defined cell-cycle states and to estimate a continuous cell-cycle percentage (0–100%). The percentage is obtained by aligning each track to a reference trajectory using subsequence alignment / DTW-based matching, allowing comparison of cells even when individual phase durations vary.
System Requirements
fucciphase is implemented in Python and supports Python >=3.10.
Tested Python versions: Python 3.11.15
Core Python dependencies are defined in pyproject.toml and include:
scipy
numpy
pandas
openpyxl
matplotlib
dtaidistance
monotonic-derivative
svgwrite
LineageTree (<1.5.0)
Optional extras:
`napari`, `pyqt6`, `bioio`, `bioio-ome-tiff`, `bioio-tifffile` for visualization
`jupyter` for notebooks
`pytest`, `pytest-cov` for testing
`sphinx` for documentation
fucciphase package was tested on the following system:
- Operating System: Windows 10 Pro (version 22H2, OS build 19045)
- Architecture: 64-bit
- Processor: Intel CPU (~3.7 GHz)
- RAM: 32 GB
Non-standard hardware requirements:
- No non-standard hardware is required for the core CLI workflow.
- A GPU is not required.
- For Napari visualization of large OME-TIFF files, higher RAM may be helpful.
Installation
A virtual environment is recommended. You can install FUCCIphase either from PyPI or from source.
Typical installation time on a standard desktop or laptop computer:
- PyPI install: a few seconds
- Source install with optional extras: > 5 minutes
Install from PyPI:
pip install fucciphase
Install from source:
git clone https://github.com/Synthetic-Physiology-Lab/fucciphase
cd fucciphase
pip install -e .
Optional extras:
pip install -e ".[jupyter]"
pip install -e ".[napari]"
The napari extra includes PyQt6, so the viewer is launchable after the
install. If you prefer conda-managed Qt inside a conda environment, install
pyqt6 with conda instead:
conda install -c conda-forge pyqt6
If you only want notebook support without a source install, a minimal setup is:
pip install fucciphase jupyter matplotlib pandas
Quick CLI start
The smallest runnable example is in
examples/cli_quickstart/. It includes:
- a small CSV input table
- the same table as
.xlsx - a reference curve
- a sensor JSON file
- an expected processed output table
Run the CSV example from the repository root (expected runtime for the demo < 1 minute):
fucciphase examples/cli_quickstart/tiny_tracks.csv \
-ref examples/cli_quickstart/tiny_reference.csv \
--sensor_file examples/cli_quickstart/tiny_sensor.json \
-dt 0.48 \
-m MEAN_INTENSITY_CH4 \
-c MEAN_INTENSITY_CH3
This writes:
outputs/tiny_tracks_processed.csv
Compare the generated table against:
examples/cli_quickstart/tiny_tracks_expected_output.csv
The same workflow also works with:
examples/cli_quickstart/tiny_tracks.xlsx
Full TrackMate workflow
For a larger end-to-end example based on TrackMate XML and Napari visualization,
see examples/reproducibility/.
That workflow uses:
inputs/merged_linked.ome.xmlinputs/hacat_fucciphase_reference.csvinputs/downscaled_hacat.ome.tif
Run it from examples/reproducibility/:
fucciphase inputs/merged_linked.ome.xml \
-ref inputs/hacat_fucciphase_reference.csv \
-dt 0.25 \
-m MEAN_INTENSITY_CH1 \
-c MEAN_INTENSITY_CH2 \
--generate_unique_tracks
This generates:
outputs/merged_linked.ome_processed.csv
outputs/merged_linked.ome_processed.xml
Visualize the result in Napari:
fucciphase-napari outputs/merged_linked.ome_processed.csv \
inputs/downscaled_hacat.ome.tif \
-m 0 -c 1 -s 2 --pixel_size 0.544
Preview media are committed in the repository, while the processed CSV/XML files are generated when you run the walkthrough.
Python API
Use process_trackmate for TrackMate XML:
from fucciphase import process_trackmate
from fucciphase.sensor import FUCCISASensor
sensor = FUCCISASensor(
phase_percentages=[33.3, 33.3, 33.4],
center=[20.0, 55.0, 70.0, 95.0],
sigma=[5.0, 5.0, 10.0, 1.0],
)
df = process_trackmate(
"path/to/trackmate.xml",
channels=["MEAN_INTENSITY_CH1", "MEAN_INTENSITY_CH2"],
sensor=sensor,
thresholds=[0.1, 0.1],
)
print(df[["TRACK_ID", "CELL_CYCLE_PERC_DTW"]].head())
Use process_dataframe for tabular CSV/XLSX data that you have already loaded
into a pandas DataFrame.
What's inside this repository
The repository is organized so you can start with a minimal example, move to a full reproducibility workflow, and then explore notebooks or your own data.
Main example and data folders
examples/cli_quickstart/: smallest CLI example with CSV/XLSX input, reference data, sensor parameters, and an expected output tableexamples/reproducibility/: TrackMate XML workflow plus Napari visualization and preview mediaexamples/notebooks/: Jupyter notebooks for calibration, reconstruction, simulation, and figure generationexamples/example_data/: reference curves and saved sensor JSON files for calibration and testing
Selected notebooks
| Notebook | Purpose |
|---|---|
getting_started.ipynb |
Minimal end-to-end usage example |
extract_calibration_data.ipynb |
Build reference curves from movies and TrackMate XML |
sensor_calibration.ipynb |
Build or inspect FUCCI sensor models |
example_estimated.ipynb |
Explore processed output tables |
percentage_reconstruction.ipynb |
Smooth and reconstruct phase-percentage trajectories |
example_reconstruction.ipynb |
Recover incomplete or noisy fluorescence traces |
example_simulated.ipynb |
Generate synthetic FUCCI signals for testing |
signal_mode_comparison.ipynb |
Compare alternative signal modes for DTW-based phase alignment |
color-tails-by-percentage.ipynb |
Visualize population-level phase composition |
explanation-dtw-alignment.ipynb |
Explain the DTW alignment used internally |
phaselocking-workflow-lazy.ipynb |
Scalable phase-locking workflow for larger datasets |
For notebook-specific notes, see
examples/notebooks/README.md. For a higher
level guide to the example folders, see examples/README.md.
Source, tests, and docs
src/fucciphase/: library code and CLI entry pointstests/: automated test suitedoc/: Sphinx documentation sources
Using your own data
To process your own dataset:
-
Export tracking from Fiji/TrackMate as
.xml, or provide a tabular.csv/.xlsxfile that can be loaded into a pandas DataFrame. -
Build a reference CSV or XLSX file containing at least one full cell cycle. The expected columns are:
percentage,time,cyan,magenta
For examples, see the files in
examples/example_data/. -
Run FUCCIphase:
fucciphase your_tracks.xml -ref your_reference.csv -dt <your_timestep> -m <magenta_channel> -c <cyan_channel>
-
If you have an OME-TIFF video and segmentation masks, visualize the result:
fucciphase-napari your_tracks_processed.csv your_video.ome.tif -m <magenta_index> -c <cyan_index> -s <mask_index>
Runtime depends on data size. Standard processing usually runs comfortably on a typical workstation, while Napari visualization may require more RAM to load larger videos.
Development
git clone https://github.com/Synthetic-Physiology-Lab/fucciphase
cd fucciphase
pip install -e ".[test,dev,doc]"
pre-commit install
Cite us
Di Sante, M., Pezzotti, M., Zimmermann, J., Enrico, A., Deschamps, J., Balmas, E., Becca, S., Solito, S., Reali, A., Bertero, A., Jug, F. and Pasqualini, F.S., 2025. CALIPERS: Cell cycle-aware live imaging for phenotyping experiments and regeneration studies. bioRxiv, https://doi.org/10.1101/2024.12.19.629259
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fucciphase-0.1.0.tar.gz.
File metadata
- Download URL: fucciphase-0.1.0.tar.gz
- Upload date:
- Size: 28.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b222459e4e726a1eef4604e37f736e0c322cfebf3924da8bb4e19c98f05fec34
|
|
| MD5 |
a14cc761f665366199de240ee4d76fcf
|
|
| BLAKE2b-256 |
ee6c8b645b463e595993861a9b547b80cf4e674ebb05968c6f29e3a1859c7233
|
Provenance
The following attestation bundles were made for fucciphase-0.1.0.tar.gz:
Publisher:
ci.yml on Synthetic-Physiology-Lab/fucciphase
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fucciphase-0.1.0.tar.gz -
Subject digest:
b222459e4e726a1eef4604e37f736e0c322cfebf3924da8bb4e19c98f05fec34 - Sigstore transparency entry: 2023087882
- Sigstore integration time:
-
Permalink:
Synthetic-Physiology-Lab/fucciphase@7eb10a781638a8b0ff6c280aa50be2bf95256668 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Synthetic-Physiology-Lab
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@7eb10a781638a8b0ff6c280aa50be2bf95256668 -
Trigger Event:
push
-
Statement type:
File details
Details for the file fucciphase-0.1.0-py3-none-any.whl.
File metadata
- Download URL: fucciphase-0.1.0-py3-none-any.whl
- Upload date:
- Size: 63.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b0a4878938c1e7b6aa8dfb52acc67be0a1f015c19ab3506d23cbe90123a12b0a
|
|
| MD5 |
29479b3cdae29c49e546a898a9eb388e
|
|
| BLAKE2b-256 |
75dc6f965578c42cc89c08e38c87386a8224d7ce92e6b90a80700e4e4e74db9f
|
Provenance
The following attestation bundles were made for fucciphase-0.1.0-py3-none-any.whl:
Publisher:
ci.yml on Synthetic-Physiology-Lab/fucciphase
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fucciphase-0.1.0-py3-none-any.whl -
Subject digest:
b0a4878938c1e7b6aa8dfb52acc67be0a1f015c19ab3506d23cbe90123a12b0a - Sigstore transparency entry: 2023088036
- Sigstore integration time:
-
Permalink:
Synthetic-Physiology-Lab/fucciphase@7eb10a781638a8b0ff6c280aa50be2bf95256668 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Synthetic-Physiology-Lab
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@7eb10a781638a8b0ff6c280aa50be2bf95256668 -
Trigger Event:
push
-
Statement type: