[][src]Struct chemfiles::Topology

pub struct Topology { /* fields omitted */ }

A Topology contains the definition of all the atoms in the system, and the liaisons between the atoms (bonds, angles, dihedrals, ...). It will also contain all the residues information if it is available.

Methods

impl Topology[src]

pub fn new() -> Topology[src]

Create a new empty topology.

Example

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

pub fn atom(&self, index: u64) -> AtomRef[src]

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(), "");

pub fn atom_mut(&mut self, index: u64) -> AtomMut[src]

Get a mutable reference to 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);

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

topology.atom_mut(4).set_name("Fe");
assert_eq!(topology.atom(4).name(), "Fe");

pub fn size(&self) -> u64[src]

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);

pub fn resize(&mut self, natoms: u64)[src]

Resize this topology to hold natoms atoms, inserting dummy atoms if the new size if bigger than the old one.

Example

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

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

pub fn add_atom(&mut self, atom: &Atom)[src]

Add an Atom at the end of this topology

Example

let mut topology = Topology::new();
topology.add_atom(&Atom::new("Mg"));

let atom = topology.atom(0);
assert_eq!(atom.name(), "Mg");

pub fn remove(&mut self, index: u64)[src]

Remove an Atom from this topology by index. This modify all the other atoms indexes.

Panics

If the index is out of bounds

Example

let mut topology = Topology::new();
topology.resize(9);
assert_eq!(topology.size(), 9);

topology.remove(7);
assert_eq!(topology.size(), 8);

pub fn bonds_count(&self) -> u64[src]

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);

pub fn angles_count(&self) -> u64[src]

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);

pub fn dihedrals_count(&self) -> u64[src]

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);

pub fn impropers_count(&self) -> u64[src]

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);

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

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]]);

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

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]]);

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

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]]);

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

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]]);

pub fn add_bond(&mut self, i: u64, j: u64)[src]

Add a bond between the atoms at indexes i and j in the topology.

The bond order is set to BondOrder::Unknown.

Example

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

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

assert_eq!(topology.bond_order(0, 1), BondOrder::Unknown);

pub fn add_bond_with_order(&mut self, i: u64, j: u64, order: BondOrder)[src]

Add a bond between the atoms at indexes i and j in the topology with the given bond order.

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);

pub fn bond_order(&self, i: u64, j: u64) -> BondOrder[src]

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);

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

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]);

pub fn remove_bond(&mut self, i: u64, j: u64)[src]

Remove any existing bond between the atoms at indexes i and j in this topology.

This function does nothing if there is no bond between i and j.

Example

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

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

topology.remove_bond(0, 1);
assert_eq!(topology.bonds_count(), 1);

// Removing a bond that does not exists is fine
topology.remove_bond(0, 2);
assert_eq!(topology.bonds_count(), 1);

pub fn residue(&self, index: u64) -> Option<ResidueRef>[src]

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");

pub fn residue_for_atom(&self, index: u64) -> Option<ResidueRef>[src]

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());

pub fn residues_count(&self) -> u64[src]

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);

pub fn add_residue(&mut self, residue: &Residue) -> Result<(), Error>[src]

Add a residue to this topology.

The residue id must not already be in the topology, and the residue must contain only atoms that are not already in another residue.

Example

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

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

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

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

impl Clone for Topology[src]

fn clone_from(&mut self, source: &Self)
1.0.0
[src]

Performs copy-assignment from source. Read more

impl Drop for Topology[src]

Auto Trait Implementations

impl !Send for Topology

impl !Sync for Topology

Blanket Implementations

impl<T, U> Into for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

impl<T> From for T[src]

impl<T, U> TryFrom for T where
    T: From<U>, 
[src]

type Error = !

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.

impl<T> Borrow for T where
    T: ?Sized
[src]

impl<T> BorrowMut for T where
    T: ?Sized
[src]

impl<T, U> TryInto for T where
    U: TryFrom<T>, 
[src]

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

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.

impl<T> Any for T where
    T: 'static + ?Sized
[src]