Re: [Rdkit-discuss] permutations of symmetric atoms

2022-04-19 Thread Diogo Martins
Thank you, Greg, this is exactly what I was looking for.

On Sat, 16 Apr 2022 at 20:54, Greg Landrum  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('Oc1c1')
>
> 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 
> wrote:
>
>> Hello,
>>
>> I'd like to enumerate all possible permutations of symmetric atoms.
>> Consider the following code:
>>
>> phenol = Chem.MolFromSmiles("Oc1c1")
>> 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


Re: [Rdkit-discuss] permutations of symmetric atoms

2022-04-16 Thread Greg Landrum
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('Oc1c1')

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 
wrote:

> Hello,
>
> I'd like to enumerate all possible permutations of symmetric atoms.
> Consider the following code:
>
> phenol = Chem.MolFromSmiles("Oc1c1")
> 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


[Rdkit-discuss] permutations of symmetric atoms

2022-04-15 Thread Diogo Martins
Hello,

I'd like to enumerate all possible permutations of symmetric atoms.
Consider the following code:

phenol = Chem.MolFromSmiles("Oc1c1")
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