ak_core/geometry/
trajectory.rs

1use crate::{Structure, StructureView};
2
3pub struct Trajectory {
4    frames: Vec<Structure>,
5}
6
7impl Trajectory {
8    pub fn new(frames: Vec<Structure>) -> Self {
9        Self { frames }
10    }
11
12    pub fn view<'a>(&'a self, index: usize) -> StructureView<'a> {
13        self.frames[index].view()
14    }
15
16    pub fn append(&mut self, frame: Structure) {
17        self.frames.push(frame);
18    }
19
20    pub fn len(&self) -> usize {
21        self.frames.len()
22    }
23
24    pub fn is_empty(&self) -> bool {
25        self.len() == 0
26    }
27}
28
29#[cfg(test)]
30mod test {
31
32    use crate::{Structure, Trajectory};
33
34    fn test_structure() -> Structure {
35        let positions = [[0.0, 0.0, 0.0], [1.0, 0.0, 0.0]].to_vec();
36        let numbers = [1, 1].to_vec();
37        let cell = [[10.0, 0.0, 0.0], [0.0, 10.0, 0.0], [0.0, 0.0, 10.0]];
38        let pbc = [false, false, false];
39        Structure::new(positions.clone(), numbers.clone(), cell, pbc)
40    }
41
42    fn test_trajectory() -> Trajectory {
43        let structure = test_structure();
44        let struc_vec = vec![structure.clone(), structure.clone()];
45        Trajectory::new(struc_vec)
46    }
47
48    #[test]
49    fn test_trajectory_len() {
50        let trajectory = test_trajectory();
51        assert_eq!(trajectory.len(), 2);
52    }
53
54    #[test]
55    fn test_trajectory_new() {
56        let structure = test_structure();
57        let mut trajectory = test_trajectory();
58        trajectory.append(structure);
59
60        assert_eq!(trajectory.len(), 3);
61    }
62}