Pteros  2.0
Molecular modeling library for human beings!
 All Classes Namespaces Files Functions Variables Friends Pages
Welcome to Pteros!

Quick links

What is Pteros?

Pteros is a C++ library for molecular modeling. It is designed to simplify the development of custom programs and scripts for molecular modeling, analysis of molecular dynamics trajectories and implementing new simulation and analysis algorithms. Pteros provides facilities, which are routinely used in all molecular analysis programs, namely input/output of popular file formats, powerful and flexible atom selections, geometry transformations, RMSD fitting and alignment, etc. Pteros also contains powerful facilities for parsing command-line arguments in custom programs and for running several analysis tasks in parallel, utilizing the power of modern multi-core processors.

Pteros supports writing analysis programs in either C++ or Python programming languages.

How to cite Pteros?

Any work, which uses Pteros, should cite the following papers:

  • Semen O. Yesylevskyy, "Pteros 2.0: Evolution of the fast parallel molecular analysis library for C++ and python", Journal of Computational Chemistry, 2015, 36(19), 1480–1488, doi: 10.1002/jcc.23943. (link)
  • Semen O. Yesylevskyy, "Pteros: Fast and easy to use open-source C++ library for molecular analysis", Journal of Computational Chemistry, 2012, 33(19), 1632–1636. doi: 10.1002/jcc.22989. (link)

Is Pteros for you?

Pteros library is for you if:

  • You want to implement custom non-standard algorithms of molecular analysis.
  • Your task is computationally expensive and potentially reusable.
  • You want to run several "heavy" analysis tasks in parallel.
  • You are not satisfied by the speed and memory consumption of the scripting languages embedded into popular molecular analysis programs, such as PyMol or VMD.
  • You know C++ or don't mind learning this rather hard, but very powerful language.
  • You know Python or want to learn it. Python scripts in Pteros are good for "throw-away" one-time scripts and serious reusable programs alike.

Pteros is not for you if:

  • Your task requires extensive usage of molecular visualizer. Pteros doesn't have one currently.
  • You have no programming skills at all, or you don't want to learn C++ or Python.


  • Reading/writing popular molecular structure and trajectory formats (PDB, GRO, MOL2, XTC, TRR, TPR, DCD, TNG).
  • Very simple and expressive syntax for selecting groups of atoms similar to one used in VMD, but more powerfull.
  • Selections can be manipulated in many different ways from simple translation to orientation by principal axes.
  • Various properties of selections could be queried ranging from center of masses to radius of gyration.
  • RMSD fitting and alignment.
  • Full support for arbitrary periodic boxes - periodic selections and distances, wrapping/unwrapping, removing jumps over boundaries, computing closest images and shortest vectors, etc.
  • Computing non-bonded interactions with any force field available in Gromacs format (GROMOS, CHARMM, AMBER, OPLS and more).
  • Ability to work with very large trajectories, which does not fit into the memory.
  • Asynchronous processing made easy. Many different analysis tasks could be run in parallel and simulataneously with trajectory reading.
  • Very powerful and flexible syntax of the command-line options for custom analysis programs and scripts.
  • Easy to use. API is very simple and intuitive.
  • Easy to extend. Pteros is writen in high-level C++.
  • Oriented to human beings (reserachers and students), not to programming gurus. The code is very well structured and documented.
  • Bindings for the Python language.
  • Plugin architecture, which makes writing C++ or Python code for asynchronous trajectory analysis trivial. You concentrate on the analysis algorithm itself, not on the technical details of managing files and trajectories.

Some less widely used features:

  • Elastic network model calculations.
  • Support for residue-level DFIRE potentials.

Development status

Pteros is a mature but evolving library. The librray is stable, but API (especially in the part of Python bindings) is still subject to small changes. There are bugs here and there, error reporting is still incomplete and many features are not implemented yet. You are wellcome to participate in pteros development - there are a lot of things to do!

Third-party software integrated into Pteros

  • xdrfile library from GROMACS.
  • Eigen - highly optimized vector/matrix library.
  • POWERSASA code for Solvent Accesible Surface Area (SASA) computatations. Now inclided into SIMONA package.
  • dssp 2.0 code for secondary structure computations.
  • Molfile plugins from VMD for reading PDB, DCD, MOL2 and TNG files.

The sources of all these libraries are included into the source tree of Pteros, so you don't need to install them separately.

What level of C++ knowledge is required?

In order to develop you own programs with Pteros you need to know C++ reasonably well. However, you don't need to be a guru. Here is the basic list of things, which you should understand:

  • Basic syntax
  • Classes and inheritance
  • STL containers

In addition you should be familiar with Eigen vector/matrix library. Fortunately, it has an excelent documentation.

In order to modify internals of Pteros you should also be familiar with some Boost libraries.


So, why yet another molecular modeling library? First of all because I didn't find any C++ library for molecular modeling which satisfies my needs. Existing libraries are either too complicated or has clumsy and counterintuitive API. Of course all this is the matter of personal preference, but I have a feeling that many other researchers also desperately look for simple and clear library, which can simplify tedious routine tasks in molecular modeling.

There are several molecular modeling programs, which could be controlled by the scripting languages. Such scripting is often used to perform non-standard analysis tasks. This is perfectly acceptable if the execution time is not an issue, however any computationally intensive algorithm will run ridiculously slow in the scripting language like Python or TCL. Pteros is designed as a replacement of such scripting extentions to existing molecular modeling software. With Pteros one can easily write very fast compiled programs in C++ using the same high-level concepts, which are provided by the scripting extentions.

Pteros contains bindings for Python language. They come handy when one need small throw-away program or in prototyping new algorithms.


We compared performance of three small test programs in Pteros and VMD. The first program fits all trajectory frames to the reference structure and computes their RMSD with the reference. The second program finds atoms in two selections, with the distance between their centers less then 0.25 nm. The third program creates atom selections for each residue in the system on each loaded frame, which gives good estimate of the raw speed of selection parsing. In VMD the bigdcd script was used to process frames one by one without loading the whole trajectory into the memory. The MD trajectory of human tyrosyl-tRNA sinthetase, which contains 10744 atoms was used. First 1000 frames of trajectory where analyzed. Results of comparison are shown below:

Table 1. Execution time (in seconds) of three benchmark programs in Pteros and VMD.

# Benchmark Pteros VMD Ratio VMD/Pteros
1 Fitting and RMSD calculation 1.6 5.1 3.18
2 Finding contacting atoms 3.9 7.4 1.9
3 Creating selections for each residue 63.1 2900.0 45.9

Since VMD scripts for these benchmarks are very simple and call low-level built-in routines for the most of their work, the overhead of the TCL interpreter is rather minimal in our test. Any larger script, which performs complex computations and data manipulations, will have much larger overhead in comparison to compiled code. However, even these small scripts run significantly slower then compiled programs, which use Pteros. The parsing of atom selections in VMD is dramatically (46 times) slower then in Pteros, despite almost identical selection syntax. This introduces large performance penalty for any code in VMD, which creates many selections in the course of execution. Due to parallel execution of analysis tasks in Pteros running them simultaneously increases execution time only by few percent, while in VMD the execution time of all tasks is summed up (data not shown). Source code of the benchmark programs is included into the Pteros distribution and located in “examples” directory.

More benchmars are available in the recent paper on Pteros 2.0.