Source code for mordred.Constitutional
import numpy as np
from ._base import Descriptor
from ._atomic_property import AtomicProperty, get_properties
__all__ = ("ConstitutionalSum", "ConstitutionalMean")
[docs]
class ConstitutionalSum(Descriptor):
r"""sum of constitutional descriptor.
.. math::
S_p = \sum^A_{i=1} \frac{p_i}{p_{\rm C}}
where
:math:`p_i` is atomic property of i-th atom,
:math:`p_{\rm C}` is atomic property of carbon
:type prop: :py:class:`str` or :py:class:`function`
:param prop: :ref:`atomic_properties`
"""
since = "1.0.0"
__slots__ = ("_prop",)
[docs]
def description(self):
return "sum of constitutional weighted by {}".format(self._prop.get_long())
@classmethod
def preset(cls, version):
return map(cls, get_properties())
def parameters(self):
return (self._prop,)
def __init__(self, prop="v"):
self._prop = AtomicProperty(self.explicit_hydrogens, prop)
_prefix = "S"
def __str__(self):
return "{}{}".format(self._prefix, self._prop.as_argument)
def dependencies(self):
return {"P": self._prop}
def calculate(self, P):
return np.sum(P / self._prop.carbon)
rtype = float
[docs]
class ConstitutionalMean(ConstitutionalSum):
r"""mean of constitutional descriptor.
.. math::
M_p = \frac{S_p}{A}
:type prop: :py:class:`str` or :py:class:`function`
:param prop: :ref:`atomic_properties`
:rtype: float
"""
since = "1.0.0"
__slots__ = ("_prop",)
_prefix = "M"
[docs]
def description(self):
return "mean of constitutional weighted by {}".format(self._prop.get_long())
@classmethod
def preset(cls, version):
return map(cls, get_properties())
def dependencies(self):
return {"S": ConstitutionalSum(self._prop)}
def calculate(self, S):
return S / self.mol.GetNumAtoms()