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

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.1.tar.gz (2.7 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.1-py3-none-any.whl (646.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: rdsl-0.1.1.tar.gz
  • Upload date:
  • Size: 2.7 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.1.tar.gz
Algorithm Hash digest
SHA256 53f3ef2bbaa381a2e132265f4507d41a6783eceaa555a740e2facd4310fa7e2f
MD5 8e61a340a92ae4806fd9b9df147eca5c
BLAKE2b-256 0402ec56b77f5c0d4025b9e6dd2defd8134f15680d4b61fae197886cf0fad6a6

See more details on using hashes here.

File details

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

File metadata

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

Hashes for rdsl-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 801ad07e887f3cdc2a4967c45b4a94f7ec457ebc0d8e79149e1ef181a4341f11
MD5 623248de2cbd6d492cd18c983b06bf52
BLAKE2b-256 ba79fb774e8225b8b900468b4fcb65571310439394ea31674744af1e030ec5cc

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