Blog

Release 0.18.0

MDAnalysis version 0.18.0 has been released.

This release brings various fixes and new features and users should update with either pip install -U MDAnalysis or conda install -c conda-forge mdanalysis.

One exciting new feature is the addition of duecredit to keep track of what citations are appropriate. Once you have written an analysis script (e.g., myanalysis.py) and have installed the duecredit package (pip install duecredit), you can either set the environment variable DUECREDIT_ENABLE=yes and run your script python myanalysis.py or to run python -m duecredit myanalysis.py to be given a report of what citable software you have used. You can then use the data written by duecredit to export the bibliography and have it ready to be imported into your reference manager. We hope that this will allow all contributors of analysis packages within MDAnalysis to get properly cited and we are working on retroactively adding all required citations to duecredit.

The AtomGroup.groupby method now supports using multiple attributes to group by, for example one could create a dictionary which allows a particular residue name and atom name to be quickly queried:

>>> grouped = ag.groupby(['resnames', 'names'])

>>> grouped['MET', 'CA']
<AtomGroup with 6 atoms>

When writing GRO files, previously all atoms would have their indices reset so that they ran sequentially from 1. To preserve their original index, the reindex option has been added to the GROWriter. For example:

>>> u = mda.Universe()

>>> u.atoms.write('out.gro', reindex=False)

or

>>> with mda.Writer('out.gro', reindex=False) as w:
...     w.write(u.atoms)

Gromacs users can benefit from a new feature when reading TPR files. Now, when the topology is read from a TPR file, the atoms have a moltype and a molnum attribute. The moltype attribute is the molecule type as defined in ITP files, the molnum attribute is the index of the molecule. These attributes can be accessed for an atom group using the plural form:

>>> u = mda.Universe(TPR, XTC)
>>> u.atoms.moltypes
>>> u.atoms.molnums

These attributes can be used in groupby:

>>> u.atoms.groupby('moltypes')
>>> u.atoms.groupby('molnums')

to provide access to all atoms of a specific moleculr type or that are part of a particular molecule.

The AtomGroup.split method of atom groups can also work on molecules:

>>> u.atoms.split('molecule')

and will create a list of AtomGroup instances, one for each molecule.

For convenience, various Group classes have been moved to the top namespace (namely, AtomGroup, ResidueGroup, SegmentGroup):

import MDAnalysis as mda


u = mda.Universe(topology, trajectory)


# for creating AtomGroups from arrays of indices
ag = mda.AtomGroup([11, 15, 16], u)

# or for checking an input in a function:
def myfunction(thing):
    if not isinstance(thing, mda.AtomGroup):
        raise TypeError("myfunction requires AtomGroup")

And finally, this release includes fixes for many bugs. This includes a smaller memory footprint when reading NetCDF trajectories, better handling of time when reading DCD trajectories and adding support for Gromacs 2018 TPR files. For more details see the CHANGELOG entry for release 0.18.0.

As ever, this release of MDAnalysis was the product of collaboration of various researchers around the world featuring the work of 12 different contributors. We would especially like to welcome and thank our six new contributors: Ayush Suhane, Mateusz Bieniek, Davide Cruz, Navya Khare, Nabarun Pal, and Johannes Zeman.

Google Summer of Code 2018

NumFOCUS Foundation Google Summer of Code 2018

MDAnalysis has been accepted as a sub-org of the NumFOCUS foundation, for Google Summer of Code 2018. If you are interested in working with us this summer as a student read the advice and links below and write to us on the mailing list.

We are looking forward to all applications from interested students (undergraduate and postgraduate).

The application window deadline is March 27, 2018 at 12:00 (MST). As part of the application process you must familiarize yourself with Google Summer of Code 2018. Apply as soon as possible.

Project Ideas

We have listed several possible projects for you to work on on our wiki.

Alternatively if you have your own idea about a potential project we’d love to work with you to develop this idea; please write to us on the developer list to discuss it there.

Information for Students

You must meet our own requirements if you want to be a student with MDAnalysis this year (read all the docs behind these links!). You must also meet the eligibility criteria.

As a start to get familiar with MDAnalysis and open source development you should follow these steps:

Complete the Tutorial

We have a tutorial explaining the basics of MDAnalysis. You should go through the tutorial at least once to understand how MDAnalysis is used.

Introduce yourself to us

Introduce yourself on the mailing list. Tell us what you plan to work on during the summer or what you have already done with MDAnalysis

