3个版本 (破坏性)
0.3.0 | 2020年11月16日 |
---|---|
0.2.0 | 2020年11月7日 |
0.1.0 | 2020年4月16日 |
#179 in 生物学
每月41次下载
用于 molly
215KB
4.5K SLoC
xdrfile
读取和写入.xtc和.trr格式的xdr轨迹文件
此crate主要旨在作为GROMACS libxdrfile XTC库的包装器,并提供用于安全API读取和写入xtc和trr文件的基本功能。
示例
基本使用
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(())
}
帧迭代
为了方便,轨迹实现提供了"into_iter",可以将其转换为迭代器,该迭代器生成Rc。如果在迭代过程中不保留帧,迭代器会重复使用它以提高性能(因此,需要Rc)
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
使用低级xdrfile c库版本1.1.4,并从mdtraj中复制了一些小的修复和添加。
许可证
根据许可证LGPL,因为这是底层c库(xdrfile)使用的许可证