Crates.io | extxyz |
lib.rs | extxyz |
version | 0.2.0 |
source | src |
created_at | 2024-02-17 10:08:25.592922 |
updated_at | 2024-02-21 09:23:44.339558 |
description | A parser for files in the extended xyz format |
homepage | https://github.com/gchemol/extxyz |
repository | https://github.com/gchemol/extxyz |
max_upload_size | |
id | 1143143 |
size | 78,305 |
A fast parser for chemical file in the extended xyz (extxyz) format.
The extended XYZ format is an enhanced version of the simple XYZ format, allowing extra columns to be present in the file for extra atom properties (forces, charges, labels, etc.) as well as molecule's properties (energy, dipole moment, etc.)specified in the comment line.
Example usage:
use extxyz::{read_xyz_frames, RawAtoms, Info};
fn main() -> anyhow::Result<()> {
// a large xyz/extxyz trajectory file
let f = "nmd.xyz";
// skip the first 100 frames, and read frames with a step size `10`
let selection = (100..).step_by(10);
let frames = read_xyz_frames(f, selection)?;
for frame in frames {
let atoms = RawAtoms::parse_from(&frame)?;
// it will returen error if the comment is not in normal extxyz format
let info: Info = atoms.comment.parse()?;
// get molecule's properties
let energy = info.get("energy").unwrap();
// get atom's properties
for atom in atoms.atoms {
// parse extra data for each atom
let atom_properties = info.parse_extra_columns(&atom.extra)?;
// get `forces` component for each atom
let forces = &atom_properties["forces"];
}
}
Ok(())
}