1
2
3
4
5
6 from __future__ import print_function
7 from rdkit import RDConfig
8 from rdkit import Chem
9 import os.path
10
11 from rdkit.VLib.NodeLib import *
12 from rdkit.VLib import Supply, Filter
13
14
15
16
17
18 smis = ['CCOC', 'CCO.Cl', 'CC(=O)[O-].[Na+]', 'CC[Cu]CC', 'OCC', 'C[N+](C)(C)C.[Cl-]',
19 '[Na+].[Cl-]']
20 mols = [Chem.MolFromSmiles(x) for x in smis]
21
22 for i in range(len(mols)):
23 mols[i].SetProp('Name', 'Mol-%d' % (i + 1))
24 supplier = Supply.SupplyNode(contents=mols)
25
26 print('initial:', len([x for x in supplier]))
27
28
29 metals = '[#21,#22,#23,#24,#25,#26,#27,#28,#29,#39,#40,#41,#42,#43,#44,#45,#46,#47,#57,#58,#59,#60,#61,#62,#63,#64,#65,#66,#67,#68,#69,#70,#71,#72,#73,#74,#75,#76,#77,#78,#79]'
30 smaFilter = SmartsMolFilter.SmartsFilter(patterns=[metals], counts=[1])
31 smaFilter.SetNegate(1)
32 smaFilter.AddParent(supplier)
33
34 print('post-smaFilter:', len([x for x in smaFilter]))
35
36 salts = ['[Cl;H1&X1,-]', '[Na+]', '[O;H2,H1&-,X0&-2]']
37 remover = SmartsRemover.SmartsRemover(patterns=salts)
38 remover.AddParent(smaFilter)
39 atsFilter = Filter.FilterNode(func=lambda x: x.GetNumAtoms() > 1)
40 atsFilter.AddParent(remover)
41
42 print('post-remover:', len([x for x in atsFilter]))
43
44 dupeFilter = SmilesDupeFilter.DupeFilter()
45 dupeFilter.AddParent(atsFilter)
46
47 print('post-dupes:', len([x for x in dupeFilter]))
48
49 import StringIO
50
51 io = StringIO.StringIO()
52 output = SmilesOutput.OutputNode(dest=io, delim=', ', idField='Name')
53 output.AddParent(dupeFilter)
54 print('post-output:', len([x for x in output]))
55 print('OUTPUT:')
56 print(io.getvalue())
57