chemrust_core/data/
lattice_model.rs1use super::atom::CoreAtomData;
2use super::lattice::UnitCellParameters;
3use super::symmetry::SymmetryInfo;
4use crystallographic_group::database::SpaceGroupHallSymbol;
5#[derive(Debug, Clone)]
9pub struct LatticeModel<U: UnitCellParameters, C: CoreAtomData> {
10 lattice_param: U,
11 atoms: C,
12 space_group: SpaceGroupHallSymbol,
13}
14
15impl<U: UnitCellParameters, C: CoreAtomData> LatticeModel<U, C> {
16 pub fn lattice_param(&self) -> &U {
17 &self.lattice_param
18 }
19
20 pub fn atoms(&self) -> &C {
21 &self.atoms
22 }
23
24 pub fn space_group(&self) -> SpaceGroupHallSymbol {
25 self.space_group
26 }
27}
28
29impl<U: UnitCellParameters, C: CoreAtomData> SymmetryInfo for LatticeModel<U, C> {
30 fn make_symmetry(&self) -> bool {
31 !matches!(self.space_group, SpaceGroupHallSymbol::P_1)
32 }
33
34 fn get_space_group_it_num(&self) -> u8 {
35 let number_code = self.space_group.get_space_group_number_code();
36 if number_code.contains(":") {
37 number_code
38 .split(":")
39 .next()
40 .and_then(|v| v.parse::<u8>().ok())
41 .expect("The space group number (1-230) should be within range of `u8`")
42 } else {
43 number_code
44 .parse::<u8>()
45 .expect("The space group number (1-230) should be within range of `u8`")
46 }
47 }
48}