Selection exporters

Selection exporters allow you to write a selection of atoms to a file that can be read by another program.

Supported selection exporters

Program

Extension

Description

Class

CHARMM

str

CHARMM selection of individual atoms

MDAnalysis.selections.charmm.SelectionWriter

Gromacs

ndx

GROMACS index file

MDAnalysis.selections.gromacs.SelectionWriter

Jmol

spt

Jmol selection commands

MDAnalysis.selections.jmol.SelectionWriter

PyMol

pml

PyMOL selection string

MDAnalysis.selections.pymol.SelectionWriter

VMD

vmd

VMD macros, available in Representations

MDAnalysis.selections.vmd.SelectionWriter

Writing selections

Single AtomGroup

The typical situation is that one has an AtomGroup and wants to work with the same selection of atoms in a different package, for example, to visualize the atoms in VMD.

In [1]: import MDAnalysis as mda

In [2]: from MDAnalysis.tests.datafiles import PDB

In [3]: u = mda.Universe(PDB)

In [4]: ag = u.select_atoms('resname ALA')

As with a normal structure file, use AtomGroup.write method with the appropriate file extension.

ag.write("ala_selection.vmd", name="alanine")

In VMD, sourcing the file ala_selection.vmd (written in Tcl) defines the “macro” alanine that contains the atom indices to select.

source ala_selection.vmd
set sel [atomselect top alanine]

and in the GUI the macro appears in the Graphics ‣ Representations window in the list Selections: Singlewords as “alanine”.

Names are not always required; if name is not passed to AtomGroup.write, MDAnalysis defaults to “mdanalysis001”, “mdanalysis002”, and so on.

Multiple selections

AtomGroup.write can take additional keyword arguments, including mode. The default is mode='w', which will overwrite the provided filename. If mode='a', the selection is appended to the file.

u.select_atoms('resname T*').write('residues.ndx',
                                   name='TYR_THR',
                                   mode='a')
u.select_atoms('resname GLY').write('residues.ndx',
                                    name='GLY',
                                    mode='a')
u.select_atoms('resname PRO').write('residues.ndx',
                                    name='PRO',
                                    mode='a')

Looking at this GROMACS index file, we see:

$ gmx make_ndx -n residues.ndx

Command line:
gmx make_ndx -n residues.ndx

Going to read 1 old index file(s)
Counted atom numbers up to 3341 in index file

0 TYR_THR             :   301 atoms
1 GLY                 :   141 atoms
2 PRO                 :   140 atoms

nr : group      '!': not  'name' nr name   'splitch' nr    Enter: list groups
'a': atom       '&': and  'del' nr         'splitres' nr   'l': list residues
't': atom type  '|': or   'keep' nr        'splitat' nr    'h': help
'r': residue              'res' nr         'chain' char
"name": group             'case': case sensitive           'q': save and quit
'ri': residue index

Alternatively, you can direcly use the selection writer itself as a context manager and write each AtomGroup inside the context. For example:

with mda.selections.gromacs.SelectionWriter('residues.ndx', mode='w') as ndx:
    ndx.write(u.select_atoms('resname T*'),
              name='TYR_THR')
    ndx.write(u.select_atoms('resname GLY'),
              name='GLY')

And again, you can append to the file with mode='a':

with mda.selections.gromacs.SelectionWriter('residues.ndx', mode='a') as ndx:
    ndx.write(u.select_atoms('resname PRO'),
              name='PRO')

Reading in selections

Currently, MDAnalysis doesn’t support reading in atom selections. However, there are other tools that can read files from other programs, such as GromacsWrapper.