File: testMMPA.py

package info (click to toggle)
rdkit 201603.5-2
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 72,364 kB
  • ctags: 18,217
  • sloc: cpp: 167,966; python: 58,855; java: 5,318; ansic: 5,239; sql: 1,908; yacc: 1,553; lex: 1,131; makefile: 418; xml: 229; sh: 192; fortran: 183; cs: 93
file content (103 lines) | stat: -rw-r--r-- 4,172 bytes parent folder | download
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
91
92
93
94
95
96
97
98
99
100
101
102
103
from rdkit import RDConfig
import unittest
from rdkit import Chem
from rdkit.Chem import rdMMPA

def natoms(tpl):
    return tuple(x.GetNumAtoms() if x is not None else 0 for x in tpl)

class TestCase(unittest.TestCase):
    def setUp(self) :
        pass

    def test1(self) :
        m = Chem.MolFromSmiles('c1ccccc1OC')
        frags = rdMMPA.FragmentMol(m)
        self.assertEqual(len(frags),3)
        for frag in frags:
            self.assertEqual(len(frag),2)        
        frags = sorted(frags,key=natoms)
        self.assertEqual(frags[0][0],None)
        self.assertEqual(frags[1][0],None)
        self.assertNotEqual(frags[2][0],None)
        self.assertNotEqual(frags[0][1],None)
        self.assertNotEqual(frags[1][1],None)
        self.assertNotEqual(frags[2][1],None)

        self.assertEqual(frags[0][1].GetNumAtoms(),m.GetNumAtoms()+2)
        self.assertEqual(frags[1][1].GetNumAtoms(),m.GetNumAtoms()+2)

        fs = Chem.GetMolFrags(frags[0][1],asMols=True)
        self.assertEqual(len(fs),2)
        self.assertEqual(Chem.MolToSmiles(fs[0],True),'c1ccc([*:1])cc1')
        self.assertEqual(Chem.MolToSmiles(fs[1],True),'CO[*:1]')

        fs = Chem.GetMolFrags(frags[1][1],asMols=True)
        self.assertEqual(len(fs),2)
        self.assertEqual(Chem.MolToSmiles(fs[0],True),'c1ccc(O[*:1])cc1')
        self.assertEqual(Chem.MolToSmiles(fs[1],True),'C[*:1]')

        fs = Chem.GetMolFrags(frags[2][0],asMols=True)
        self.assertEqual(len(fs),1)
        self.assertEqual(Chem.MolToSmiles(fs[0],True),'O([*:1])[*:2]')
        fs = Chem.GetMolFrags(frags[2][1],asMols=True)
        self.assertEqual(len(fs),2)
        self.assertEqual(Chem.MolToSmiles(fs[0],True),'c1ccc([*:1])cc1')
        self.assertEqual(Chem.MolToSmiles(fs[1],True),'C[*:2]')

        
    def test2(self) :
        m = Chem.MolFromSmiles('c1ccccc1OC')
        frags = rdMMPA.FragmentMol(m,resultsAsMols=False)
        self.assertEqual(len(frags),3)
        for frag in frags:
            self.assertEqual(len(frag),2)        
        frags = sorted(frags)
        self.assertEqual(frags[0][0],'')
        self.assertEqual(frags[1][0],'')
        self.assertNotEqual(frags[2][0],'')
        self.assertNotEqual(frags[0][1],'')
        self.assertNotEqual(frags[1][1],'')
        self.assertNotEqual(frags[2][1],'')
        
        self.assertEqual(frags[0][1],'CO[*:1].c1ccc(cc1)[*:1]')
        self.assertEqual(frags[1][1],'C[*:1].c1ccc(cc1)O[*:1]')
        self.assertEqual(frags[2][0],'O([*:1])[*:2]')
        self.assertEqual(frags[2][1],'C[*:2].c1ccc([*:1])cc1')

    def test3(self) :
        m = Chem.MolFromSmiles('c1ccccc1OC')
        frags = rdMMPA.FragmentMol(m,resultsAsMols=False,pattern='cO')
        self.assertEqual(len(frags),1)
        for frag in frags:
            self.assertEqual(len(frag),2)        
        frags = sorted(frags)
        self.assertEqual(frags[0][0],'')
        self.assertNotEqual(frags[0][1],'')
        
        self.assertEqual(frags[0][1],'CO[*:1].c1ccc(cc1)[*:1]')

    def test4(self): 
        m = Chem.MolFromSmiles('Cc1ccccc1NC(=O)C(C)[NH+]1CCCC1') # ZINC00000051
        frags = rdMMPA.FragmentMol(m,resultsAsMols=False)
        #for frag in sorted(frags):
        #    print(frag)
        cores = set(x[0] for x in frags)
        self.assertTrue('C([*:1])([*:2])[*:3]' in cores)
        # FIX: this needs to be investigated, it's not currently passing
        #self.assertTrue('O=C(N[*:3])C([*:1])[*:2]' in cores)
        self.assertEqual(len(frags),18)
        for frag in frags:
            self.assertEqual(len(frag),2)        

    def test5(self):
        m = Chem.MolFromSmiles("CC[C@H](C)[C@@H](C(=O)N[C@H]1CSSC[C@H]2C(=O)NCC(=O)N3CCC[C@H]3C(=O)N[C@H](C(=O)N[C@H](C(=O)N[C@H](C(=O)N[C@@H](CSSC[C@@H](C(=O)N[C@H](C(=O)N4CCC[C@H]4C(=O)N[C@H](C(=O)N2)C)CC(=O)N)NC1=O)C(=O)N)CO)Cc5ccc(cc5)O)CCCC[NH3+])N") # ALPHA-CONOTOXIN SI
        frags = rdMMPA.FragmentMol(m,resultsAsMols=False)
        self.assertFalse(len(frags))
        frags = rdMMPA.FragmentMol(m,maxCuts=2,maxCutBonds=21,resultsAsMols=False)
        self.assertEqual(len(frags), 231)
                


if __name__=="__main__":
    unittest.main()