cosmolkit 0.2.6

Rust-native cheminformatics and structural biology toolkit for molecules, SMILES, SDF, molecular graphs, conformers, and AI-ready workflows
Documentation
use cosmolkit::{
    Molecule, mmff_has_all_molecule_params, mmff_optimize_molecule, uff_has_all_molecule_params,
    uff_optimize_molecule,
};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let molecule = Molecule::from_smiles("CCO")?.with_hydrogens()?.sanitize()?;

    let mut builder = molecule.to_builder();
    builder.add_3d_conformer(vec![
        [0.000, 0.000, 0.000],
        [1.540, 0.000, 0.000],
        [2.100, 1.200, 0.000],
        [-0.600, 0.900, 0.000],
        [-0.600, -0.900, 0.000],
        [0.000, 0.000, 1.000],
        [1.900, -0.900, 0.000],
        [1.700, 0.000, 1.000],
        [2.900, 1.200, 0.000],
    ])?;
    let molecule = builder.build()?;

    if uff_has_all_molecule_params(&molecule)? {
        let result = uff_optimize_molecule(&molecule, 200, 10.0, -1, true)?;
        println!(
            "UFF needs_more={} energy={:.6}",
            result.needs_more, result.energy
        );
        println!(
            "optimized first atom: {:?}",
            result.molecule.conformers_3d()[0].coords()[0]
        );
    }

    if mmff_has_all_molecule_params(&molecule)? {
        let result = mmff_optimize_molecule(&molecule, "MMFF94", 200, 100.0, -1, true)?;
        println!("MMFF94 needs_more={}", result.needs_more);
        println!(
            "optimized first atom: {:?}",
            result.molecule.conformers_3d()[0].coords()[0]
        );
    }

    Ok(())
}