Groups of atoms¶
MDAnalysis has a hierarchy of Atom
containers that are used throughout the code.
First and foremost is the AtomGroup
. An AtomGroup
is the primary Atom
container; virtually everything can be accessed through it, as detailed in AtomGroup. This includes chemically meaningful groups of Atom
s such as a Residue
or a Segment
.
Residues and Segments¶
A Residue
is composed of Atom
s, and a Segment
is composed of Residues
.
The corresponding container groups are ResidueGroup
and SegmentGroup
. These have similar properties and available methods as AtomGroup
.
In [1]: import MDAnalysis as mda
In [2]: from MDAnalysis.tests.datafiles import TPR, XTC
In [3]: u = mda.Universe(TPR, XTC)
In [4]: ag = u.atoms.select_atoms('resname ARG and name CA')
In [5]: ag
Out[5]: <AtomGroup with 13 atoms>
Each of these container groups can be accessed through another. The behaviour of this differs by level. For example, the residues of the ag
are the residues that the atoms of ag
belong to.
In [6]: ag.residues
Out[6]: <ResidueGroup with 13 residues>
Accessing the atoms of those residues, however, returns all the atoms in the residues, not just those originally in ag
.
In [7]: ag.residues.atoms
Out[7]: <AtomGroup with 312 atoms>
The same applies to segments.
In [8]: ag[:3].segments.atoms
Out[8]: <AtomGroup with 3341 atoms>
Similarly, an Atom
has direct knowledge of the Residue
and Segment
it belongs to. Note that an Atom
belongs to one Residue
and the residue belongs to one Segment
, but a Segment
has multiple residues.
In [9]: a = u.atoms[0]
In [10]: a.residue
Out[10]: <Residue LYSH, 0>
In [11]: a.residue.segment
Out[11]: <Segment seg_0_Protein_A>
In [12]: a.residue.segment.residues
Out[12]: <ResidueGroup with 129 residues>
For information on adding custom Residues or Segments, have a look at Adding a Residue or Segment to a Universe.
Fragments¶
Certain analysis methods in MDAnalysis also make use of additional ways to group atoms. A key concept is a fragment. A fragment is what is typically considered a molecule: an AtomGroup where any atom is reachable from any other atom in the AtomGroup by traversing bonds, and none of its atoms is bonded to any atoms outside the AtomGroup. (A ‘molecule’ in MDAnalysis methods refers to a GROMACS-specific concept). The fragments of a Universe are determined by MDAnalysis as a derived quantity. They can only be determined if bond information is available.
The fragments of an AtomGroup
are accessible via the fragments
property. Below is a Universe from a GROMACS TPR file of lysozyme (PDB ID: 2LYZ) with 101 water molecules. While it has 230 residues, there are only 102 fragments: 1 protein and 101 water fragments.
In [12]: len(u.residues)
Out[12]: 230
In [13]: len(u.atoms.fragments)
Out[13]: 102
See Topology objects for more on bonds and which file formats give MDAnalysis bond information.
You can also look at which fragment a particular Atom
belongs to:
In [9]: u.atoms[0].fragment # first atom of lysozyme
Out[9]: <AtomGroup with 3341 atoms>
and see which fragments are associated with atoms in a smaller AtomGroup
:
In [10]: u.atoms[1959:1961].fragments
Out[10]: (<AtomGroup with 3341 atoms>,)