ferritin_core/views/
model_atom.rs1use crate::info::elements::Element;
2use crate::model::Model;
3
4pub struct ModelAtomView<'a> {
6 pub(crate) model: &'a Model,
7 pub(crate) idx: usize,
8}
9
10impl<'a> ModelAtomView<'a> {
11 pub(crate) fn new(model: &'a Model, idx: usize) -> Self {
12 ModelAtomView { model, idx }
13 }
14
15 pub fn coords(&self) -> [f32; 3] {
17 self.model.coord(self.idx)
18 }
19
20 pub fn element(&self) -> Element {
21 self.model.hierarchy.atoms.element[self.idx]
22 }
23
24 pub fn atom_name(&self) -> &'a str {
25 &self.model.hierarchy.atoms.atom_name[self.idx]
26 }
27
28 pub fn auth_atom_name(&self) -> &'a str {
30 &self.model.hierarchy.atoms.auth_atom_name[self.idx]
31 }
32
33 pub fn residue_id(&self) -> i32 {
34 let res_idx = self.model.hierarchy.residue_of_atom(self.idx);
35 self.model.hierarchy.residues.auth_seq_id[res_idx]
36 }
37
38 pub fn residue_name(&self) -> &'a str {
39 let res_idx = self.model.hierarchy.residue_of_atom(self.idx);
40 &self.model.hierarchy.residues.comp_id[res_idx]
41 }
42
43 pub fn auth_residue_name(&self) -> &'a str {
45 let res_idx = self.model.hierarchy.residue_of_atom(self.idx);
46 &self.model.hierarchy.residues.auth_comp_id[res_idx]
47 }
48
49 pub fn label_chain_id(&self) -> &'a str {
51 let res_idx = self.model.hierarchy.residue_of_atom(self.idx);
52 let chain_idx = self.model.hierarchy.chain_of_residue(res_idx);
53 &self.model.hierarchy.chains.label_asym_id[chain_idx]
54 }
55
56 pub fn chain_id(&self) -> &'a str {
57 let res_idx = self.model.hierarchy.residue_of_atom(self.idx);
58 let chain_idx = self.model.hierarchy.chain_of_residue(res_idx);
59 &self.model.hierarchy.chains.auth_asym_id[chain_idx]
60 }
61
62 pub fn is_hetero(&self) -> bool {
63 let res_idx = self.model.hierarchy.residue_of_atom(self.idx);
64 self.model.hierarchy.residues.group[res_idx]
65 == crate::model::tables::ResidueGroup::NonPolymer
66 }
67
68 pub fn index(&self) -> usize {
69 self.idx
70 }
71}