Feedback

type to search

Which open source tools can calculate canonical tautomers? Code? Command line?

Asked by [ Editor ]

Which open source tools can calculate canonical tautomers?
I am specifically interested in source code?
or
Executable command line methods?

NN comments
chem-bla-ics
-

Mark Rijnbeek used the InChI approach published by Thalheim in 2010, allowing you to do in Groovy:


import org.openscience.cdk.interfaces.;
import org.openscience.cdk.smiles.;
import org.openscience.cdk.tautomers.;
import org.openscience.cdk.tools.manipulator.;
import org.openscience.cdk.*;

IChemObjectBuilder builder = DefaultChemObjectBuilder.getInstance();
IMolecule adenine = builder.newInstance(IMolecule.class);
IAtom a1 = builder.newInstance(IAtom.class,“N”);
adenine.addAtom(a1);
IAtom a2 = builder.newInstance(IAtom.class,“N”);
adenine.addAtom(a2);
IAtom a3 = builder.newInstance(IAtom.class,“N”);
adenine.addAtom(a3);
IAtom a4 = builder.newInstance(IAtom.class,“N”);
adenine.addAtom(a4);
IAtom a5 = builder.newInstance(IAtom.class,“N”);
adenine.addAtom(a5);
IAtom a6 = builder.newInstance(IAtom.class,“C”);
adenine.addAtom(a6);
IAtom a7 = builder.newInstance(IAtom.class,“C”);
adenine.addAtom(a7);
IAtom a8 = builder.newInstance(IAtom.class,“C”);
adenine.addAtom(a8);
IAtom a9 = builder.newInstance(IAtom.class,“C”);
adenine.addAtom(a9);
IAtom a10 = builder.newInstance(IAtom.class,“C”);
adenine.addAtom(a10);
IAtom a11 = builder.newInstance(IAtom.class,“H”);
adenine.addAtom(a11);
IAtom a12 = builder.newInstance(IAtom.class,“H”);
adenine.addAtom(a12);
IAtom a13 = builder.newInstance(IAtom.class,“H”);
adenine.addAtom(a13);
IAtom a14 = builder.newInstance(IAtom.class,“H”);
adenine.addAtom(a14);
IAtom a15 = builder.newInstance(IAtom.class,“H”);
adenine.addAtom(a15);
IBond b1 = builder.newInstance(IBond.class,a1, a6, IBond.Order.SINGLE);
adenine.addBond(b1);
IBond b2 = builder.newInstance(IBond.class,a1, a9, IBond.Order.SINGLE);
adenine.addBond(b2);
IBond b3 = builder.newInstance(IBond.class,a1, a11, IBond.Order.SINGLE);
adenine.addBond(b3);
IBond b4 = builder.newInstance(IBond.class,a2, a7, IBond.Order.SINGLE);
adenine.addBond(b4);
IBond b5 = builder.newInstance(IBond.class,a2, a9, IBond.Order.DOUBLE);
adenine.addBond(b5);
IBond b6 = builder.newInstance(IBond.class,a3, a7, IBond.Order.DOUBLE);
adenine.addBond(b6);
IBond b7 = builder.newInstance(IBond.class,a3, a10, IBond.Order.SINGLE);
adenine.addBond(b7);
IBond b8 = builder.newInstance(IBond.class,a4, a8, IBond.Order.SINGLE);
adenine.addBond(b8);
IBond b9 = builder.newInstance(IBond.class,a4, a10, IBond.Order.DOUBLE);
adenine.addBond(b9);
IBond b10 = builder.newInstance(IBond.class,a5, a8, IBond.Order.SINGLE);
adenine.addBond(b10);
IBond b11 = builder.newInstance(IBond.class,a5, a14, IBond.Order.SINGLE);
adenine.addBond(b11);
IBond b12 = builder.newInstance(IBond.class,a5, a15, IBond.Order.SINGLE);
adenine.addBond(b12);
IBond b13 = builder.newInstance(IBond.class,a6, a7, IBond.Order.SINGLE);
adenine.addBond(b13);
IBond b14 = builder.newInstance(IBond.class,a6, a8, IBond.Order.DOUBLE);
adenine.addBond(b14);
IBond b15 = builder.newInstance(IBond.class,a9, a12, IBond.Order.SINGLE);
adenine.addBond(b15);
IBond b16 = builder.newInstance(IBond.class,a10, a13, IBond.Order.SINGLE);
adenine.addBond(b16);

