#[derive(Debug, Clone, PartialEq)]
pub struct CifDocument {
pub data_block: Option<String>,
pub cell: CifCell,
pub space_group_number: Option<i32>,
pub space_group_hm: Option<String>,
pub symmetry_operations: Vec<String>,
pub atom_sites: Vec<CifAtomSite>,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct CifCell {
pub a: f64,
pub b: f64,
pub c: f64,
pub alpha: f64,
pub beta: f64,
pub gamma: f64,
}
#[derive(Debug, Clone, PartialEq)]
pub struct CifAtomSite {
pub symbol: String,
pub label: Option<String>,
pub fract_x: f64,
pub fract_y: f64,
pub fract_z: f64,
}
#[derive(Debug, Clone, PartialEq)]
pub struct CifExpandedStructure {
pub lattice_name: String,
pub space_group_hm: String,
pub space_group: i32,
pub lattice_vectors: [[f64; 3]; 3],
pub absorber: usize,
pub absorber_atomic_number: i32,
pub absorber_label: String,
pub positions: Vec<[f64; 3]>,
pub potentials: Vec<i32>,
pub site_multiplicities: Vec<usize>,
pub site_atomic_numbers: Vec<i32>,
pub site_labels: Vec<String>,
pub labels: Vec<String>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct CifCluster {
pub atoms: Vec<CifClusterAtom>,
pub potentials: Vec<CifPotential>,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct CifClusterAtom {
pub x: f64,
pub y: f64,
pub z: f64,
pub potential: i32,
}
#[derive(Debug, Clone, PartialEq)]
pub struct CifPotential {
pub ipot: i32,
pub atomic_number: i32,
pub label: String,
pub multiplicity: usize,
pub absorber: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CifEquivalence {
Crystallographic,
AtomicNumber,
AutomaticLimit,
}