Datamol Descriptors and Visualization Reference
Descriptors Module (datamol.descriptors)
The descriptors module provides tools for computing molecular properties and descriptors.
Specialized Descriptor Functions
dm.descriptors.n_aromatic_atoms(mol)
Calculate the number of aromatic atoms. - Returns: Integer count - Use case: Aromaticity analysis
dm.descriptors.n_aromatic_atoms_proportion(mol)
Calculate ratio of aromatic atoms to total heavy atoms. - Returns: Float between 0 and 1 - Use case: Quantifying aromatic character
dm.descriptors.n_charged_atoms(mol)
Count atoms with nonzero formal charge. - Returns: Integer count - Use case: Charge distribution analysis
dm.descriptors.n_rigid_bonds(mol)
Count non-rotatable bonds (neither single bonds nor ring bonds). - Returns: Integer count - Use case: Molecular flexibility assessment
dm.descriptors.n_stereo_centers(mol)
Count stereogenic centers (chiral centers). - Returns: Integer count - Use case: Stereochemistry analysis
dm.descriptors.n_stereo_centers_unspecified(mol)
Count stereocenters lacking stereochemical specification. - Returns: Integer count - Use case: Identifying incomplete stereochemistry
Batch Descriptor Computation
dm.descriptors.compute_many_descriptors(mol, properties_fn=None, add_properties=True)
Compute multiple molecular properties for a single molecule.
- Parameters:
- properties_fn: Custom list of descriptor functions
- add_properties: Include additional computed properties
- Returns: Dictionary of descriptor name → value pairs
- Default descriptors include:
- Molecular weight, LogP, number of H-bond donors/acceptors
- Aromatic atoms, stereocenters, rotatable bonds
- TPSA (Topological Polar Surface Area)
- Ring count, heteroatom count
- Example:
python
mol = dm.to_mol("CCO")
descriptors = dm.descriptors.compute_many_descriptors(mol)
# Returns: {'mw': 46.07, 'logp': -0.03, 'hbd': 1, 'hba': 1, ...}
dm.descriptors.batch_compute_many_descriptors(mols, properties_fn=None, add_properties=True, n_jobs=1, batch_size=None, progress=False)
Compute descriptors for multiple molecules in parallel.
- Parameters:
- mols: List of molecules
- n_jobs: Number of parallel jobs (-1 for all cores)
- batch_size: Chunk size for parallel processing
- progress: Show progress bar
- Returns: Pandas DataFrame with one row per molecule
- Example:
python
mols = [dm.to_mol(smi) for smi in smiles_list]
df = dm.descriptors.batch_compute_many_descriptors(
mols,
n_jobs=-1,
progress=True
)
RDKit Descriptor Access
dm.descriptors.any_rdkit_descriptor(name)
Retrieve any descriptor function from RDKit by name.
- Parameters: name - Descriptor function name (e.g., 'MolWt', 'TPSA')
- Returns: RDKit descriptor function
- Available descriptors: From rdkit.Chem.Descriptors and rdkit.Chem.rdMolDescriptors
- Example:
python
tpsa_fn = dm.descriptors.any_rdkit_descriptor('TPSA')
tpsa_value = tpsa_fn(mol)
Common Use Cases
Drug-likeness Filtering (Lipinski's Rule of Five):
descriptors = dm.descriptors.compute_many_descriptors(mol)
is_druglike = (
descriptors['mw'] <= 500 and
descriptors['logp'] <= 5 and
descriptors['hbd'] <= 5 and
descriptors['hba'] <= 10
)
ADME Property Analysis:
df = dm.descriptors.batch_compute_many_descriptors(compound_library)
# Filter by TPSA for blood-brain barrier penetration
bbb_candidates = df[df['tpsa'] < 90]
Visualization Module (datamol.viz)
The viz module provides tools for rendering molecules and conformers as images.
Main Visualization Function
dm.viz.to_image(mols, legends=None, n_cols=4, use_svg=False, mol_size=(200, 200), highlight_atom=None, highlight_bond=None, outfile=None, max_mols=None, copy=True, indices=False, ...)
Generate image grid from molecules.
- Parameters:
- mols: Single molecule or list of molecules
- legends: String or list of strings as labels (one per molecule)
- n_cols: Number of molecules per row (default: 4)
- use_svg: Output SVG format (True) or PNG (False, default)
- mol_size: Tuple (width, height) or single int for square images
- highlight_atom: Atom indices to highlight (list or dict)
- highlight_bond: Bond indices to highlight (list or dict)
- outfile: Save path (local or remote, supports fsspec)
- max_mols: Maximum number of molecules to display
- indices: Draw atom indices on structures (default: False)
- align: Align molecules using MCS (Maximum Common Substructure)
- Returns: Image object (can be displayed in Jupyter) or saves to file
- Example:
```python
# Basic grid
dm.viz.to_image(mols[:10], legends=[dm.to_smiles(m) for m in mols[:10]])
# Save to file dm.viz.to_image(mols, outfile="molecules.png", n_cols=5)
# Highlight substructure dm.viz.to_image(mol, highlight_atom=[0, 1, 2], highlight_bond=[0, 1])
# Aligned visualization dm.viz.to_image(mols, align=True, legends=activity_labels) ```
Conformer Visualization
dm.viz.conformers(mol, n_confs=None, align_conf=True, n_cols=3, sync_views=True, remove_hs=True, ...)
Display multiple conformers in grid layout.
- Parameters:
- mol: Molecule with embedded conformers
- n_confs: Number or list of conformer indices to display (None = all)
- align_conf: Align conformers for comparison (default: True)
- n_cols: Grid columns (default: 3)
- sync_views: Synchronize 3D views when interactive (default: True)
- remove_hs: Remove hydrogens for clarity (default: True)
- Returns: Grid of conformer visualizations
- Use case: Comparing conformational diversity
- Example:
python
mol_3d = dm.conformers.generate(mol, n_confs=20)
dm.viz.conformers(mol_3d, n_confs=10, align_conf=True)
Circle Grid Visualization
dm.viz.circle_grid(center_mol, circle_mols, mol_size=200, circle_margin=50, act_mapper=None, ...)
Create concentric ring visualization with central molecule.
- Parameters:
- center_mol: Molecule at center
- circle_mols: List of molecule lists (one list per ring)
- mol_size: Image size per molecule
- circle_margin: Spacing between rings (default: 50)
- act_mapper: Activity mapping dictionary for color-coding
- Returns: Circular grid image
- Use case: Visualizing molecular neighborhoods, SAR analysis, similarity networks
- Example:
python
# Show a reference molecule surrounded by similar compounds
dm.viz.circle_grid(
center_mol=reference,
circle_mols=[nearest_neighbors, second_tier]
)
Visualization Best Practices
- Use legends for clarity: Always label molecules with SMILES, IDs, or activity values
- Align related molecules: Use
align=Trueinto_image()for SAR analysis - Adjust grid size: Set
n_colsbased on molecule count and display width - Use SVG for publications: Set
use_svg=Truefor scalable vector graphics - Highlight substructures: Use
highlight_atomandhighlight_bondto emphasize features - Save large grids: Use
outfileparameter to save rather than display in memory