use nalgebra::DMatrix;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone)]
pub struct ScfInput {
pub orbital_energies: Vec<f64>,
pub mo_coefficients: DMatrix<f64>,
pub density_matrix: DMatrix<f64>,
pub overlap_matrix: DMatrix<f64>,
pub n_basis: usize,
pub n_electrons: usize,
}
impl From<crate::scf::types::ScfResult> for ScfInput {
fn from(scf: crate::scf::types::ScfResult) -> Self {
Self {
orbital_energies: scf.orbital_energies,
mo_coefficients: scf.mo_coefficients,
density_matrix: scf.density_matrix,
overlap_matrix: scf.overlap_matrix,
n_basis: scf.n_basis,
n_electrons: scf.n_electrons,
}
}
}
impl<'a> From<&'a crate::scf::types::ScfResult> for ScfInput {
fn from(scf: &'a crate::scf::types::ScfResult) -> Self {
Self {
orbital_energies: scf.orbital_energies.clone(),
mo_coefficients: scf.mo_coefficients.clone(),
density_matrix: scf.density_matrix.clone(),
overlap_matrix: scf.overlap_matrix.clone(),
n_basis: scf.n_basis,
n_electrons: scf.n_electrons,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TransitionInfo {
pub energy_ev: f64,
pub wavelength_nm: f64,
pub oscillator_strength: f64,
pub transition_dipole: [f64; 3],
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SpectroscopyResult {
pub transitions: Vec<TransitionInfo>,
pub method: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ShieldingTensor {
pub atom_index: usize,
pub element: u8,
pub tensor: [[f64; 3]; 3],
pub isotropic: f64,
pub anisotropy: f64,
pub chemical_shift: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NmrShieldingResult {
pub chemical_shifts: Vec<f64>,
pub elements: Vec<u8>,
pub n_atoms: usize,
}