Recent Releases of pyOMA2: A Python module for conducting operational modal analysis

pyOMA2: A Python module for conducting operational modal analysis - v1.2.0

[1.2.0] - 2025-09-09

This release includes all changes from beta releases 1.2.0b1, 1.2.0b2, 1.2.0b3, and 1.2.0b4.

[1.2.0b4] - 2025-06-18

Added

  • Color scheme support for stabilization plots (plot_stab() and plot_freqvsdamp()) to improve accessibility and readability
  • get_pole_colors() function in plot.py to manage color schemes for stable/unstable poles
  • Four color schemes available:
    • 'default': Green/red colors (original scheme, maintained for backward compatibility)
    • 'classic': Blue/orange colors (colorblind-friendly alternative)
    • 'high_contrast': Black/gray colors (excellent for B&W printing)
    • 'viridis': Colors from viridis colormap (scientific publication friendly)
  • Documentation section "Color Schemes for Stabilization Plots" in "Extra1 - Tips and tricks.rst"
  • Documentation build instructions in CONTRIBUTING.md

Changed

  • Enhanced plot_stab() and cluster_plot() functions in plot.py to accept color_scheme parameter
  • Updated plot_stab() and plot_freqvsdamp() methods in SSI and pLSCF algorithm classes to support color scheme selection
  • Improved docstrings in plotting functions to describe colorblind-friendly features
  • Default plotting behavior maintains original green/red colors for backward compatibility

Fixed

  • Accessibility issues in stabilization plots for users with color vision deficiencies

[1.2.0b3] - 2025-06-11

Changed

  • Unified SSI algorithms class. With this change the user specifies which SSI algorithm to perform (i.e. "cov", "cov_R", "dat", "IOcov") in the RunParam class. In this way Clustering algorithms can be applied to every SSI algorithm.
  • plot_stab() method of SSI class now accepts two new arguments to add a second optional axis with the plot of the singular values of the PSD matrix.
  • SSI_fast() function (pyoma2.functions.ssi) now return also the G matrix (next state-output covariance matrix)
  • refactor code and docstrings in ssi.py (algorithms), ssi.py (functions), plot.py, run_params.py
  • example_data() function (pyoma2.functions.gen) has been improved and now returns also the input forces U
  • refactor code in pyvista_plotter.py and mixin.py

Added

  • "IOcov" method for build_hank() function. Allows to perform Input Output SSIcov
  • U argument for inputs to SSIRunParams
  • HCfreqlim() and syntspectr() functions to ssi.py functions file
  • plotsilhouette() and spectracomparison() functions in plot.py functions file
  • FuzzyCMeansClustering class and FCMeans() function in clus.py functions file
  • estspectrum() and plotsSyVSmSy() methods for SSI class
  • dynamic coloring of mode shape in animate_mode() method based on points position

Fixed

  • bug in SSI_poles where normalisation to unity was applied before the covariance estimation
  • bug in selfromplot.py where the step run_parameter for ssi was not considered

Removed

  • aoma.py file
  • AutoSSIRunParams class
  • AutoSSIResult class
  • AutoSSIMPEParams class

[1.2.0b2] - 2025-02-13

  • fix tests

[1.2.0b1] - 2025-02-12

Added

  • Extra1 example jupyter notebook
  • Example5 jupyter notebook for clustering
  • clustering.py function file
  • aoma.py for AutoSSI class
  • AutoSSIRunParams class, AutoSSIMPEParams class and AutoSSIResult class
  • Step1, Step2, Step3 and Clustering classes
  • documentation files for clustering and examples

Changed

  • runparams have been split in runparams and mpe_params
  • all dependencies are now mandatory (pyvista and openpyxl)

  • security dependencies patch

Added

  • scikit-learn deps

- Python
Published by dfm88 9 months ago

pyOMA2: A Python module for conducting operational modal analysis - v1.1.2

[1.1.2] - 2025-06-18

