예제 #1
0
    def test1Basics(self):
        fs = [
            FreeChemicalFeature('Aromatic', 'Foo', Point3D(0, 0, 0)),
            FreeChemicalFeature('Acceptor', 'Foo', Point3D(2, 0, 0)),
            FreeChemicalFeature('Acceptor', 'Foo', Point3D(2.1, 0, 0))
        ]
        aFmp = FeatMaps.FeatMapParams()
        aFmp.radius = 2.0
        bFmp = FeatMaps.FeatMapParams()
        bFmp.radius = 1.0

        fmps = {'Aromatic': aFmp, 'Acceptor': bFmp}

        fmap = FeatMaps.FeatMap(params=fmps)
        fmap.AddFeature(fs[0], 1.0)
        fmap.AddFeature(fs[1], 1.0)
        fmap.AddFeature(fs[2], 2.0)
        fmap.AddFeature(fs[2], 2.0)

        self.assertTrue(fmap.GetNumFeatures() == 4)
        self.assertTrue(len(fmap.GetFeatures()) == 4)
        fmap.DropFeature(3)
        self.assertTrue(fmap.GetNumFeatures() == 3)
        self.assertTrue(len(fmap.GetFeatures()) == 3)

        f = fmap.GetFeature(0)
        self.assertTrue(f.GetFamily() == 'Aromatic')
        self.assertTrue(feq(f.weight, 1.0))
        f = fmap.GetFeature(1)
        self.assertTrue(f.GetFamily() == 'Acceptor')
        self.assertTrue(feq(f.weight, 1.0))
        f = fmap.GetFeature(2)
        self.assertTrue(f.GetFamily() == 'Acceptor')
        self.assertTrue(feq(f.weight, 2.0))
예제 #2
0
    def test5ScoreFeats(self):
        aFmp = FeatMaps.FeatMapParams()
        bFmp = FeatMaps.FeatMapParams()
        fmps = {'Aromatic': aFmp, 'Acceptor': bFmp}
        fmap = FeatMaps.FeatMap(params=fmps)

        fs = [
            FreeChemicalFeature('Aromatic', 'Foo', Point3D(0, 0, 0)),
            FreeChemicalFeature('Acceptor', 'Foo', Point3D(2, 0, 0)),
            FreeChemicalFeature('Acceptor', 'Foo', Point3D(2.1, 0, 0))
        ]
        fmap.AddFeature(fs[0], 1.1)
        fmap.AddFeature(fs[1], 1.1)
        fmap.AddFeature(fs[2], 2.1)

        l1 = fmap._loopOverMatchingFeats(
            FreeChemicalFeature('Aromatic', '', Point3D(0, 0, 0)))
        l1 = list(l1)
        self.assertTrue(len(l1) == 1)
        self.assertTrue(l1[0][0] == 0)
        self.assertTrue(l1[0][1].GetFamily() == 'Aromatic')

        l1 = fmap._loopOverMatchingFeats(
            FreeChemicalFeature('Acceptor', '', Point3D(0, 0, 0)))
        l1 = list(l1)
        self.assertTrue(len(l1) == 2)
        self.assertTrue(l1[0][0] == 1)
        self.assertTrue(l1[0][1].GetFamily() == 'Acceptor')
        self.assertTrue(l1[1][0] == 2)
        self.assertTrue(l1[1][1].GetFamily() == 'Acceptor')
