Exemple #1
0
 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
Exemple #2
0
 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
Exemple #3
0
 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))
Exemple #4
0
 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()
Exemple #5
0
 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'
Exemple #6
0
 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'