Close an issue of MDAnalysis

You must have at least one commit in the development branch of MDAnalysis in order to be eligible, i.e.. you must demonstrate that you have been seriously engaged with the MDAnalysis project.

We have a list of easy bugs to work on in our issue tracker on GitHub. We also appreciate if you write more tests or update/improve our documentation. To start developing for MDAnalysis have a look at our guide for developers and write us on the mailing list if you have more questions about setting up a development environment.

@kain88-de

Release 0.17.0

With the new year comes also a new release of MDAnalysis. This release fixes bugs, removes deprecated code, and adds support for new file formats. The biggest changes however aim at making MDAnalysis more sustainable in the long run. The release note lists all the changes in this version.

This release of MDAnalysis comes with a long awaited change: MDAnalysis now officially supports Python 3.4 and newer! We cannot be your excuse to stick with Python 2 anymore. Nevertheless, Python 2.7 remains supported for the foreseeable future. The port to Python 3 was a long process that started in 2015 and was completed by Tyler Reddy and Richard Gowers thanks to a grant awarded by NumFOCUS. To complete the port, the handling of the DCD format, used by, e.g., CHARMM and NAMD, had to be completely rewritten, a big task carried out by Tyler Reddy and Max Linke during the last year. So this release brings a fresh DCD reader and a new low level library (libdcd) to manipulate DCD files.

An other change to stay up to date was supported by Google Summer of Code. GSoC student Utkarsh Bansal ported our tests from nose to pytest. Sadly, nose is now deprecated by lack of maintainers. While we liked nose and are grateful to its developers, we had to move away from it. We chose pytest as a replacement as it has a vibrant community and many great features. Utkarsh not only made the tests run under the new framework but he also applied the pytest recommended idioms wherever possible. As a result, our code coverage increased to 91% and the tests run significantly faster.

We added support for three new trajectory and topology formats. The TXYZ and ARC files from Tinker and the GSD format of HOOMD. Learn more about these file formats in our documentation. If instead your prefer Amber’s netcdf4 trajectories, you should experience a performance gain when reading such trajectories. Gromacs users may notice that the parser for the TPR format now exposes molecule names under the moltype attribute of atoms and residues, it also makes it easier to split atom groups by molecules.

It is also now possible to create Universes withot existing topology and coordinate files via the Universe.empty class method. This should allow more possibilities in creating input files for simulations from a Python interface.

import MDAnalysis as mda

# `empty` classmethod does not require filenames
u = mda.Universe.empty(100, trajectory=True)
# can add the required attributes to the new Universe
u.add_TopologyAttr('names')
u.add_TopologyAttr('masses')

# ... position atoms, assign names etc

# then finally export to any supported format
u.atoms.write('system.gro')

A new tool makes an entrance in the analysis module tanks to Zhiyi Wu. It is now possible to follow water bridges between two selections using the WaterBridgeAnalysis module. Read the documentation of the module to learn more about it.

With this release, we introduced some deprecations. In HydrogenBondAnalysis, the keyword detect_hydrogen="heuristic" is deprecated in favor of detect_hydrogen="distance". Indeed, the former may not find all the hydrogens, making the latter safer to use. In the result of the same analysis, the column “donor_id”x and “acceptor_idx”, that start counting at 1, are deprecated in favor of “donor_index” and “acceptor_index, respectively, that start counting at 0. Finally, throughout the code base, the use of the format keyword of timeseries is deprecated and renamed order, which reflects better the use of the keyword to set the order of output columns. We plan on removing the deprecated code with the version 1.0 of MDAnalysis. For the list of deprecations we removed in this version, consult the release note.

We also have various speed improvements in the whole library. To ensure that MDAnalysis keeps getting faster Tyler Reddy has worked on developing asv benchmarks. The benchmarks can be found in Benchmark repo.

You should also experience a performance gain of about 20 % when running GNM analyses. For performance we also started experimenting with implementing multi core analysis in PMDA. This release contains fixes to enable the use of PMDA.

Fifteen people contributed to this release, among which five were first time contributors. Thank you to all contributors and welcome to Nestor Wendt, Micaela Mata, Sören von Bülow, Ruggero Cortini and Jose Borreguuero.

Upgrade

You can upgrade with pip install --upgrade MDAnalysis. If you use the conda package manager run conda update -c conda-forge mdanalysis.