command line vs. class differences

User b7aa615db3

10-10-2005 18:02:38

I use the attached reaction with input "[O-]C(=O)c1cccc2ccccc12" to generate a Molecule with smiles "O[C@H]1C=C(C([O-])=O)[c]2cccc[c]2[C@H]1O" even after I call Standardizer.standardize() with it.





However, when I send the product smiles through the stand alone program 'standardize' (version 1.3), I get "O[C@H]1C=C(C([O-])=O)c2ccccc2[C@H]1O".





Can you tell me why this is happening and how I could get Standardizer to give me the same results as standardize?





I believe the standardizer XML file is irrelevant, but I can send that to you. I can also send more test code if you like.

ChemAxon fb166edcbd

10-10-2005 18:48:03

It seems that the two SMILES are equivalent, molconvert transforms the first into the second, which indicates that the second one (the output of the standardize script) is the correct form:





Code:



molconvert smiles -s "O[C@H]1C=C(C([O-])=O)[c]2cccc[c]2[C@H]1O"


O[C@H]1C=C(C([O-])=O)c2ccccc2[C@H]1O








Is there any other molecule manipulating code in your program than standardization by Standardizer? How do you write the molecule into SMILES form? The simplest way is





mol.toFormat("smiles")
or





mol.exportToFormat("smiles")
.


Yes, some of your example code might be useful to sort out this - but it may also be a SMILES export problem independent of your code.





A remark on your transformation and input molecule: the reactant of the transformation can match the input molecule in 10 possible ways but these hits overlap each other - therefore only one of them is processed and it is accidental which one.


For me (JChem 3.1.1) even the aromatic ring disappears since one of its bonds is transformed to a single bond by the transformation. I attach these 10 possibilities produced by Reactor:





Code:



react -r bt0005b.mrv "[O-]C(=O)c1cccc2ccccc12" -o output.smiles


User b7aa615db3

10-10-2005 19:01:17

Attached is my test code. Run via:


java RxnTest bt0005b.mrv "[O-]C(=O)c1cccc2ccccc12"





The file paths in standardizeTest will need to be changed.

ChemAxon fb166edcbd

11-10-2005 08:33:55

I think that the solution is to make your reaction more specific. I tested your code without the standardization part and with "smiles" output instead of "smiles:a-H" which contains extra transformation before output. For comparison, the "smiles" output is


O[C@H]1C=C(C([O-])=O)[c]2=[c](cccc2)[C@H]1O


while the corresponding "smiles:a-H" output is


O[C@H]1C=C(C([O-])=O)[c]2cccc[c]2[C@H]1O


The problem is that your reaction says that the aromatic bond map 3- map 4 is changed to a double bond - this makes these atoms 5 valence C atoms when running with your input molecule: [O-]C(=O)c1cccc2ccccc12





If you want to transform


[O-]C(=O)c1cccc2ccccc12


into


O[C@H]1C=C(C([O-])=O)c2ccccc2[C@H]1O


then the best would be to generate this molecule by Reactor without producing 5 valence C atoms and then using some sort of standardization to modify the result. The reaction molecule may include both aromatic rings to precisely determine the positions of the OH groups and hence the bond that should remain aromatic because of the second aromatic ring. I attach this reaction.





I also modified your code: removed the standardization part and written "smiles" output instead of "smiles:a-H":





Code:



java RxnTest bt.mrv "[O-]C(=O)c1cccc2ccccc12"


RxnTest: before run


run(mrvFile = bt.mrv, substrate=[O-]C(=O)c1cccc2ccccc12)


RxnTest: after importMol, isReaction=true


after setReaction, reactant count=1


first product=O[C@H]1C=C(C([O-])=O)c2ccccc2[C@H]1O


 


first product=O[C@H]1C=Cc2c(cccc2C([O-])=O)[C@H]1O


 


first product=O[C@H]1C=Cc2cccc(C([O-])=O)c2[C@H]1O


 


RxnTest: 3 products








The reactor output is:





Code:



react -r bt.mrv "[O-]C(=O)c1cccc2ccccc12"


O[C@H]1C=C(C([O-])=O)c2ccccc2[C@H]1O


O[C@H]1C=Cc2c(cccc2C([O-])=O)[C@H]1O


O[C@H]1C=Cc2cccc(C([O-])=O)c2[C@H]1O








which is the same.





Additional remarks:


1. if you want to add pre-post standardization, you can do this by setting the -S <standardizer config file/string> for the command line react script (only in the latest JChem) or by calling


Reactor.setStandardizationType(int)


and Reactor.setStandardizer(Standardizer)


from the API (also in older versions).


2. in Standardizer you do not need to call


Standardizer.setFinalClean(int)


if the molecules are 0-dimensional (e.g. SMILES). Reactor automatically produces 0-dimensional products. Also if you have reactants in SMILES form then these are automatically 0-dimensional, you do not have to call setDim(0).

ChemAxon fb166edcbd

25-10-2005 20:07:04

We have added re-aromatization to our reaction processing in case when the reaction changes aromatic bonds. This removes the aromatic bonds that are not part of an aromatic ring. This will be available in the next JChem release.





For example, your reaction will provide these products:


Code:



react -r bt0005b.mrv "[O-]C(=O)c1cccc2ccccc12"





O[C@@H]1C=c2ccccc2=C([C@@H]1O)C([O-])=O


O[C@H]1C=C(C([O-])=O)c2ccccc2[C@H]1O


O[C@H]1C=c2ccccc2=C([C@H]1O)C([O-])=O


O[C@@H]1C=C(C([O-])=O)c2ccccc2[C@@H]1O


O[C@@H]1C=Cc2c(cccc2C([O-])=O)[C@@H]1O


O[C@H]1C=c2cccc(C([O-])=O)c2=C[C@H]1O


O[C@H]1C=Cc2c(cccc2C([O-])=O)[C@H]1O


O[C@H]1C=Cc2cccc(C([O-])=O)c2[C@H]1O


O[C@@H]1C=c2cccc(C([O-])=O)c2=C[C@@H]1O


O[C@@H]1C=Cc2cccc(C([O-])=O)c2[C@@H]1O








This output is saved in result.smiles.