5个版本
0.1.4 | 2024年7月18日 |
---|---|
0.1.3 | 2024年7月2日 |
0.1.2 | 2024年5月23日 |
0.1.1 | 2024年5月7日 |
0.1.0 | 2024年5月7日 |
#907 在 科学
每月下载量 283
用于 groslicer
140KB
643 行
eightyseven—读取和写入 gro
文件,非常快
gro
文件(Gromos87)以纯文本格式描述分子结构。(参见 Gromacs手册 或 旧版美观手册。)
请注意,目前仅支持经典固定格式的读取和写入。附加精度读取模式已在计划中。
eightyseven 可以并行格式化gro文件的原子部分,使用 WriteGro::write_par
和相关方法。
此库包含自己的 Structure
类型,它反映了存储在 gro
文件中的信息。对于 Structure
,实现了 ReadGro
、WriteGro
和 WriteGroPar
特性。这些特性提供的读取和写入功能是良好的默认实现,依赖于几个易于实现的桥接函数。这使得为自定义类型实现特性变得非常简单。
此外,可以通过设置 ReadGro::PARSE_LIST
常量的标志,轻松有效地实现只读取原子行字段子集的非常专业的读取器。
use eightyseven::structure::Structure;
// Read the structure from a file.
use eightyseven::reader::ReadGro;
let mut structure = Structure::open_gro("tests/eq.gro")?;
println!(" title: {}", structure.title);
println!("natoms: {}", structure.natoms());
// Modify the structure.
// For example, center the structure such that the `BB` beads are centered.
let bb_positions = structure
.atoms
.iter()
.filter(|&atom| atom.atomname.as_str() == "BB")
.map(|atom| atom.position);
let bb_center = bb_positions.clone().sum::<glam::Vec3>() / bb_positions.count() as f32;
for atom in &mut structure.atoms {
atom.position -= bb_center;
}
// And write the structure.
use eightyseven::writer::WriteGro;
structure.save_gro("eq_offset.gro")?;
// Or, for fast writing of large files, format the atom section in parallel.
use eightyseven::writer::WriteGroPar;
structure.save_gro_par("eq_offset.gro")?;
// For both single-threaded and parallel formatting, generic writers exist as well.
// They can write to any type that implements `io::Write`.
structure.write_par(&mut std::io::empty())?;
文档
文档可在 docs.rs 找到。或本地使用 cargo doc
。
安装
适用常规安装程序。
$ cargo add eightyseven
测试和基准测试
包括测试和基准测试。在克隆的仓库中运行它们。
$ git clone https://git.sr.ht/~ma3ke/eightyseven
$ cd eightyseven
$ cargo test
$ cargo bench
另请参阅
我还编写了一个 xtc
读取器库,称为 molly。 xtc
是Gromacs的压缩轨迹格式。
Gromacs分析命令输出的绘图数据格式是 xvg
。 phrace 是该数据格式的终端查看器。
作者:Marieke Westendorp,2024。
依赖关系
~4.5MB
~121K SLoC