unexpected tautomer match

User f05f6b8c05

25-02-2013 11:08:19

Hi,


The below Java code finds match between succinate and fumarate when tautomer search option used (so.setTautomerSearch(SearchConstants.TAUTOMER_SEARCH_ON);); however, succinate and fumarate are not tautomer.  This match is not found when I use TAUTOMER_SEARCH_OFF.


Can you please clarify why match is found?


Thank you.  We are using jchem 5.11.2.


Best regards,


Andrew


 



     MolSearch s = new MolSearch();


        MolSearchOptions so = new MolSearchOptions(SearchConstants.DUPLICATE);


        so.setQueryAbsoluteStereo(true);


        so.setChargeMatching(SearchConstants.CHARGE_MATCHING_EXACT);


        so.setDoubleBondStereoMatchingMode(StereoConstants.DBS_ALL);


        so.setExactBondMatching(true);


        so.setImplicitHMatching(SearchConstants.IMPLICIT_H_MATCHING_ENABLED);


        so.setStereoSearchType(SearchConstants.STEREO_EXACT);


        //so.setTautomerSearch(SearchConstants.TAUTOMER_SEARCH_OFF);


        so.setTautomerSearch(SearchConstants.TAUTOMER_SEARCH_ON);


        s.setSearchOptions(so);


        Standardizer standardizer = new Standardizer("neutralize");


        MolHandler mhl = new MolHandler("OC(=O)\\C=C\\C(O)=O", false);


        Molecule mm = mhl.getMolecule();


        s.setQuery(mm);


        MolHandler mhl2 = new MolHandler("OC(=O)CCC(O)=O", false);


        Molecule tarm = mhl2.getMolecule();


        standardizer.standardize(tarm);


        s.setTarget(tarm);


        int[][] hits = s.findAll();


        if (hits!=null) {


            System.out.println("found it");


        }



ChemAxon d26931946c

25-02-2013 22:09:22


Dear Andrew, 


 


I've moved to topic to the appropriate forum, my colleagues will answer you soon.


Best regards,


Peter


ChemAxon abe887c64e

26-02-2013 10:12:55

Hi Andrew,


Thank you for sharing your experiences regarding incorrect tautomer search. We could reproduce this erroneous behaviour. Unfortunately the latest version of JChem contains this bug as well, but our next version - 5.12.0, to be released  in the near future  - works with a modified tautomer search algorithm and do not contain this bug. We would suggest to try the beta version of JChem 5.12.


https://www.chemaxon.com/download.php?d=/data/download/jchem/5.12.0beta2


Best regards,


Krisztina

User f05f6b8c05

26-02-2013 11:49:07

(Thank you for moving post, Peter)


Thank you for confirming error.

User f05f6b8c05

16-05-2013 03:26:53

Hi,


We upgrade to 5.12.3, and that fix tautomer issue in original post, but now we see this one below (we do not know why these structures are tautomer matches?).  The below structures are not tautomer matches under same code in 5.11.2.


Any guidance is appreciated.


Thanks,


Andrew


 



 MolSearch s = new MolSearch();


        MolSearchOptions so = new MolSearchOptions(SearchConstants.DUPLICATE);


        so.setQueryAbsoluteStereo(true);


        so.setChargeMatching(SearchConstants.CHARGE_MATCHING_EXACT);


        so.setDoubleBondStereoMatchingMode(StereoConstants.DBS_ALL);


        so.setExactBondMatching(true);


        so.setImplicitHMatching(SearchConstants.IMPLICIT_H_MATCHING_ENABLED);


        so.setStereoSearchType(SearchConstants.STEREO_EXACT);


        //so.setTautomerSearch(SearchConstants.TAUTOMER_SEARCH_OFF);


        so.setTautomerSearch(SearchConstants.TAUTOMER_SEARCH_ON);


        s.setSearchOptions(so);


        Standardizer standardizer = new Standardizer("neutralize");


        MolHandler mhl = new MolHandler("OC(O)C(\\O)=C(/O)C(O)=O", false);


        Molecule mm = mhl.getMolecule();


        s.setQuery(mm);


        MolHandler mhl2 = new MolHandler("O[C@H]([C@@H](O)C(O)=O)C(O)=O", false);


        Molecule tarm = mhl2.getMolecule();


        standardizer.standardize(tarm);


        s.setTarget(tarm);


        int[][] hits = s.findAll();


        if (hits!=null) {


            System.out.println("found it");


        }



