pytng - A python library to read TNG files!
This package provides the
TNGFileIterator object to allow simple Pythonic
access to data contained within TNG files.
import numpy as np
with pytng.TNGFileIterator('traj.tng', 'r') as tng:
positions = np.empty(shape=(tng.n_atoms,3), dtype=np.float32)
for ts in tng:
time = ts.get_time()
positions = ts.get_positions(positions)
This package contains Python bindings to libtng for TNG file format . This is used by molecular simulation programs such as Gromacs for storing the topology and results from molecular dynamics simulations.
This package is under active development. The API is liable to change between release versions.
To install using pip, simply run
pip install pytng
To install the latest development version from source, run
git clone [email protected]:MDAnalysis/pytng.git
python setup.py install
For help using this library, please drop by the GitHub issue tracker.
Glossary of key terms
step : an integrator timestep (one MD step).
frame : an integrator timestep with data associated.
stride : the number of steps between writes of data to the trajectory.
block : a data element in a TNG trajectory containing a specific type of data e.g. positions, velocities or box vectors.
block id : an integer (a long long) that indicates the type of data contained in a block.
block name : a name that matches a specific block id, normally starts with the TNG prefix.
particle dependency : indicates whether the data in a block is dependent on the particles in the simulation, (e.g. positions) or is not (e.g. box vectors).
GCD : greatest common denominator.
blank read : an attempt to read a step where there is no data present
Notes on the TNG format and PyTNG
The TNG format is highly flexible, allowing the storage of almost any datatype from any point in a simulation. This information is written at certain strides, i.e at every N steps. Under most circumstances, strides are of a similar magnitude or share a large greatest common divisor (GCD). However this is not always the case and introduces additional complexity in iterating through the file effectively. The main challenge is if you want to retrieve multiple datatypes in a single pass that do not share a large GCD in their strides, necessitating lots of blank reads. Avoiding this is still a work in progress for PyTNG.
While the TNG format supports storage of simulations conducted in the grand canonical ensemble, PyTNG does not currently support this or any other type of simulation where the number of particles varies between frames. Additionally, the TNG format includes a TNG_MOLECULES block that contains the simulation topology. PyTNG does not currently make use of this information, but will in the future.