CycloPhaser: A Python Package for Detecting Extratropical Cyclone Life Cycles
CycloPhaser is a package designed to automate and improve the accuracy of detecting and categorizing cyclone life cycle phases, including intensification, maturation, and decay. Understanding these phases is crucial for analyzing cyclone behavior and the dynamic processes that drive their development. This knowledge supports both operational forecasters and researchers focused on improving cyclone representation in numerical models, ultimately enhancing forecast accuracy. Traditionally, phase identification requires manual analysis, which introduces subjectivity and limits the feasibility of analyzing large datasets. CycloPhaser addresses these challenges by offering an efficient, objective approach, compatible with high-resolution reanalysis data and real-time observations alike. With CycloPhaser, users gain a powerful tool for cyclone life cycle classification, supporting both advanced meteorological research and practical forecasting applications.
CycloPhaser is described in detail in the paper by de Souza et al. (2025) and has been used to generate results presented by de Souza et al. (2024).
Important Note: CycloPhaser requires cyclone tracking data as input but does not perform cyclone tracking itself. There are various cyclone tracking algorithms available in the literature. Walker et al. (2020) provide a discussion on these methods, while open-source tracking tools, such as CyTRACK by Pérez-Alarcón et al. (2024), are publicly accessible. Additionally, cyclone track databases, like the Atlantic extratropical cyclone tracks database by Gramcianinov et al. (2020), are available for use.
Installation
-
Install using pip
pip install cyclophaser
Documentation
For detailed documentation, visit the CycloPhaser Documentation. This includes function parameters, module descriptions, and more.
Interactive Calibration Tool
CycloPhaser includes a visual calibration app built with Streamlit that lets you tune filtering and phase-detection parameters interactively, inspect results across multiple cyclones side-by-side, and export configurations as YAML for use in your own scripts.
This tool is not part of the PyPI package — it is not installed by pip install cyclophaser. It lives in the repository under tools/calibration_app/.
Hosted version (no installation required):
<STREAMLIT_APP_URL>
Run locally:
# 1. Clone the repository
git clone https://github.com/daniloceano/CycloPhaser.git
cd CycloPhaser
# 2. Install app dependencies (pulls cyclophaser from PyPI)
pip install -r tools/calibration_app/requirements.txt
# 3. Launch
streamlit run tools/calibration_app/app.py
For local development with an editable install of CycloPhaser (changes to the source take effect immediately):
pip install -e .
pip install -r tools/calibration_app/requirements-app.txt
streamlit run tools/calibration_app/app.py
Development Environment
Development on this repository (as opposed to just using the released
package) needs cyclophaser installed in editable mode, in an
environment dedicated to this repo. Installing it non-editably into an
environment shared with other projects lets import cyclophaser silently
resolve to a different installed copy depending on the current working
directory a script happens to be launched from — confirmed concretely: from
the repository root it resolves to the repository, from /tmp it resolves
to whichever released version is sitting in that environment's
site-packages. research/labels/evaluate_against_labels.py imports
cyclophaser.determine_periods, so under a shared, non-editable install the
version of the detector that scores the manual labels depends on where the
script was launched from — silently, with no error.
conda env create -f environment.yml
conda activate cyclophaser
pip install -e .
Verify the editable install actually wins, from a directory outside the repository (the failure mode above only shows up off-repo):
cd /tmp && python -c "import cyclophaser, importlib.metadata as m; print(cyclophaser.__file__); print(m.version('cyclophaser'))"
(cyclophaser.__version__ is not defined by the package — use
importlib.metadata.version('cyclophaser') instead, as above.) The printed
path must be inside this repository's cyclophaser/ directory and the
printed version must be this repository's (setup.py's VERSION), not
whatever else may be installed elsewhere — if either is wrong, a different
environment is active or the editable install did not take.
Support and Contact
For support, feature requests, or any queries, please open an issue on the GitHub repository.
License
This project is licensed under the GNU General Public License, version 3 or (at your option) any later version (GPL-3.0-or-later), as declared in setup.py. The licence text is in LICENSE; it is also available at https://www.gnu.org/licenses/gpl-3.0.html.
References
-
de Souza, D. C., da Silva Dias, P. L., Gramcianinov, C. B., & de Camargo, R. (2025). CycloPhaser: A Python Package for Detecting Extratropical Cyclone Life Cycles. Journal of Open Source Software, 10(108), 7363. https://doi.org/10.21105/joss.07363
-
de Souza, D. C., da Silva Dias, P. L., Gramcianinov, C. B., da Silva, M. B. L., & de Camargo, R. (2024). New perspectives on South Atlantic storm track through an automatic method for detecting extratropical cyclones' lifecycle. International Journal of Climatology, 44(10), 3568-3588.
-
Gramcianinov, C. B., Campos, R. M., de Camargo, R., Hodges, K. I., Guedes Soares, C., & da Silva Dias, P. L. (2020). Atlantic extratropical cyclone tracks in 41 years of ERA5 and CFSR/CFSv2 databases. Mendeley Data, 4, 108111.
-
Pérez-Alarcón, A., Coll-Hidalgo, P., Trigo, R. M., Nieto, R., & Gimeno, L. (2024). CyTRACK: An open-source and user-friendly Python toolbox for detecting and tracking cyclones. Environmental Modelling & Software, 176, 106027.
-
Walker, E., Mitchell, D. M., & Seviour, W. J. (2020). The numerous approaches to tracking extratropical cyclones and the challenges they present. Weather, 75(11), 336-341.
Metadata
Release files for cyclophaser 2.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| cyclophaser-2.1.0.tar.gz | 203.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| cyclophaser-2.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 285.2 kB
Release files / cyclophaser-2.1.0.tar.gz
| Download URL | cyclophaser-2.1.0.tar.gz |
|---|---|
| Size | 203.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5760167e9007d6f0fa77b23b448f0ecfce93ed9107ba3416614316a2a67f08ef
|
|
BLAKE2b-256 checksum How to use checksums |
1880f624ab75ba86d014e6f5c8fbebf7f8e9285892467db9eb23fefbae6d9fd1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / cyclophaser-2.1.0-py3-none-any.whl
| Download URL | cyclophaser-2.1.0-py3-none-any.whl |
|---|---|
| Size | 81.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
93951b79c6281ad357f913e54ed9a2fdf030d1dc38dea53a98c295f54042488b
|
|
BLAKE2b-256 checksum How to use checksums |
847696f7bd3c4f8459d2899f1571d2c7125036904844701c8b05fd38b6da6d42
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|