gchemol 0.1.7

gchemol: a Graph-based CHEMical Objects Library
Documentation

gchemol

gchemol is a graph-based chemical object library implemented in Rust programming language. This project is still in early development.

Crates.io

Features

  • 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

How to use

Setup

follow the official guide:

add gchemol dependency to your Cargo.toml:

[dependencies]
gchemol = "0.1"

Atom

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");

Molecule

  1. 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);
    
  2. 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")?;
    

Related projects

References