1
2
3
4
5
6
7 """
8
9 Dumping CDXML from python
10
11 """
12 from elementtree.SimpleXMLWriter import XMLWriter
13 import Chem
14
15 header = """<?xml version="1.0" encoding="UTF-8" ?>
16 <!DOCTYPE CDXML SYSTEM "http://www.camsoft.com/xml/cdxml.dtd" >
17 """
18 _fontsStartId=0
19
20 -def DumpAtom(atom,w,highlightAtoms=[],
21 highlightParms={'color':'4','size':'18'}):
42
43 -def DumpBond(bond,w,baseIdx,highlightBonds=[],
44 highlightParms={'color':'4','LineWidth':'2'}):
62
63 -def DumpFrag(frag,w,extrasId,highlightBonds=[],highlightAtoms=[]):
71
72
73 -def MolToCDXML(mol,outF,highlightBonds=[],highlightAtoms=[]):
74 global header,_fontsStartId
75 outF.write(header)
76 w = XMLWriter(outF)
77 extrasId = mol.GetNumAtoms()+mol.GetNumBonds()+2
78 cdxml = w.start('CDXML')
79 w.start('colortable')
80 w.element('color',r="1",g="1",b="1")
81 w.element('color',r="0",g="0",b="0")
82 w.element('color',r="1",g="0",b="0")
83 w.element('color',r="0",g="0",b="1")
84 w.element('color',r="1",g="1",b="0")
85 w.element('color',r="1",g="0",b="1")
86 w.end()
87 w.start('fonttable')
88 _fontsStartId=extrasId
89 w.element('font',id=str(extrasId),charset="iso-8859-1",name="Arial")
90 extrasId+=1
91 w.element('font',id=str(extrasId),charset="iso-8859-1",name="Times New Roman")
92 extrasId+=1
93 w.end()
94 w.start('page',id=str(extrasId))
95 extrasId+=1
96 DumpFrag(mol,w,extrasId,highlightBonds=highlightBonds,
97 highlightAtoms=highlightAtoms)
98 w.end()
99 w.close(cdxml)
100
101 if __name__ == '__main__':
102 import sys,cStringIO
103 try:
104 from utils import chemdraw
105 except:
106 chemdraw = None
107 import Chem
108 for smi in ['c1cnccc1','C1=CN=CC=C1']:
109 print '---------------------------------'
110 m = Chem.MolFromSmiles(smi)
111 io = cStringIO.StringIO()
112 MolToCDXML(m,io,highlightBonds=[1,2,3],highlightAtoms=[3])
113 txt = io.getvalue()
114 txt = txt.replace('><','>\n<')
115 cdxml = txt
116 if chemdraw:
117 chemdraw.CDXDisplay(cdxml)
118 print cdxml
119