예제 #3
0
    def test7ScoreFeats(self):
        aFmp = FeatMaps.FeatMapParams()
        aFmp.radius = 2.0
        aFmp.featProfile = FeatMaps.FeatMapParams.FeatProfile.Box
        bFmp = FeatMaps.FeatMapParams()
        bFmp.radius = 1.0
        bFmp.featProfile = FeatMaps.FeatMapParams.FeatProfile.Box

        fmps = {'Aromatic': aFmp, 'Acceptor': bFmp}
        fmap = FeatMaps.FeatMap(params=fmps)

        fs = [
            FreeChemicalFeature('Aromatic', 'Foo', Point3D(0, 0, 0)),
        ]
        fmap.AddFeature(fs[0], 1.1)

        fs = [
            FreeChemicalFeature('Aromatic', '', Point3D(0, 1, 0)),
            FreeChemicalFeature('Acceptor', '', Point3D(1.5, 0, 0)),
        ]

        sc = fmap.ScoreFeats(fs)
        self.assertTrue(feq(sc, 1.1))

        msv = [-1] * 1
        fsv = [-1] * 2
        fsfmi = [-1] * 2
        sc = fmap.ScoreFeats(fs,
                             mapScoreVect=msv,
                             featsScoreVect=fsv,
                             featsToFeatMapIdx=fsfmi)
        self.assertTrue(feq(sc, 1.1))
        self.assertTrue(feq(sum(msv), sc))
        self.assertTrue(feq(sum(fsv), sc))
        self.assertTrue(fsfmi == [[0], []])

        fmap.scoreMode = FeatMaps.FeatMapScoreMode.Closest
        sc = fmap.ScoreFeats(fs,
                             mapScoreVect=msv,
                             featsScoreVect=fsv,
                             featsToFeatMapIdx=fsfmi)
        self.assertTrue(feq(sc, 1.1))
        self.assertTrue(feq(sum(msv), sc))
        self.assertTrue(feq(sum(fsv), sc))
        self.assertTrue(fsfmi == [[0], []])

        fmap.scoreMode = FeatMaps.FeatMapScoreMode.Best
        sc = fmap.ScoreFeats(fs,
                             mapScoreVect=msv,
                             featsScoreVect=fsv,
                             featsToFeatMapIdx=fsfmi)
        self.assertTrue(feq(sc, 1.1))
        self.assertTrue(feq(sum(msv), sc))
        self.assertTrue(feq(sum(fsv), sc))
        self.assertTrue(fsfmi == [[0], []])
예제 #4
0
    def ParseParamBlock(self):
        paramLineSplitter = re.compile(r'([a-zA-Z]+) *= *(\S+)')
        params = {}

        l = self._NextLine()
        while l and l != 'EndParams':
            param = FeatMaps.FeatMapParams()
            vals = paramLineSplitter.findall(l)
            for name, val in vals:
                name = name.lower()
                if name == 'family':
                    family = val
                elif name == 'radius':
                    param.radius = float(val)
                elif name == 'width':
                    param.width = float(val)
                elif name == 'profile':
                    try:
                        param.featProfile = getattr(param.FeatProfile, val)
                    except AttributeError:
                        raise FeatMapParseError(
                            'Profile %s not recognized on line %d' %
                            (val, self._lineNum))
                else:
                    raise FeatMapParseError(
                        'FeatMapParam option %s not recognized on line %d' %
                        (name, self._lineNum))
            params[family] = param
            l = self._NextLine()

        if l != 'EndParams':
            raise FeatMapParseError('EndParams line not found')

        return params
예제 #5
0
    def test4FeatFeatScoreBox(self):
        aFmp = FeatMaps.FeatMapParams()
        aFmp.radius = 2.0
        aFmp.featProfile = FeatMaps.FeatMapParams.FeatProfile.Box
        fmps = {'Aromatic': aFmp}
        fmap = FeatMaps.FeatMap(params=fmps)

        fs = [FreeChemicalFeature('Aromatic', 'Foo', Point3D(0, 0, 0))]
        fmap.AddFeature(fs[0], 1.1)
        self.assertTrue(len(fmap.GetFeatures()) == 1)

        sc = fmap.GetFeatFeatScore(
            fmap.GetFeature(0),
            FreeChemicalFeature('Aromatic', '', Point3D(1, 0, 0)))
        self.assertTrue(feq(sc, 1.1))
        sc = fmap.GetFeatFeatScore(
            fmap.GetFeature(0),
            FreeChemicalFeature('Aromatic', '', Point3D(1.5, 0, 0)))
        self.assertTrue(feq(sc, 1.1))
        sc = fmap.GetFeatFeatScore(
            fmap.GetFeature(0),
            FreeChemicalFeature('Aromatic', '', Point3D(0, 0, 0)))
        self.assertTrue(feq(sc, 1.1))
        sc = fmap.GetFeatFeatScore(
            fmap.GetFeature(0),
            FreeChemicalFeature('Aromatic', '', Point3D(2.1, 0, 0)))
        self.assertTrue(feq(sc, 0))
