A powerful Domain Specific Language (DSL) for expressive molecule selection and extraction in RDKit.
Project description
RDSL: RDKit Domain Specific Language
rdsl is a domain-specific language (DSL) for selecting atoms and extracting sub-molecules from RDKit molecules. Heavily inspired by PyMOL's selection syntax.
Installation
pip install rdsl
Usage
Atom Selection
The select_atom_ids function returns a numpy array of indices for atoms matching the expression.
from rdkit import Chem
from rdsl import select_atom_ids
mol = Chem.MolFromSmiles("Cc1ccccc1O")
# Simple keyword selections
aromatic_atoms = select_atom_ids(mol, "aromatic")
# Complex logical expressions
carbon_rings = select_atom_ids(mol, "elem C and ring")
# Geometric and distance-based queries
near_oxygen = select_atom_ids(mol, "all within 3.0 of elem O")
# Custom SMARTS matching
benzene_matches = select_atom_ids(mol, 'smarts "c1ccccc1"')
Molecule Extraction
The select_molecule function extracts the selected atoms into a new Molecule object.
from rdsl import select_molecule
# Extract the benzene ring, automatically capping broken bonds with hydrogens
result = select_molecule(mol, "aromatic")
submol = result.mol
# Track where atoms came from
original_idx = result.atom_mapping[0]
# Handle broken bonds with wildcards (useful for fragments)
result = select_molecule(mol, "aromatic", broken_bonds="wildcards")
Functional Group Detection
Identify functional groups with built-in patterns that respect chemical hierarchies.
from rdsl import get_functional_group_matches
# Returns a pandas DataFrame with identified groups
df = get_functional_group_matches(mol)
print(df[["name", "atom_ids", "group"]])
For an online web server from the original authors, see SmartChemist.
Syntax Guide
rdsl supports a wide range of operators. See examples.ipynb for a comprehensive list of selection functionality and examples. A non-exhaustive list of operators is shown below:
| Category | Operators / Keywords |
|---|---|
| Logic | and, or, not, ( ) |
| Selection | first, last, in |
| Basic Flags | all, none, heavy, hydrogens |
| Atom Attributes | elem, atomic_number, isotope, mass, index, formal_charge, partial_charge, valence, degree, hybridization, stereo, ring, aromatic, aliphatic |
| Pharmacophore | donors, acceptors, hydrophobes, pos_ionizable, neg_ionizable, zn_binders |
| MedChem Alerts | alerts |
| Functional Groups | functional "<name>" |
| Custom SMARTS | smarts "<pattern>" |
| Topology | neighbor, bound_to, ringsize, inring |
| Expansions | bymolecule, byring, byres, bychain, byfunctional |
| Proximity | within <dist> of <expr>, beyond <dist> of <expr>, around <dist>, gap <dist> of <expr> |
| PDB | resi, resn, resv, chain, name, alt, id, b, q, hetatm |
| PDB Classification | sidechain, backbone,protein, nucleic, polymer, solvent, metals, organic, inorganic, artifact |
Acknowledgements
- Functional Groups: The SMARTS patterns used for functional group detection are taken from SmartChemist by Torben Gutermuth. NB: Make sure to cite SmartChemist in any publications that use this functionality, and do not modify the SMARTS patterns in a way that violates the license.
- Selection Parser: The core DSL parser architecture is a port of the
pyparserimplementation found in mdtop, originally inspired by PyMOL. - Inspiration: This project was inspired by Alex Binnie, who developed a similar DSL for OpenEye toolkit.
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rdsl-0.1.2.tar.gz.
File metadata
- Download URL: rdsl-0.1.2.tar.gz
- Upload date:
- Size: 2.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
89398f8fd6a74ab97ca4071972fa44eede493d06b8a0413724ac23505bff5656
|
|
| MD5 |
cccbc41677dadef4ac6b4e705b6e7ab0
|
|
| BLAKE2b-256 |
b6424ff406f2f404b7dbdbabe9c33a356f015c255b63713749c67353c76de099
|
File details
Details for the file rdsl-0.1.2-py3-none-any.whl.
File metadata
- Download URL: rdsl-0.1.2-py3-none-any.whl
- Upload date:
- Size: 647.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6cb48c413f20c5961c30dd11eb395444f55bfe3bfcae6c103d37fdd5ef7f52e6
|
|
| MD5 |
e9bcb4e4987a16b02b312a6acb8f5166
|
|
| BLAKE2b-256 |
64e1417c2408b297aea5a1875a378eae376bf5e4ffeffbac6fec04b1c2ba0c99
|