Chiral center rendering

User 04db012416

23-01-2008 12:45:50

Hello,





For the smiles string...





CN1CC(=O)N2[C@@H](C1=O)CC3=C([C@H]2C4=CC5=C(C=C4)OCO5)NC6=CC=CC=C36





When I view this in Daylight Depict, it displays the H's of the two chiral centers and a wedged bond for the H's as well. However, when view in Marvin Sketch, the explicit H's are not displayed and the wedged bonds are in the ring system. My question is why?....and how can I get it to display as rendered by Depict.





Thanks.

ChemAxon 25dcd765a3

23-01-2008 14:59:18

Hi,





The given smiles string has no explicit H atoms, only implicit ones.


It seems that Depict first changes some implicit Hydrogens to explicit ones and then depict it.


In Marvin you can only add explicit Hydrogens to all atoms.


You can generate the smiles with explicit Hydrogens:


Code:



molconvert smiles:+H -s "CN1CC(=O)N2[C@@H](C1=O)CC3=C([C@H]2C4=CC5=C(C=C4)OCO5)NC6=CC=CC=C36"


[H]N1C2=C([H])C([H])=C([H])C([H])=C2C2=C1[C@]([H])(N1C(=O)C([H])([H])N(C(=O)[C@@]1([H])C2([H])[H])C([H])([H])[H])C1=C([H])C2=C(OC([H])([H])O2)C([H])=C1[H]








Or add explicit Hydrogens at the viewer and clean wedged bonds.





In either case the wedges will appear only at the bond to the Hydrogens.





So basically it is not possible to do the same thing what Daylight does.


You should make some programming to do the same thing:


1) Add explicit H to chiral centers only


2) Clean wedges


3) Change some more bond to wedge keeping the chirality.








Andras

User 04db012416

23-01-2008 15:15:02

Thank you for your reply. Your suggestion indeed works.





However, is there a way to replicate the Daylight depict render using the original smiles string ...make the implicit H's explicit and show only the explicit hydrogens in the structure using molconvert or MSketch?





Thanks again.

User 870ab5b546

23-01-2008 17:16:52

If you mean can you do it in Java, this should work for you:





Code:
String smilesIn = "CN1CC(=O)N2[C@@H](C1=O)CC3=C([C@H]2C4=CC5=C(C=C4)OCO5)NC6=CC=CC=C36";


MolImporter imp = new MolImporter();


Molecule mol = imp.importMol(smilesIn);


mol.hydrogenize(true); // add explicit H atoms


mol.stereoClean(); // move wedged bonds to H atoms


mol.implicitizeHydrogens(0); // remove unwedged H atoms only


String smilesOut = mol.toFormat("smiles");






If you want the positions of the atoms in smilesOut to remain unchanged, use instead:





Code:
String smilesOut = mol.toFormat("mrv");






Almost every Marvin GUI action has a corresponding API command, and vice versa.

User 04db012416

25-01-2008 14:54:44

Thank you again.





One last follow up.





Is it possible to also show both wedged bonds (solid and dashed) at this chiral center, instead of 3 normal bonds?








Also, how can I achieve the same result with a chiral center that has no H's...for example:





C[C@H]1[C@H]([C@H](C[C@@H](O1)O[C@H]2C[C@@](CC3=C(C4=C(C(=C23)O)C(=O)C5=C(C4=O)C=CC=C5OC)O)(C(=O)CO)O)N)O.Cl





Thanks in advance.

User 870ab5b546

25-01-2008 15:23:46

speedlearn wrote:
Is it possible to also show both wedged bonds (solid and dashed) at this chiral center, instead of 3 normal bonds?





Also, how can I achieve the same result with a chiral center that has no H's...for example:





C[C@H]1[C@H]([C@H](C[C@@H](O1)O[C@H]2C[C@@](CC3=C(C4=C(C(=C23)O)C(=O)C5=C(C4=O)C=CC=C5OC)O)(C(=O)CO)O)N)O.Cl
How much programming are you willing to do to achieve the desired result? You would have to examine the bonds of each atom in the Molecule and decide whether you want to convert any of its regular bonds into bold or hashed bonds, based on the presence of other bold/hashed bonds, the relative orientation of the bonds, and the nature of that bond in the original SMILES string. A lot of work to convert the representation into something that has no more meaning than what you started with. But, yes, it is doable.

ChemAxon 25dcd765a3

29-01-2008 16:38:36

We have decided to implement it in the future, but surely not in Marvin 5.0.1.





Andras

User 04db012416

14-03-2008 04:21:35