예제 #6
0
  def test2FeatFeatScoreGauss(self):
    aFmp = FeatMaps.FeatMapParams()
    aFmp.radius = 2.0
    fmps = {'Aromatic':aFmp}
    fmap = FeatMaps.FeatMap(params=fmps)

    fs = [FreeChemicalFeature('Aromatic','Foo',Point3D(0,0,0))]
    fmap.AddFeature(fs[0],1.0)
    self.failUnless(len(fmap.GetFeatures())==1)

    sc = fmap.GetFeatFeatScore(fmap.GetFeature(0),FreeChemicalFeature('Aromatic','',Point3D(1,0,0)))
    self.failUnless(feq(sc,math.exp(-1)))
    sc = fmap.GetFeatFeatScore(fmap.GetFeature(0),FreeChemicalFeature('Aromatic','',Point3D(1.5,0,0)))
    self.failUnless(feq(sc,math.exp(-2.25)))
    sc = fmap.GetFeatFeatScore(fmap.GetFeature(0),FreeChemicalFeature('Aromatic','',Point3D(0,0,0)))
    self.failUnless(feq(sc,1.0))
    sc = fmap.GetFeatFeatScore(fmap.GetFeature(0),FreeChemicalFeature('Aromatic','',Point3D(2.1,0,0)))
    self.failUnless(feq(sc,0))
    
    sc = fmap.GetFeatFeatScore(fmap.GetFeature(0),FreeChemicalFeature('Acceptor','',Point3D(1,0,0)))
    self.failUnless(feq(sc,0))
    sc = fmap.GetFeatFeatScore(fmap.GetFeature(0),FreeChemicalFeature('Acceptor','',Point3D(1,0,0)),
                               typeMatch=False)
    self.failUnless(feq(sc,math.exp(-1)))

    self.failUnlessRaises(IndexError,lambda: fmap.GetFeatFeatScore(fmap.GetFeature(1),FreeChemicalFeature('Aromatic','',Point3D(0,0,0))))
예제 #7
0
    def __init__(self, reference: str = None, target_s: str = None):
        '''
        Setup of the SuCOS scoring class. If you do not set reference or target_s, you will have to feed them
        as rdkit mol objects to each class method/function.

        Sets: self.reference: an rdkit mol object of the reference mol
              self.target_s: a list of rdkit mol objects for the target mols

        :param reference: an sdf or mol file containing the reference (hit) molecule
        :param target_s: an sdf or mol file containing one or multiple molecules to compare against reference
        '''
        self.fdef = AllChem.BuildFeatureFactory(
            os.path.join(RDConfig.RDDataDir, 'BaseFeatures.fdef'))

        self.fmParams = {}
        for k in self.fdef.GetFeatureFamilies():
            self.fparams = FeatMaps.FeatMapParams()
            self.fmParams[k] = self.fparams

        self.keep = ('Donor', 'Acceptor', 'NegIonizable', 'PosIonizable',
                     'ZnBinder', 'Aromatic', 'Hydrophobe', 'LumpedHydrophobe')

        if reference:
            refs = Chem.SDMolSupplier(reference, sanitize=True)
            self.reference = [x for x in refs if x][0]

        if target_s:
            tgts = Chem.SDMolSupplier(target_s, sanitize=True)
            self.target_s = [x for x in tgts if x]
