I am using the Indigo nodes for standardizing my molecules. I can have in input 2D or 3D structures. I can have also molecules with or without explicit hydrogen atoms.
During my standradization, first I supress all the hydrogen atoms ("hydrogen remover" node) and second I add new hydrogen atoms ("hydrogen adder" node).
The problem here is that the new hydrogen atoms have no coordinates (0,0,0). More precisely, the structures seems good when I look at the "output view" of the node, but when I further use the node "Indigo to Molecule" to create SDF molecule, the hydrogen atoms in these molecules have no coordinates (even when I tick the option of "Generate coordinate if needed").
Is there something wrong in my protocol?
In conclusion I think that a node to recompute 2D coordinates for molecules (from 2D or 3D) could be a good thing!
Indigo checks whether molecule has coordinates, or not. If there are no coordinates, it computes it on demand. But there is no concept of partially valid coordinates. Our rendering engine renders such molecules correctly, because it checks if atoms have the same coordinated, and finds a layout in such case. During saving into molfile, coordinates are unchanged.
I think that such behavior may be confusing, because the user doesn't see the actual coordinates, if thy are not valid. This can lead to a problem with substructures matcher when we add Affine Transformation search and Conformational Search, which are supported in Indigo, but there is no option for it yet in KNIME (for example you can look here http://ggasoftware.com/opensource/bingo/user-manual-oracle under "Affine Transformation Search" header). And also there is an option to align substructure match results according to query, that can produce unexpected results too, if shown coordinates is different from the stored ones.
How do you think, should Indigo renderer automatically generate 2D coordinates without changing original molecule, if they the coordinates are not valid as it done know? In some cases use wants to so a valid molecule, even if the coordinates are not valid, but in some cases user wants to see unchanged molecule. As a solution, we can add 2 renderers: one with automatic coordinates generation if coordinates are not valid (as it is now), and one - without changing any coordinates.
With best regards,
Thanks for your explanations. What I did for the moment (after your explanations) is to create a small protocol to
1- read the sdf file (with a the line reader node)
2- impose null coordinates to all the atoms (with string replacer node)
3- write a new sdf with the new null coordinate
So when I further use my standardization protocol with the indigo nodes; the final SDF structure have good coordinates with the "Generate coordinates if needed" option. This solution is not easy to use but it works!
My point of view here is that the first solution would be to add an option to the "Indigo to molecule" node for reinitializing all the coordinate to null coordinate before to generate new coordinates. An other solution, maybe the best solution for me, would be to create a node to regenerate all the 2D coordinates for all the atoms of the molecules.
For your question about the rendering, I don't know if there is a good solution. Maybe 2 renderers should be a solution but really I am not sure of this. My first opinion is that the renderers should use the real coordinates to clearly see with what we are working on.
Really thanks for your work,