Exemple #1
0
def doO3Dalign(i,
               mol,
               qmol,
               threshold,
               perfect_score,
               writer,
               conformerProps=None,
               minEnergy=None):
    pyO3As = rdMolAlign.GetO3AForProbeConfs(mol, qmol)
    best_score = 0
    j = 0
    conf_id = -1
    for pyO3A in pyO3As:
        align = pyO3A.Align()
        score = pyO3A.Score()
        if score > best_score:
            best_score = score
            conf_id = j
        j += 1

    #utils.log("Best score = ",best_score)
    if not threshold or perfect_score - best_score < threshold:
        utils.log(i, align, score, Chem.MolToSmiles(mol, isomericSmiles=True))
        mol.SetDoubleProp(field_O3DAScore, score)
        if conformerProps and minEnergy:
            eAbs = conformerProps[conf_id][(conformers.field_EnergyAbs)]
            eDelta = eAbs - minEnergy
            if eAbs:
                mol.SetDoubleProp(conformers.field_EnergyAbs, eAbs)
            if eDelta:
                mol.SetDoubleProp(conformers.field_EnergyDelta, eDelta)
        writer.write(mol, confId=conf_id)
        return 1
    return 0
Exemple #2
0
    def test15MultiConfs(self):
        " test multi-conf alignment "
        sdf = os.path.join(RDConfig.RDBaseDir, 'Code', 'GraphMol', 'MolAlign',
                           'test_data', 'ref_e2.sdf')
        suppl = Chem.SDMolSupplier(sdf, removeHs=False)
        refMol = suppl[13]
        sdf = os.path.join(RDConfig.RDBaseDir, 'Code', 'GraphMol', 'MolAlign',
                           'test_data', 'probe_mol.sdf')
        prbSuppl = Chem.SDMolSupplier(sdf, removeHs=False)
        tms = [x for x in prbSuppl]
        prbMol = tms[0]
        for tm in tms[1:]:
            prbMol.AddConformer(tm.GetConformer(), True)
        self.failUnlessEqual(prbMol.GetNumConformers(), 50)

        refParams = ChemicalForceFields.MMFFGetMoleculeProperties(refMol)
        prbParams = ChemicalForceFields.MMFFGetMoleculeProperties(prbMol)
        cp = Chem.Mol(prbMol)
        o3s = rdMolAlign.GetO3AForProbeConfs(cp, refMol, 1, prbParams,
                                             refParams)
        for i in range(prbMol.GetNumConformers()):
            cp2 = Chem.Mol(prbMol)
            o3 = rdMolAlign.GetO3A(cp2, refMol, prbParams, refParams, prbCid=i)
            self.failUnlessAlmostEqual(o3s[i].Align(), o3.Align(), 6)
            self.failUnlessAlmostEqual(o3s[i].Score(), o3.Score(), 6)

        cp = Chem.Mol(prbMol)
        o3s = rdMolAlign.GetCrippenO3AForProbeConfs(cp, refMol)
        for i in range(prbMol.GetNumConformers()):
            cp2 = Chem.Mol(prbMol)
            o3 = rdMolAlign.GetCrippenO3A(cp2, refMol, prbCid=i)
            self.failUnlessAlmostEqual(o3s[i].Align(), o3.Align(), 6)
            self.failUnlessAlmostEqual(o3s[i].Score(), o3.Score(), 6)
Exemple #3
0
def doO3Dalign(i,
               mol,
               qmol,
               use_crippen,
               threshold,
               perfect_score,
               writer,
               conformerProps=None,
               minEnergy=None):

    if use_crippen:
        pyO3As = rdMolAlign.GetCrippenO3AForProbeConfs(mol, qmol)
    else:
        pyO3As = rdMolAlign.GetO3AForProbeConfs(mol, qmol)

    if len(pyO3As) == 0:
        return 0

    best_score = 0
    j = 0
    conf_id = -1

    for pyO3A in pyO3As:
        align = pyO3A.Align()
        score = pyO3A.Score()
        if score > best_score:
            best_score = score
            conf_id = j
        j += 1

    #utils.log("Best score = ",best_score)
    if not threshold or perfect_score - best_score < threshold:
        utils.log("Molecule", i, align, score)
        mol.SetDoubleProp(field_O3DAScore, score)
        if conformerProps and minEnergy:
            eAbs = conformerProps[conf_id][(conformers.field_EnergyAbs)]
            eDelta = eAbs - minEnergy
            if eAbs:
                mol.SetDoubleProp(conformers.field_EnergyAbs, eAbs)
            if eDelta:
                mol.SetDoubleProp(conformers.field_EnergyDelta, eDelta)
        writer.write(mol, confId=conf_id)
        return 1
    return 0
Exemple #4
0
    def test16MultithreadBug(self):
        " test multi-conf alignment "
        nConfs = 10
        sdf = os.path.join(RDConfig.RDBaseDir, 'Code', 'GraphMol', 'MolAlign',
                           'test_data', 'bzr_data.sdf')
        bzr_ms_o = [x for x in Chem.SDMolSupplier(sdf, removeHs=False)]
        bzr_ms = [Chem.Mol(x) for x in bzr_ms_o]
        for m in bzr_ms:
            c = m.GetConformer()
            while m.GetNumConformers() < nConfs:
                cc = Chem.Conformer(c)
                m.AddConformer(cc, assignId=True)

        #refParams = ChemicalForceFields.MMFFGetMoleculeProperties(bzr_ms_o[0])

        for i, m in enumerate(bzr_ms):
            #prbParams = ChemicalForceFields.MMFFGetMoleculeProperties(m)
            algs = rdMolAlign.GetO3AForProbeConfs(
                m,
                bzr_ms_o[0],
                numThreads=4  #,prbPyMMFFMolProperties=prbParams,
                #refPyMMFFMolProperties=refParams
            )
            self.failUnlessEqual(len(algs), nConfs)