"""
This module provides classes for handling and storing various types of results data
related to the pyOMA2 module.
"""
from __future__ import annotations
from typing import List, Optional, Union
import numpy as np
import numpy.typing as npt
from pydantic import BaseModel, ConfigDict
[docs]class BaseResult(BaseModel):
"""
Base class for storing results data.
Attributes
----------
Fn : numpy.NDArray
Array of natural frequencies obtained from modal analysis.
Phi : numpy.NDArray
Array of mode shape vectors obtained from modal analysis.
"""
model_config = ConfigDict(from_attributes=True, arbitrary_types_allowed=True)
# dopo mpe o mpe_from_plot
Fn: Optional[npt.NDArray[np.float64]] = None # array of natural frequencies
Phi: Optional[npt.NDArray[np.float64]] = None # array of Mode shape vectors
[docs]class FDDResult(BaseResult):
"""
Class for storing Frequency Domain Decomposition (FDD) results data.
Attributes
----------
freq : numpy.NDArray
Array of frequencies.
Sy : numpy.NDArray
PSD obtained from the FDD analysis.
S_val : numpy.NDArray
Singular values of the PSD.
S_vec : numpy.NDArray
Singular vectors of the PSD.
"""
freq: Optional[npt.NDArray[np.float64]] = None
Sy: Optional[npt.NDArray[np.float64]] = None
S_val: Optional[npt.NDArray[np.float64]] = None
S_vec: Optional[npt.NDArray[np.float64]] = None
[docs]class EFDDResult(FDDResult):
"""
Class for storing results data from Enhanced Frequency Domain Decomposition (EFDD)
and Frequency Spatial Domain Decomposition (FSDD).
Attributes
----------
freq : numpy.NDArray
Array of frequencies.
Sy : numpy.NDArray
PSD obtained from the analysis.
S_val : numpy.NDArray
Singular values of the PSD.
S_vec : numpy.NDArray
Singular vectors of the PSD.
Xi : numpy.NDArray
Array of damping ratios obtained from modal analysis.
forPlot : list
A list to store data for plotting purposes.
"""
# dopo mpe, MPE_forPlot
Xi: Optional[npt.NDArray[np.float64]] = None # array of damping ratios
forPlot: Optional[List] = None
[docs]class SSIResult(BaseResult):
"""
Class for storing results data from Stochastic Subspace Identification (SSI) methods.
Attributes
----------
Obs : numpy.NDArray, optional
Observability matrix obtained from the SSI analysis.
A : list of numpy.NDArray, optional
List of system matrices A from the SSI analysis.
C : list of numpy.NDArray, optional
List of system matrices C from the SSI analysis.
H : numpy.NDArray, optional
Hankel matrix used in SSI analysis.
Lambds : numpy.NDArray, optional
Array of eigenvalues from the SSI analysis.
Fn_poles : numpy.NDArray, optional
Array of all natural frequencies.
Xi_poles : numpy.NDArray, optional
Array of all damping ratios.
Phi_poles : numpy.NDArray, optional
Array of all mode shape vectors.
Lab : numpy.NDArray, optional
Array of labels for all the poles.
Fn_poles_std : numpy.NDArray, optional
Covariance of all natural frequencies.
Xi_poles_std : numpy.NDArray, optional
Covariance of all damping ratios.
Phi_poles_std : numpy.NDArray, optional
Covariance of all mode shape vectors.
Xi : numpy.NDArray, optional
Array of damping ratios.
order_out : Union[list[int], int], optional
Output order after modal parameter estimation. Can be a list of integers or a single integer.
Fn_std : numpy.NDArray, optional
Covariance of natural frequencies obtained from the analysis.
Xi_std : numpy.NDArray, optional
Covariance of damping ratios obtained from the analysis.
Phi_std : numpy.NDArray, optional
Covariance of mode shape vectors obtained from the analysis.
"""
Obs: Optional[npt.NDArray[np.float64]] = None
A: Optional[List[npt.NDArray[np.float64]]] = None
C: Optional[List[npt.NDArray[np.float64]]] = None
H: Optional[npt.NDArray[np.float64]] = None
Lambds: Optional[npt.NDArray[np.float64]] = None
Fn_poles: Optional[npt.NDArray[np.float64]] = None
Xi_poles: Optional[npt.NDArray[np.float64]] = None
Phi_poles: Optional[npt.NDArray[np.float64]] = None
Lab: Optional[npt.NDArray[np.float64]] = None
Fn_poles_std: Optional[npt.NDArray[np.float64]] = None
Xi_poles_std: Optional[npt.NDArray[np.float64]] = None
Phi_poles_std: Optional[npt.NDArray[np.float64]] = None
Xi: Optional[npt.NDArray[np.float64]] = None
Fn_std: Optional[npt.NDArray[np.float64]] = None
Xi_std: Optional[npt.NDArray[np.float64]] = None
Phi_std: Optional[npt.NDArray[np.float64]] = None
order_out: Optional[Union[List[int], int]] = None
[docs]class pLSCFResult(BaseResult):
"""
Class for storing results data from the poly-reference Least Square Complex Frequency (pLSCF) method.
Attributes
----------
freq : numpy.NDArray
Array of frequencies.
Sy : numpy.NDArray
PSD obtained from the analysis.
Ad : list of numpy.NDArray
Denominator polynomial coefficients from pLSCF analysis.
Bn : list of numpy.NDArray
Numerator polynomial coefficients from pLSCF analysis.
Fn_poles : numpy.NDArray
Array of identified natural frequencies (poles) from pLSCF analysis.
xi_poles : numpy.NDArray
Array of damping ratios corresponding to identified poles.
Phi_poles : numpy.NDArray
Array of mode shape vectors corresponding to identified poles.
Lab : numpy.NDArray
Array of labels for the identified poles.
Xi : numpy.NDArray
Array of damping ratios obtained after modal parameter estimation.
order_out : Union[list[int], int]
Output order after modal parameter estimation. Can be a list of integers, or a single integer.
"""
freq: Optional[npt.NDArray[np.float64]] = None
Sy: Optional[npt.NDArray[np.float64]] = None
Ad: Optional[List[npt.NDArray[np.float64]]] = None
Bn: Optional[List[npt.NDArray[np.float64]]] = None
Fn_poles: Optional[npt.NDArray[np.float64]] = None
Xi_poles: Optional[npt.NDArray[np.float64]] = None
Phi_poles: Optional[npt.NDArray[np.float64]] = None
Lab: Optional[npt.NDArray[np.float64]] = None
Xi: Optional[npt.NDArray[np.float64]] = None
order_out: Optional[Union[List[int], int]] = None
[docs]class MsPoserResult(BaseResult):
"""
Base class for MultiSetup Poser result data.
Attributes
----------
Phi : numpy.NDArray
Array of mode shape vectors obtained from MultiSetup Poser analysis.
Fn : numpy.NDArray
Array of natural frequencies obtained from MultiSetup Poser analysis (mean value).
Fn_std : numpy.NDArray
Standard deviation of natural frequencies between setups.
Xi : numpy.NDArray
Array of damping ratios obtained from MultiSetup Poser analysis (mean value).
Xi_std : numpy.NDArray
Standard deviation of damping ratios.
"""
model_config = ConfigDict(from_attributes=True, arbitrary_types_allowed=True)
Phi: npt.NDArray[np.float64] = None
Fn: npt.NDArray[np.float64] = None
Fn_std: npt.NDArray[np.float64] = None
Xi: npt.NDArray[np.float64] = None
Xi_std: npt.NDArray[np.float64] = None
[docs]class AutoSSIResult(SSIResult):
"""
Result class for automated Structural System Identification (SSI) with clustering.
Attributes
----------
clustering_results : dict, optional
Dictionary storing clustering results, if available.
"""
clustering_results: Optional[dict] = {}
[docs]class ClusteringResult(BaseResult):
"""
Class to store clustering results and related metadata.
Attributes
----------
Fn : ndarray of shape (n_modes,)
Natural frequencies of the modes.
Xi : ndarray of shape (n_modes,)
Damping ratios of the modes.
Phi : ndarray of shape (n_channels, n_modes)
Mode shapes.
Fn_fl : ndarray of shape (n_samples,)
Flattened array of natural frequencies from clustering.
Xi_fl : ndarray of shape (n_samples,)
Flattened array of damping ratios from clustering.
Phi_fl : ndarray of shape (n_samples, n_channels)
Flattened array of mode shapes from clustering.
Fn_std_fl : ndarray of shape (n_samples,), optional
Standard deviation of natural frequencies.
Xi_std_fl : ndarray of shape (n_samples,), optional
Standard deviation of damping ratios.
Phi_std_fl : ndarray of shape (n_samples, n_channels), optional
Standard deviation of mode shapes.
order_fl : ndarray of shape (n_samples,)
Orders corresponding to the flattened data.
labels : ndarray of shape (n_samples,)
Cluster labels for each sample.
dtot : ndarray of shape (n_samples, n_samples)
Pairwise distance matrix.
medoid_distances : ndarray of shape (n_clusters,)
Distance of each sample to its cluster medoid.
order_out : ndarray of shape (n_modes,), optional
Final order values of the selected modes.
"""
Fn: Optional[npt.NDArray[np.float64]] = None
Xi: Optional[npt.NDArray[np.float64]] = None
Phi: Optional[npt.NDArray[np.float64]] = None
Fn_fl: Optional[npt.NDArray[np.float64]] = None
Xi_fl: Optional[npt.NDArray[np.float64]] = None
Phi_fl: Optional[npt.NDArray[np.float64]] = None
Fn_std_fl: Optional[npt.NDArray[np.float64]] = None
Xi_std_fl: Optional[npt.NDArray[np.float64]] = None
Phi_std_fl: Optional[npt.NDArray[np.float64]] = None
order_fl: Optional[npt.NDArray[np.int64]] = None
labels: Optional[npt.NDArray[np.int64]] = None
dtot: Optional[npt.NDArray[np.float64]] = None
medoid_distances: Optional[npt.NDArray[np.float64]] = None
order_out: Optional[npt.NDArray[np.int64]] = None
Fn_std: Optional[npt.NDArray[np.float64]] = None
Xi_std: Optional[npt.NDArray[np.float64]] = None
Phi_std: Optional[npt.NDArray[np.float64]] = None