Skip to main content

RDKit utilities: placeholder substitution, R-group decomposition, scaffold normalization

Project description

rdkit_buildutils

Utilities built on top of RDKit for constructing, normalizing and decomposing molecules with placeholder substitution.

The package is designed to support workflows involving monomers, R-group decomposition, and scaffold normalization, keeping functions general-purpose and lightweight.

⚠️ Developed in a personal context for scientific support. Not affiliated with RDKit or any specific organization.


✨ Features

Core utilities (rdkit_buildutils/core.py)

  • convert_r_to_atom_map(smiles_r): Convert placeholders like [R1], [R2] into RDKit-compatible [*:1], [*:2].
  • build_molecule_final(base_smiles, **substituents): Replace placeholders in a scaffold SMILES with substituents (r1="CC", r2="O", etc.).

R-group decomposition (rdkit_buildutils/rgroup_core.py)

  • to_core(smiles_with_R): Convert scaffold with [Rk] into RDKit Mol with [*:k].
  • normalize_rgroup_smiles(mol): Normalize R-group fragment SMILES (removes atom map numbers, canonicalizes).
  • to_peptidic_scaffold(asis_scaffold): Convert peptide-like scaffolds [R]-N / C(=O)-[R] into peptidic convention (amide/ester aware).
  • anchored_smiles(raw): Convert -OC, -C into canonical *OC, *C notation.
  • build_code_map(rgroups): Build code → anchored SMILES dictionary for substituent matching.
  • decompose_with_cores(mol, core_entries, code_map): Run RDKit RGroupDecomposition on multiple possible cores, choose the best by scoring.
  • decompose_for_monomer(mol, monomer_name, monomers_as_is, code_map, alt_cores=None): Convenience wrapper using as-is/peptidic/alt cores.

Scaffold normalization (rdkit_buildutils/scaffold_normalize.py)

  • canonical_ranks(mol): Robust fallback for atom canonical ranks.
  • r_to_atommap(smiles_r): Convert [R1]..[*:1].. to Mol.
  • relabel_dummies_canonically(mol): Deterministic renumbering of dummy atoms [*:k][*:1..m].
  • normalize_scaffold_chiral(smiles_with_R, relabel_R=True): Canonicalize scaffolds preserving stereochemistry (D/L).

Duplicate detection with pandas (optional)

  • find_duplicate_monomers_chiral_df(df, ...) in duplicates_pandas.py to detect duplicates across monomer libraries.

📦 Installation

Basic:

pip install rdkit_buildutils

With pandas helpers:

pip install rdkit_buildutils[pandas]

With DB extras (for your own adapters):

pip install rdkit_buildutils[db]

🔬 Examples

Build molecule with substituents

from rdkit_buildutils import convert_r_to_atom_map, build_molecule_final
from rdkit import Chem

scaffold = "[R1]NCC(=O)[R2]"
core = convert_r_to_atom_map(scaffold)  # -> [*:1]NCC(=O)[*:2]

mol = build_molecule_final(core, r1="C", r2="OC")
print(Chem.MolToSmiles(mol))

Decompose a protected amino acid

from rdkit import Chem
from rdkit_buildutils import build_code_map, decompose_for_monomer

MONOMERS = {"Ser": "[R1]N[C@H]([R3])C([R2])=O"}
RGROUPS = {"BOC": "-C(=O)OC(C)(C)C", "OME": "-OC", "CH2OH": "-CO"}

code_map = build_code_map(RGROUPS)
mol = Chem.MolFromSmiles("CC(C)(C)OC(=O)N[C@H](CO)C(=O)OC")
out = decompose_for_monomer(mol, "Ser", MONOMERS, code_map)
print(out["core_used"], out["core_origin"], out["score"])

Normalize scaffolds with stereochemistry

from rdkit_buildutils import normalize_scaffold_chiral

print(normalize_scaffold_chiral("[R1]N[C@H](CO)C([R2])=O", relabel_R=True))

Find duplicates in a pandas DataFrame

import pandas as pd
from rdkit_buildutils.duplicates_pandas import find_duplicate_monomers_chiral_df

df = pd.DataFrame([
    {"id":1,"symbol":"L-Ser","scaffold_smiles":"[R1]N[C@H](CO)C([R2])=O","author":"Alice"},
    {"id":2,"symbol":"L-Ser_alt","scaffold_smiles":"[R1]N[C@H](CO)C([R2])=O","author":"Bob"},
    {"id":3,"symbol":"D-Ser","scaffold_smiles":"[R1]N[C@@H](CO)C([R2])=O","author":"Carol"},
])
dup = find_duplicate_monomers_chiral_df(df, relabel_R=True)
print(dup)

🧩 Optional extras

  • [pandas]: DataFrame adapters (duplicate search).
  • [db]: Optional dependencies if you want to build database adapters in your project.

📖 Documentation

Docstrings + README. Roadmap for mkdocs/Sphinx in ROADMAP.md.

✅ License

MIT © 2025 Fabio Nelli

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

rdkit_buildutils-0.2.0.tar.gz (11.7 kB view details)

Uploaded Source

Built Distribution

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

rdkit_buildutils-0.2.0-py3-none-any.whl (10.8 kB view details)

Uploaded Python 3

File details

Details for the file rdkit_buildutils-0.2.0.tar.gz.

File metadata

  • Download URL: rdkit_buildutils-0.2.0.tar.gz
  • Upload date:
  • Size: 11.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.6

File hashes

Hashes for rdkit_buildutils-0.2.0.tar.gz
Algorithm Hash digest
SHA256 6e58cc9c5c74dd64a0b6e9e1ebd310b8d77c04dd54177e3535780e4dd2a72524
MD5 5928cb4adf946e4788cfb35929dbc4a4
BLAKE2b-256 efd2e19176695ef5aff82f257da417ffc9a0dfc0b65b1b624aa6408f8ee240c7

See more details on using hashes here.

File details

Details for the file rdkit_buildutils-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for rdkit_buildutils-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bab3da58856b8f77b0e930e680b1efa45d4581636b170e989a228dacf300ed75
MD5 0c0f4204045f14c68b25735cdf19ab1b
BLAKE2b-256 0f279e6a0a1684033058275ea433f748134bbf056c58ef0ed8c2b9641cf6b7de

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