Descriptor calculation¶
DescriptorWrapper unifies the interface
between descriptor tools that don’t otherwise share one — RDKit’s 3D
descriptors (qsarmil.descriptor.rdkit) and MolFeat’s calculators
(e.g. Pharmacophore3D, USRDescriptors) — so both can be dropped into
the same pipeline interchangeably. It takes any callable that computes a
descriptor vector for a single (mol, conformer_id) pair, and applies it
across a bag of conformers per molecule.
run() also cleans up the resulting descriptor matrix: values above a
fixed extreme-value threshold are treated as invalid, and any descriptor
column that is invalid for at least one molecule in the batch is dropped
from all molecules, so the final feature matrix has no NaN/extreme
values left in it.
Once descriptors are computed, BagMinMaxScaler (from milearn) scales
each descriptor column to a common range — fit on the training bags only,
then applied to validation/test bags with the same fitted scaling.
Example: SMILES → conformers → descriptors¶
from rdkit import Chem
from qsarmil.conformer import RDKitConformerGenerator
from qsarmil.descriptor.wrapper import DescriptorWrapper
from qsarmil.descriptor.rdkit import RDKitWHIM
from milearn.preprocessing import BagMinMaxScaler
smiles = [
"CC(C)Cc1ccc(cc1)C(C)C(=O)O",
"COc1ccc2cc(ccc2c1)C(C)C(=O)O",
]
mols = [Chem.MolFromSmiles(smi) for smi in smiles]
conf_gen = RDKitConformerGenerator(num_conf=10, random_seed=42)
conformers = conf_gen.run(mols)
desc_calc = DescriptorWrapper(RDKitWHIM(), verbose=True)
x = desc_calc.run(conformers)
scaler = BagMinMaxScaler()
scaler.fit(x)
x_scaled = scaler.transform(x)
A MolFeat descriptor is used the same way — just swap the transformer:
from molfeat.calc import Pharmacophore3D
desc_calc = DescriptorWrapper(Pharmacophore3D(factory="pmapper"))
x = desc_calc.run(conformers)
Available RDKit descriptors¶
RDKitGEOM— geometric descriptors (asphericity, eccentricity, PMI, radius of gyration, etc.)RDKitAUTOCORR— 3D autocorrelationRDKitRDF— radial distribution functionRDKitMORSE— Morse descriptorsRDKitWHIM— WHIM descriptorsRDKitGETAWAY— GETAWAY descriptors
Failure handling¶
If descriptor calculation fails for a given molecule’s bag, it is wrapped
in a FailedMolecule sentinel rather than
raising, consistent with Conformer generation.