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.2.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.2-py3-none-any.whl (647.9 kB view details)

Uploaded Python 3

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

Hashes for rdsl-0.1.2.tar.gz
Algorithm Hash digest
SHA256 89398f8fd6a74ab97ca4071972fa44eede493d06b8a0413724ac23505bff5656
MD5 cccbc41677dadef4ac6b4e705b6e7ab0
BLAKE2b-256 b6424ff406f2f404b7dbdbabe9c33a356f015c255b63713749c67353c76de099

See more details on using hashes here.

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

Hashes for rdsl-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 6cb48c413f20c5961c30dd11eb395444f55bfe3bfcae6c103d37fdd5ef7f52e6
MD5 e9bcb4e4987a16b02b312a6acb8f5166
BLAKE2b-256 64e1417c2408b297aea5a1875a378eae376bf5e4ffeffbac6fec04b1c2ba0c99

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