예제 #8
0
  def test3FeatFeatScoreTriangle(self):
    aFmp = FeatMaps.FeatMapParams()
    aFmp.width = 2.0
    aFmp.radius = 3.0
    aFmp.featProfile=FeatMaps.FeatMapParams.FeatProfile.Triangle
    fmps = {'Aromatic':aFmp}
    fmap = FeatMaps.FeatMap(params=fmps)

    fs = [FreeChemicalFeature('Aromatic','Foo',Point3D(0,0,0))]
    fmap.AddFeature(fs[0],1.0)
    self.failUnless(len(fmap.GetFeatures())==1)


    sc = fmap.GetFeatFeatScore(fmap.GetFeature(0),FreeChemicalFeature('Aromatic','',Point3D(1,0,0)))
    self.failUnless(feq(sc,0.5))
    sc = fmap.GetFeatFeatScore(fmap.GetFeature(0),FreeChemicalFeature('Aromatic','',Point3D(1.5,0,0)))
    self.failUnless(feq(sc,0.25))
    sc = fmap.GetFeatFeatScore(fmap.GetFeature(0),FreeChemicalFeature('Aromatic','',Point3D(0,0,0)))
    self.failUnless(feq(sc,1.0))
    sc = fmap.GetFeatFeatScore(fmap.GetFeature(0),FreeChemicalFeature('Aromatic','',Point3D(2.1,0,0)))
    self.failUnless(feq(sc,0))
예제 #9
0
    def test8ScoreFeatDirs(self):
        aFmp = FeatMaps.FeatMapParams()
        aFmp.radius = 2.0
        aFmp.featProfile = FeatMaps.FeatMapParams.FeatProfile.Box

        fmps = {'Acceptor': aFmp}
        fmap = FeatMaps.FeatMap(params=fmps)
        fmap.dirScoreMode = FeatMaps.FeatDirScoreMode.DotFullRange

        fs = [
            FreeChemicalFeature('Acceptor', 'Foo', Point3D(0, 0, 0)),
        ]
        fs[0].featDirs = [Point3D(0, 1, 0)]
        fmap.AddFeature(fs[0], 1.1)

        fs = [
            FreeChemicalFeature('Acceptor', '', Point3D(1.0, 0, 0)),
        ]
        fs[0].featDirs = [Point3D(0, 1, 0)]

        sc = fmap.ScoreFeats(fs)
        self.assertTrue(feq(sc, 1.1))

        fs[0].featDirs = [Point3D(0, -1, 0)]
        sc = fmap.ScoreFeats(fs)
        self.assertTrue(feq(sc, -1.1))

        fs[0].featDirs = [Point3D(0, 0, 1)]
        sc = fmap.ScoreFeats(fs)
        self.assertTrue(feq(sc, 0.0))

        fmap.dirScoreMode = FeatMaps.FeatDirScoreMode.DotPosRange
        fs[0].featDirs = [Point3D(0, -1, 0)]
        sc = fmap.ScoreFeats(fs)
        self.assertTrue(feq(sc, 0))

        fs[0].featDirs = [Point3D(0, 1, 0)]
        sc = fmap.ScoreFeats(fs)
        self.assertTrue(feq(sc, 1.1))
예제 #10
0
파일: sucos.py 프로젝트: pcm32/galaxytools
import argparse, os, sys, gzip
import numpy as np
from rdkit import Chem, rdBase, RDConfig
from rdkit.Chem import AllChem, rdShapeHelpers
from rdkit.Chem.FeatMaps import FeatMaps
import utils


### start function definitions #########################################

# Setting up the features to use in FeatureMap
fdef = AllChem.BuildFeatureFactory(os.path.join(RDConfig.RDDataDir, 'BaseFeatures.fdef'))

fmParams = {}
for k in fdef.GetFeatureFamilies():
    fparams = FeatMaps.FeatMapParams()
    fmParams[k] = fparams