Added

  • Color scheme support for stabilization plots (plot_stab() and plot_freqvsdamp()) to improve accessibility and readability
  • get_pole_colors() function in plot.py to manage color schemes for stable/unstable poles
  • Four color schemes available:
    • 'default': Green/red colors (original scheme, maintained for backward compatibility)
    • 'classic': Blue/orange colors (colorblind-friendly alternative)
    • 'high_contrast': Black/gray colors (excellent for B&W printing)
    • 'viridis': Colors from viridis colormap (scientific publication friendly)
  • Documentation section "Color Schemes for Stabilization Plots" in "Extra1 - Tips and tricks.rst"
  • Documentation build instructions in CONTRIBUTING.md

Changed

  • Enhanced plot_stab() and cluster_plot() functions in plot.py to accept color_scheme parameter
  • Updated plot_stab() and plot_freqvsdamp() methods in SSI and pLSCF algorithm classes to support color scheme selection
  • Improved docstrings in plotting functions to describe colorblind-friendly features
  • Default plotting behavior maintains original green/red colors for backward compatibility

Fixed

  • Accessibility issues in stabilization plots for users with color vision deficiencies

- Python
Published by dfm88 12 months ago

pyOMA2: A Python module for conducting operational modal analysis - v1.2.0b4

[1.2.0b4] - 2025-06-18

Added

  • Color scheme support for stabilization plots (plot_stab() and plot_freqvsdamp()) to improve accessibility and readability
  • get_pole_colors() function in plot.py to manage color schemes for stable/unstable poles
  • Four color schemes available:
    • 'default': Green/red colors (original scheme, maintained for backward compatibility)
    • 'classic': Blue/orange colors (colorblind-friendly alternative)
    • 'high_contrast': Black/gray colors (excellent for B&W printing)
    • 'viridis': Colors from viridis colormap (scientific publication friendly)
  • Documentation section "Color Schemes for Stabilization Plots" in "Extra1 - Tips and tricks.rst"
  • Documentation build instructions in CONTRIBUTING.md

Changed

  • Enhanced plot_stab() and cluster_plot() functions in plot.py to accept color_scheme parameter
  • Updated plot_stab() and plot_freqvsdamp() methods in SSI and pLSCF algorithm classes to support color scheme selection
  • Improved docstrings in plotting functions to describe colorblind-friendly features
  • Default plotting behavior maintains original green/red colors for backward compatibility

Fixed

  • Accessibility issues in stabilization plots for users with color vision deficiencies

- Python
Published by dfm88 12 months ago

pyOMA2: A Python module for conducting operational modal analysis -

Changed

  • Unified SSI algorithms class. With this change the user specifies which SSI algorithm to perform (i.e. "cov", "cov_R", "dat", "IOcov") in the RunParam class. In this way Clustering algorithms can be applied to every SSI algorithm.
  • plot_stab() method of SSI class now accepts two new arguments to add a second optional axis with the plot of the singular values of the PSD matrix.
  • SSI_fast() function (pyoma2.functions.ssi) now return also the G matrix (next state-output covariance matrix)
  • refactor code and docstrings in ssi.py (algorithms), ssi.py (functions), plot.py, run_params.py
  • example_data() function (pyoma2.functions.gen) has been improved and now returns also the input forces U
  • refactor code in pyvista_plotter.py and mixin.py

Added

  • "IOcov" method for build_hank() function. Allows to perform Input Output SSIcov
  • U argument for inputs to SSIRunParams
  • HCfreqlim() and syntspectr() functions to ssi.py functions file
  • plotsilhouette() and spectracomparison() functions in plot.py functions file
  • FuzzyCMeansClustering class and FCMeans() function in clus.py functions file
  • estspectrum() and plotsSyVSmSy() methods for SSI class
  • dynamic coloring of mode shape in animate_mode() method based on points position

Fixed

  • bug in SSI_poles where normalisation to unity was applied before the covariance estimation
  • bug in selfromplot.py where the step run_parameter for ssi was not considered

Removed

  • aoma.py file
  • AutoSSIRunParams class
  • AutoSSIResult class
  • AutoSSIMPEParams class

- Python
Published by dfm88 12 months ago

pyOMA2: A Python module for conducting operational modal analysis - v1.2.0b2

