xdrfile 0.3.0

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

Build Status crates.io

xdrfile

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.

Examples

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]);

    Ok(())
}

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);
    }
    Ok(())
}

xdrfile

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

License

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