#轨迹 #分子动力学 #生物信息学 #gromacs

sys xdrfile

gromacs libxdrfile库的包装器。可用于读取和写入.xtc和.trr格式的gromacs轨迹。

3个版本 (破坏性)

0.3.0 2020年11月16日
0.2.0 2020年11月7日
0.1.0 2020年4月16日

#179 in 生物学

每月41次下载
用于 molly

LGPL-3.0-only

215KB
4.5K SLoC

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

Build Status crates.io

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)使用的许可证

依赖项