[1.2.0b2] - 2025-02-13

  • fix tests

- Python
Published by dfm88 over 1 year ago

pyOMA2: A Python module for conducting operational modal analysis - v1.2.0b1

Added

  • Extra1 example jupyter notebook
  • Example5 jupyter notebook for clustering
  • clustering.py function file
  • aoma.py for AutoSSI class
  • AutoSSIRunParams class, AutoSSIMPEParams class and AutoSSIResult class
  • Step1, Step2, Step3 and Clustering classes
  • documentation files for clustering and examples

Changed

  • runparams have been split in runparams and mpe_params
  • all dependencies are now mandatory (pyvista and openpyxl)

  • security dependencies patch

- Python
Published by dfm88 over 1 year ago

pyOMA2: A Python module for conducting operational modal analysis - v1.1.1

[1.1.1] - 2025-01-24

  • fix cluster_plt parameter name to Xi

- Python
Published by dfm88 over 1 year ago

pyOMA2: A Python module for conducting operational modal analysis - v1.1.0

[1.1.0] - 2025-01-24

Fixed

  • uncertainty calculations for SSI algorithm
  • animation problem in pyvista
  • small fix (moved ax.grid()) in plt_data
  • updated docs

Changed

  • Renamed anim_mode_g2 to anim_mode_geo2 in GeometryMixin class
  • Updated hierarchy for results and run_params classes
  • Renamed plot_cluster() method to plot_freqvsdamp()
  • SSI functions and classes re-organization:
    • cov_mmmethod renamed to cov
    • removed ac2mp function
    • Hard criteria on MPC and MPD splitted
    • HC on damping and on complex conjugate included into SSI_polesfunction
    • order for runparam renamed to `orderin`
    • Renamed uncertanties component from xxx_covto xxx_std
  • updated tests

Added

  • pre commit in github workflow
  • clustering plotting functions to plot.py

- Python
Published by dfm88 over 1 year ago

pyOMA2: A Python module for conducting operational modal analysis - v1.0.0

[1.0.0] - 2024-09-12

BREAKING CHANGES

This version introduces a new project structure and a new way to handle the algorithms. A script is available here https://gist.github.com/dfm88/2bd2a08bb8b5837103dd074033bd7710 to help running the migration to new version.

Added

  • pyvista optional dependency for 3D plots
  • file src/pyoma2/support/mpl_plotter.py to handle matplotlib plots
  • file src/pyoma2/support/pyvista_plotter.py to handle pyvista plots
  • file src/pyoma2/test_data/3SL/Geo1.xlsx
  • file src/pyoma2/test_data/3SL/Geo2.xlsx
  • file src/pyoma2/test_data/5dof/Geo1.xlsx
  • file src/pyoma2/test_data/5dof/Geo2.xlsx
  • file src/pyoma2/test_data/Geometry/htc_geo2.xlsx
  • file src/pyoma2/test_data/Template_Geometry2.xlsx
  • file src/pyoma2/test_data/palisaden/Geo1.xlsx
  • file src/pyoma2/test_data/palisaden/Geo2.xlsx
  • platform specific installation in github workflow and requirements extraction in pre-commit

