Hi Jason,

yes, indeed it helped!
Many many thanks!

Regards,
Peleg

On Sun, Aug 13, 2017 at 4:29 PM, Jason Biggs <jasondbi...@gmail.com> wrote:

> Peleg,
> I was doing something similar using the c++ function compute2DCoords,
> where you can give a coordinate map as the second argument.  It looks like
> this is exposed in python, using the Compute2DCoords method (
> http://www.rdkit.org/Python_Docs/rdkit.Chem.rdchem.Mol-
> class.html#Compute2DCoords), so you could do something like this
>
>       int generate2DCoordinatesPlacintHeavyAtomsFirst( RDKit::RWMol 
> *thisMolecule,
>                       bool placeHeavyAtomsFirst,
>                       bool canonicalize,
>                       int randomseed)
>       {
>
>
>               int hydrogenFreeConformerIndex = 
> RDDepict::compute2DCoords(*thisMolecule, 0,
>                               canonicalize);
>
>               //now make a map of the coordinates which were optimized
>               //sans hydrogens
>
>               RDGeom::INT_POINT2D_MAP coordMap;
>               if(placeHeavyAtomsFirst)
>               {
>                       int numAtoms = thisMolecule->getNumAtoms();
>                       RDKit::Conformer hydrogenFreeConformer = 
> thisMolecule->getConformer(hydrogenFreeConformerIndex);
>                       for (int i=0; i < numAtoms; i++)
>                       {
>                               RDGeom::Point3D pt = 
> hydrogenFreeConformer.getAtomPos(i);
>                               RDGeom::Point2D pt2;
>                               pt2.x = pt.x;
>                               pt2.y = pt.y;
>                               coordMap[i] = pt2;
>                       }
>               }
>
>               RDKit::MolOps::addHs(*thisMolecule, false, false);
>
>               int confID = RDDepict::compute2DCoords(
>                               *thisMolecule,
>                               placeHeavyAtomsFirst ? &coordMap : 0, true);
>               const RDKit::Conformer &conf = 
> thisMolecule->getConformer(confID);
>               RDKit::WedgeMolBonds(*thisMolecule, &conf);
>               return confID;
>
>       }
>
>
> Now when I feed the result to my plotting program, I can give the option
> of showing hydrogens or not, getting these two diagrams
>
> Hope this helps,
>
> Jason
>
>
> On Sun, Aug 13, 2017 at 6:45 AM, Peleg Bar-Sapir <pel...@gmail.com> wrote:
>
>> Greg,
>>
>> sorry for flooding you with replies, I think I understand where they
>> issue stems from: the added hydrogens.
>> Without the hydrogens the positions look fine (see C9_acid_out.png).
>> Is there a way to add hydrogens so it will form a more "classic"
>> representation? (e.g. C9_acid_expect.png)
>>
>> Best,
>> Peleg
>>
>> On Sun, Aug 13, 2017 at 1:36 PM, Peleg Bar-Sapir <pel...@gmail.com>
>> wrote:
>>
>>> To further clarify what I mean: I created a nonanoic acid representation
>>> (via the smiles code "CCCCCCCCC(=O)O").
>>> "Pelarginic_acid.svg.png" is what I expect to get in terms of
>>> coordinates, while "test_out.png" are the coordinates I actually get.
>>>
>>> On Sun, Aug 13, 2017 at 1:30 PM, Peleg Bar-Sapir <pel...@gmail.com>
>>> wrote:
>>>
>>>> Hi Greg,
>>>>
>>>> Thank you for your reply!
>>>> I tested the method you suggested, but it seems like
>>>> rdMolDraw2D.PrepareMolForDrawing() has no affect.
>>>> e.g, I have a molecule m, to which I add hydrogens. I then compute the
>>>> 2D coordinates of m, and use rdMolDraw2D.PrepareMolForDrawing() as you
>>>> suggested.
>>>> To test it, I compare the outputs of Chem.MolToMolBlock() on the
>>>> molecule and on the prepared drawing.
>>>> The results are the same, and it is defently not what you would expect
>>>> from a standard representation (i.e. the ketone oxygen is not vertically up
>>>> from its carbon, the chain is not oriented right, etc.).
>>>>
>>>> See the following explicit example:
>>>>
>>>> In[5]: m = Chem.MolFromSmiles('CCC(O)=O')
>>>>
>>>> In[6]: m = Chem.AddHs(m)
>>>>
>>>> In[7]: AllChem.Compute2DCoords(m)
>>>>
>>>> In[8]: m_draw = Chem.Draw.rdMolDraw2D.PrepareMolForDrawing(m)
>>>>
>>>> In[9]: print (Chem.MolToMolBlock(m))
>>>>
>>>>      RDKit          2D
>>>>
>>>>  11 10  0  0  0  0  0  0  0  0999 V2000
>>>>     1.3490   -0.4340    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
>>>>     0.3421    0.6778    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
>>>>    -1.1242    0.3617    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
>>>>    -1.5836   -1.0662    0.0000 O   0  0  0  0  0  0  0  0  0  0  0  0
>>>>    -2.1311    1.4735    0.0000 O   0  0  0  0  0  0  0  0  0  0  0  0
>>>>     2.8153   -0.1180    0.0000 H   0  0  0  0  0  0  0  0  0  0  0  0
>>>>     1.9149   -1.8232    0.0000 H   0  0  0  0  0  0  0  0  0  0  0  0
>>>>     0.0792   -1.2326    0.0000 H   0  0  0  0  0  0  0  0  0  0  0  0
>>>>     1.6119    1.4763    0.0000 H   0  0  0  0  0  0  0  0  0  0  0  0
>>>>    -0.2238    2.0669    0.0000 H   0  0  0  0  0  0  0  0  0  0  0  0
>>>>    -3.0499   -1.3823    0.0000 H   0  0  0  0  0  0  0  0  0  0  0  0
>>>>   1  2  1  0
>>>>   2  3  1  0
>>>>   3  4  1  0
>>>>   3  5  2  0
>>>>   1  6  1  0
>>>>   1  7  1  0
>>>>   1  8  1  0
>>>>   2  9  1  0
>>>>   2 10  1  0
>>>>   4 11  1  0
>>>> M  END
>>>>
>>>> In[10]: print (Chem.MolToMolBlock(m_draw))
>>>>
>>>>      RDKit          2D
>>>>
>>>>  11 10  0  0  0  0  0  0  0  0999 V2000
>>>>     1.3490   -0.4340    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
>>>>     0.3421    0.6778    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
>>>>    -1.1242    0.3617    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
>>>>    -1.5836   -1.0662    0.0000 O   0  0  0  0  0  0  0  0  0  0  0  0
>>>>    -2.1311    1.4735    0.0000 O   0  0  0  0  0  0  0  0  0  0  0  0
>>>>     2.8153   -0.1180    0.0000 H   0  0  0  0  0  0  0  0  0  0  0  0
>>>>     1.9149   -1.8232    0.0000 H   0  0  0  0  0  0  0  0  0  0  0  0
>>>>     0.0792   -1.2326    0.0000 H   0  0  0  0  0  0  0  0  0  0  0  0
>>>>     1.6119    1.4763    0.0000 H   0  0  0  0  0  0  0  0  0  0  0  0
>>>>    -0.2238    2.0669    0.0000 H   0  0  0  0  0  0  0  0  0  0  0  0
>>>>    -3.0499   -1.3823    0.0000 H   0  0  0  0  0  0  0  0  0  0  0  0
>>>>   1  2  1  0
>>>>   2  3  1  0
>>>>   3  4  1  0
>>>>   3  5  2  0
>>>>   1  6  1  0
>>>>   1  7  1  0
>>>>   1  8  1  0
>>>>   2  9  1  0
>>>>   2 10  1  0
>>>>   4 11  1  0
>>>> M  END
>>>>
>>>>
>>>> Am I missing something?
>>>>
>>>> Best,
>>>> Peleg
>>>>
>>>> On Sun, Aug 13, 2017 at 11:59 AM, Greg Landrum <greg.land...@gmail.com>
>>>> wrote:
>>>>
>>>>> Hi Peleg,
>>>>>
>>>>> On Sat, Aug 12, 2017 at 4:08 PM, Peleg Bar-Sapir <pel...@gmail.com>
>>>>> wrote:
>>>>>
>>>>>>
>>>>>> I'm trying to get the 2D coordinates and info of all the atoms and
>>>>>> bonds, including hydrogens (i.e. atom type, bond type, etc.) of a 
>>>>>> molecule
>>>>>> in a standard structural formula. To clarify: I'm not referring to
>>>>>> Chem.MolToMolBlock(), but the coordinates used by the Draw class (e.g. in
>>>>>> MolToFile()) to create standard representations.
>>>>>>
>>>>>> Any advice on how to extract those? Maybe one can reach them via one
>>>>>> of the Draw member functions/variables?
>>>>>>
>>>>>
>>>>> The drawing code calls rdMolDraw2D.PrepareMolForDrawing() before
>>>>> actually doing the drawing. This function, among other things, assigns
>>>>> coordinates. Assuming that you're looking for the coordinates in the
>>>>> molecule's coordinate space, you can get access to them by calling
>>>>> PrepareMolForDrawing() and then either getting a mol block:
>>>>>
>>>>> In [7]: m = Chem.AddHs(Chem.MolFromSmiles('CC#C'))
>>>>>
>>>>> In [8]: nm = rdMolDraw2D.PrepareMolForDrawing(m)
>>>>>
>>>>> In [9]: print(Chem.MolToMolBlock(nm))
>>>>>
>>>>>      RDKit          2D
>>>>>
>>>>>   7  6  0  0  0  0  0  0  0  0999 V2000
>>>>>    -0.6887   -0.0795    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
>>>>>     0.8112   -0.0614    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
>>>>>     2.3111   -0.0433    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
>>>>>    -1.4230   -1.3875    0.0000 H   0  0  0  0  0  0  0  0  0  0  0  0
>>>>>    -2.1044    0.4165    0.0000 H   0  0  0  0  0  0  0  0  0  0  0  0
>>>>>    -0.4461    1.4007    0.0000 H   0  0  0  0  0  0  0  0  0  0  0  0
>>>>>     1.5400   -0.2455    0.0000 H   0  0  0  0  0  0  0  0  0  0  0  0
>>>>>   1  2  1  0
>>>>>   2  3  3  0
>>>>>   1  4  1  0
>>>>>   1  5  1  0
>>>>>   1  6  1  0
>>>>>   3  7  1  0
>>>>> M  END
>>>>>
>>>>>
>>>>> Or by using the molecule's conformer object:
>>>>>
>>>>> In [13]: conf = nm.GetConformer()
>>>>>
>>>>> In [14]: for aidx in range(conf.GetNumAtoms()):
>>>>>     ...:     pos = conf.GetAtomPosition(aidx)
>>>>>     ...:     print(pos.x, pos.y, pos.z)
>>>>>     ...:
>>>>> -0.6887274130576998 -0.07950997820751476 0.0
>>>>> 0.8111632161215289 -0.0613964335423347 0.0
>>>>> 2.311053845300757 -0.04328288887715446 0.0
>>>>> -1.4229859378146839 -1.387510138307542 0.0
>>>>> -2.104358766425875 0.416461665499047 0.0
>>>>> -0.4461124978218231 1.4007393261007453 0.0
>>>>> 1.5399675536977953 -0.24550155266524612 0.0
>>>>>
>>>>>
>>>>> I'm not sure what kind of additional info you are looking for, but
>>>>> maybe this much helps?
>>>>>
>>>>> -greg
>>>>>
>>>>>
>>>>>
>>>>
>>>
>>
>> ------------------------------------------------------------
>> ------------------
>> Check out the vibrant tech community on one of the world's most
>> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
>> _______________________________________________
>> Rdkit-discuss mailing list
>> Rdkit-discuss@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/rdkit-discuss
>>
>>
>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Rdkit-discuss mailing list
Rdkit-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rdkit-discuss

Reply via email to