Algorithms & Physics

Scientific core: clustering, thermochemistry, and spectroscopy.

Clustering & PCA

class ensemble_analyzer._clustering.cluster_config.ClusteringConfig(n_clusters: int | None = None, include_H: bool = True, set_cluster_attribute: bool = True, min_k: int = 2, max_k: int = 30, random_state: int = 42)[source]

Configuration parameters for clustering operations.

include_H: bool = True
max_k: int = 30
min_k: int = 2
n_clusters: int | None = None
random_state: int = 42
set_cluster_attribute: bool = True
class ensemble_analyzer._clustering.cluster_config.PCAResult(scores: numpy.ndarray, clusters: numpy.ndarray, colors: List[str], numbers: List[int], energies: numpy.ndarray, explained_variance: numpy.ndarray, n_clusters: int | None = None, original_features: numpy.ndarray | None = None, components: numpy.ndarray | None = None)[source]

Container for PCA and Clustering analysis results.

clusters: numpy.ndarray
colors: List[str]
components: numpy.ndarray | None = None
energies: numpy.ndarray
explained_variance: numpy.ndarray
n_clusters: int | None = None
numbers: List[int]
original_features: numpy.ndarray | None = None
scores: numpy.ndarray

Thermochemistry (qRRHO)

ensemble_analyzer.rrho.calc_S_R_grimme(freq: numpy.array, T: float, B: numpy.array) numpy.array[source]

R factor used for the damping of the frequency.

\[R = \frac 12 \left( 1+ \ln\left( \frac {8π^3 \frac {h}{8π^2\nu c} B k_bT} {\left(\frac {h}{8π^2\nu c}+B\right)h^2} \right)\right) k_b\]
Parameters:
  • freq (np.array) – Frequencies [cm-1].

  • T (float) – Temperature [K].

  • B (np.array) – Rotatory constant [cm-1].

Returns:

R factor in J.

Return type:

np.array

ensemble_analyzer.rrho.calc_S_V_grimme(freq: numpy.ndarray, T: float) numpy.ndarray[source]

V factor used for the damping of the frequency.

\[V = \frac {\frac {hc\nu}{k_bT} k_b}{e^{\frac {hc\nu}{k_bT}} - 1} - k_b \ln\left(1 - e^{-\frac {hc\nu}{k_bT}}\right)\]
Parameters:
  • freq (np.array) – Frequencies [cm-1].

  • T (float) – Temperature [K].

Returns:

V factor in J.

Return type:

np.array

ensemble_analyzer.rrho.calc_damp(frequency: numpy.ndarray, cut_off: float, alpha: int) numpy.ndarray[source]

Damping factor proportionate to frequency.

\[\frac {1}{1+(\frac {\text{cut_off}}{ν})^α}\]

Damping factor has NO measure unit.

Parameters:
  • frequency (np.ndarray) – Frequency list.

  • cut_off (float) – Cut off value, default is 100 cm-1.

  • alpha (int) – Damping factor, default is 4.

Returns:

Damping factor.

Return type:

np.ndarray

ensemble_analyzer.rrho.calc_electronic_entropy(m: int) float[source]

Electronic entropy.

\[S_{el} = k_b \ln(m)\]
Parameters:

m (int) – Electronic multiplicity.

Returns:

Electronic entropy in Eh.

Return type:

float

ensemble_analyzer.rrho.calc_qRRHO_energy(freq: numpy.ndarray, T: float) numpy.ndarray[source]

quasi-Rigid Rotor Harmonic Oscillator energy.

\[U = h\nu c \frac { e^{-\frac {h\nu c}{k_bT}} }{1-e^{-\frac {h\nu c}{k_bT}}}\]
Parameters:
  • freq (np.ndarray) – Frequency list.

  • T (float) – Temperature [K].

Returns:

Vibrational energy for each vibrational mode in Joule.

Return type:

np.ndarray

ensemble_analyzer.rrho.calc_rotational_energy(T: float, linear=False) float[source]

Rotational energy.

\[\begin{split}U_{rot} = \frac 32 K_bT\\ U_{rot} = K_bT\end{split}\]
Parameters:
  • T (float) – Temperature [K].

  • linear (bool, optional) – If the molecule is linear. Defaults to False.

Returns:

Rotational energy in Eh.

Return type:

float

ensemble_analyzer.rrho.calc_rotational_entropy(B, T, symno: int = 1, linear: bool = False) float[source]

Rotational entropy.