Changed

  • tests to support new project structure
  • OMA.py removed inplace method from SingleSetup and MultiSetup_PreGER classes, add a copy of data on init with the possibility to rollback them
  • moved plot_mode_g1 and plot_mode_g2 and anim_mode_g2 methods from SingleSetup to BaseSetup class
  • function pyoma2/functions/fdd.py::SDOF_bellandMS now have custom logic for algorithm methods FSDD and EFDD
  • function pyoma2/functions/plscf.py::pLSCF_poles now return an additional element in the tuple
  • function pyoma2/functions/plscf.py::ac2mp_poly now return an additional element in the tuple
  • moved all geometry related methods to the pyoma2/support/geometry/mixin.py file where the following method are available def_geo1, def_geo2, _def_geo_by_file, def_geo1_by_file, def_geo2_by_file, plot_geo1, plot_geo2, plot_geo2_mpl, plot_mode_geo1, plot_mode_geo2, plot_mode_geo2_mpl, anim_mode_geo2 and available to BaseSetup class and MultiSetup_PoSER class. The proxy to these method were removed from BaseAlgorithm class and moved to the mixin class GeometryMixin and so proxied by the Setup classes that implement the geometry mixin.

  • Library re-organization:

    • file pyoma2/OMA.py split in pyoma2/setup package in the following files:
    • base.py: here we moved the following classes BaseSetup
    • single.py: here we moved the following classes SingleSetup
    • multi.py: here we moved the following classes MultiSetup_PreGER, MultiSetup_PoSER
    • file pyoma2/support/utils/logging_handler.py moved to pyoma2/support/utils/logging_handler.py
    • file pyoma2/utils/typing.py moved to pyoma2/support/utils/typing.py
    • package pyoma2/algorithm renamed to pyoma2/algorithms
    • file pyoma2/algorithm/data/geometry.py moved to pyoma2/support/geometry.py
    • file pyoma2/plot/Sel_from_plot.py moved to pyoma2/support/Sel_from_plot.py
    • variable pyoma2/algorithms/data/result.py::SSIResult.xi_poles renamed to pyoma2/algorithms/data/result.py::SSIResult.Xi_poles
    • variable pyoma2/algorithms/data/result.py::xi_poles.xi_poles renamed to pyoma2/algorithms/data/result.py::xi_poles.Xi_poles
    • variable pyoma2/algorithms/data/run_params.py::EFDDRunParams.method renamed to pyoma2/algorithms/data/run_params.py::EFDDRunParams.method_hank
    • class pyoma2/algorithms/fdd.py::FDD_algo renamed to pyoma2/algorithms/fdd.py::FDD
    • class pyoma2/algorithms/fdd.py::EFDD_algo renamed to pyoma2/algorithms/fdd.py::EFDD
    • class pyoma2/algorithms/fdd.py::FSDD_algo renamed to pyoma2/algorithms/fdd.py::FSDD
    • class pyoma2/algorithms/fdd.py::FDD_algo_MS renamed to pyoma2/algorithms/fdd.py::FDD_MS
    • class pyoma2/algorithms/fdd.py::EFDD_algo_MS renamed to pyoma2/algorithms/fdd.py::EFDD_MS
    • method pyoma2/algorithms/fdd.py::EFDD.plot_FIT renamed to pyoma2/algorithms/fdd.py::EFDD.plot_EFDDfit
    • function pyoma2/functions/fdd.py::SD_Est renamed to pyoma2/functions/fdd.py::SD_est
    • function pyoma2/functions/plscf.py::pLSCF_Poles renamed to pyoma2/functions/plscf.py::pLSCF_poles
    • function pyoma2/functions/plscf.py::rmfd2AC renamed to pyoma2/functions/plscf.py::rmfd2ac
    • function pyoma2/functions/plscf.py::AC2MP_poly renamed to pyoma2/functions/plscf.py::ac2mp_poly
    • function pyoma2/functions/plscf.py::pLSCF_MPE renamed to pyoma2/functions/plscf.py::pLSCF_mpe
    • function pyoma2/functions/ssi.py::BuildHank renamed to pyoma2/functions/ssi.py::build_hank
    • function pyoma2/functions/ssi.py::AC2MP renamed to pyoma2/functions/ssi.py::ac2mp
    • function pyoma2/functions/ssi.py::SSI_FAST renamed to pyoma2/functions/ssi.py::SSI_fast
    • function pyoma2/functions/ssi.py::SSI_POLES renamed to pyoma2/functions/ssi.py::SSI_poles
    • function pyoma2/functions/ssi.py::SSI_MulSet renamed to pyoma2/functions/ssi.py::SSI_multi_setup
    • function pyoma2/functions/ssi.py::SSI_MPE renamed to pyoma2/functions/ssi.py::SSI_mpe
    • file pyoma2/functions/FDD_funct.py renamed to pyoma2/functions/fdd.py
    • file pyoma2/functions/plot_funct.py renamed to pyoma2/functions/plot.py
    • file pyoma2/functions/Gen_funct.py renamed to pyoma2/functions/gen.py
    • file pyoma2/functions/SSI_funct.py renamed to pyoma2/functions/ssi.py
    • method pyoma2/algorithms/base.py::BaseAlgorithm.MPE renamed to pyoma2/algorithms/base.py::BaseAlgorithm.mpe
    • method pyoma2/algorithms/base.py::BaseAlgorithm.mpe_fromPlot renamed to pyoma2/algorithms/base.py::BaseAlgorithm.mpe_from_plot

