Thank you, Greg, this is exactly what I was looking for.

On Sat, 16 Apr 2022 at 20:54, Greg Landrum <greg.land...@gmail.com> wrote:

> Hi Diogo,
>
> The easiest way to do this is to use the substructure matching code with
> "uniquify=False" to find all the automorphisms between a molecule and
> itself:
> In [8]: m1 = Chem.MolFromSmiles('Oc1ccccc1')
>
> In [9]: list(m1.GetSubstructMatches(m1,uniquify=False))
> Out[9]: [(0, 1, 2, 3, 4, 5, 6), (0, 1, 6, 5, 4, 3, 2)]
>
> Here's another example:
> In [10]: m = Chem.MolFromSmiles('Oc1ccc(c2ccc(Cl)cc2)cc1')
>
> In [11]: list(m.GetSubstructMatches(m,uniquify=False))
> Out[11]:
> [(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13),
>  (0, 1, 2, 3, 4, 5, 11, 10, 8, 9, 7, 6, 12, 13),
>  (0, 1, 13, 12, 4, 5, 6, 7, 8, 9, 10, 11, 3, 2),
>  (0, 1, 13, 12, 4, 5, 11, 10, 8, 9, 7, 6, 3, 2)]
>
>
> I hope this helps,
> -greg
>
>
> On Sat, Apr 16, 2022 at 1:46 AM Diogo Martins <diogo.stm...@gmail.com>
> wrote:
>
>> Hello,
>>
>> I'd like to enumerate all possible permutations of symmetric atoms.
>> Consider the following code:
>>
>> phenol = Chem.MolFromSmiles("Oc1ccccc1")
>> equivalencies = list(Chem.CanonicalRankAtoms(mol, breakTies=False))
>> print(equivalencies)
>> [0, 6, 4, 2, 1, 2, 4]
>>
>> Atoms that have the same value in list "equivalencies" are symmetric. For
>> phenol, the equivalent atoms correspond to a 180 degree rotation of the
>> aromatic ring over the axis containing the carbon-oxygen bond. The possible
>> permutations, expressed as atom indices, are:
>> [0, 1, 2, 3, 4, 5, 6]
>> [0, 1, 6, 5, 4, 3, 2]
>>
>> By permutations, I mean that it is possible to replace the coordinates of
>> the atoms and produce a realistic molecule.
>>
>> A brute force approach comes to mind, where one would enumerate all
>> possible combinations, and exclude those that change the molecular graph.
>> In the example above there are four possible combinations, because there
>> are two groups of two symmetric atoms. An example of an "invalid"
>> combination is swapping the third and seventh atoms without swapping the
>> fourth and sixth atoms:
>> [0, 1, 6, 3, 4, 5, 2]
>> This would be excluded as it breaks the bond between the third and fourth
>> atoms (among other bonds).
>>
>> Is there a method in the RDKit to enumerate the valid permutations?
>>
>> Thank you,
>> Diogo
>>
>> _______________________________________________
>> Rdkit-discuss mailing list
>> Rdkit-discuss@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/rdkit-discuss
>>
>
_______________________________________________
Rdkit-discuss mailing list
Rdkit-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rdkit-discuss

Reply via email to