When testing the java code suggested by Bobr:





Code:



String smilesIn = "CN1CC(=O)N2[C@@H](C1=O)CC3=C([C@H]2C4=CC5=C(C=C4)OCO5)NC6=CC=CC=C36";


MolImporter imp = new MolImporter();


Molecule mol = imp.importMol(smilesIn);


mol.hydrogenize(true); // add explicit H atoms


mol.stereoClean(); // move wedged bonds to H atoms


mol.implicitizeHydrogens(0); // remove unwedged H atoms only


String smilesOut = mol.toFormat("smiles");






There seems to be no difference in the resulting molecule. The mol.implicitizeHydrogens(0) which should remove all unwedged H atoms seems to remove all H atoms. Is there a way to make it recognize only the unwedged atoms?





Thanks in advance.

User 870ab5b546

14-03-2008 10:06:19

The documentation for MoleculeGraph.implicitizeHydrogens(0) is incomplete. Evidently, it works only on 2D molecules. When you import a SMILES molecule, its dimension is 0, so you need to do a 2D clean before implicitzing the H atoms. This code:





Code:
String smilesIn = "CN1CC(=O)N2[C@@H](C1=O)CC3=C([C@H]2C4=CC5=C(C=C4)OCO5)NC6=CC=CC=C36";


System.out.println("starting with " + smilesIn);


MolImporter imp = new MolImporter();


Molecule mol1 = imp.importMol(smilesIn);


mol1.clean(2, null); // convert to 2D


mol1.hydrogenize(true); // add explicit H atoms


mol1.stereoClean(); // move wedged bonds to H atoms


mol1.implicitizeHydrogens(0); // remove unwedged H atoms only


String smilesOut = mol1.toFormat("smiles");


System.out.println("after implicitize H: " + smilesOut);






gives this output:





Code:
starting with CN1CC(=O)N2[C@@H](C1=O)CC3=C([C@H]2C4=CC5=C(C=C4)OCO5)NC6=CC=CC=C36


after implicitize H: [H][C@]12CC3=C(NC4=CC=CC=C34)[C@]([H])(N1C(=O)CN(C)C2=O)C5=CC6=C(OCO6)C=C5






Sorry for the earlier misinformation.

ChemAxon 25dcd765a3

14-03-2008 11:47:51

Dear All,





MoleculeGraph.implicitizeHydrogens(..) works for molecules in 0, 2, 3 dimension.


If the molecule is in 0D then it has no wedged H atoms, so it will remove all H atoms.


(Also the ones which would get wedge in 2D.) This also applies to Hydrogens in 3D.





I also would like to call your attention to the return value of mol.stereoClean(), which is false in case of 0D molecules.





Andras

User 870ab5b546

14-03-2008 15:14:45

volfi wrote:
Dear All,





MoleculeGraph.implicitizeHydrogens(..) works for molecules in 0, 2, 3 dimension.


If the molecule is in 0D then it has no wedged H atoms, so it will remove all H atoms.


(Also the ones which would get wedge in 2D.) This also applies to Hydrogens in 3D.


Andras
This code (same as above, but with clean() commented and some reporting added):





Code:
String smilesIn = "CN1CC(=O)N2[C@@H](C1=O)CC3=C([C@H]2C4=CC5=C(C=C4)OCO5)NC6=CC=CC=C36";


System.out.println("starting with " + smilesIn);


MolImporter imp = new MolImporter();


Molecule mol1 = imp.importMol(smilesIn);


// mol1.clean(2, null); // convert to 2D


mol1.hydrogenize(true); // add explicit H atoms


System.out.println("After hydrogenizing:\n " + mol1.toFormat("smiles"));


mol1.stereoClean(); // move wedged bonds to H atoms


System.out.println("After moving stereo bonds to H:\n " + mol1.toFormat("smiles"));


mol1.implicitizeHydrogens(0); // remove unwedged H atoms only


String smilesOut = mol1.toFormat("smiles");


System.out.println("after implicitize H: " + smilesOut);






generates this output:





Code:
starting with CN1CC(=O)N2[C@@H](C1=O)CC3=C([C@H]2C4=CC5=C(C=C4)OCO5)NC6=CC=CC=C36


After hydrogenizing:


 [H]N1C2=C([H])C([H])=C([H])C([H])=C2C3=C1[C@]([H])(N4C(=O)C([H])([H])N(C(=O)[C@@]4([H])C3([H])[H])C([H])([H])[H])C5=C([H])C6=C(OC([H])([H])O6)C([H])=C5[H]


