1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
from rdkit import Chem
from rdkit.Chem import ChemicalForceFields
from rdkit import RDConfig
import unittest
import os
def feq(v1,v2,tol2=1e-4):
return abs(v1-v2)<=tol2
class TestCase(unittest.TestCase):
def setUp(self) :
self.dirName=os.path.join(RDConfig.RDBaseDir,'Code','GraphMol',
'ForceFieldHelpers','test_data')
def test1(self) :
fName = os.path.join(self.dirName,'benzene.mol')
m = Chem.MolFromMolFile(fName)
self.failIf(ChemicalForceFields.UFFOptimizeMolecule(m))
# make sure that keyword arguments work:
m = Chem.MolFromMolFile(fName)
self.failUnless(ChemicalForceFields.UFFOptimizeMolecule(m,maxIters=1))
m = Chem.MolFromMolFile(fName)
self.failIf(ChemicalForceFields.UFFOptimizeMolecule(m,vdwThresh=2.0))
m = Chem.MolFromMolFile(fName)
self.failIf(ChemicalForceFields.UFFOptimizeMolecule(m,confId=-1))
m = Chem.MolFromMolFile(fName)
self.failUnlessRaises(ValueError,lambda :ChemicalForceFields.UFFOptimizeMolecule(m,confId=1))
def test2(self) :
fName = os.path.join(self.dirName,'benzene.mol')
m = Chem.MolFromMolFile(fName)
ff = ChemicalForceFields.UFFGetMoleculeForceField(m)
self.failUnless(ff)
e1 = ff.CalcEnergy()
r = ff.Minimize()
self.failUnless(r==0)
e2 = ff.CalcEnergy()
self.failUnless(e2<e1);
# test keyword args:
r = ff.Minimize(forceTol=1e-8)
self.failUnless(r==0)
# test keyword args:
r = ff.Minimize(energyTol=1e-3)
self.failUnless(r==0)
def test3(self) :
molB = """
4 4 0 0 0 0 0 0 0 0999 V2000
-0.8500 0.4512 -0.6671 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.3307 -0.9436 -0.3641 C 0 0 0 0 0 0 0 0 0 0 0 0
0.6796 -0.4074 0.5894 C 0 0 0 0 0 0 0 0 0 0 0 0
0.5011 0.8998 -0.1231 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
3 4 1 0
1 4 1 0
M END"""
m = Chem.MolFromMolBlock(molB)
ff = ChemicalForceFields.UFFGetMoleculeForceField(m)
self.failUnless(ff)
e1 = ff.CalcEnergy()
r = ff.Minimize()
self.failUnless(r==0)
e2 = ff.CalcEnergy()
self.failUnless(e2<e1);
def test3(self) :
m = Chem.MolFromSmiles('[Cu](C)(C)(C)(C)C')
self.failIf(ChemicalForceFields.UFFHasAllMoleculeParams(m))
m = Chem.MolFromSmiles('C(C)(C)(C)C')
self.failUnless(ChemicalForceFields.UFFHasAllMoleculeParams(m))
if __name__== '__main__':
unittest.main()
|