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