RosettaX
Badge |
Status |
|---|---|
Python versions |
|
Documentation |
|
Continuous integration |
|
Test coverage |
|
PyPI package |
|
PyPI downloads |
|
Anaconda package |
|
Anaconda downloads |
|
Latest Anaconda release |
|
Citation |
RosettaX is an interactive calibration application for flow cytometry.
It provides local graphical workflows for fluorescence and scattering calibration, combining FCS data loading, histogram inspection, peak identification, calibration fitting, runtime profile management, and reusable calibration export in a single interface.
The goal of RosettaX is to make calibration workflows explicit, inspectable, repeatable, and easier to maintain across experiments. The application is designed as a practical bridge between experimental cytometry data, optical modeling, detector settings, calibration references, and downstream analysis.
Overview
Flow cytometry calibration is often distributed across several disconnected tools: instrument software, notebooks, scripts, spreadsheets, manually selected peaks, copied constants, and exported configuration files. This fragmentation makes calibration procedures difficult to audit, reproduce, compare, and reuse.
RosettaX brings these steps into a structured application. A calibration session can be configured, inspected, fitted, saved, and reused without separating the scientific model from the practical workflow. This is particularly useful when calibration results need to remain traceable across instruments, detector settings, reference materials, and analysis pipelines.
RosettaX currently focuses on two main calibration workflows:
fluorescence calibration
scattering calibration
The fluorescence workflow supports calibration from reference intensity data. The scattering workflow connects measured cytometry signals with optical parameters such as particle size, refractive index, detector configuration, and scattering intensity.
Features
RosettaX currently provides:
fluorescence calibration workflows
scattering calibration workflows
FCS data loading
interactive histogram inspection
peak identification and peak finding
calibration fitting
reusable calibration export
runtime profile management
detector and optical parameter presets
support for default and custom parameter configurations
local graphical application behavior suitable for repeated calibration work
Why RosettaX
RosettaX is intended to reduce the amount of manual and implicit work involved in flow cytometry calibration.
Typical calibration workflows often require users to move between acquisition software, custom scripts, spreadsheets, and manually recorded parameters. This can make it difficult to know exactly which data, peaks, settings, assumptions, and fitted models produced a given calibration result.
RosettaX addresses this by keeping the workflow organized around explicit steps:
load the relevant cytometry data
select or define the calibration context
inspect the signal distributions
identify the calibration peaks
fit the calibration relation
review the result
export a reusable calibration file
This makes the calibration process easier to document, compare, repeat, and adapt to new experiments.
Typical Workflow
A typical RosettaX session follows these steps:
launch the local application
load or select a runtime profile
import the relevant FCS data
choose the fluorescence or scattering calibration workflow
configure the detector, optical, and calibration parameters
inspect histograms and identify calibration peaks
fit the calibration model
review the calibration result
save the calibration for later reuse
The exact procedure depends on the selected workflow, but the application is organized so that each step remains visible and traceable.
On smaller screens, open Menu to access navigation and saved profiles. Graphs use a viewport-aware default height; an explicit graph height in your profile remains in effect. Calibration reference tables keep headers visible while scrolling and show cell-specific feedback for invalid numeric entries. Blank cells remain available for completing a table in stages.
Scientific Scope
RosettaX is intended for research and development workflows involving flow cytometry calibration. It focuses on calibration analysis and calibration file generation rather than instrument control.
The application is especially relevant when experimental cytometry data, reference materials, optical parameters, detector settings, and reusable analysis profiles need to be managed together in a structured workflow.
For scattering calibration, RosettaX is designed to connect measured cytometry signals with optical modeling concepts, including particle size, refractive index, collection geometry, detector configuration, and scattering intensity. This makes it suitable for workflows where optical interpretation and instrument calibration need to remain linked.
Data Handling
RosettaX runs locally.
The application does not upload FCS files, calibration profiles, calibration results, or generated configuration files to a remote service. Data remain on the machine running the software unless the user explicitly moves, uploads, or shares them outside the application.
Project Status
RosettaX is currently in alpha development.
The application is usable for development, testing, and iterative calibration workflow design. However, the public API, internal organization, and graphical workflows may still change. New users should expect active development and occasional breaking changes.
Current development priorities include:
improving workflow robustness
expanding automated tests
improving documentation
adding reproducible examples
strengthening calibration validation
refining the graphical interface
improving packaging and release workflows
Installation
RosettaX requires Python 3.11 or later. CI checks Python 3.11, 3.12, and 3.13; the pinned PyMieSim release provides wheels for these versions.
PyPI
pip install RosettaX
Anaconda
conda install -c martinpdes rosettax
From Source
git clone https://github.com/MartinPdeS/RosettaX.git
cd RosettaX
pip install -e .
Docker
With Docker and Docker Compose installed, run from the repository checkout:
docker compose up --build
Open http://localhost:8050 in your browser. The container uses Python 3.13 and Gunicorn, runs as a non-root user, and publishes the application on the local machine only. Compose targets linux/amd64 because PyMieSim 5.1.2 provides x86-64 Linux wheels; Docker uses emulation on Apple Silicon.
Uploads, server-side calibration files, and usage records are stored in the rosettax-data named volume and survive container recreation. User-created profiles remain in browser storage; downloaded FCS files, calibration JSON, and PDF reports are saved by your browser.
To use a different port or maximum upload size:
ROSETTAX_PORT=8051 ROSETTAX_MAX_UPLOAD_SIZE=512MB docker compose up --build
Stop the application with Ctrl+C, or run docker compose down after starting it with docker compose up --build --detach. docker compose down retains the data volume; adding --volumes deletes the stored application data.
For a native deployment, ROSETTAX_CALIBRATION_DIRECTORY can select a writable directory for server-side calibration files. Without that setting, RosettaX keeps its existing calibration directory beside the package.
Render
For a native Python web service on Render, set the Build Command to:
bash tools/render_build.sh
The script fetches release tags and complete Git history before installing the package, so its version is preserved in shallow deployment checkouts. It prints the installed version in the build log and rejects placeholder 0.0 versions. Keep your existing Start Command and redeploy after changing the Build Command. The home page displays the installed software version, with a generated-version fallback for source checkouts and standalone bundles.
Usage
After installation, launch RosettaX with:
rosettax
This starts the local graphical calibration application.
Common CLI options:
rosettax --host 0.0.0.0 --port 8050
rosettax --no-browser
rosettax --fcs-file-path /path/to/sample.fcs
rosettax --version
The application opens a browser based interface served from the local machine. It is intended for local calibration workflows and does not require a remote server.
Documentation
The documentation is available here:
The documentation is expected to evolve with the application. At this stage, the README provides the high level overview, while the full documentation contains more detailed usage information.
Development
Install the project in editable mode with development dependencies:
pip install -e ".[dev,testing,documentation]"
Build a local PyInstaller bundle with:
pip install -e ".[bundling]"
pyinstaller rosettax.spec --clean
This creates a standalone bundle under dist/rosettax for the current operating system. Cross platform bundles must still be built natively on each target operating system.
Run the unit test suite with:
pytest
Run tests with coverage using:
pytest --cov=RosettaX
Run the integration suite in a separate process with real PyMieSim and Dash Bootstrap dependencies:
python -m pytest integration_tests -o addopts='' -v
The unit suite substitutes scientific and Bootstrap dependencies with stubs. The integration suite lives outside tests/ so it does not load those stubs; do not collect both suites in one pytest invocation. It checks native sphere and core-shell calculations, power scaling, Mie relation inversion, every registered page layout, and Dash HTTP endpoints. Missing dependencies or stub contamination fail the run instead of skipping checks. CI runs these checks on Python 3.11 and 3.13 on Linux, and Python 3.13 on macOS and Windows.
The repository includes configuration for testing, coverage, documentation, and continuous integration. These tools are intended to support reproducible development as the project matures.
Contributing
Contributions are welcome.
Useful contributions include:
bug reports
workflow suggestions
documentation improvements
test cases
calibration examples
user interface improvements
support for additional calibration workflows
For substantial changes, please open an issue first so that the intended direction can be discussed before implementation.
Citation
If you use RosettaX in scientific work, please cite its Zenodo concept DOI: 10.5281/zenodo.19846629. It always resolves to the latest published Zenodo release.
@software{rosettax,
author = {Poinsinet de Sivry-Houle, Martin},
title = {RosettaX},
year = {2026},
publisher = {Zenodo},
doi = {10.5281/zenodo.19846629},
url = {https://doi.org/10.5281/zenodo.19846629}
}
The current citation and all archived versions are available at https://zenodo.org/records/19846629.
Contact
RosettaX is developed by Martin Poinsinet de Sivry Houle.
For collaboration, questions, or feedback:
License
RosettaX is distributed under the GNU Affero General Public License v3.0 or later.
See the repository LICENSE file for the full license text.
Commercial licensing, support, validation, or custom deployment agreements may be discussed with the author.
Metadata
Release files for RosettaX 0.9.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| rosettax-0.9.2.tar.gz | 7.4 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| rosettax-0.9.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 9.2 MB
Release files / rosettax-0.9.2.tar.gz
| Download URL | rosettax-0.9.2.tar.gz |
|---|---|
| Size | 7.4 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4d4248d56ede4867c3efc09ec838ed603d6a72b5c45516f92703fd1cb4f91946
|
|
BLAKE2b-256 checksum How to use checksums |
5efa419df447abc3efec7cd9da159904257b4efe4ca7dc97875216b2b2732dff
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / rosettax-0.9.2-py3-none-any.whl
| Download URL | rosettax-0.9.2-py3-none-any.whl |
|---|---|
| Size | 1.8 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a5ad282b4c06732393e365fb882d3911a3fe2c9a832cb08bd45775a3b01ee210
|
|
BLAKE2b-256 checksum How to use checksums |
94a53b7ed352e49d2bdbc10424f84e199f720761dcafc75e0ac3405aeb4659d2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|