From Christoph's Personal Wiki
Jump to: navigation, search

TLS Motion Determination (TLSMD) analyzes a protein crystal structure for evidence of flexibility, e.g. local or inter-domain motions.[1][2] It does this by partitioning the protein chains into multiple segments that are modeled as rigid bodies undergoing TLS (Translation/Libration/Screw) vibrational motion. It generates all possible partitions up to a specified maximum number of TLS groups. Each trial partition is evaluated by how well it predicts the observed atomic displacement parameters (ADPs, "thermal parameters") that came out of crystallographic refinement.

I was the lead developer and maintainer of the TLS Motion Determination (both the webserver and the standalone/CLI version, along with Python Macromolecular Library) from 2006 to 2010. I contributed 20,590 lines of code to pymmlib and TLSMD (27.8% in Python and 25.5% in Fortran). I added hundreds of new features, including Skittles,[3] which was added to the CCP4 codebase.


On 2010-02-11, we released version 1.4.0 of tlsmd.
On 2009-06-19, we released version 1.3.0 of tlsmd.
On 2008-02-15, we released version 1.0.0 of tlsmd.
On 2011-03-27, we released version 1.2.0 of pymmlib.
On 2008-02-15, we released version 1.1.0 of pymmlib.
On 2007-04-28, we released version 1.0.0 of pymmlib.

They are both available for download on sourceforge.


Abstract: The TLSMD web server extracts information about dynamic properties of a protein based on information derived from a single-crystal structure. It does so by analyzing the spatial distribution of individual atomic thermal parameters present in an input structural model. The server partitions the protein structure into multiple, contiguous chain segments, each segment corresponding to one group in a multi-group description of the protein's overall dynamic motion. For each polypeptide chain of the input protein, the analysis generates the optimal partition into two segments, three segments, ... up to 20 segments. Each such partition is optimal in the sense that it is the best approximation of the overall spatial distribution of input thermal parameters in terms of N chain segments, each acting as a rigid group undergoing TLS (translation/libration/screw) motion. This multi-group TLS model may be used as a starting point for further crystallographic refinement, or as the basis for analyzing inter-domain and other large-scale motions implied by the crystal structure.[2]

Abstract: A single protein crystal structure contains information about dynamic properties of the protein as well as providing a static view of one three-dimensional conformation. This additional information is to be found in the distribution of observed electron density about the mean position of each atom. It is general practice to account for this by refining a separate atomic displacement parameter (ADP) for each atomic center. However, these same displacements are often described well by simpler models based on TLS (translation/libration/screw) rigid-body motion of large groups of atoms, for example interdomain hinge motion. A procedure, TLSMD, has been developed that analyzes the distribution of ADPs in a previously refined protein crystal structure in order to generate optimal multi-group TLS descriptions of the constituent protein chains. TLSMD is applicable to crystal structures at any resolution. The models generated by TLSMD analysis can significantly improve the standard crystallographic residuals R and Rfree and can reveal intrinsic dynamic properties of the protein.[1]

Background summary of what the TLSMD server does

The TLSMD server creates a model for molecular flexibility based on a refined protein (or RNA) crystal structure. The model is constructed by breaking each protein chain into segments, and refining a TLS (Translation/Libration/Screw) description for each segment. This formalism allows one to describe with relatively few parameters the anisotropic motions and microconformations of the crystalline protein. In many cases it produces a much better description of the crystal contents than a conventional model that tries to account for these effects by assigning a single isotropic B factor for each atom. Thus the TLSMD model often, although not always, yields better R and Rfree values and improved electron density maps. Over and above that, the component groups identified by TLSMD may yield insight into hinge motions, local conformational flexibility, and other dynamic properties of the protein relevant to its behaviour in solution as well as in the crystal.

In essence, TLSMD takes a conventional model with individual atomic B factors as input, and constructs a model that interprets those atomic B factors as arising from the motion of larger groups. In the context of the TLSMD server, you can think of the input B values as observations ("Bobs"), and the predictions from the multi-group TLS model as calculations ("Bpred"). The server helps you to choose a multi-group model that does the best job of describing the distribution of B factors in your input structural model. The TLSMD model parameters themselves can then be further refined against your diffraction data in either Refmac or PHENIX.refine.[4]


Note: This section will cover the install of pymmlib, including tlsmd, on a 64-bit system running Mandriva Linux 2007.1. However, most of it should work for 32-bit systems and any other Linux distribution.

It is best to get the package as follows:

svn co pymmlib


Note: It very much depends if you are running on a 32- or 64-bit machine. So, instead of, say "liblapack" (32-bit), you would install "lib64lapack" (64-bit)

  • Python (>= 2.4): python + libpython2.5-devel (if using Python 2.5)
  • NumPy (>= 0.9.6): python-numpy + python-numpy-devel
  • PyOpenGL: python-opengl
  • Gtk+-2.2 or Gtk+-2.4: libgtk+2.0_0-devel
  • PyGTK (>= 2.x): pygtk2.0-devel + python-gtkglext
  • GtkGlExt: lib64gtkglext-devel
  • PyGtkGLExt: libgtkglext-1.0_0 + libgtkglext-1.0_0-devel
  • Python Imaging Library (>= 1.1.5): python-imaging-devel
  • CherryPy: python-cherrypy
  • LAPACK (see section below; >= 3.0): lapack + liblapack3.0-devel
  • ATLAS (>= 3.6.0): atlas
  • Other
    • lib64xmu6-devel
    • lib64xmlrpc0
    • lib64xmlrpc0-devel
    • libcairo2-devel
    • glib-gettextize
    • libglib2.0_0-devel
    • libatk1.0_0-devel
    • libpango1.0_0-devel
    • libgdk_pixbuf2.0_0-devel


