def split_layers( self, text): # try if we have a xml document in hand try: doc = dom.parseString( text) except: # it seems not to be the case if text.startswith( "InChI="): text = text[6:] layers = re.split( "/", text.strip()) # fixed hydrogen layer is marked stupidly by f/h :(, we have to deal with it i = None for l in layers: if l.startswith("f"): i = layers.index( l) break if i != None: del layers[i] layers[i] = 'f'+layers[i][1:] return layers structs = doc.getElementsByTagName( 'structure') if not structs: raise "no structures found in xml string %s" % text struct = structs[0] layers = [] for name in ('version','formula','connections','H'): try: layer = struct.getElementsByTagName( name)[0] except IndexError: raise "no '%s' tag found in xml string" % name layers.append( dom_extensions.getTextFromElement( layer)) return layers
def split_layers(self, text): # try if we have a xml document in hand try: doc = dom.parseString(text) except: # it seems not to be the case if text.startswith("InChI="): text = text[6:] layers = re.split("/", text.strip()) # fixed hydrogen layer is marked stupidly by f/h :(, we have to deal with it i = None for l in layers: if l.startswith("f"): i = layers.index(l) break if i != None: del layers[i] layers[i] = 'f' + layers[i][1:] return layers structs = doc.getElementsByTagName('structure') if not structs: raise "no structures found in xml string %s" % text struct = structs[0] layers = [] for name in ('version', 'formula', 'connections', 'H'): try: layer = struct.getElementsByTagName(name)[0] except IndexError: raise "no '%s' tag found in xml string" % name layers.append(dom_extensions.getTextFromElement(layer)) return layers
def read_CML( self, cml): # id could be attribute if cml.getAttribute( 'id'): self.id = cml.getAttribute( 'id') for e in cml.childNodes: if e.nodeValue: continue attr = e.getAttribute( 'builtin') if attr == 'atomId': self.id = dom_ext.getTextFromElement( e) elif attr == 'elementType': self.symbol = dom_ext.getTextFromElement( e) elif attr in ['x2', 'x3']: self.x = float( dom_ext.getTextFromElement( e)) elif attr in ['y2', 'y3']: self.y = float( dom_ext.getTextFromElement( e)) elif attr == 'z3': self.z = float( dom_ext.getTextFromElement( e))
def read_CML( self, cml): for e in cml.childNodes: if e.nodeValue: continue attr = e.getAttribute( 'builtin') if attr == 'atomRef': if not self.atom1: self.atom1 = dom_ext.getTextFromElement( e) else: self.atom2 = dom_ext.getTextFromElement( e) elif attr == 'order': order = dom_ext.getTextFromElement( e) if order == 'A': self.order = 1 else: try: self.order = int( order) except ValueError: raise cml_exception( "Wrong bond order '%s'" % order) elif attr == 'stereo': stereo = dom_ext.getTextFromElement( e) if stereo: self.stereo = stereo.upper()
def read_CML( self, cml): if cml.getAttribute( 'order'): self.order = cml.getAttribute( 'order') if self.order.isdigit(): self.order = int( self.order) else: types = ['s','d','t'] if self.order.lower() in types: self.order = types.index( self.order.lower()) + 1 else: raise plugin.import_exception("unknown bond type %s" % self.order) if cml.getAttribute( 'atomRefs2'): atoms = cml.getAttribute( 'atomRefs2').split( ' ') if len( atoms) == 2: self.atom1, self.atom2 = atoms stereo = cml.getElementsByTagName( 'stereo') if stereo: stereo = stereo[0] text = dom_ext.getTextFromElement( stereo) if text.lower() in 'wh': self.stereo = text.lower() else: self.stereo = 'n'
def read_CML(self, cml): if cml.getAttribute('order'): self.order = cml.getAttribute('order') if self.order.isdigit(): self.order = int(self.order) else: types = ['s', 'd', 't'] if self.order.lower() in types: self.order = types.index(self.order.lower()) + 1 else: raise plugin.import_exception, "unknown bond type %s" % self.order if cml.getAttribute('atomRefs2'): atoms = cml.getAttribute('atomRefs2').split(' ') if len(atoms) == 2: self.atom1, self.atom2 = atoms stereo = cml.getElementsByTagName('stereo') if stereo: stereo = stereo[0] text = dom_ext.getTextFromElement(stereo) if text.lower() in 'wh': self.stereo = text.lower() else: self.stereo = 'n'