Topology

class chemfiles::Topology

A topology contains the definition of all the atoms in the system, and the liaisons between the particles (bonds, angles, dihedrals, ...).

Only the atoms and the bonds are stored, the angles and the dihedrals are computed automaticaly.

Iterating over a `Topology` will yield the atoms in the system.

Public Functions

Topology()

Construct an empty topology.

Atom &operator[](size_t index)

Get a reference to the atom at the position `index`.

const Atom &operator[](size_t index) const

Get a const (non-modifiable) reference to the atom at the position `index`

void append(Atom atom)

Add an atom in the system.

void remove(size_t i)

Delete the atom at index `i` in the system. `i` must be lower than `natoms()`.

void add_bond(size_t atom_i, size_t atom_j)

Add a bond in the system, between the atoms at index `atom_i` and `atom_j`

void remove_bond(size_t atom_i, size_t atom_j)

Remove a bond in the system, between the atoms at index `atom_i` and `atom_j`

size_t natoms() const

Get the number of atoms in the topology.

void resize(size_t natoms)

Resize the topology to hold `natoms` atoms, adding `UNDEFINED` atoms as needed.

void reserve(size_t natoms)

Reserve size in the topology to store data for `natoms` atoms.

bool isbond(size_t i, size_t j) const

Check wether the atoms at indexes `i` and `j` are bonded or not.

bool isangle(size_t i, size_t j, size_t k) const

Check wether the atoms at indexes `i`, `j` and `k` constitues an angle

bool isdihedral(size_t i, size_t j, size_t k, size_t m) const

Check wether the atoms at indexes `i` `j`, `k` and `m` constitues a dihedral angle

const std::vector<Bond> &bonds() const

Get the bonds in the system.

const std::vector<Angle> &angles() const

Get the angles in the system.

const std::vector<Dihedral> &dihedrals() const

Get the dihedral angles in the system.

void clear_bonds()

Remove all bonding information in the topology (bonds, angles and dihedrals)

void add_residue(Residue residue)

Add a `residue` to this topology.

This function throws a `chemfiles::Error` if any atom in the `residue` is already in another residue in this topology. In that case, the topology is not modified.

bool are_linked(const Residue &first, const Residue &second) const

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

If `first == second`, this function returns `true`.

optional<const Residue&> residue(size_t atom) const

Get the residue containing the `atom` at the given index.

const std::vector<Residue> &residues() const

Get all the residues in the topology.