After moving stereo bonds to H:


 [H]N1C2=C([H])C([H])=C([H])C([H])=C2C3=C1[C@]([H])(N4C(=O)C([H])([H])N(C(=O)[C@@]4([H])C3([H])[H])C([H])([H])[H])C5=C([H])C6=C(OC([H])([H])O6)C([H])=C5[H]


after implicitize H: CN1CC(=O)N2[C@H](CC3=C(NC4=CC=CC=C34)[C@H]2C5=CC6=C(OCO6)C=C5)C1=O






Note the presence of H atoms in the 0D molecule after hydrogenize(). Note the movement of the wedge bonds to H after stereoClean(). Note the removal of ALL H atoms after implicitizeHydrogens(0). Note that when the clean() line is uncommented, implicitizeHydrogens(0) works as advertised. Your statement is inconsistent with the results.

User 04db012416

14-03-2008 17:23:32

Thanks bobgr for all the help in troubleshooting this.





Best regards.

User 331d7f5c0b

21-04-2009 21:17:14

Hi Andras,

When do you expect to implement this? Also, why doesn't the following standardizer config achieve the desired result?



addexplicitH..wedgeclean..removeexplicitH


Moses



volfi wrote:
We have decided to implement it in the future, but surely not in Marvin 5.0.1.





Andras

ChemAxon 25dcd765a3

22-04-2009 15:07:55

We have already implemented this request.


see H add Hydrogens at


http://www.chemaxon.com/marvin/help/sci/cleanoptions.html#2d


Here is a simple example:


molconvert -2:H mrv -s 'CN1CC(=O)N2[C@@H](C1=O)CC3=C([C@H]2C4=CC5=C(C=C4)OCO5)NC6=CC=CC=C36' |mview -



Also, why doesn't the following standardizer config achieve the desired resultaddexplicitH..wedgeclean..removeexplicitH



removeexplicitH also removes the wedged H so you get back your original molecule.


 


Andras

User 331d7f5c0b

22-04-2009 18:27:43

Hi Andras,



I guess my question is, isn't the default behavior of the removeexplicitH standardizer action *not* to remove Hs with wedge bonds? If that's not the default, then why provide the option to do something like this:



addexplicitH..wedgeclean..removeexplicitH:wedged


Moses



volfi wrote:


Also, why doesn't the following standardizer config achieve the desired resultaddexplicitH..wedgeclean..removeexplicitH



removeexplicitH also removes the wedged H so you get back your original molecule.


 


Andras


ChemAxon 25dcd765a3

24-04-2009 09:11:35

Hi,


Actually it is possible to do it in API level, but I let Zsolt to answer the standardizer part, as he is the expert.


 


Andras

ChemAxon e08c317633

24-04-2009 17:02:03










moses wrote:

I guess my question is, isn't the default behavior of the removeexplicitH standardizer action *not* to remove Hs with wedge bonds? If that's not the default, then why provide the option to do something like this:


addexplicitH..wedgeclean..removeexplicitH:wedged

Moses



Moses, you are right, "removeexplicitH" action by default does not remove wedged bonds, but wedged bonds exists only in 2D. See Andras's earlier comment:












volfi wrote:

 


If the molecule is in 0D then it has no wedged H atoms, so it will remove all H atoms.


(Also the ones which would get wedge in 2D.) This also applies to Hydrogens in 3D.


 




Examples:


1. In 0D (SMILES) there are no wedged bonds, so the explicit hydrogens are removed by Standardizer.


$ standardize -c removeexplicitH "[H][C@](F)(Cl)Br"
F[C@@H](Cl)Br


2. If 2D clean is performed before explicit hydrogen removal, then the explicit hydrogens with wedged bonds are not removed by Standardizer.


 $ standardize -c clean..removeexplicitH "[H][C@](F)(Cl)Br"
[H][C@](F)(Cl)Br


I hope this helps.


Zsolt


If the molecule is in 0D then it has no wedged H atoms, so it will remove all H atoms. 
(Also the ones which would get wedge in 2D.) This also applies to Hydrogens in 3D. 











moses wrote:

I guess my question is, isn't the default behavior of the removeexplicitH standardizer action *not* to remove Hs with wedge bonds? If that's not the default, then why provide the option to do something like this:


addexplicitH..wedgeclean..removeexplicitH:wedged

Moses



Moses, you are right, "removeexplicitH" action




If the molecule is in 0D then it has no wedged H atoms, so it will remove all H atoms.


(Also the ones which would get wedge in 2D.) This also applies to Hydrogens in 3D.