Looks in dict to see if element is found, otherwise it uses the first
character in the atomname. The table comes from CHARMM and AMBER atom
types, where the first character is not sufficient to determine the atom
type. Some GROMOS ions have also been added.

fudge_factor (float, optional) – The factor by which atoms must overlap eachother to be considered a
bond. Larger values will increase the number of bonds found. [0.72]

vdwradii (dict, optional) – To supply custom vdwradii for atoms in the algorithm. Must be a dict
of format {type:radii}. The default table of van der Waals radii is
hard-coded as MDAnalysis.topology.tables.vdwradii. Any user
defined vdwradii passed as an argument will supercede the table
values. [None]

lower_bound (float, optional) – The minimum bond length. All bonds found shorter than this length will
be ignored. This is useful for parsing PDB with altloc records where
atoms with altloc A and B maybe very close together and there should be
no chemical bond between them. [0.1]

box (array_like, optional) – Bonds are found using a distance search, if unit cell information is
given, periodic boundary conditions will be considered in the distance
search. [None]

Returns:

List of tuples suitable for use in Universe topology building.

Return type:

list

Warning

No check is done after the bonds are guessed to see if Lewis
structure is correct. This is wrong and will burn somebody.

Raises:

ValueError if inputs are malformed or vdwradii data is missing.

New in version 0.7.7.

Changed in version 0.9.0: Updated method internally to use more numpy, should work
faster. Should also use less memory, previously scaled as
\(O(n^2)\). vdwradii argument now augments table list
rather than replacing entirely.

Given a list of Angles, find all improper dihedrals that exist between
atoms.

Works by assuming that if (1,2,3) is an angle, and 2 & 4 are bonded,
then (2, 1, 3, 4) must be an improper dihedral.
ie the improper dihedral is the angle between the planes formed by
(1, 2, 3) and (1, 3, 4)