Crates.io | xdrfile |
lib.rs | xdrfile |
version | 0.3.0 |
source | src |
created_at | 2020-04-16 13:05:58.04172 |
updated_at | 2020-11-16 13:00:14.339472 |
description | Wrapper around the gromacs libxdrfile library. Can be used to read and write gromacs trajectories in xtc and trr format. |
homepage | |
repository | |
max_upload_size | |
id | 230772 |
size | 430,590 |
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.
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(())
}
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(())
}
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