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)
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
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())
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()
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)
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)
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()
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())
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()
# 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()
def ToSmiles(self): writer=OBConversion() writer.SetInAndOutFormats("smi", "smi") return writer.WriteString(self.ToOBMol()).strip()