ak_core/geometry/
trajectory.rs1use 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}