Struct chemfiles::TopologyRef

source ·
pub struct TopologyRef<'a> { /* private fields */ }
Expand description

An analog to a reference to a topology (&Topology)

Methods from Deref<Target = Topology>§

source

pub fn atom(&self, index: usize) -> AtomRef<'_>

Get a reference of the atom at the given index in this topology.

Panics

If index is out of bounds.

Example
let mut topology = Topology::new();
topology.resize(6);

let atom = topology.atom(4);
assert_eq!(atom.name(), "");
source

pub fn size(&self) -> usize

Get the current number of atoms in this topology.

Example
let mut topology = Topology::new();
assert_eq!(topology.size(), 0);

topology.resize(6);
assert_eq!(topology.size(), 6);
source

pub fn bonds_count(&self) -> usize

Get the number of bonds in the topology.

Example
let mut topology = Topology::new();
assert_eq!(topology.bonds_count(), 0);
topology.resize(4);

topology.add_bond(0, 1);
topology.add_bond(2, 1);
topology.add_bond(2, 3);
assert_eq!(topology.bonds_count(), 3);
source

pub fn angles_count(&self) -> usize

Get the number of angles in the topology.

Example
let mut topology = Topology::new();
assert_eq!(topology.angles_count(), 0);
topology.resize(4);

topology.add_bond(0, 1);
topology.add_bond(2, 1);
topology.add_bond(2, 3);
assert_eq!(topology.angles_count(), 2);
source

pub fn dihedrals_count(&self) -> usize

Get the number of dihedral angles in the topology.

Example
let mut topology = Topology::new();
assert_eq!(topology.dihedrals_count(), 0);
topology.resize(4);

topology.add_bond(0, 1);
topology.add_bond(2, 1);
topology.add_bond(2, 3);
assert_eq!(topology.dihedrals_count(), 1);
source

pub fn impropers_count(&self) -> usize

Get the number of improper dihedral angles in the topology.

Example
let mut topology = Topology::new();
assert_eq!(topology.dihedrals_count(), 0);
topology.resize(4);

topology.add_bond(0, 1);
topology.add_bond(0, 2);
topology.add_bond(0, 3);
assert_eq!(topology.impropers_count(), 1);
source

pub fn bonds(&self) -> Vec<[usize; 2]>

Get the list of bonds in the topology.

Example
let mut topology = Topology::new();
topology.resize(4);

topology.add_bond(0, 1);
topology.add_bond(2, 1);
topology.add_bond(2, 3);
assert_eq!(topology.bonds(), vec![[0, 1], [1, 2], [2, 3]]);
source

pub fn angles(&self) -> Vec<[usize; 3]>

Get the list of angles in the topology.

Example
let mut topology = Topology::new();
topology.resize(4);

topology.add_bond(0, 1);
topology.add_bond(2, 1);
topology.add_bond(2, 3);
assert_eq!(topology.angles(), vec![[0, 1, 2], [1, 2, 3]]);
source

pub fn dihedrals(&self) -> Vec<[usize; 4]>

Get the list of dihedral angles in the topology.

Example
let mut topology = Topology::new();
topology.resize(4);

topology.add_bond(0, 1);
topology.add_bond(2, 1);
topology.add_bond(2, 3);

assert_eq!(topology.dihedrals(), vec![[0, 1, 2, 3]]);
source

pub fn impropers(&self) -> Vec<[usize; 4]>

Get the list of improper dihedral angles in the topology.

Example
let mut topology = Topology::new();
topology.resize(4);

topology.add_bond(0, 1);
topology.add_bond(0, 2);
topology.add_bond(0, 3);

assert_eq!(topology.impropers(), vec![[1, 0, 2, 3]]);
source

pub fn bond_order(&self, i: usize, j: usize) -> BondOrder

Get the bond order for the bond between the atoms at indexes i and j.

Example
let mut topology = Topology::new();
assert_eq!(topology.bonds_count(), 0);
topology.resize(2);

topology.add_bond_with_order(0, 1, BondOrder::Double);
assert_eq!(topology.bond_order(0, 1), BondOrder::Double);
source

pub fn bond_orders(&self) -> Vec<BondOrder>

Get the bond order for all the bonds in the topology

Example
let mut topology = Topology::new();
assert_eq!(topology.bonds_count(), 0);
topology.resize(3);

topology.add_bond_with_order(0, 1, BondOrder::Double);
topology.add_bond_with_order(0, 2, BondOrder::Single);

assert_eq!(topology.bond_orders(), &[BondOrder::Double, BondOrder::Single]);
source

pub fn residue(&self, index: usize) -> Option<ResidueRef<'_>>

Get a reference to the residue at index index from this topology.

The residue index in the topology is not always the same as the residue id.

Example
let mut topology = Topology::new();
topology.add_residue(&Residue::new("water")).unwrap();

let residue = topology.residue(0).unwrap();
assert_eq!(residue.name(), "water");
source

pub fn residue_for_atom(&self, index: usize) -> Option<ResidueRef<'_>>

Get a copy of the residue containing the atom at index index in this topology, if any.

Example
let mut topology = Topology::new();
topology.resize(8);

let mut residue = Residue::new("water");
residue.add_atom(0);
residue.add_atom(1);
residue.add_atom(2);
topology.add_residue(&residue).unwrap();

let residue = topology.residue_for_atom(0).unwrap();
assert_eq!(residue.name(), "water");

assert!(topology.residue_for_atom(6).is_none());
source

pub fn residues_count(&self) -> u64

Get the number of residues in this topology.

Example
let mut topology = Topology::new();
assert_eq!(topology.residues_count(), 0);

topology.add_residue(&Residue::with_id("water", 0)).unwrap();
topology.add_residue(&Residue::with_id("protein", 1)).unwrap();
assert_eq!(topology.residues_count(), 2);
source

pub fn are_linked(&self, first: &Residue, second: &Residue) -> bool

Check if the two residues first and second from the topology are linked together, i.e. if there is a bond between one atom in the first residue and one atom in the second one.

Example
let mut topology = Topology::new();

topology.add_residue(&Residue::with_id("water", 0)).unwrap();
topology.add_residue(&Residue::with_id("protein", 1)).unwrap();

let first = topology.residue(0).unwrap();
let second = topology.residue(1).unwrap();
assert_eq!(topology.are_linked(&first, &second), false);

Trait Implementations§

source§

impl<'a> Debug for TopologyRef<'a>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'a> Deref for TopologyRef<'a>

§

type Target = Topology

The resulting type after dereferencing.
source§

fn deref(&self) -> &Topology

Dereferences the value.

Auto Trait Implementations§

§

impl<'a> RefUnwindSafe for TopologyRef<'a>

§

impl<'a> !Send for TopologyRef<'a>

§

impl<'a> !Sync for TopologyRef<'a>

§

impl<'a> Unpin for TopologyRef<'a>

§

impl<'a> UnwindSafe for TopologyRef<'a>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.