pub use mendeleev::Element;
use crate::DIM;
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct TprFile {
pub header: TprHeader,
pub system_name: String,
pub simbox: Option<SimBox>,
pub topology: TprTopology,
}
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct TprHeader {
pub gromacs_version: String,
pub precision: Precision,
pub tpr_version: i32,
pub tpr_generation: i32,
pub file_tag: String,
pub n_atoms: i32,
pub n_coupling_groups: i32,
pub fep_state: i32,
pub lambda: f64,
pub has_input_record: bool,
pub has_topology: bool,
pub has_positions: bool,
pub has_velocities: bool,
pub has_forces: bool,
pub has_box: bool,
pub body_size: Option<i64>,
}
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct TprTopology {
pub atoms: Vec<Atom>,
pub bonds: Vec<Bond>,
}
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SimBox {
pub simbox: [[f64; DIM]; DIM],
pub simbox_rel: [[f64; DIM]; DIM],
pub simbox_v: [[f64; DIM]; DIM],
}
#[derive(Debug, Clone, PartialEq, Eq, Copy)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Precision {
Single,
Double,
}
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Atom {
pub atom_name: String,
pub atom_number: i32,
pub residue_name: String,
pub residue_number: i32,
pub mass: f64,
pub charge: f64,
pub element: Option<Element>,
pub position: Option<[f64; 3]>,
pub velocity: Option<[f64; 3]>,
pub force: Option<[f64; 3]>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Bond {
pub atom1: usize,
pub atom2: usize,
}