Skip to main content

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

CLI

rdsl /tmp/7RPZ.pdb /tmp/7RPZ.selected.sdf "resn 6IC"

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 pyparser implementation 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

rdsl-0.1.3.tar.gz (2.9 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rdsl-0.1.3-py3-none-any.whl (648.8 kB view details)

Uploaded Python 3

File details

Details for the file rdsl-0.1.3.tar.gz.

File metadata

  • Download URL: rdsl-0.1.3.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

Hashes for rdsl-0.1.3.tar.gz
Algorithm Hash digest
SHA256 3af2d60e3bf6add64472968908c9b2c8b26f37f29e4e442266f2f9e9f25c22d8
MD5 fcf78099a874b384848ae659138f49ce
BLAKE2b-256 672e3b9d3b9cf6482c8f3c593d9eef160217f2255c34094300bb7ea4712abab8

See more details on using hashes here.

File details

Details for the file rdsl-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: rdsl-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 648.8 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

Hashes for rdsl-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 d2a5882e4f5bf20165c1c5c88f3e717d7f327c2d37169fb7b282a541fa42a5ff
MD5 0d8d5fd1de848cf41907766cea441261
BLAKE2b-256 e69bde749ca010d19447962218ec6c63826db32aee3205b85653dcabf773aa87

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page