\[\begin{split}θ_R &=& \frac {hcB}{k_b}\\ q_{rot} &=& \sqrt{\frac {πT^3}{θ_{Rx}θ_{Ry}θ_{Rz}}}\\ S_R &=& k_b \left(\frac {\ln(q_{rot}}{σ} + 1.5\right)\end{split}\]
Parameters:
  • B (np.array) – Rotational constant [cm-1].

  • T (float) – Temperature.

  • symno (int, optional) – Number of symmetry, in relation of the Point Group of the molecule (σ). Defaults to 1.

  • linear (bool, optional) – If molecule is linear. Defaults to False.

Returns:

Rotational entropy in Eh.

Return type:

float

ensemble_analyzer.rrho.calc_translational_energy(T: float) float[source]

Translational energy.

\[U_{trans} = \frac 32 K_bT\]
Parameters:

T (float) – Temperature [K].

Returns:

Translational energy in Eh.

Return type:

float

ensemble_analyzer.rrho.calc_translational_entropy(MW: float, T: float, P: float) float[source]

Translational entropy.

\[S_{trans} = k_b \left(\frac 52 + \ln\left(\sqrt{\frac{2πMWk_bT}{N_A*h^2}}^3 \frac {k_bT}{p}\right)\right)\]
Parameters:
  • MW (float) – Molecular weight.

  • T (float) – Temperature.

  • P (float) – Pressure [Pa].

Returns:

Translational entropy in Eh.

Return type:

float

ensemble_analyzer.rrho.calc_vibrational_energy(freq: numpy.ndarray, T: float, cut_off: float, alpha: int) float[source]

Vibrational energy calculated with qRRHO.

\[\sum_{\nu}^{freq} \left( d H_{qRRHO}(freq, T) + (1 - d)k_bT\frac 12 \right)\]
Parameters:
  • freq (np.ndarray) – Frequency array.

  • T (float) – Temperature.

  • cut_off (float) – Damping frequency, default 100 cm-1.

  • alpha (int) – Damping factor, default and unchangeable value is 4.

Returns:

Vibrational energy in Eh.

Return type:

float

ensemble_analyzer.rrho.calc_vibrational_entropy(freq: numpy.ndarray, T: float, B: numpy.ndarray, cut_off=100, alpha=4) float[source]

Vibrational entropy.

\[\sum_{\nu}^{freq} \left(dV(\nu) + (1-d)R(\nu, T, B)\right)\]

In formula \(d\) is the dumping function.

Parameters:
  • freq (list) – Frequencies [cm-1].

  • T (float) – Temperature [K].

  • B (np.array) – Rotational constant [cm-1].

  • cut_off (float, optional) – Cut off for the damping of the frequency. Defaults to 100.

  • alpha (float, optional) – Damping factor. Defaults to 4.

Returns:

Vibrational entropy [Eh].

Return type:

float

ensemble_analyzer.rrho.calc_zpe(frequency: numpy.ndarray | None = None) float[source]

Calculate the Zero Point Energy.

\[ZPE = \sum_{\nu}^\text{freq} \frac 12 h\nu c\]
Parameters:

frequency (np.ndarray, optional) – Frequency list. Defaults to np.array([0]).

Returns:

Zero point energy in Eh.

Return type:

float

ensemble_analyzer.rrho.free_gibbs_energy(SCF: float, T: float, freq: numpy.ndarray, mw: float, B: numpy.ndarray, m: int, linear: bool = False, cut_off=100, alpha=4, P: float = 101.325) float[source]

Calculate Gibbs energy.

\[\begin{split}H &=& SCF + ZPVE + U_{trans} + U_{rot} + U_{vib} + k_bT\\ S &=& S_{trans} + S_{rot} + S_{vib} + S_{el}\\ G &=& H - TS\end{split}\]
Parameters:
  • SCF (float) – Self consistent field energy [Eh] + dispersions.

  • T (float) – Temperature [K].

  • freq (np.ndarray) – Frequencies array.

  • mw (float) – Molecular weight.

  • B (np.array) – Rotational constant [cm-1].

  • m (int) – Spin multiplicity.

  • linear (bool, optional) – If molecule is linear. Defaults to False.

  • cut_off (float, optional) – Frequency cut_off. Defaults to 100.

  • alpha (int, optional) – Frequency damping factor. Defaults to 4.

  • P (float, optional) – Pressure [kPa]. Defaults to 101.325.

Returns:

Gibbs energy.

Return type:

float

Spectroscopy & Plotting

class ensemble_analyzer._spectral.compare.ComparedGraph(graph_type: str, experimental_file: str | None = None, log: any | None = None, protocol_index: List[int] | None = None, nm: bool = True)[source]

Comparison plotter for computed and experimental spectra.

Generates overlay plots of spectra from different protocol steps.

experimental_file: str | None = None
graph_type: str
log: any | None = None
nm: bool = True
plot(save: bool = True, show: bool = False, show_ref_weight: bool = False) None[source]

Generate and save the comparison plots.

Parameters:
  • save (bool) – Whether to save figure to disk.

  • show (bool) – Whether to display the plot interactively.

  • show_ref_weight (bool) – Whether to plot the weighting mask.

protocol_index: List[int] | None = None
class ensemble_analyzer._spectral.graph_default.GraphDefault(graph_type: Literal['IR', 'VCD', 'UV', 'ECD'])[source]

Default spectral parameters (range, shift, FWHM, labels) for each graph type.

graph_type: Literal['IR', 'VCD', 'UV', 'ECD']