Source code for mordred.AtomCount

from rdkit.Chem import rdMolDescriptors

from ._base import Descriptor
from ._atomic_property import halogen

__all__ = (
    'AtomCount',
)


[docs]class AtomCount(Descriptor): r"""atom count descriptor. :type type: str :param type: type to count. * 'Atom' * 'HeavyAtom' * 'Spiro' * 'Bridgehead' * 'X' - all halogen * element symbol """ __slots__ = ('_type',) @classmethod def preset(cls): return map(cls, [ 'Atom', 'HeavyAtom', 'Spiro', 'Bridgehead', 'H', 'B', 'C', 'N', 'O', 'S', 'P', 'F', 'Cl', 'Br', 'I', 'X', ]) @property def explicit_hydrogens(self): u"""require explicit_hydrogens when type is 'H' or 'Atom'.""" return self._type in set(['H', 'Atom']) def __str__(self): return 'n' + self._type def parameters(self): return self._type, def __init__(self, type='Atom'): self._type = type def _calc_X(self): X = halogen return sum(a.GetAtomicNum() in X for a in self.mol.GetAtoms()) def _calc(self): return sum(a.GetSymbol() == self._type for a in self.mol.GetAtoms()) def _calc_all(self): return self.mol.GetNumAtoms() def calculate(self): if self._type == 'X': return self._calc_X() elif self._type in ['Atom', 'HeavyAtom']: return self._calc_all() elif self._type == 'Spiro': return rdMolDescriptors.CalcNumSpiroAtoms(self.mol) elif self._type == 'Bridgehead': return rdMolDescriptors.CalcNumBridgeheadAtoms(self.mol) else: return self._calc() rtype = int