The InChI key is available as an option of the InChI format:
http://baoilleach.blogspot.com/2008/10/generating-inchis-mini-me-inchikey.html

So no need for SMILES...

BTW, it's handier for me if you send OB questions to the mailing list
rather than directly to me. It gives someone else a chance to
answer..:-)

- Noel

On 7 December 2010 15:47, Ken Smith <[email protected]> wrote:
> Hi Noel
>
> Just a quick (probably stupid) question.
>
> I need to create a table of InChIs and InChIKeys for all the elements and
> their common isotopes.  I couldn't see an easy way of using OpenBabel
> (python) to generate the keys from hand-cranked InChIs, so I tried using
> SMILES (which means I need to learn the SMILES format, and I'm then
> constrained by its limitations).  When I use it though, I get some
> disconnected metal errors that (as a non-chemist) I don't understand, and
> the InChI I get has a hydrogen added.  Can you point me in the right
> direction?  My preference is to avoid having to go via SMILES, but if not, a
> SMILES workaround suffice for the time being.
>
> Cheers,
>
> Ken
>
>
> E.g. below is some trivial python code to generate the InChI(Keys) from
> SMILES.
>
>
> python getInchiFromSmiles.py [Na]
>
> ==============================
> *** Open Babel Warning  in InChI code
>  #0 :Metal was disconnected
> ==============================
> *** Open Babel Warning  in InChI code
>  #0 :Metal was disconnected
> InChI=1S/Na.H
> MPMYQQHEHYDOCL-UHFFFAOYSA-N
>
>
>
>
> import openbabel as ob
> import sys
>
> def getInChIAndInChIKey(smilesString):
>   conv = ob.OBConversion()
>   conv.SetInAndOutFormats("smi", "inchi")
>
>   mol = ob.OBMol()
>   conv.ReadString(mol, smilesString)
>   inchi = conv.WriteString(mol).rstrip()
>   conv.SetOptions("K", conv.OUTOPTIONS)
>   inchikey = conv.WriteString(mol).rstrip()
>   return(inchi, inchikey)
>
>
> def main(argv = None):
>   if argv is None:
>      argv = sys.argv
>
>   if len(argv) != 2:
>      sys.exit("Usage: getInchiFromSmiles.py <SMILES format>")
>
>   smiles = argv[1]
>   inchi, inchikey = getInChIAndInChIKey(smiles)
>
>   print inchi
>   print inchikey
>
>   return 0
>
>
>
> if __name__ == '__main__':
>   main()
>
>
> P.S.  I'd also like to be able to represent protonated hydrogen (H3+), but
> I've no idea how to represent that in SMILES.  Presumably in InChI I use the
> protonation layer if I want to hand-crank the InChI...
>
>
>

------------------------------------------------------------------------------
What happens now with your Lotus Notes apps - do you make another costly 
upgrade, or settle for being marooned without product support? Time to move
off Lotus Notes and onto the cloud with Force.com, apps are easier to build,
use, and manage than apps on traditional platforms. Sign up for the Lotus 
Notes Migration Kit to learn more. http://p.sf.net/sfu/salesforce-d2d
_______________________________________________
OpenBabel-scripting mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbabel-scripting

Reply via email to