Fixed

Removed

  • file src/pyoma2/plot/anim_mode.py now handled by pyvista
  • file https://github.com/dagghe/pyOMA-test-data/tree/main/test_data/3SL/BG_lines.txt
  • file https://github.com/dagghe/pyOMA-test-data/tree/main/test_data/3SL/BG_nodes.txt
  • file https://github.com/dagghe/pyOMA-test-data/tree/main/test_data/3SL/geom.xlsx
  • file https://github.com/dagghe/pyOMA-test-data/tree/main/test_data/3SL/pts_coord.txt
  • file https://github.com/dagghe/pyOMA-test-data/tree/main/test_data/3SL/sens_coord.txt
  • file https://github.com/dagghe/pyOMA-test-data/tree/main/test_data/3SL/sens_dir.txt
  • file https://github.com/dagghe/pyOMA-test-data/tree/main/test_data/3SL/sens_lines.txt
  • file https://github.com/dagghe/pyOMA-test-data/tree/main/test_data/3SL/sens_map.txt
  • file https://github.com/dagghe/pyOMA-test-data/tree/main/test_data/3SL/sens_sign.txt
  • file https://github.com/dagghe/pyOMA-test-data/tree/main/test_data/palisaden/BG_lines.txt'
  • file https://github.com/dagghe/pyOMA-test-data/tree/main/test_data/palisaden/BG_nodes.txt
  • file https://github.com/dagghe/pyOMA-test-data/tree/main/test_data/palisaden/geom_pali.xlsx
  • file https://github.com/dagghe/pyOMA-test-data/tree/main/test_data/palisaden/pts_coord.txt
  • file https://github.com/dagghe/pyOMA-test-data/tree/main/test_data/palisaden/sens_dir.txt
  • file https://github.com/dagghe/pyOMA-test-data/tree/main/test_data/palisaden/sens_lines.txt
  • file https://github.com/dagghe/pyOMA-test-data/tree/main/test_data/palisaden/sens_map.txt
  • file https://github.com/dagghe/pyOMA-test-data/tree/main/test_data/palisaden/sens_sign.txt
  • function pyoma2/functions/ssi.py::Lab_stab_SSI
  • function pyoma2/functions/gen.py::lab_stab
  • support in testing for python3.8 and macos due to vtk dependency that is not compatible with platform using during tests action
  • File for example are now retrieved from the online repo https://github.com/dagghe/pyOMA-test-data/tree/main/test_data and removed from the repo

- Python
Published by dfm88 over 1 year ago

pyOMA2: A Python module for conducting operational modal analysis - v0.6.0

Fixed

Added

  • tox.ini file to run tests locally on multiple python versions

- Python
Published by dfm88 over 1 year ago

pyOMA2: A Python module for conducting operational modal analysis - v0.5.2

[0.5.2] - 2024-05-21

Fixed

  • type hints 3.8 compatibility

- Python
Published by dfm88 about 2 years ago

pyOMA2: A Python module for conducting operational modal analysis - v0.5.1

[0.5.1] - 2024-04-16

Fixed

  • multi_setup_poser tests
  • bug "SSI_Poles orders issue #11"
  • various minor fixes

Added

  • python 3.12 support
  • MPC and MPD criteria on stabilisation diagram for ssi and plscf
  • colormap to mode shape animation
  • method to save class to file

- Python
Published by dagghe about 2 years ago

pyOMA2: A Python module for conducting operational modal analysis - v0.5.0

[0.5.0] - 2024-04-09

Added

  • issue, feature, question templates