ChemAxon abe887c64e

16-05-2013 14:55:13

Hi Andrew,


Your code and your observations are correct, but there was a step in tautomer search which has changed from 5.11 to 5.12.


Tautomer search is based on generic tautomers in both cases, but in 5.11 the tetrahedral stereo centers were protected (= not included in the tautomer region(s) of the generic tautomer) and in 5.12 they are not protected. See the pictures below:


Generic tautomer of the query:



Generic tautomer of the target in version 5.11:



Generic tautomer of the target in version 5.12:



The difference between the generic tautomer of query and target in version 5.11 caused that duplicate search had no hit.


If you execute a molsearch against the target without stereo bonds "OC(C(O)C(O)=O)C(O)=O" you will receive hit both in 5.11 and 5.12, too.


Please let us know if you have further questions.


Krisztina

User f05f6b8c05

16-05-2013 17:24:16

Thank you for the response .. I will study your answer because it gets into more tautomer details than I am familiar with right now.  Even though search type is duplicate and both molecules have no charge, you can get a tautomer match for two molecules with different formula weights?


Thank you,


Andrew

ChemAxon abe887c64e

17-05-2013 07:53:41

Hi Andrew,


In duplicate search - in case of  exact charge and isotope matching - the molecular formula of the two matching molecules must be the same, even if tautomer search is applied.


The query and target in your above post (16th May) have the same molecular formula


Query:                                                                 Target:


    


Best regards,


Krisztina

User f05f6b8c05

17-05-2013 09:05:18

Thank you .. apologies for my own counting being so far off!

User f05f6b8c05

26-05-2013 17:15:51

Hi,


As one follow-up to help my understanding...


These SMILES all generate the same generic tautomer under 5.12:



OC(O)C(\O)=C(/O)C(O)=O


O[C@H]([C@@H](O)C(O)=O)C(O)=O


O[C@@H]([C@H](O)C(O)=O)C(O)=O



The above java code used the 1st SMILES as the query and the second as the target .. and this found tautomer match.  But if I use 3rd SMILES as the query and second as the target, then it find no match.


 


Can you help me understand why no match is found in this case?


 


Thank you again,


 


Andrew

User f05f6b8c05

26-05-2013 20:59:56

Hi,


If I use 


so.setTautomerSearch(SearchConstants.TAUTOMER_SEARCH_ON_IGNORE_TAUTOMERSTEREO);


instead of


so.setTautomerSearch(SearchConstants.TAUTOMER_SEARCH_ON);


then 2nd and 3rd SMILES above find each other as tautomer match.


Can you explain why match of 1st and 2nd SMILES not need TAUTOMER_SEARCH_ON_IGNORE_TAUTOMERSTEREO option?


Thank you.


Andrew

ChemAxon abe887c64e

28-05-2013 07:00:29

HI Andrew,


This behavior is a new feature in our tautomer search. The same stereo property must be present in both structures if we want to compare them. In your example structures, the first smiles do not contain tetrahedral stereo information, while the second smiles does, this means that the equivalence of their tetrahedral stereo property can not be determmined.


See further examples in Table 2 here: http://www.chemaxon.com/jchem/doc/user/query_searchoptions.html#tautomer


Best regards,


Krisztina

User f05f6b8c05

28-05-2013 12:56:27

Thank you for the explanation.


Best,


Andrew