Note: The following programs are optional (i.e., you can still run TLSMD without them). However, they are highly recommended, if you wish to get the full analysis of a TLSMD run.


Note: See Installation Guide for LAPACK for detailed information.

  • Download LAPACK (grab latest version of full package; must be at least >=3.0.0):
tar xvf lapack.tgz && cd lapack-3.1.1/
  • Modify file for your system. Below is an example:
SHELL    = /bin/sh
FORTRAN  = gcc -fPIC -shared
OPTS     = -funroll-all-loops -O3
NOOPT    =
LOADER   = gcc -fPIC
TIMER    = NONE  # not needed
ARCH     = ar
RANLIB   = ranlib
BLASLIB  = ../../blas$(PLAT).a
LAPACKLIB= lapack$(PLAT).a
TMGLIB   = tmglib$(PLAT).a
EIGSRCLIB= eigsrc$(PLAT).a
LINSRCLIB= linsrc$(PLAT).a
  • Enter SRC/ directory and
  • Enter BLAS/SRC/ directory and

Note: The default build will produce lapack_LINUX.a. However, we want a shared object (i.e.,

  • Create shared object from archive:
nm lapack_LINUX.a|grep gfortran  # check that gfortran was used
mkdir tmp_lapack; cp lapack_LINUX.a tmp_lapack/; cd tmp_lapack/
ar -x lapack_LINUX.a  # extract objects from archive
gcc -fPIC -lgfortran -shared *.o -Wl,-soname, -o
objdump -p |grep SONAME  # should return ""
ldd   # will show you which version of libgfortran was used

# Do the same for blas
mkdir tmp_blas; cp blas_LINUX.a tmp_blas/; cd tmp_blas/
ar -x blas_LINUX.a
gcc -fPIC -lgfortran -shared *.o -W1,-soname, -o
objdump -p |grep SONAME
  • Update your /etc/ (make sure the absolute path of your newly created shared libraries are in /etc/
ldconfig  # as root
  • Symlinks: Instead of doing the following:
mv /lib64/; cd !$
ln -s /lib64/
ln -s /lib64/
mv /lib64/; cd !$
ln -s /lib64/
ln -s /lib64/

you can let ldconfig take care of it, iff you have correctly labeled SONAME's in the shared libraries you just built.

pymmlib installation

Monomer libraries

Note that the monomer libraries are no longer found on the website. You will need to change the following lines in pymmlib/ under the buildlib() function from:

    TMP_PATH = "public-component-erf.cif"
    URL      = ""


    TMP_PATH = "components.cif"
    URL      = ""

And then execute:

python buildlib
python build
python install  # as root


Before you build/install anything, check the following file for the correct settings (e.g., correct paths):

vi pymmlib/mmLib/
python buildlib
python checkdeps  # if all is good, then
python build      # if all is good, then
python install    # as root

Set the PYTHONPATH environment variable:

export PYTHONPATH=/usr/bin/python:$HOME/tlsmd/pymmlib:$HOME/tlsmd/pymmlib/mmLib

TLSMD installation

Make the necessary changes to:



make install  # creates and copies it to tlsmd/bin/

Make the necessary changes to the following file:



a soname is a field of data in a shared object file. The soname provides version backwards-compatibility information to the system. For instance, if a program requests to use version 1.0 of a shared object but the system only includes version 2.0 of that shared object, the soname field of the shared object tells the system whether it is usable in the place of version 1.0.


ranlib generates an index to the contents of an archive and stores it in the archive. The index lists each symbol defined by a member of an archive that is a relocatable object file.

You may use nm -s or nm --print-armap to list this index.

An archive with such an index speeds up linking to the library and allows routines in the library to call each other without regard to their placement in the archive.

The GNU ranlib program is another form of GNU ar; running ranlib is completely equivalent to executing ar -s.


TLSMD; TLS motion; web server; computer programs; TLS, translation libration screw; macromolecular crystallography; protein crystallography.

See also


  • TLSANL — analysis of TLS tensors and derived anisotropic U factors (part of CCP4)
  • ANISOANL — analyses of anisotropic displacement parameters (part of CCP4)
  • PARVATI (Protein Anisotropic Refinement Validation and Analysis Tool)
  • DynDom — a program to determine domains, hinge axes, and hinge bending residues in proteins where two conformations are available.
  • ESCET — a script driven program to analyse and compare three-dimensional protein structures
  • CCP4 wiki


  • — a database of macromolecular movements with associated tools for flexibility and geometric analysis


  • ar — create, modify, and extract from archives.
  • nm — list symbols from object files.
  • ranlib — generate index to archive.


  1. 1.0 1.1 Painter J, Merritt EA (2006). "Optimal description of a protein structure in terms of multiple groups undergoing TLS motion". Acta Cryst, D62(4):439-450. DOI:10.1107/S0907444906005270 .
  2. 2.0 2.1 Painter J, Merritt EA (2006). "TLSMD web server for the generation of multi-group TLS models". J Appl Cryst, 39(1):109-111. DOI:10.1107/S0021889805038987
  3. Zucker F, Champ PC, Merritt EA (2010). "Validation of crystallographic models containing TLS or other descriptions of anisotropy". Acta Cryst. D66, 889-900. DOI:10.1107/S0907444910020421
  4. Merritt EA (2008). New higher-throughput server for TLSMD analysis. CCP4 Bulletin Board.

External links

TLS refinement