Changed

  • pre-commit default formatter to ruff
  • OMA.py moved decimate_data, detrend_data, filter_data to BaseSetup and add inplace option default to false

Fixed

  • mpe in FDD algorithm

Added

  • tests
  • workflow for tests on push and pull request

- Python
Published by dfm88 about 2 years ago

pyOMA2: A Python module for conducting operational modal analysis - v0.4.1

[0.4.1] - 2024-03-05

Added

  • pytest-cov to qa dependencies
  • first tests

Changed

  • evaluation types on BaseAlgorithm excluding itself
  • more readable error when defining new algorithms
  • _pre_run on algorithms is now called from setup classes

Fixed

  • plscf.py module name https://github.com/dagghe/pyOMA2/issues/5

- Python
Published by dfm88 about 2 years ago

pyOMA2: A Python module for conducting operational modal analysis - v0.4.0

[0.4.0] - 2024-02-29

Added

  • plscf module for polymax
  • plot_STFT() to plot the Short Time Fourier Transform magnitude of a channel (time-frequency plot)
  • filter_data() method to apply a Butterworth filter to the dataset
  • origin and reference axes (xyz) in modeshape plots and animations

Fixed

  • axis argument for detrend_data() and decimate_data() methods
  • minor fixes to plot_data() method

Changed

  • revised plot_ch_info() method to assess quality of data
  • Stab_plot() and Cluster_plot() functions have been revised so that plot_cluster() plot_STDiag() methods work for both ssi and plscf

- Python
Published by dagghe over 2 years ago

pyOMA2: A Python module for conducting operational modal analysis - v0.3.2

[0.3.2] - 2024-02-17

Fixed

  • link to documentation in toml file
  • pyOMA version in the requirements for documentation build
  • small fixes in documentation

Removed

  • MAC function from SSIfunct module (restored import from Genfunct)

- Python
Published by dagghe over 2 years ago

pyOMA2: A Python module for conducting operational modal analysis - v0.3.1

[0.3.1] - 2024-02-17

Added

  • docstring to all classes and functions
  • option to save gif figure from animation of the mode shape
  • documentation
  • logo

Removed

  • old example files under main
  • util.py as it was not used

Changed

  • the freqlim argument in all the plot function has been changed to a tuple, so to set both an upper and a lower limit to the x (frequency) axis
  • moved info.svg under docs/img folder
  • moved examples notebooks in Examples folder

Fixed

  • docstring fix for OMA.py
  • default ax value to 0 for detrend_data() and decimate_data() methods
  • links to moved items

- Python
Published by dagghe over 2 years ago

pyOMA2: A Python module for conducting operational modal analysis - v0.3.0

[0.3.0] - 2024-02-02

Added

  • methods: plot_data(), plot_ch_info(), detrend_data(), decimate_data() to Multisetup preGER class
  • info.svg chart to README
  • Multisetup PoSER and PreGER examples notebook
  • several docstring to functions and classes

Removed

  • channels name from plot_mode_g1() method

Changed

  • default ax value to 0 for detrend_data() and decimate_data() methods
  • name to single setup example notebook
  • minor reorganisation of pLSCF_funct.py
  • updated README.md with link to the example notebooks
  • add PYOMA_DISABLE_MATPLOTLIB_LOGGING env variable to disable matplotlib logging, default to True

Fixed

  • error to plot_geo2() method for both SS and MS (WARNING posx,posy)
  • restored functions removed by mistake from Gen_funct.py

Full Changelog: https://github.com/dagghe/pyOMA2/compare/v0.2.0...v0.3.0

- Python
Published by dfm88 over 2 years ago

pyOMA2: A Python module for conducting operational modal analysis - v0.2.0

[0.2.0] - 2024-01-30

Fixed

  • plot size
  • small fixes in OMA.py and plot_func.py

Added

  • methods to plot channels info
  • docstring on SelFormPlot class
  • jupyter notebook for SingleSetup

- Python
Published by dfm88 over 2 years ago

pyOMA2: A Python module for conducting operational modal analysis - v0.1.0

alpha

- Python
Published by dfm88 over 2 years ago