Source code for mordred.LogS
# flake8: noqa: S1
# -*- coding: UTF-8 -*-
from __future__ import unicode_literals
import math
from rdkit import Chem
from ._base import Descriptor
from .Weight import Weight
__all__ = ("LogS",)
_smarts_logs = {
"[NH0;X3;v3]": 0.71535,
"[NH2;X3;v3]": 0.41056,
"[nH0;X3]": 0.82535,
"[OH0;X2;v2]": 0.31464,
"[OH0;X1;v2]": 0.14787,
"[OH1;X2;v2]": 0.62998,
"[CH2;!R]": -0.35634,
"[CH3;!R]": -0.33888,
"[CH0;R]": -0.21912,
"[CH2;R]": -0.23057,
"[ch0]": -0.37570,
"[ch1]": -0.22435,
"F": -0.21728,
"Cl": -0.49721,
"Br": -0.57982,
"I": -0.51547,
}
_smarts_logs_molecules = [
(Chem.MolFromSmarts(smarts), log) for smarts, log in _smarts_logs.items()
]
[docs]
class LogS(Descriptor):
r"""Filter-it™ LogS descriptor.
http://silicos-it.be.s3-website-eu-west-1.amazonaws.com/software/filter-it/1.0.2/filter-it.html#installation
"""
__slots__ = ()
since = "1.1.0"
explicit_hydrogens = False
kekulize = False
@classmethod
def preset(cls, version):
yield cls()
def dependencies(self):
return {"MW": Weight(exact=False)}
[docs]
def description(self):
return "Filter-it™ LogS"
def __str__(self):
return "FilterItLogS"
def parameters(self):
return ()
def calculate(self, MW):
logS = 0.89823 - 0.10369 * math.sqrt(MW)
for smarts, log in _smarts_logs_molecules:
logS += len(self.mol.GetSubstructMatches(smarts)) * log
return logS
rtype = float