smilesGenerator = new SmilesGenerator();

AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(
  adenine
);
tautomerGenerator = new InChITautomerGenerator();
tautomers = tautomerGenerator.getTautomers(adenine)
for (tautomer in tautomers) {
  println smilesGenerator.createSMILES(tautomer)
}

This script can be run with Groovy from the command line with CDK 1.4.7 on the CLASSPATH. Caveat is that the experimental /Ket and /15T options are currently not used.
joergkurtwegner
-

Egon, can you put this text rather in an answer not into a comment? Thanks, cheers, Joerg

or Cancel

6 answers

2

baoilleach [ Admin ] from Cork, Ireland

Tim Vandermeersch implemented Sayle’s method in the dev version of OpenBabel:

>obtautomer.exe
Usage: obtautomer.exe [-c]
-c: Canonical tautomer only
NN comments
joergkurtwegner
-

Hi Noel, so this means normal SVN/trunc checkout and compile? Is the code already validated, aka are the results reliable?

joergkurtwegner
-

In theory I would like to use the function, in practice I consider it as having two bugs, see bug report on the mailing list. Help is appreciated! http://goo.gl/N9dvG

or Cancel
2

mikhail-rybalkin [ Editor ] from Российская Федерация

You can generate InChI for your molecule, and then convert this InChI into a molecule again. The result molecule will to be a standardized tautomer.

NN comments
joergkurtwegner
-

Do you have an example? How to handle stereochemistry? Aka, Ido not want to loose the sterochemistry!

wdiwdi
-

This will work, but the results are not always pretty. A tautomer re-constituted from InChI is quite often one which looks rather peculiar. Also, the tautomer processing of the InChI library is quite limited (actually, it is now being reworked for the next release).

joergkurtwegner
-

Actually, this works only for inchi, but not if used with the tautomer function 13T or 15T. Those created identifiers can’t be backtranslated. Finally, the 13T and 15T are not really working properly.

or Cancel
1

matteo floris [ Editor ] from Amendolara, Italia

Hi, have a look at this open access paper:

http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2886898/

you can find there both the set of SMIRKS transforms for the enumeration of “all” possible tautomers (see Table 1)

and the rules used for the definition of a canonical tautomer (see Table 2).

You can easily copy and past these transforms, and include them in a CACTVS or RDkit script.

NN comments
joergkurtwegner
-

Matteo, practically, do you know if anyonw has done this already, e.g. in combination with the CDK, RDKit, or Openbabel?

The issue is ... Is the code already validated, aka are the results reliable? I do not have the time to do the validation myself.

wdiwdi
-

The transforms mentioned in the paper are a standard component of the Cactvs toolkit and included in both the academic and commercial versions.

joergkurtwegner
-

O.k., great to hear, can you remind me about a download and command line option to do this? Thanks!

wdiwdi
-

Academic downloads at www.xemistry.com/academic.

Simple interactive command to create a SMILES of a canonic tautomer:

cactvs>ens get [ens get [ens create C=CO] E_CANONIC_TAUTOMER] E_SMILES

CC=O

or Cancel
0

wdiwdi [ Editor ] from Frankfurt am Main, Deutschland

The Cactvs toolkit contains a standard property (E_CANONIC_TAUTOMER) for this. See www.xemistry.com/academic for free academic versions.

The transforms are the same as mentioned in the paper cited below (its computations were actually performed by this software).

The canonic tautomer is selected from the tautomer set with a rating function, which includes both rule-of-thumb energetic terms and topological criteria (for example, avoid double bonds which look like they could be stereogenic), and in case of ties a Cactvs hashcode is the final resort to select the unique form.

or Cancel

Your answer

You need to join Blue Obelisk eXchange to complete this action, click here to do so.