Crates.io | gchemol |
lib.rs | gchemol |
version | 0.1.7 |
source | src |
created_at | 2020-02-08 03:08:30.973536 |
updated_at | 2023-07-03 01:11:04.230936 |
description | gchemol: a Graph-based CHEMical Objects Library |
homepage | https://github.com/gchemol/gchemol |
repository | https://github.com/gchemol/gchemol |
max_upload_size | |
id | 206296 |
size | 293,740 |
gchemol is a graph-based chemical object library implemented in Rust programming language. This project is still in early development.
Fast and safe codes empowered by Rust.
Static build without external dependencies: easy to deploy in HPC environment.
Core graph data structure using petgraph
Read/write molecules in common chemcial file formats.
Linear algebra backed by nalgebra
Render molecule in user defined formats by templating with handlebars and tera
follow the official guide:
add gchemol dependency to your Cargo.toml:
[dependencies]
gchemol = "0.1"
use gchemol::Atom;
// construct from element and position
let a = Atom::new("C", [0.0, 0.0, 0.0]);
let b = Atom::new("C", [1.2, 1.2, 1.2]);
or simply convert from a string:
let a: Atom = "C 1.0 1.0 0.2"
.parse()
.expect("atom from string");
Creating a molecule manually
use gchemol::Molecule;
let atoms = [
Atom::new("C", [ 0.000000, 0.000000, 0.000000]),
Atom::new("C", [ 0.000000, 0.000000, 1.089000]),
Atom::new("C", [ 1.026719, 0.000000, -0.363000]),
Atom::new("C", [-0.513360, -0.889165, -0.363000]),
Atom::new("C", [-0.513360, 0.889165, -0.363000])];
// create a molecule from these atoms
let mut mol = Molecule::from_atoms(atoms);
Reading and writing molecules
use gchemol::io;
use gchemol::prelude::*;
use gchemol::Molecule;
// Read an xyz file and write to a Gaussian Input file.
let mol = Molecule::from_file("path/to/file.xyz")?;
mol.to_file("methane.gjf")?;
// get the total number of atoms
let na = mol.natoms();
// get the total number of bonds
let nb = mol.nbonds();
// read multiple molecules (trajectory) from a chemical file
// the number of atoms in different frame could be different
let mols = io::read("path/to/trajectory.xyz")?;