2020-04-16 15:17:11 +02:00
2020-04-16 13:03:33 +02:00
2020-04-16 15:00:20 +02:00
2020-04-16 15:00:20 +02:00
2020-04-16 13:03:33 +02:00
2020-04-16 13:03:33 +02:00
2020-04-16 15:05:34 +02:00
2020-04-16 15:17:11 +02:00

crates

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::*;
use std::path::Path; 

let mut path = Path::new("tests/1l2y.xtc");
// get a handle to the file
let mut trj = XTCTrajectory::open(path, FileMode::Read).unwrap();

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

// 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_capacity(num_atoms);

// read the first frame of the trajectory
let result = trj.read(&mut frame);
match result {
   Ok(_) => {
       assert_eq!(frame.step, 1);
       assert_eq!(frame.num_atoms, num_atoms);

       let first_atom_coords = frame.coords[0];
       assert_eq!(first_atom_coords, [-0.8901, 0.4127, -0.055499997]);
   }
   Err(msg) => {
       panic!("Something went wrong: {}", msg);    
   }
}

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::*;
use std::path::Path; 

let mut path = Path::new("tests/1l2y.xtc");
// get a handle to the file
let trj = XTCTrajectory::open(path, FileMode::Read).unwrap();

// iterate over all frames
for (idx, frame) in trj.into_iter().filter_map(Result::ok).enumerate() {
    println!("{}", frame.time);
    assert_eq!(idx+1, frame.step as usize);
}

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

Description
Languages
Rust 100%