keep = ('Donor', 'Acceptor', 'NegIonizable', 'PosIonizable', 'ZnBinder',
        'Aromatic', 'Hydrophobe', 'LumpedHydrophobe')

def filterFeature(f):
    result = f.GetFamily() in keep
    # TODO - nothing ever seems to be filtered. Is this expected?
    if not result:
        utils.log("Filtered out feature type", f.GetFamily())
    return result

def getRawFeatures(mol):

    rawFeats = fdef.GetFeaturesForMol(mol)
예제 #11
0
    def test6ScoreFeats(self):
        aFmp = FeatMaps.FeatMapParams()
        aFmp.radius = 2.0
        bFmp = FeatMaps.FeatMapParams()
        bFmp.radius = 1.0

        # use box scoring to make math easier... the other scoring
        # functions are tested above
        aFmp.featProfile = FeatMaps.FeatMapParams.FeatProfile.Box
        bFmp.featProfile = FeatMaps.FeatMapParams.FeatProfile.Box

        fmps = {'Aromatic': aFmp, 'Acceptor': bFmp}

        fmap = FeatMaps.FeatMap(params=fmps)

        fs = [
            FreeChemicalFeature('Aromatic', 'Foo', Point3D(0, 0, 0)),
            FreeChemicalFeature('Acceptor', 'Foo', Point3D(2, 0, 0)),
            FreeChemicalFeature('Acceptor', 'Foo', Point3D(2.1, 0, 0))
        ]
        fmap.AddFeature(fs[0], 1.1)
        fmap.AddFeature(fs[1], 1.1)
        fmap.AddFeature(fs[2], 2.1)

        fs = [
            FreeChemicalFeature('Aromatic', '', Point3D(0, 1, 0)),
            FreeChemicalFeature('Acceptor', '', Point3D(1.5, 0, 0)),
        ]

        sc = fmap.ScoreFeats(fs)
        self.assertTrue(feq(sc, 4.3))

        msv = [-1] * 3
        fsv = [-1] * 2
        fsfmi = [None] * 2
        sc = fmap.ScoreFeats(fs,
                             mapScoreVect=msv,
                             featsScoreVect=fsv,
                             featsToFeatMapIdx=fsfmi)
        self.assertTrue(feq(sc, 4.3))
        self.assertTrue(feq(sum(msv), sc))
        self.assertTrue(feq(sum(fsv), sc))
        self.assertTrue(fsfmi == [[0], [1, 2]])

        # make sure we reset the vectors internally:
        sc = fmap.ScoreFeats(fs,
                             mapScoreVect=msv,
                             featsScoreVect=fsv,
                             featsToFeatMapIdx=fsfmi)
        self.assertTrue(feq(sc, 4.3))
        self.assertTrue(feq(sum(msv), sc))
        self.assertTrue(feq(sum(fsv), sc))
        self.assertTrue(fsfmi == [[0], [1, 2]])

        fmap.scoreMode = FeatMaps.FeatMapScoreMode.Closest
        sc = fmap.ScoreFeats(fs,
                             mapScoreVect=msv,
                             featsScoreVect=fsv,
                             featsToFeatMapIdx=fsfmi)
        self.assertTrue(feq(sc, 2.1))
        self.assertTrue(feq(sum(msv), sc))
        self.assertTrue(feq(sum(fsv), sc))
        self.assertTrue(fsfmi == [[0], [1]])

        fmap.scoreMode = FeatMaps.FeatMapScoreMode.Best
        sc = fmap.ScoreFeats(fs,
                             mapScoreVect=msv,
                             featsScoreVect=fsv,
                             featsToFeatMapIdx=fsfmi)
        self.assertTrue(feq(sc, 3.2))
        self.assertTrue(feq(sum(msv), sc))
        self.assertTrue(feq(sum(fsv), sc))
        self.assertTrue(fsfmi == [[0], [2]])