def to_inchi(str_data, in_format):
    mol = OBMol()
    conv = OBConversion()
    conv.SetInFormat(in_format)
    conv.ReadString(mol, str_data)

    conv.SetOutFormat('inchi')
    inchi = conv.WriteString(mol).rstrip()
    conv.SetOptions('K', conv.OUTOPTIONS)
    inchikey = conv.WriteString(mol).rstrip()

    return (inchi, inchikey)
Exemple #2
0
class Converter:
    def __init__(self, can=False):
        self._OBconverter = OBConversion()
        self._OBconverter.SetOutFormat('smi')
        options = 'in'
        if can:
            options += 'c'
        self._OBconverter.SetOptions(options, OBConversion.OUTOPTIONS)

    def getSmiles(self, mol):
        smiles = self._OBconverter.WriteString(mol.OBMol)[:-1]
        if '@' in smiles:
            smiles = self._OBconverter.WriteString(mol.OBMol)[:-1]
        return smiles
Exemple #3
0
def convert_str(str_data, in_format, out_format):
    mol = OBMol()
    conv = OBConversion()
    conv.SetInFormat(in_format)
    conv.SetOutFormat(out_format)
    conv.ReadString(mol, str_data)

    return (conv.WriteString(mol), conv.GetOutFormat().GetMIMEType())
Exemple #4
0
 def __init__(self, smile):
     self._smile = smile.strip()
     conv = OBConversion()
     if not conv.SetInAndOutFormats('smi', 'inchi'):
         raise 'Problem with openbabel'
     mol = OBMol()
     if not conv.ReadString(mol, self._smile):
         raise TypeError, "No such smile: %s" % self._smile
     self._inchi = conv.WriteString(mol).strip()
Exemple #5
0
def autodetect_bonds(cjson):
    mol = cjson_to_ob_molecule(cjson)
    mol.ConnectTheDots()
    mol.PerceiveBondOrders()
    conv = OBConversion()
    conv.SetInFormat('sdf')
    conv.SetOutFormat('sdf')
    sdf_str = conv.WriteString(mol)
    cjson_str = avo_convert_str(sdf_str, 'sdf', 'cjson')
    return json.loads(cjson_str)
Exemple #6
0
def to_inchi(str_data, in_format):
    mol = OBMol()
    conv = OBConversion()
    conv.SetInFormat(in_format)
    # Hackish for now, convert to xyz first...
    conv.SetOutFormat('xyz')
    conv.ReadString(mol, str_data)
    xyz = conv.WriteString(mol)

    # Now convert to inchi and inchikey.
    mol = OBMol()
    conv.SetInFormat('xyz')
    conv.ReadString(mol, xyz)

    conv.SetOutFormat('inchi')
    inchi = conv.WriteString(mol).rstrip()
    conv.SetOptions("K", conv.OUTOPTIONS)
    inchikey = conv.WriteString(mol).rstrip()

    return (inchi, inchikey)
Exemple #7
0
 def ToCannonicalSmiles(self):
     atomCache={}
     mol=OBMol()
     for sourceAtom in self.atoms:
         atom=mol.NewAtom()
         atom.SetAtomicNum(sourceAtom.GetAtomicNum())
         if sourceAtom.IsAromatic():
             atom.SetAromatic()
             atom.SetSpinMultiplicity(2)
         atomCache[sourceAtom]=atom
     for sourceBond in self.bonds:
         mol.AddBond(atomCache[sourceBond.atom1].GetIdx(), atomCache[sourceBond.atom2].GetIdx(), sourceBond.GetBondOrder())
     writer=OBConversion()
     writer.SetInAndOutFormats("smi", "can")
     return writer.WriteString(mol).strip()
Exemple #8
0
    def write_ob_molecule(self, mol, format, f):
        """
        Write an Open Babel molecule to file
        :param mol: The molecule
        :param format: The output format
        :param f: The file to write output to
        :param f_name: The file's name (for extension-finding purpose)
        """
        conv = OBConversion()
        if not conv.SetOutFormat(format):
            raise ValueError("Error setting output format to " + format)

        # write to file

        try:
            s = conv.WriteString(mol)
        except (TypeError, ValueError, IOError):
            raise ValueError("Error writing data file using OpenBabel")
        if str.lower(format) == 'pdb':
            s = s.replace("END", "ENDMDL")
        f.write(s)
def convert_str(str_data,
                in_format,
                out_format,
                gen3d=False,
                add_hydrogens=False,
                perceive_bonds=False,
                out_options=None):

    # Make sure that the start of InChI is valid before passing it to
    # Open Babel, or Open Babel will crash the server.
    if in_format.lower() == 'inchi':
        validate_start_of_inchi(str_data)

    if out_options is None:
        out_options = {}

    obMol = OBMol()
    conv = OBConversion()
    conv.SetInFormat(in_format)
    conv.SetOutFormat(out_format)
    conv.ReadString(obMol, str_data)

    if add_hydrogens:
        obMol.AddHydrogens()

    if gen3d:
        # Generate 3D coordinates for the input
        mol = pybel.Molecule(obMol)
        mol.make3D()

    if perceive_bonds:
        obMol.ConnectTheDots()
        obMol.PerceiveBondOrders()

    for option, value in out_options.items():
        conv.AddOption(option, conv.OUTOPTIONS, value)

    return (conv.WriteString(obMol), conv.GetOutFormat().GetMIMEType())
Exemple #10
0
kegg = Kegg.getInstance()
cids = kegg.get_all_cids()
print 'Found %d cids!' % len(cids)

smiles = open('smiles.txt', 'a')
nums = open('nums.txt', 'a')

if len(argv) < 2:
    i = 0
else:
    i = int(argv[1])

conv = OBConversion()
if not conv.SetInAndOutFormats('inchi', 'smi'):
    raise 'Problem with openbabel'

for j, cid in enumerate(cids[i:]):
    try:
        nums.write(str(j + i) + '\n')
        inchi = kegg.cid2inchi(cid)
        mol = OBMol()
        if not conv.ReadString(mol, inchi):
            print cid
        smiles.write(conv.WriteString(mol))
        #smiles.write(kegg.cid2smiles(cid) + '\n')
    except:
        print cid

smiles.close()
nums.close()
Exemple #11
0
# This script takes no arguments and should
# run from the src directory.
#
######################################

from pygibbs.kegg import Kegg
from openbabel import OBConversion, OBMol
from sys import argv

kegg = Kegg.getInstance()
cids = kegg.get_all_cids()
print 'Found %d cids!' % len(cids)

smiles = open('smiles.txt', 'w')

conv = OBConversion()
if not conv.SetInAndOutFormats('inchi', 'smi'):
    raise 'Problem with openbabel'

for cid in cids:
    try:
        inchi = kegg.cid2inchi(cid)
        mol = OBMol()
        if not conv.ReadString(mol, inchi):
            raise Exception
        smiles.write(conv.WriteString(mol).strip() + '\n')
    except:
        print "C%05d cannot be converted to smiles" % cid

smiles.close()
Exemple #12
0
 def ToSmiles(self):
     writer=OBConversion()
     writer.SetInAndOutFormats("smi", "smi")
     return writer.WriteString(self.ToOBMol()).strip()