chematic-chem
Pure Rust chemical intelligence library — descriptors, drug-likeness rules, diversity picking, reaction analysis.
Features
Molecular Descriptors (40+)
- Physicochemical: MW, LogP (XLogP), TPSA, PSA, MOLAR_REFR, VdW volume
- Lipophilicity: LogP (multiple models), MolLogP
- Hydrogen Bonding: HBA, HBD, HBA_LIPINSKI, HBD_LIPINSKI
- Flexibility: Rotatable bonds, ring count, scaffold RMSD
- Complexity: Topological Polar Surface Area, QED, SA Score
- Molecular Properties: Atom/bond counts, isotopes, fragments
- Fingerprint Similarity: Tanimoto, Dice (ECFP, MACCS)
Drug-Likeness Rules
- Lipinski Rule of Five: MW < 500, LogP < 5, HBA ≤ 10, HBD ≤ 5
- Veber's Rules: TPSA ≤ 140, RotBonds ≤ 10
- Egan's Rules: LogP 0.4-5.0, TPSA 20-130
- Ghose's Rule: MW 160-480, LogP -0.4-5.6, TPSA 40-130
- REOS Filters: Removes likely PAINS, toxic patterns
- PAINS Filters: Pan-Assay Interference compounds + alerts
Advanced Analysis
- Murcko Scaffold: Generic scaffold from molecule
- Maximum Common Substructure (MCS): Molecular similarity
- Reaction Analysis: Atom-map detection, reaction center identification
- Stereochemistry: Invert/enumerate stereoisomers
- Isotope Distribution: Exact mass spectrum simulation
Diversity Selection
- MaxMin Picking: Diverse subset selection
- Butina Clustering: Distance-based clustering
- Tanimoto Similarity: ECFP-based distances
Standardization
- Mol Hash: Canonical identifier (accounting for salts, tautomers)
- Standardize: Remove/identify salts, neutralize charges
- Parse Condensed: IUPAC-like condensed formulas
Quick Start
Calculate descriptors
use molecular_weight;
use parse;
let mol = parse?; // aspirin
let mw = molecular_weight;
println!;
Check drug-likeness
use ;
if lipinski_descriptor_pass else
let pains = pains_filters;
if !pains.is_empty
Similarity search
use compare_molecules;
let results = compare_molecules?;
for pair in &results.pairwise
Diversity picking
use maxmin_diversity;
let picks = maxmin_diversity?;
println!;
API Reference
| Function | Purpose |
|---|---|
molecular_weight(mol) |
Average isotope mass |
logp(mol) |
XLogP model |
tpsa(mol) |
Topological Polar Surface Area |
qed(mol) |
Drug-likeness (0-1) |
sa_score(mol) |
Synthetic accessibility (1-10) |
lipinski_descriptor_pass(mol) |
Lipinski's Rule of Five |
compare_molecules(smiles_list) |
Multi-mol similarity |
screen_smiles(smiles_list) |
Batch descriptor + filtering |
maxmin_diversity(mols, k) |
Diverse subset picking |
find_mcs(mols) |
Maximum common substructure |
Crate Dependencies
chematic-core— Atom, Bond, Molecule typeschematic-smiles— SMILES parsingchematic-perception— Ring, aromaticity, stereochematic-fp— Fingerprint calculationchematic-mol— File I/O
Zero FFI: Pure Rust, WASM-compatible via npm @kent-tokyo/chematic.
Testing
# 248 tests: descriptors, rules, MCS, diversity
Version History
v0.1.94 (2026-06-12):
- SA Score fragment corpus expanded: 145 → 188 FDA molecules (1034 → 1415 unique fragments)
- Integrated with multi-sphere CIP and enhanced fingerprints
v0.1.93 (2026-06-12):
- Full multi-sphere CIP priority rules (moved from chematic-chem to chematic-perception)
- Correct R/S stereochemistry assignment (>2 distinct substituents)
v0.1.32 (2026-06-07):
- 992 total tests (v0.1.30: 948)
- Integrated with v0.1.32 crate updates (3D constraints, aromaticity)
License
MIT OR Apache-2.0