#bioinformatics #molecular-dynamics #trajectory #GROMACS

sys xdrfile

Wrapper around the gromacs libxdrfile library. Can be used to read and write gromacs trajectories in xtc and trr format.

3 releases (breaking)

0.3.0 Nov 16, 2020
0.2.0 Nov 7, 2020
0.1.0 Apr 16, 2020

#307 in Encoding


4.5K SLoC

C 2.5K SLoC // 0.1% comments Rust 2K SLoC // 0.0% comments

Build Status crates.io


Read and write xdr trajectory files in .xtc and .trr file format

This crate is mainly intended to be a wrapper around the GROMACS libxdrfile XTC library and provides basic functionality to read and write xtc and trr files with a safe api.


Basic usage

use xdrfile::*;

fn main() -> Result<()> {
    // get a handle to the file
    let mut trj = XTCTrajectory::open_read("tests/1l2y.xtc")?;

    // find number of atoms in the file
    let num_atoms = trj.get_num_atoms()?;

    // a frame object is used to get to read or write from a trajectory
    // without instantiating data arrays for every step
    let mut frame = Frame::with_len(num_atoms);

    // read the first frame of the trajectory
    trj.read(&mut frame)?;

    assert_eq!(frame.step, 1);
    assert_eq!(frame.len(), num_atoms);

    let first_atom_coords = frame.coords[0];
    assert_eq!(first_atom_coords, [-0.8901, 0.4127, -0.055499997]);


Frame iteration

For convenience, the trajectory implementations provide "into_iter" to be turned into an iterator that yields Rc. If a frame is not kept during iteration, the Iterator reuses it for better performance (and hence, Rc is required)

use xdrfile::*;

fn main() -> Result<()> {
    // get a handle to the file
    let trj = XTCTrajectory::open_read("tests/1l2y.xtc")?;

    // iterate over all frames
    for (idx, result) in trj.into_iter().enumerate() {
        let frame = result?;
        println!("{}", frame.time);
        assert_eq!(idx+1, frame.step);


Uses the lowlevel xdrfile c library version 1.1.4 with some minor fixes and additions copied from mdtraj.


Licensed under LGPL because this is what the underlying c library (xdrfile) uses