A fast Rust library for parsing XYZ molecular geometry files.
- Parse single geometry XYZ files
- Parse trajectory files with multiple frames
- Extract specific frames from trajectories
- Optional parallel parsing with rayon
- Support for all 118 elements
use xyz_parser::{parse_xyz, parse_xyz_file, parse_trajectory};
// Parse from string
let content = "3\nWater molecule\nO 0.0 0.0 0.0\nH 0.96 0.0 0.0\nH -0.24 0.93 0.0";
let frame = parse_xyz(content).unwrap();
println!("Atoms: {}", frame.num_atoms());
// Parse from file
let frame = parse_xyz_file("molecule.xyz").unwrap();
// Parse trajectory
let frames = parse_trajectory(content).unwrap();
for frame in frames {
println!("Frame with {} atoms", frame.num_atoms());
}pub struct XyzFrame {
pub atomic_numbers: Vec<u8>, // Atomic numbers (1=H, 6=C, etc.)
pub coordinates: Vec<f64>, // Flat array [x1, y1, z1, x2, y2, z2, ...]
}Enable the parallel feature for multi-threaded trajectory parsing:
[dependencies]
xyz_parser = { version = "0.1", features = ["parallel"] }use xyz_parser::parse_trajectory_parallel;
let frames = parse_trajectory_parallel(content).unwrap();MIT